variables: GIT_STRATEGY: $CORSIKA8_GIT_STRATEGY # clone: fresh clone, fetch: update GIT_SSL_NO_VERIFY: "1" GIT_DEPTH: "1" # to re-use clones also in different forks GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_CONCURRENT_ID/$CI_PROJECT_NAME ## Runtime options for sanitizers # (detect_leaks=0 because leak detection doesn't work in CI, but you can # try to test with leak detection locally by using detect_leaks=1) UBSAN_OPTIONS: "print_stacktrace=1" LSAN_OPTIONS: "log_threads=1" ASAN_OPTIONS: "detect_leaks=0:detect_stack_use_after_return=1" # location of AirShowerPhysics/corsika-data CORSIKA_DATA: "${CI_PROJECT_DIR}/modules/data" # the git submodule # _alternatively_ corsika-data can be downloaded as submodule: GIT_SUBMODULE_STRATEGY: normal # none: we get the submodules in before_script, # normal: get submodules automatically # # multi-step pipeline for each commit # # Mote: "Draft:" merge request, non-Draft merge requests and "Ready for Code Review" MR are all # handled explicitly # stages: - quality - config - build - test - build_test - example - build_test_example - install - optional ####### CODE QUALITY CHECK ############## ########################################################## check-copyrights: image: corsika/devel:u-18.04 stage: quality tags: - corsika script: - ./do-copyright.py rules: - if: $CI_MERGE_REQUEST_ID - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH allow_failure: true ########################################################## check-clang-format: image: corsika/devel:clang-8 stage: quality tags: - corsika script: - ./do-clang-format.py --all rules: - if: $CI_MERGE_REQUEST_ID - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH allow_failure: true ### CodeQuality tool #### #include: # - template: Code-Quality.gitlab-ci.yml # #code_quality: # stage: quality # rules: # - if: '$CODE_QUALITY_DISABLED' # when: never # - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' # Run code quality job in merge request pipelines # - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # Run code quality job in pipelines on the master branch (but not in other branch pipelines) # - if: '$CI_COMMIT_TAG' # Run code quality job in pipelines for tags ####### CONFIG ############## ########################################################## # the generic config template job # job/stage to just prepare cmake .config: stage: config tags: - corsika script: - mkdir -p build - cd build - cmake .. -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHIA8_C8=C8 rules: - if: $CI_MERGE_REQUEST_ID - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH artifacts: when: on_failure expire_in: 3 days paths: - ${CI_PROJECT_DIR}/build/CMakeFiles/CMakeOutput.log cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull-push # config for gcc config-u-18_04: extends: .config image: corsika/devel:u-18.04 cache: key: "${CI_COMMIT_REF_SLUG}-gcc" # config for clang config-clang-8: extends: .config image: corsika/devel:clang-8 cache: key: "${CI_COMMIT_REF_SLUG}-clang" ####### BUILD (only manual) ############## ########################################################## # the generic build template job # normal pipeline for each commit .build: stage: build tags: - corsika script: - cd build - cmake --build . -- -j4 rules: - if: $CI_MERGE_REQUEST_ID when: manual - if: $CI_COMMIT_TAG when: manual - if: $CI_COMMIT_BRANCH when: manual allow_failure: true cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull-push # build for gcc build-u-18_04: extends: .build image: corsika/devel:u-18.04 dependencies: - config-u-18_04 cache: key: "${CI_COMMIT_REF_SLUG}-gcc" # build for clang build-clang-8: extends: .build image: corsika/devel:clang-8 dependencies: - config-clang-8 cache: key: "${CI_COMMIT_REF_SLUG}-clang" ####### TEST (only manual) ############## ########################################################## # generic test template job # normal pipeline for each commit .test: stage: test tags: - corsika script: - cd build - set -o pipefail - ctest -j4 rules: - if: $CI_MERGE_REQUEST_ID when: manual - if: $CI_COMMIT_TAG when: manual - if: $CI_COMMIT_BRANCH when: manual allow_failure: true artifacts: when: always expire_in: 3 days reports: junit: - ${CI_PROJECT_DIR}/build/test_outputs/junit*.xml cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull-push # test for gcc test-u-18_04: extends: .test image: corsika/devel:u-18.04 dependencies: - build-u-18_04 cache: key: "${CI_COMMIT_REF_SLUG}-gcc" # test for clang test-clang-8: extends: .test image: corsika/devel:clang-8 dependencies: - build-clang-8 cache: key: "${CI_COMMIT_REF_SLUG}-clang" ####### BUILD-TEST (all builds <= Draft, default) ############## ########################################################## # the generic build_test template job # normal pipeline for each commit .build_test: stage: build_test tags: - corsika script: - cd build - cmake --build . -- -j4 - set -o pipefail - ctest -j4 rules: - if: '$CI_MERGE_REQUEST_ID && $CI_MERGE_REQUEST_TITLE =~ /^Draft:/' allow_failure: false - if: $CI_MERGE_REQUEST_ID when: manual allow_failure: true allow_failure: true artifacts: when: always expire_in: 3 days reports: junit: - ${CI_PROJECT_DIR}/build/test_outputs/junit*.xml cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull-push # build_test for gcc build_test-u-18_04: extends: .build_test image: corsika/devel:u-18.04 dependencies: - config-u-18_04 cache: key: "${CI_COMMIT_REF_SLUG}-gcc" # build_test for clang build_test-clang-8: extends: .build_test image: corsika/devel:clang-8 dependencies: - config-clang-8 cache: key: "${CI_COMMIT_REF_SLUG}-clang" ####### EXAMPLE (only manual) ############## ########################################################## # generic example template job # normal pipeline for each commit .example: stage: example tags: - corsika script: - cd build - set -o pipefail - make -j4 run_examples | gzip -v -9 > examples.log.gz rules: - if: $CI_MERGE_REQUEST_ID when: manual - if: $CI_COMMIT_TAG when: manual - if: $CI_COMMIT_BRANCH when: manual allow_failure: true artifacts: when: always expire_in: 3 days paths: - ${CI_PROJECT_DIR}/build/examples.log.gz cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull # example for gcc example-u-18_04: extends: .example image: corsika/devel:u-18.04 dependencies: - build-u-18_04 cache: key: "${CI_COMMIT_REF_SLUG}-gcc" # example for clang example-clang-8: extends: .example image: corsika/devel:clang-8 dependencies: - build-clang-8 cache: key: "${CI_COMMIT_REF_SLUG}-clang" ####### BUILD-TEST-EXAMPLE (only non-Draft) ############## ########################################################## # generic example template job # normal pipeline for each commit .build_test_example: stage: build_test_example tags: - corsika script: - cd build - cmake --build . -- -j4 - set -o pipefail - ctest -j4 - make -j4 run_examples | gzip -v -9 > examples.log.gz rules: - if: '$CI_MERGE_REQUEST_ID && $CI_MERGE_REQUEST_TITLE =~ /^Draft:/' when: manual allow_failure: true - if: $CI_COMMIT_BRANCH - if: $CI_MERGE_REQUEST_ID - if: $CI_COMMIT_TAG when: manual allow_failure: true artifacts: when: always expire_in: 3 days reports: junit: - ${CI_PROJECT_DIR}/build/test_outputs/junit*.xml paths: - ${CI_PROJECT_DIR}/build/examples.log.gz cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull # build_test_example for gcc build_test_example-u-18_04: extends: .build_test_example image: corsika/devel:u-18.04 dependencies: - config-u-18_04 cache: key: "${CI_COMMIT_REF_SLUG}-gcc" # build_test_example for clang build_test_example-clang-8: extends: .build_test_example image: corsika/devel:clang-8 dependencies: - config-clang-8 cache: key: "${CI_COMMIT_REF_SLUG}-clang" ####### INSTALL ############## ########################################################## # generic install template job # make install .install: stage: install tags: - corsika script: - cd build - set -o pipefail - make -j2 install rules: - if: $CI_MERGE_REQUEST_ID when: manual - if: $CI_COMMIT_TAG when: manual - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_BRANCH when: manual allow_failure: true cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull # install for gcc install-u-18_04: extends: .install image: corsika/devel:u-18.04 dependencies: - build-u-18_04 cache: key: "${CI_COMMIT_REF_SLUG}-gcc" # install for clang install-clang-8: extends: .install image: corsika/devel:clang-8 dependencies: - build-clang-8 cache: key: "${CI_COMMIT_REF_SLUG}-clang" ####### OPTIONAL ############## ########################################################## # generic release template job # optional release pipeline for each commit .release: stage: optional tags: - corsika script: - cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DUSE_PYTHIA8_C8=C8 - cmake --build . -- -j4 - set -o pipefail - ctest -j4 - make -j4 run_examples | gzip -v -9 > examples.log.gz rules: - if: '$CI_MERGE_REQUEST_LABELS =~ /Ready for code review/' # run on merge requests, if label 'Ready for code review' is set - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual allow_failure: true - if: $CI_MERGE_REQUEST_ID when: manual allow_failure: true - if: $CI_COMMIT_TAG when: manual allow_failure: true cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull artifacts: when: always expire_in: 3 days reports: junit: - ${CI_PROJECT_DIR}/build/test_outputs/junit*.xml paths: - ${CI_PROJECT_DIR}/build/examples.log.gz # release for gcc release-full-u-18_04: extends: .release image: corsika/devel:u-18.04 dependencies: - config-u-18_04 cache: key: "${CI_COMMIT_REF_SLUG}-gcc" # release for clang release-full-clang-8: extends: .release image: corsika/devel:clang-8 dependencies: - config-clang-8 cache: key: "${CI_COMMIT_REF_SLUG}-clang" ########################################################## # the coverage generation should either run when manually requested, OR always on the master coverage: image: corsika/devel:u-18.04 dependencies: - config-u-18_04 stage: optional tags: - corsika script: - cd build - cmake .. -DCMAKE_BUILD_TYPE=Coverage -DUSE_PYTHIA8_C8=C8 - cmake --build . -- -j4 - ctest -j4 - cmake --build . --target coverage - tar czf coverage-report.tar.gz coverage-report coverage: '/^.*functions\.+:\s(.*\%)\s/' rules: - if: '$CI_MERGE_REQUEST_LABELS =~ /Ready for code review/' # run on merge requests, if label 'Ready for code review' is set - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_MERGE_REQUEST_ID when: manual allow_failure: true - if: $CI_COMMIT_TAG when: manual allow_failure: true artifacts: when: always expire_in: 1 year paths: - ${CI_PROJECT_DIR}/build/coverage-report.tar.gz cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull key: "${CI_COMMIT_REF_SLUG}-gcc" ########################################################## sanity: image: corsika/devel:u-18.04 dependencies: - config-u-18_04 stage: optional tags: - corsika script: - cd build - cmake .. -DWITH_CORSIKA_SANITIZERS_ENABLED=ON - cmake --build . -- -j4 rules: - if: '$CI_MERGE_REQUEST_LABELS =~ /Ready for code review/' # run on merge requests, if label 'Ready for code review' is set - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual allow_failure: true - if: $CI_MERGE_REQUEST_ID when: manual allow_failure: true - if: $CI_COMMIT_TAG when: manual allow_failure: true cache: paths: - ${CI_PROJECT_DIR}/build/ untracked: true policy: pull key: "${CI_COMMIT_REF_SLUG}-gcc"