3. Run Tuleap

Note

Please read and follow instructions of both Clone Tuleap Sources and Install Docker Engine sections before executing this one.

3.1. Mandatory development dependencies

To retrieve the mandatory development dependencies, two solutions are available: - use Nix and the shell.nix available in the sources - manually install and manage the dependencies

3.1.1. Use Nix to retrieve the mandatory development dependencies

Tuleap uses Nix for its build process and to share an uniform configuration for its development environment. This is the preferred way to get a development environment as it is expected to always be up to date with Tuleap requirements.

  1. Install Nix

  2. With a terminal go to sources you previously cloned and type nix-shell, you will be dropped in a shell with all the needed tools to develop on Tuleap

It is recommended to browse the Nix documentation to understand the basics of how it works. At the very least you should know how to clean the unused packages.

Developers wanting to keep their custom shell configurations should take a look at direnv.

3.1.2. Manually install the dependencies

Circa January 2021, the following tools are needed to develop on Tuleap, please refer to their respective documentation for installation instructions:

  • GNU make

  • GNU grep

  • GNU sed

  • PHP 7.3.x

  • nodejs >= v14.15.x

  • npm v6.14.x

  • composer >= 2.x

  • Docker Compose >= 1.27.x

    Important

    By default, composer installs itself in the local directory as composer.phar.

    However we require that composer command is available in your executable path. This can be done by executing the following command during the installation steps:

    sudo php composer-setup.php --filename=composer --install-dir=/usr/local/bin

In macOS, you also need gettext. Steps to install : brew install gettext, then add gettext/bin in PATH.

3.2. First start of Tuleap

$ cd /path/to/tuleap
$ make composer
$ npm install
$ npm run build
$ make dev-setup
$ make start
$ make post-checkout

Note

docker will download base images for mysql, tuleap, … Please be patient!

Then you need to know the IP address of the web container, with make show-ips and edit (as root) the /etc/hosts file: 172.17.0.4    tuleap-web.tuleap-aio-dev.docker

3.3. Specific steps for macOS users

3.3.1. /etc/hosts

Your /etc/hosts file should be: 127.0.0.1       tuleap-web.tuleap-aio-dev.docker.

3.3.2. Skip ForgeUpgrade

Docker for Mac disk performances are really bad. If you want to start your container faster, you will need to set DO_NOT_LAUNCH_FORGEUPGRADE environment variable to true. You can put this following line into your .bash_profile so it will always be set:

export DO_NOT_LAUNCH_FORGEUPGRADE=true

You also havo to add this line into your local.inc file:

$disable_forge_upgrade_warnings = 1;

3.4. Connect as Admin

Now open your browser and go to https://tuleap-web.tuleap-aio-dev.docker/. You should see the homepage of your Tuleap instance. You can connect with admin account, the password will be given by make show-passwords.

And voila, your server is up and running!

It's Magic!

3.5. Descriptions of commands

  • make dev-setup: This command generates some needed passwords (mysql, ldap, …) and creates data containers. Those data containers are used as volumes to persist data (files, db, …). This command needs to be run only once.

  • make start: This command is a wrapper around docker-compose up. It starts 3 containers: web for the front end, ldap to manage users in an OpenLDAP server, and db for the mysql server.

    You can issue the following command in order to check that all containers are started:

    $ docker ps --format "{{.ID}}: {{.Names}} — {{.Image}} {{.Ports}}"
    149428f796ea: tuleap-web — enalean/tuleap-aio-dev:nodb 22/tcp, 80/tcp, 443/tcp
    7cd1e645b3a9: tuleap_ldap_1 — enalean/ldap:latest 389/tcp, 636/tcp
    9d026f381fbf: tuleap_db_1 — mysql:5.5 3306/tcp
    bfbd9f32b2ae: tuleap_reverse-proxy_1 — tuleap_reverse-proxy 22/tcp, 80/tcp, 443/tcp
    742b540e876c: tuleap_realtime_1 — tuleap_realtime 443/tcp
    
  • make post-checkout: Install npm dependencies, generate the javascript and CSS files to be used by the browser, deploy gettext translation… You need to run this command everytime you switch a branch.

Note

Docker images are read-only, and every modification to the OS will be lost at reboot. If you need to add/change anything and make it persistant, fork and amend the Dockerfile. Everything but the OS (tuleap config, database, user home) is saved in docker volumes held by tuleap_data.

3.6. Pro-tips

If you need to connect to the server you can run:

$ make bash-web

And if you need to connect to the database:

$ docker run -it --link tuleap_db_1:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" tuleap'

3.7. Troubleshooting

If your browser cannot manage to reach https://tuleap-web.tuleap-aio-dev.docker/:

  • Check that all containers are up and running with docker ps. If it is not the case, inspect logs docker-compose logs db or docker-compose logs web.

  • Check that apache serves files by executing a wget -O - http://localhost/ once connected to the web container (see Pro-tips). If you see a long html output that contains typical Tuleap homepage, then it means that there is an issue with the dns. (You may need to yum install wget first).

  • Check that you can resolve tuleap-web.tuleap-aio-dev.docker: dig '*.docker', dig '*.tuleap-aio-dev.docker' and dig 'tuleap-web.tuleap-aio-dev.docker' should return a suitable answer (typically 172.17.42.4 for the web container, but it may vary).

If you don’t receive email, this is because we configured postfix to not deliver emails by default. You may need to manually add the emails you use for your development:

$ docker exec -ti tuleap-web bash
$> vi /data/etc/email_whitelist # enter your email
$> ./whitelist_emails.sh
$> systemctl restart postfix