From a7fc04123fe95472552c6762a73fd27991c37308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20Gl=C3=A4ser?= <dennis.glaeser@iws.uni-stuttgart.de> Date: Tue, 13 Apr 2021 16:03:03 +0200 Subject: [PATCH] [ci] make yml configuration on-the-fly --- .gitlab-ci.yml | 106 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 72 insertions(+), 34 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 70bb147464..0418c45316 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,68 +1,106 @@ stages: - - trigger pipelines - - trigger downstream modules + - pipeline config + - test pipelines + # - downstream modules variables: IMAGE_REGISTRY_URL: $CI_REGISTRY/dumux-repositories/dumux-docker-ci -# rules for pipelines: -# - pipelines are triggered for commits to master, tags, merge requests -# - Within merge requests, we require to start the pipeline manually -# by clicking play for the trigger -.default-trigger: - stage: trigger pipelines - trigger: - include: - - local: .gitlab-ci/default.yml - strategy: depend +workflow: rules: + - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - - if: $CI_PIPELINE_SOURCE == "pipeline" + when: manual - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: manual -.scheduled-trigger: - extends: .default-trigger +################################################################################### +# Stage 1: configure the test pipeline. # +# This creates the .yml to be used for the test pipeline trigger stage. Within # +# merge request, we create a .yml file that considers building and executing only # +# those test that are affected by the changes introduced in the merge request. # +# In all other cases, we use the default configuration which runs all tests. # +################################################################################### +generate-config: + image: $IMAGE_REGISTRY_URL/full:dune-2.7-gcc-ubuntu-20.04 + stage: pipeline config + script: + - dunecontrol --opts=$DUNE_OPTS_FILE --current all + - | + if [ $CI_PIPELINE_SOURCE == "merge_request_event" ]; then + cd build-cmake + python3 ../bin/testing/findtests.py -f affectedtests.json -t origin/master + python3 ../.gitlab-ci/makepipelineconfig.py -c affectedtests.json -o ../generated-config.yml + else + python3 .gitlab-ci/makepipelineconfig.py -o generated-config.yml + fi + artifacts: + paths: + - generated-config.yml + expire_in: 3 hours + +################################################################################### +# Stage 2: trigger the test pipelines # +# In this stage, we trigger the test pipeline with different configurations, i.e. # +# different Dune versions, compilers, etc. Within merge requests, we create three # +# test pipelines including two different compilers and a full and minimal setup # +# of dependencies. In all other situations, additional test jobs are created. # +################################################################################### + +# basic trigger job to start the test pipeline +.base-trigger: + stage: test pipelines + needs: + - generate-config + trigger: + include: + - artifact: generated-config.yml + job: generate-config + strategy: depend + +# trigger for jobs that should not be created in merge requests +.non-merge-request-trigger: + extends: .base-trigger rules: - - if: $CI_PIPELINE_SOURCE == "schedule" + - if: $CI_PIPELINE_SOURCE != "merge_request_event" -################################### -# pipelines with different setups # +############################################# +# pipelines to be created in merge requests # full-dune-2.7-gcc: - extends: .default-trigger + extends: .base-trigger variables: IMAGE: $IMAGE_REGISTRY_URL/full:dune-2.7-gcc-ubuntu-20.04 minimal-dune-2.7-gcc: - extends: .default-trigger + extends: .base-trigger variables: IMAGE: $IMAGE_REGISTRY_URL/minimal:dune-2.7-gcc-ubuntu-20.04 full-dune-2.7-clang: - extends: .default-trigger + extends: .base-trigger variables: IMAGE: $IMAGE_REGISTRY_URL/full:dune-2.7-clang-ubuntu-20.04 ################################## # additional scheduled pipelines # full-dune-master-gcc: - extends: .scheduled-trigger + extends: .non-merge-request-trigger variables: IMAGE: $IMAGE_REGISTRY_URL/full:dune-master-gcc-ubuntu-20.04 full-dune-master-clang: - extends: .scheduled-trigger + extends: .non-merge-request-trigger variables: IMAGE: $IMAGE_REGISTRY_URL/full:dune-master-clang-ubuntu-20.04 -################################### -# triggers for downstream modules # -trigger lecture: - stage: trigger downstream modules - trigger: - project: dumux-repositories/dumux-lecture - # TODO: replace by master once development in lecture is finished - branch: feature/test-dumux-trigger - strategy: depend - variables: - DUMUX_BRANCH: $CI_COMMIT_BRANCH +# ################################### +# # triggers for downstream modules # +# trigger lecture: +# stage: trigger downstream modules +# trigger: +# project: dumux-repositories/dumux-lecture +# # TODO: replace by master once development in lecture is finished +# branch: feature/test-dumux-trigger +# strategy: depend +# variables: +# DUMUX_BRANCH: $CI_COMMIT_BRANCH -- GitLab