.. _Travis:
==============================
Building projects on Travis CI
==============================
`Travis CI `_ is a popular continuous integration service which offers free plans for open source projects. Thanks to a `Docker image by trzeci `_ installing emscripten in Travis CI is essentially a one line task.
A sample .travis.yml
====================
.. code-block:: yaml
notifications:
email: false
language: node_js
node_js:
- node
sudo: required
services:
- docker
before_install:
- docker run -dit --name emscripten -v $(pwd):/src trzeci/emscripten:sdk-incoming-64bit bash
script:
- docker exec -it emscripten make helloworld.js
- make test
Let's break it down:
.. code-block:: yaml
notifications:
email: false
language: node_js
node_js:
- node
sudo: required
services:
- docker
These lines set up the basic settings for the Travis container. Most people do not want email notifications, but feel free to leave out those lines if you do.
``language: node_js`` and ``node_js: - node`` tell Travis we are a Node.js project, and that we want the latest stable Node release.
``sudo: required`` and ``services: - docker`` are required to enable Docker in the Travis container.
.. code-block:: yaml
before_install:
- docker run -dit --name emscripten -v $(pwd):/src trzeci/emscripten:sdk-incoming-64bit bash
In the before_install stage we download the Docker image, create a container with that image, and then give it the name ``emscripten``. The ``-dit`` options tell Docker that we want the container to run *bash* in the background.
This Docker image contains everything emscripten needs to run, as well as several additional build tools such as *make* and *cmake*. If you do not need them you can use the `emscripten-slim image `_ instead, which excludes them and will be downloaded and installed slightly quicker. The emscripten versions available are listed at `the Docker Hub `_.
.. code-block:: yaml
script:
- docker exec -it emscripten make helloworld.js
- make test
In the script stage we can now run the commands we want, inside the Docker container we created earlier. In this sample we are using *make*, but you can call *emcc* directly if you prefer.
The Docker container is set up to use the same directories as Travis, so the second line uses the same *Makefile*, and can also depend on the output of the Docker command. If your test suite needs a later version of Node than what is installed by *emsdk* (Node v4), you will need to run the tests outside of Docker as a normal Travis command.
For an example of this setup in practice, see `the Travis page for emglken `_, which is also set up to use `Greenkeeper `_ for automatic testing of dependency updates.