We use continuous development methodologies provided by [GitLab CI/CD](https://docs.gitlab.com/ee/ci/). A GitLab Runner is required to execute the corresponding pipelines. We provide the runner via a virtual machine, hosted at `scads-ci.sc.uni-leipzig.de`. The VM is managed by Lars-Peter and @matthias.taeschner.
The runner is executed via a docker container - more information can be found [here](https://docs.gitlab.com/runner/install/docker.html). Please note that all files created in a dockerized pipeline will be deleted when the Docker-Container is shut down afterwards and therefore require special treatment if they are to be persisted.
# Configuration of the CI/CD process
CI/CD pipelines are configured with the [gitlab-ci.yml](https://git.informatik.uni-leipzig.de/dbs/FAMER/-/blob/master/.gitlab-ci.yml) After a push to the repository, the build process with the specified phases is triggered. Maven is used for building with the following parameters:
-`--batch-mode` Run in non-interactive (batch) mode, Maven will never stop to accept input from the user.
-`--fail-fast` Stop at first failure in builds
-`-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository` to download the dependencies to the specified local folder in order to cache it later in gitlab environment.
-`-Djava.awt.headless=true` define an environmental variable to use java headless mode, as no user interaction is needed.
-`-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN ` define an environmental variable to get rid of the "Downloading/Downloaded" lines.
-`-DinstallAtEnd=true` Whether every project should be installed during its own install-phase or at the end of the multimodule build. If set to true and the build fails, none of the reactor projects is installed.
Currently, the pipeline consists of the following steps:
- Checks (check for license headers, checkstyle, spotbugs)
- Build
- Tests
If one step fails the pipeline will not continue for the next step.