From dd01d38f70be17af01c4359ad13bfcb30ac904a2 Mon Sep 17 00:00:00 2001 From: ralfulrich <ralf.ulrich@kit.edu> Date: Thu, 27 May 2021 23:35:41 +0200 Subject: [PATCH] w/o caching --- .gitlab-ci.yml | 170 +++++-------- .gitlab-ci.yml-cache | 581 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 642 insertions(+), 109 deletions(-) create mode 100644 .gitlab-ci.yml-cache diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 332ef9a38..d7aa7f24c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -105,25 +105,16 @@ check-clang-format: 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" @@ -138,7 +129,9 @@ config-clang-8: tags: - corsika script: + - mkdir -p build - cd build + - cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_BUILD_TYPE=Debug -DUSE_Pythia8_C8=C8 - cmake --build . -- -j4 rules: - if: $CI_MERGE_REQUEST_ID @@ -148,30 +141,22 @@ config-clang-8: - 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" + needs: + - job: config-u-18_04 + artifacts: false # build for clang build-clang-8: extends: .build image: corsika/devel:clang-8 - dependencies: - - config-clang-8 - cache: - key: "${CI_COMMIT_REF_SLUG}-clang" - + needs: + - job: config-clang-8 + artifacts: false @@ -185,7 +170,9 @@ build-clang-8: tags: - corsika script: + - mkdir -p build - cd build + - cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_BUILD_TYPE=Debug -DUSE_Pythia8_C8=C8 - set -o pipefail - ctest -j4 rules: @@ -202,29 +189,22 @@ build-clang-8: 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" + needs: + - job: build-u-18_04 + artifacts: false # test for clang test-clang-8: extends: .test image: corsika/devel:clang-8 - dependencies: - - build-clang-8 - cache: - key: "${CI_COMMIT_REF_SLUG}-clang" + needs: + - job: build-clang-8 + artifacts: false @@ -239,7 +219,9 @@ test-clang-8: tags: - corsika script: + - mkdir -p build - cd build + - cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_BUILD_TYPE=Debug -DUSE_Pythia8_C8=C8 - cmake --build . -- -j4 - set -o pipefail - ctest -j4 @@ -257,29 +239,22 @@ test-clang-8: 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" + needs: + - job: config-u-18_04 + artifacts: false # 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" + needs: + - job: config-clang-8 + artifacts: false @@ -295,7 +270,9 @@ build_test-clang-8: tags: - corsika script: + - mkdir -p build - cd build + - cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_BUILD_TYPE=Debug -DUSE_Pythia8_C8=C8 - cmake --build . -- -j4 - set -o pipefail - ctest -j4 @@ -323,29 +300,23 @@ build_test-clang-8: paths: - ${CI_PROJECT_DIR}/build/build_examples/examples.log.gz - ${CI_PROJECT_DIR}/build/test_outputs/junit*.xml - 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" + needs: + - job: config-u-18_04 + artifacts: false + # 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" + needs: + - job: config-clang-8 + artifacts: false @@ -360,7 +331,9 @@ build_test_example-clang-8: tags: - corsika script: + - mkdir -p build - cd build + - cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_BUILD_TYPE=Debug -DUSE_Pythia8_C8=C8 - set -o pipefail - make -j2 install rules: @@ -374,29 +347,22 @@ build_test_example-clang-8: - if: $CI_COMMIT_TAG 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" + needs: + - job: build-u-18_04 + artifacts: false # install for clang install-clang-8: extends: .install image: corsika/devel:clang-8 - dependencies: - - build-clang-8 - cache: - key: "${CI_COMMIT_REF_SLUG}-clang" + needs: + - job: build-clang-8 + artifacts: false @@ -411,6 +377,7 @@ install-clang-8: tags: - corsika script: + - mkdir -p build - cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DUSE_Pythia8_C8=C8 - cmake --build . -- -j4 @@ -433,11 +400,6 @@ install-clang-8: - 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 @@ -452,19 +414,17 @@ install-clang-8: 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" + needs: + - job: config-u-18_04 + artifacts: false # 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" + needs: + - job: config-clang-8 + artifacts: false @@ -474,12 +434,14 @@ release-full-clang-8: coverage: image: corsika/devel:u-18.04 - dependencies: - - config-u-18_04 + needs: + - job: config-u-18_04 + artifacts: false stage: optional tags: - corsika script: + - mkdir -p build - cd build - cmake .. -DCMAKE_BUILD_TYPE=Coverage -DUSE_Pythia8_C8=C8 - cmake --build . -- -j4 @@ -501,12 +463,6 @@ coverage: 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" @@ -517,14 +473,17 @@ coverage: ########################################################## sanity: image: corsika/devel:u-18.04 - dependencies: - - config-u-18_04 + needs: + - job: config-u-18_04 + artifacts: false + stage: optional tags: - corsika script: + - mkdir -p build - cd build - - cmake .. -DWITH_CORSIKA_SANITIZERS_ENABLED=ON + - cmake .. -DWITH_CORSIKA_SANITIZERS_ENABLED=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_Pythia8_C8=C8 - 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 @@ -537,12 +496,6 @@ sanity: - 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" ########################################################## # template for all Python jobs @@ -569,10 +522,9 @@ sanity: python-3.8: extends: .python image: corsika/devel:u-18.04 - dependencies: - - build-u-18_04 - cache: - key: "${CI_COMMIT_REF_SLUG}-gcc" + needs: + - job: build-u-18_04 + artifacts: false artifacts: when: always expire_in: 1 year diff --git a/.gitlab-ci.yml-cache b/.gitlab-ci.yml-cache new file mode 100644 index 000000000..fe2865b43 --- /dev/null +++ b/.gitlab-ci.yml-cache @@ -0,0 +1,581 @@ +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 + corsika_DIR: "${CI_PROJECT_DIR}/build/install" # for cmake to find corsikaConfig.cmake + # _alternatively_ corsika-data can be downloaded as submodule: + GIT_SUBMODULE_STRATEGY: normal # none: we get the submodules in before_script, + # normal: get submodules automatically + CTEST_OUTPUT_ON_FAILURE: 1 + + +# +# 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 + - python + - 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_INSTALL_PREFIX=$PWD/install -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 + artifacts: + when: always + expire_in: 3 days + paths: + - ${CI_PROJECT_DIR}/build/test_outputs/junit*.xml + 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" + + + + + +####### 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 install + - mkdir -p build_examples + - cd build_examples + - cmake ../install/share/corsika/examples + - make -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/build_examples/examples.log.gz + - ${CI_PROJECT_DIR}/build/test_outputs/junit*.xml + 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_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 + +# 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 install + - mkdir -p build_examples + - cd build_examples + - cmake ../install/share/corsika/examples + - make -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/build_examples/examples.log.gz + - ${CI_PROJECT_DIR}/build/test_outputs/junit*.xml + +# 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: '/^.*lines\.+:\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" + +########################################################## +# template for all Python jobs +.python: + stage: python + tags: + - corsika + before_script: + - apt-get update && apt-get install -y python3-pip + - pip3 install --upgrade cython + script: + - cd ${CI_PROJECT_DIR}/python # change into the Python directory + - pip3 install --user -e '.[test]' # install the package + test deps + - python3 --version + - python3 -m mypy corsika + - python3 -m isort --atomic --check-only corsika tests + - python3 -m black -t py37 corsika tests + - python3 -m flake8 corsika tests + - python3 -m pytest --cov=corsika tests + - cd ${CI_PROJECT_DIR} # reset the directory + coverage: '/^TOTAL\s*\d+\s*\d+\s*(.*\%)/' + +# the default Python version Ubuntu 18.04 is Python3.8 +python-3.8: + extends: .python + image: corsika/devel:u-18.04 + dependencies: + - build-u-18_04 + cache: + key: "${CI_COMMIT_REF_SLUG}-gcc" + artifacts: + when: always + expire_in: 1 year + paths: + - ${CI_PROJECT_DIR}/Python/python-test.log + allow_failure: true -- GitLab