GitLab CI
*********
The `GitLab Continuous Integration (CI) `_ system can be used to automate tasks whenever
something in a repository changes. The CI pipelines are defined in a top-level file ``.gitlab-ci.yml``
Test Automation
===============
Currently, the SDF repository only uses CI for test automation, using something like this:
.. code-block:: yaml
:caption: .gitlab-ci.yml
image: python:3.6-buster
before_script:
- export DEBIAN_FRONTEND="noninteractive" # else apt asks for stuff
- apt update
- apt install -y libglib2.0-0 libgl1 # pyqt5 requirements
- pip3 install -U .
- pip3 install -r docs/doc-requirements.txt
test:
stage: build
script:
- python3 -m unittest
- make --directory docs test
The ``image`` defines a Docker image used for running the pipeline. The ``before_script`` installs SDF and the
documentation requirements. The ``test`` pipeline runs the ``script`` at the ``build`` stage of the pipeline.
Documentation Hosting
=====================
Additionally, the documentation can be hosted via `GitLab Pages `_.
Pages can be used to host any static website.
For that, the ``pages`` pipeline has to be defined such that it produces a static website root
(e.g. containing the file ``index.html``) in the special directory ``public``, which has to be defined as an
``artifact``.
We can use the ``script`` to build the HTML documentation and move it to the ``public`` directory.
.. code-block:: yaml
:caption: .gitlab-ci.yml
image: python:3.6-buster
pages:
stage: deploy
script:
- export DEBIAN_FRONTEND="noninteractive" # else apt asks for stuff
- apt update
- apt install -y libglib2.0-0 libgl1 # pyqt5 requirements
- wget https://gitlab.gwdg.de/sdf-project/SDF/-/archive/master/SDF-master.tar.gz
- tar -xzf SDF-master.tar.gz
- pip3 install ./SDF-master
- pip3 install -r ./SDF-master/docs/doc-requirements.txt
- make --directory ./SDF-master/docs html
- mv ./SDF-master/docs/_build/html ./public
artifacts:
paths:
- public
This can, and currently is, triggered automatically on each push to the source repository.