# Meson CI setup

This document is aimed for Meson contributors and documents
the CI setup used for testing Meson itself. The Meson
project uses multiple CI platforms for covering a wide
range of target systems.

## Travis CI

The travis configuration file is the `.travis.yml` in the
the project root. This platform tests cross compilation and
unity builds on a [linux docker image](#docker-images) and
on OSX.

## GitHub actions

The configuration files for GitHub actions are located in
`.github/workflows`. Here, all [images](#docker-images)
are tested  with the full `run_tests.py` run. Additionally,
some other, smaller, tests are run.

## Docker images

The Linux docker images are automatically built and
uploaded by GitHub actions. An image rebuild is triggerd
when any of the image definition files are changed (in
`ci/ciimage`) in the master branch. Additionally, the
images are also updated weekly.

Each docker image has one corresponding dirctory in
`ci/ciimage` with an `image.json` and an `install.sh`.

### Image generation

There are no manual Dockerfiles. Instead the Dockerfile is
automatically generated by the `build.py` script. This is
done to ensure that all images have the same layout and can
all be built and tested automatically.

The Dockerfile is generated from the `image.json` file and
basically only adds a few common files and runs the
`install.sh` script which should contain all distribution
specific setup steps. The `common.sh` can be sourced via
`source /ci/common.sh` to access some shared functionalety.

To generate the image run `build.py -t build <image>`. A
generated image can be tested with `build.py -t test <image>`.

### Common image setup

Each docker image has a `/ci` directory with an
`env_vars.sh` script. This script has to be sourced before
running the meson test suite.
