From b4e5842936daa7edc5dd0cd1561ebf17754d1166 Mon Sep 17 00:00:00 2001 From: "M. Eric Irrgang" Date: Thu, 12 Mar 2020 19:07:09 +0300 Subject: [PATCH] [ci skip] Reorganize .gitlab-ci.yml * Move job definitions to a few thematic files in admin/gitlab-ci/ * Remove the layer of indirection from .include-template.yml Change-Id: I2431647ec32929098d2ca04f57083172bb266a44 --- .gitlab-ci.yml | 1493 +----------------- admin/ci-templates/.include-template.yml | 21 - admin/gitlab-ci/documentation.gitlab-ci.yml | 238 +++ admin/gitlab-ci/lint.gitlab-ci.yml | 125 ++ admin/gitlab-ci/release.gitlab-ci.yml | 510 ++++++ admin/gitlab-ci/testing-matrix.gitlab-ci.yml | 588 +++++++ 6 files changed, 1492 insertions(+), 1483 deletions(-) delete mode 100644 admin/ci-templates/.include-template.yml create mode 100644 admin/gitlab-ci/documentation.gitlab-ci.yml create mode 100644 admin/gitlab-ci/lint.gitlab-ci.yml create mode 100644 admin/gitlab-ci/release.gitlab-ci.yml create mode 100644 admin/gitlab-ci/testing-matrix.gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dcb3fefd33..b679485105 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,41 +1,3 @@ -include: - - local: '/admin/ci-templates/.include-template.yml' - -.configure-extends-template: - extends: - - .configure-build-template - - .no-cache-template - - .variables-template - - .tags-template - -.configure-release-extends-template: - extends: - - .configure-build-release-template - - .no-cache-template - - .variables-template - - .tags-template - -.build-extends-template: - extends: - - .binary-build-template - - .build-cache-template - - .variables-template - - .tags-template - -.test-extends-template: - extends: - - .test-base-template - - .pull-cache-template - - .test-script-template - - .variables-template - - .tags-template - -.regressiontests-extends-template: - extends: - - .no-cache-template - - .variables-template - - .tags-template - # CI is organized into stages so that if early stages fail # the later ones are not run. stages: @@ -74,1427 +36,34 @@ stages: # Deploy stage for release builds - release-deploy -# Templates for configuration stage -.configure-gcc: - extends: - - .configure-extends-template - - .gcc-before-script-template - - .build-gcc-template - -.configure-gcc-release: - extends: - - .configure-release-extends-template - - .gcc-before-script-template - - .build-gcc-template - -.configure-gcc-cuda: - extends: - - .configure-gcc - - .cuda-template - -.configure-clang: - extends: - - .configure-extends-template - - .clang-before-script-template - - .build-clang-template - -.configure-clang-release: - extends: - - .configure-release-extends-template - - .clang-before-script-template - - .build-clang-template - -.configure-docs: - extends: - - .configure-extends-template - - .configure-docs-template - - .documentation-before-script-template - -.configure-docs-release: - extends: - - .configure-extends-template - - .configure-docs-release-template - - .documentation-before-script-template - -# Templates for build stage -.build-archive: - extends: - - .build-extends-template - - .documentation-before-script-template - - .build-docs-binary-template - - .archive-build-template - -.build-gcc: - extends: - - .build-extends-template - - .gcc-before-script-template - - .build-gcc-template - -.build-clang: - extends: - - .build-extends-template - - .clang-before-script-template - - .build-clang-template - -.build-docs-binary: - extends: - - .build-extends-template - - .build-cache-template - - .build-docs-binary-template - - .documentation-before-script-template - -.build-docs-webpage: - extends: - - .binary-build-template - - .variables-template - - .tags-template - - .no-cache-template - - .build-docs-webpage-template - - .documentation-before-script-template - -.build-gcc-cuda: - extends: - - .build-gcc - - .cuda-template - -# Templates for test stage -.test-gcc: - extends: - - .test-extends-template - - .gcc-before-script-template - - .test-gcc-template - -.test-gcc-cuda: - extends: - - .test-gcc - - .cuda-template - -.test-clang: - extends: - - .test-extends-template - - .clang-before-script-template - - .test-clang-template - -# Special job to package regressiontest files and have them available for testing -# Runs during pre-build -prepare-regressiontests: - extends: - - .regressiontests-extends-template - - .regressiontests-template - -prepare-release-version: - extends: - - .regressiontests-extends-template - - .release-version-template - -# Initial build that always needs to pass before follow-up stages run -simple-build: - extends: - - .simple-build-template - - .build-cache-template - - .variables-template - - .tags-template - - .gcc-before-script-template - - .build-gcc-template - - .gcc7-template - variables: - COMPILER_MAJOR_VERSION: 7 - BUILD_DIR: simple-build - except: - variables: - - $GROMACS_RELEASE - -# Jobs running in first pre-build stage -configure-gcc-7: - extends: - - .configure-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: 7 - except: - variables: - - $GROMACS_RELEASE - -configure-gcc-7-gmxapi: - extends: - - .configure-gcc - - .configure-gmxapi-template - - .gcc7-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: 7 - except: - variables: - - $GROMACS_RELEASE - -configure-gcc-7-double: - extends: - - .configure-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: 7 - CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON - except: - variables: - - $GROMACS_RELEASE - -configure-gcc-8: - extends: - - .configure-gcc - - .gcc8-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: 8 - except: - variables: - - $GROMACS_RELEASE - -configure-gcc-8-cuda-10.2: - extends: - - .configure-gcc-cuda - - .gcc-8-cuda-10.2-template - needs: - - job: simple-build - artifacts: false - except: - variables: - - $GROMACS_RELEASE - -configure-gcc-7-simd-sse41: - extends: - - .configure-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: 7 - CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1" - except: - variables: - - $GROMACS_RELEASE - -configure-clang-7: - extends: - - .configure-clang - - .clang7-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: 7 - except: - variables: - - $GROMACS_RELEASE - -configure-clang-7-gmxapi: - extends: - - .configure-clang - - .configure-gmxapi-template - - .clang7-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: 7 - except: - variables: - - $GROMACS_RELEASE - -configure-clang-8: - extends: - - .configure-clang - - .clang8-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: 8 - except: - variables: - - $GROMACS_RELEASE - -# For version of clang before 7, we need to always provide the full version -# Use something like this instead in the download script: -# APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION)) -configure-clang-6: - extends: - - .configure-clang - - .clang6-template - needs: - - job: simple-build - artifacts: false - variables: - COMPILER_MAJOR_VERSION: "6.0" - CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF - except: - variables: - - $GROMACS_RELEASE - -configure-clang-tidy: - extends: - - .configure-clang - - .clang7-template - needs: - - job: simple-build - artifacts: false - variables: - BUILD_DIR: build-clang-tidy - COMPILER_MAJOR_VERSION: 7 - CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON - EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION - except: - variables: - - $GROMACS_RELEASE - -configure-docs: - extends: - - .configure-docs - needs: - - job: simple-build - artifacts: false - variables: - BUILD_DIR: build-docs - CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on - except: - variables: - - $GROMACS_RELEASE - -configure-docs-gmxapi: - extends: - - .configure-docs - - .configure-gmxapi-template - needs: - - job: simple-build - artifacts: false - variables: - BUILD_DIR: build-docs-gmxapi - CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on - except: - variables: - - $GROMACS_RELEASE - -# Only running in scheduled pipelines that are not release builds -configure-archive-nightly: - stage: nightly-configure - only: - - triggers - - schedules - needs: - - job: simple-build - artifacts: false - except: - variables: - - $GROMACS_RELEASE - extends: - - .configure-docs - variables: - BUILD_DIR: build-package - CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None - CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF - CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF - -configure-archive-release: - only: - refs: - - web - - triggers - - schedules - variables: - - $GROMACS_RELEASE - - extends: - - .configure-docs - variables: - BUILD_DIR: build-package - CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None - CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF - CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF - -# Jobs running during build stage -build-gcc-7: - extends: - - .build-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - - job: configure-gcc-7 - artifacts: true - except: - variables: - - $GROMACS_RELEASE - - -build-gcc-7-gmxapi: - extends: - - .build-gcc - - .gmxapi-extra-installs - - .gcc7-template - needs: - - job: simple-build - artifacts: false - - job: configure-gcc-7-gmxapi - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -build-gcc-7-double: - extends: - - .build-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - - job: configure-gcc-7-double - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -build-gcc-8: - extends: - - .build-gcc - - .gcc8-template - needs: - - job: simple-build - artifacts: false - - job: configure-gcc-8 - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -build-gcc-8-cuda-10.2: - extends: - - .build-gcc-cuda - - .gcc-8-cuda-10.2-template - needs: - - job: simple-build - artifacts: false - - job: configure-gcc-8-cuda-10.2 - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -build-gcc-7-simd-sse41: - extends: - - .build-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - - job: configure-gcc-7-simd-sse41 - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -build-clang-7: - extends: - - .build-clang - - .clang7-template - needs: - - job: simple-build - artifacts: false - - job: configure-clang-7 - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -build-clang-7-gmxapi: - extends: - - .build-clang - - .gmxapi-extra-installs - - .clang7-template - needs: - - job: simple-build - artifacts: false - - job: configure-clang-7-gmxapi - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -build-clang-8: - extends: - - .build-clang - - .clang8-template - needs: - - job: simple-build - artifacts: false - - job: configure-clang-8 - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -build-clang-6: - extends: - - .build-clang - - .clang6-template - needs: - - job: simple-build - artifacts: false - - job: configure-clang-6 - artifacts: true - except: - variables: - - $GROMACS_RELEASE - -# Jobs running during test stage -test-gcc-7: - extends: - - .test-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - - job: build-gcc-7 - except: - variables: - - $GROMACS_RELEASE - -test-gcc-7-gmxapi: - extends: - - .test-gcc - - .gmxapi-extra-installs - - .gcc7-template - needs: - - job: simple-build - artifacts: false - - job: build-gcc-7-gmxapi - except: - variables: - - $GROMACS_RELEASE - -test-gcc-7-double: - extends: - - .test-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - - job: build-gcc-7-double - except: - variables: - - $GROMACS_RELEASE - -test-gcc-8: - extends: - - .test-gcc - - .gcc8-template - needs: - - job: simple-build - artifacts: false - - job: build-gcc-8 - except: - variables: - - $GROMACS_RELEASE - -test-gcc-8-cuda-10.2: - variables: - KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu" - KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1 - extends: - - .test-gcc-cuda - - .gcc-8-cuda-10.2-template - needs: - - job: simple-build - artifacts: false - - job: build-gcc-8-cuda-10.2 - except: - variables: - - $GROMACS_RELEASE - -test-gcc-7-simd-sse41: - extends: - - .test-gcc - - .gcc7-template - needs: - - job: simple-build - artifacts: false - - job: build-gcc-7-simd-sse41 - except: - variables: - - $GROMACS_RELEASE - -test-clang-7: - extends: - - .test-clang - - .clang7-template - needs: - - job: simple-build - artifacts: false - - job: build-clang-7 - except: - variables: - - $GROMACS_RELEASE - -test-clang-7-gmxapi: - extends: - - .test-clang - - .gmxapi-extra-installs - - .clang7-template - needs: - - job: simple-build - artifacts: false - - job: build-clang-7-gmxapi - except: - variables: - - $GROMACS_RELEASE - -test-clang-8: - extends: - - .test-clang - - .clang8-template - needs: - - job: simple-build - artifacts: false - - job: build-clang-8 - except: - variables: - - $GROMACS_RELEASE - -test-clang-6: - extends: - - .test-clang - - .clang6-template - needs: - - job: simple-build - artifacts: false - - job: build-clang-6 - except: - variables: - - $GROMACS_RELEASE - -# Jobs running in source checking stage -build-clang-tidy: - extends: - - .build-clang - - .clang7-template - stage: source-check - needs: - - job: simple-build - artifacts: false - - job: configure-clang-tidy - artifacts: true - variables: - BUILD_DIR: build-clang-tidy - COMPILER_MAJOR_VERSION: 7 - EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION - except: - variables: - - $GROMACS_RELEASE - -run-clang-format: - extends: - - .binary-build-template - - .no-cache-template - - .variables-template - - .tags-template - - .clang-before-script-template - - .build-clang-template - - .clang7-template - stage: source-check - when: always - needs: - - job: simple-build - artifacts: false - variables: - KUBERNETES_CPU_LIMIT: 1 - KUBERNETES_CPU_REQUEST: 1 - KUBERNETES_MEMORY_LIMIT: 2Gi - COMPILER_MAJOR_VERSION: 7 - EXTRA_INSTALLS: clang-format-$COMPILER_MAJOR_VERSION - except: - variables: - - $GROMACS_RELEASE - script: - - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION - - admin/clang-format.sh check --rev=HEAD^ --warnings=clang-format.log - - grep -iq "needs formatting" clang-format.log | tee formatting.txt || true - - if [ -s formatting.txt ] ; then echo "clang-format.sh found issues"; exit 1; fi - artifacts: - when: on_failure - paths: - - clang-format.log - - formatting.txt - -run-copyright-check: - extends: - - .binary-build-template - - .no-cache-template - - .variables-template - - .tags-template - - .clang-before-script-template - - .build-clang-template - - .clang7-template - stage: source-check - when: always - needs: - - job: simple-build - artifacts: false - variables: - KUBERNETES_CPU_LIMIT: 1 - KUBERNETES_CPU_REQUEST: 1 - KUBERNETES_MEMORY_LIMIT: 2Gi - except: - variables: - - $GROMACS_RELEASE - script: - - admin/copyright.sh check --rev=HEAD^ --warnings=copyright.log - - grep -iq "copyright year" copyright.log | tee years.log || true - - grep -iq "copyright header" copyright.log | tee headers.log || true - - if [[ -s years.log || -s headers.log ]] ; then - echo "Copyright information needs updating" ; - exit 1 ; - fi - artifacts: - when: on_failure - paths: - - copyright.log - - years.log - - headers.log - -run-check-source: - extends: - - .no-cache-template - - .variables-template - - .tags-template - - .build-docs-binary-template - - .documentation-before-script-template - stage: source-check - needs: - - job: simple-build - artifacts: false - - job: build-docs - artifacts: true - variables: - KUBERNETES_CPU_LIMIT: 1 - KUBERNETES_CPU_REQUEST: 1 - KUBERNETES_MEMORY_LIMIT: 2Gi - BUILD_DIR: build-docs - COMPILER_MAJOR_VERSION: 7 - except: - variables: - - $GROMACS_RELEASE - script: - - cd $BUILD_DIR - - cmake --build . --target check-source - - grep -qi "error" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee doxygenError.txt || true - - grep -qi "warning" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true - - if [ -s doxygenError.txt ] ; then echo "Found errors while running doxygen"; exit 1; fi - artifacts: - name: docs-artifacts-$CI_COMMIT_REF_SLUG - when: always - expire_in: 1 week - paths: - - $BUILD_DIR/docs/doxygen/doxygen-xml.log - - $BUILD_DIR/docs/doxygen/check-source.log - -# Jobs running during documentation build stage -build-docs: - extends: - - .build-docs-binary - stage: documentation - needs: - - job: simple-build - artifacts: false - - job: configure-docs - artifacts: true - variables: - BUILD_DIR: build-docs - except: - variables: - - $GROMACS_RELEASE - -build-docs-gmxapi: - extends: - - .build-docs-binary - - .gmxapi-extra-installs - stage: documentation - needs: - - job: simple-build - artifacts: false - - job: configure-docs-gmxapi - artifacts: true - variables: - BUILD_DIR: build-docs-gmxapi - except: - variables: - - $GROMACS_RELEASE - -# Jobs running in post-test stage - -# The manual build is built separately so that errors in converting -# Sphinx to LaTeX and compiling can always be found in the -# all-output.txt file, while avoiding many thousands of lines of spam -# from pdflatex for normal builds. This does reduce the available -# parallel utilization, and so increases the build time. -# -# TODO why are the doxygen and sphinx log files disappearing -# TODO use a feature from gitlab runner instead of using pipefail to get timings for the job -webpage: - extends: - - .build-docs-webpage - stage: post-test - needs: - - job: build-docs - artifacts: true - - job: run-check-source - artifacts: false - variables: - BUILD_DIR: build-docs - except: - variables: - - $GROMACS_RELEASE - -webpage-gmxapi: - extends: - - .build-docs-webpage - - .gmxapi-extra-installs - stage: post-test - needs: - - job: build-docs-gmxapi - artifacts: true - - job: run-check-source - artifacts: false - variables: - BUILD_DIR: build-docs-gmxapi - except: - variables: - - $GROMACS_RELEASE - - -# Jobs running in release stage -linkchecker: - extends: - - .build-docs-webpage - stage: nightly-build - dependencies: - - webpage-gmxapi - only: - - schedules - - triggers - - merge_requests - - external_pull_requests - except: - variables: - - $GROMACS_RELEASE - variables: - KUBERNETES_CPU_LIMIT: 1 - KUBERNETES_CPU_REQUEST: 1 - KUBERNETES_MEMORY_LIMIT: 2Gi - BUILD_DIR: build-docs-gmxapi - script: - - cd $BUILD_DIR - - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml --ignore-url html-full - --ignore-url html-user --ignore-url html-lib --ignore-url .tar.gz --ignore-url _sources - -o xml - artifacts: - reports: - junit: $BUILD_DIR/linkchecker-out.xml - -build-archive-nightly: - extends: - - .build-archive - stage: nightly-build - needs: - - job: simple-build - artifacts: false - - job: configure-archive-nightly - artifacts: true - only: - - triggers - - schedules - except: - variables: - - $GROMACS_RELEASE - variables: - BUILD_DIR: build-package - -webpage-nightly: - extends: - - .build-docs-webpage - - .configure-gmxapi-template - stage: nightly-deploy - only: - - triggers - - schedules - except: - variables: - - $GROMACS_RELEASE - needs: - - job: simple-build - artifacts: false - - job: linkchecker - artifacts: false - - job: webpage-gmxapi - artifacts: true - variables: - BUILD_DIR: build-docs-gmxapi - script: - - tar czf webpage.tar.gz $BUILD_DIR/docs/html/ - artifacts: - when: always - paths: - - webpage.tar.gz - -package-regressiontests-release: - extends: - - .regressiontests-extends-template - - .regressiontests-release-template - needs: - - job: prepare-release-version - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - - -package-archive-release: - extends: - - .build-archive - stage: release-package - needs: - - job: configure-archive-release - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - variables: - BUILD_DIR: build-package - -release-verify: - extends: - - .regressiontests-extends-template - - .release-verify-template - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - -webpage-configure-release: - extends: - - .configure-docs-release - - .configure-gmxapi-template - - .no-cache-template - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - variables: - CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on - -configure-gcc-7-release: - extends: - - .configure-gcc-release - - .no-cache-template - - .gcc7-template - variables: - COMPILER_MAJOR_VERSION: 7 - RELEASE_BUILD_DIR: release-builds-gcc - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - -configure-gcc-7-gmxapi-release: - extends: - - .configure-gcc-release - - .configure-gmxapi-template - - .no-cache-template - - .gcc7-template - variables: - COMPILER_MAJOR_VERSION: 7 - RELEASE_BUILD_DIR: release-builds-gcc - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - -configure-gcc-7-double-release: - extends: - - .configure-gcc-release - - .no-cache-template - - .gcc7-template - variables: - COMPILER_MAJOR_VERSION: 7 - CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON - RELEASE_BUILD_DIR: release-builds-gcc - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - -configure-gcc-8-release: - extends: - - .configure-gcc-release - - .no-cache-template - - .gcc8-template - variables: - COMPILER_MAJOR_VERSION: 8 - RELEASE_BUILD_DIR: release-builds-gcc - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - -configure-clang-7-release: - extends: - - .configure-clang-release - - .no-cache-template - - .clang7-template - variables: - COMPILER_MAJOR_VERSION: 7 - RELEASE_BUILD_DIR: release-builds-clang - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - -configure-clang-7-gmxapi-release: - extends: - - .configure-clang-release - - .configure-gmxapi-template - - .no-cache-template - - .clang7-template - variables: - COMPILER_MAJOR_VERSION: 7 - RELEASE_BUILD_DIR: release-builds-clang - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - -configure-clang-8-release: - extends: - - .configure-clang-release - - .no-cache-template - - .clang8-template - variables: - COMPILER_MAJOR_VERSION: 8 - RELEASE_BUILD_DIR: release-builds-clang - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - dependencies: - - package-archive-release - - package-regressiontests-release - - prepare-release-version - -build-gcc-7-release: - extends: - - .build-gcc - - .gcc7-template - stage: release-build - variables: - BUILD_DIR: release-builds-gcc - needs: - - job: configure-gcc-7-release - artifacts: true - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - -build-gcc-7-gmxapi-release: - extends: - - .build-gcc - - .gmxapi-extra-installs - - .gcc7-template - stage: release-build - variables: - BUILD_DIR: release-builds-gcc - needs: - - job: configure-gcc-7-gmxapi-release - artifacts: true - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - -build-gcc-7-double-release: - extends: - - .build-gcc - - .gcc7-template - stage: release-build - variables: - BUILD_DIR: release-builds-gcc - needs: - - job: configure-gcc-7-double-release - artifacts: true - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - -build-gcc-8-release: - extends: - - .build-gcc - - .gcc8-template - stage: release-build - variables: - BUILD_DIR: release-builds-gcc - needs: - - job: configure-gcc-8-release - artifacts: true - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - -build-clang-7-release: - extends: - - .build-clang - - .clang7-template - stage: release-build - variables: - BUILD_DIR: release-builds-clang - needs: - - job: configure-clang-7-release - artifacts: true - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - -build-clang-7-gmxapi-release: - extends: - - .build-clang - - .gmxapi-extra-installs - - .clang7-template - stage: release-build - variables: - BUILD_DIR: release-builds-clang - needs: - - job: configure-clang-7-gmxapi-release - artifacts: true - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - -build-clang-8-release: - extends: - - .build-clang - - .clang8-template - stage: release-build - variables: - BUILD_DIR: release-builds-clang - needs: - - job: configure-clang-8-release - artifacts: true - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - -webpage-binary-release: - extends: - - .build-docs-binary - - .gmxapi-extra-installs - stage: release-build - needs: - - job: webpage-configure-release - artifacts: true - variables: - BUILD_DIR: release-doc-builds - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - -test-gcc-7-release: - extends: - - .test-gcc - - .gcc7-template - stage: release-tests - variables: - BUILD_DIR: release-builds-gcc - needs: - - job: configure-gcc-7-release - artifacts: true - - job: build-gcc-7-release - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - -test-gcc-7-gmxapi-release: - extends: - - .test-gcc - - .gmxapi-extra-installs - - .gcc7-template - stage: release-tests - variables: - BUILD_DIR: release-builds-gcc - needs: - - job: configure-gcc-7-gmxapi-release - artifacts: true - - job: build-gcc-7-gmxapi-release - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - -test-gcc-7-double-release: - extends: - - .test-gcc - - .gcc7-template - stage: release-tests - variables: - BUILD_DIR: release-builds-gcc - needs: - - job: configure-gcc-7-double-release - artifacts: true - - job: build-gcc-7-double-release - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - -test-gcc-8-release: - extends: - - .test-gcc - - .gcc8-template - stage: release-tests - variables: - BUILD_DIR: release-builds-gcc - needs: - - job: configure-gcc-8-release - artifacts: true - - job: build-gcc-8-release - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - -test-clang-7-release: - extends: - - .test-clang - - .clang7-template - stage: release-tests - variables: - BUILD_DIR: release-builds-clang - needs: - - job: configure-clang-7-release - artifacts: true - - job: build-clang-7-release - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - -test-clang-7-gmxapi-release: - extends: - - .test-clang - - .gmxapi-extra-installs - - .clang7-template - stage: release-tests - variables: - BUILD_DIR: release-builds-clang - needs: - - job: configure-clang-7-gmxapi-release - artifacts: true - - job: build-clang-7-gmxapi-release - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - -test-clang-8-release: - extends: - - .test-clang - - .clang8-template - stage: release-tests - variables: - BUILD_DIR: release-builds-clang - needs: - - job: configure-clang-8-release - artifacts: true - - job: build-clang-8-release - artifacts: true - only: - refs: - - triggers - - web - - schedules - variables: - - $GROMACS_RELEASE - -webpage-build-release: - extends: - - .build-docs-webpage - - .configure-gmxapi-template - dependencies: - - webpage-binary-release - - webpage-configure-release - stage: release-prepare-deploy - only: - refs: - - web - - schedules - - triggers - variables: - - $GROMACS_RELEASE - variables: - BUILD_DIR: release-doc-builds - -webpage-archive-release: - extends: - - .build-docs-webpage - - .configure-gmxapi-template - stage: release-deploy - only: - refs: - - web - - triggers - - schedules - variables: - - $GROMACS_RELEASE - dependencies: - - webpage-build-release - - package-archive-release - - package-regressiontests-release - variables: - BUILD_DIR: release-doc-builds - script: - - tar czf webpage.tar.gz $BUILD_DIR/docs/html/ - artifacts: - when: always - paths: - - webpage.tar.gz - - gromacs-*tar.gz - - regressiontests-*tar.gz - +include: + - local: '/admin/ci-templates/.image-templates.yml' + - local: '/admin/ci-templates/.build-cache-template.yml' + - local: '/admin/ci-templates/.pull-cache-template.yml' + - local: '/admin/ci-templates/.variables-template.yml' + - local: '/admin/ci-templates/.build-template.yml' + - local: '/admin/ci-templates/.test-runner-template.yml' + - local: '/admin/ci-templates/.gcc-before-script.yml' + - local: '/admin/ci-templates/.gcc-build-template.yml' + - local: '/admin/ci-templates/.gcc-test-template.yml' + - local: '/admin/ci-templates/.clang-build-template.yml' + - local: '/admin/ci-templates/.clang-test-template.yml' + - local: '/admin/ci-templates/.clang-before-script.yml' + - local: '/admin/ci-templates/.documentation-before-script.yml' + - local: '/admin/ci-templates/.tags-template.yml' + - local: '/admin/ci-templates/.test-script-template.yml' + - local: '/admin/ci-templates/.build-docs-template.yml' + - local: '/admin/ci-templates/.cuda-template.yml' + - local: '/admin/ci-templates/.build-gmxapi-template.yml' + - local: '/admin/ci-templates/.regressiontest-template.yml' + - local: '/admin/ci-templates/.release-template.yml' + # Build and test in a variety of environments and configurations. + # To do: expand matrix here to improve transparency and reduce file sizes. + # E.g. '/admin/gitlab-ci/matrix/clang-8.gitlab-ci.yml + - local: '/admin/gitlab-ci/testing-matrix.gitlab-ci.yml' + # Repository cleanliness. Source tidiness, linting, and policy compliance. + - local: '/admin/gitlab-ci/lint.gitlab-ci.yml' + # Web page and manual. + - local: '/admin/gitlab-ci/documentation.gitlab-ci.yml' + # Prepare release archives. + - local: '/admin/gitlab-ci/release.gitlab-ci.yml' diff --git a/admin/ci-templates/.include-template.yml b/admin/ci-templates/.include-template.yml deleted file mode 100644 index c3dc219ad2..0000000000 --- a/admin/ci-templates/.include-template.yml +++ /dev/null @@ -1,21 +0,0 @@ -include: - - local: '/admin/ci-templates/.image-templates.yml' - - local: '/admin/ci-templates/.build-cache-template.yml' - - local: '/admin/ci-templates/.pull-cache-template.yml' - - local: '/admin/ci-templates/.variables-template.yml' - - local: '/admin/ci-templates/.build-template.yml' - - local: '/admin/ci-templates/.test-runner-template.yml' - - local: '/admin/ci-templates/.gcc-before-script.yml' - - local: '/admin/ci-templates/.gcc-build-template.yml' - - local: '/admin/ci-templates/.gcc-test-template.yml' - - local: '/admin/ci-templates/.clang-build-template.yml' - - local: '/admin/ci-templates/.clang-test-template.yml' - - local: '/admin/ci-templates/.clang-before-script.yml' - - local: '/admin/ci-templates/.documentation-before-script.yml' - - local: '/admin/ci-templates/.tags-template.yml' - - local: '/admin/ci-templates/.test-script-template.yml' - - local: '/admin/ci-templates/.build-docs-template.yml' - - local: '/admin/ci-templates/.cuda-template.yml' - - local: '/admin/ci-templates/.build-gmxapi-template.yml' - - local: '/admin/ci-templates/.regressiontest-template.yml' - - local: '/admin/ci-templates/.release-template.yml' diff --git a/admin/gitlab-ci/documentation.gitlab-ci.yml b/admin/gitlab-ci/documentation.gitlab-ci.yml new file mode 100644 index 0000000000..e1b6097ffa --- /dev/null +++ b/admin/gitlab-ci/documentation.gitlab-ci.yml @@ -0,0 +1,238 @@ +# Build documentation and web page. + +.configure-docs: + extends: + - .configure-extends-template + - .configure-docs-template + - .documentation-before-script-template + +.configure-docs-release: + extends: + - .configure-extends-template + - .configure-docs-release-template + - .documentation-before-script-template + +.build-docs-binary: + extends: + - .build-extends-template + - .build-cache-template + - .build-docs-binary-template + - .documentation-before-script-template + +.build-docs-webpage: + extends: + - .binary-build-template + - .variables-template + - .tags-template + - .no-cache-template + - .build-docs-webpage-template + - .documentation-before-script-template + +configure-docs: + extends: + - .configure-docs + needs: + - job: simple-build + artifacts: false + variables: + BUILD_DIR: build-docs + CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on + except: + variables: + - $GROMACS_RELEASE + +configure-docs-gmxapi: + extends: + - .configure-docs + - .configure-gmxapi-template + needs: + - job: simple-build + artifacts: false + variables: + BUILD_DIR: build-docs-gmxapi + CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on + except: + variables: + - $GROMACS_RELEASE + +build-docs: + extends: + - .build-docs-binary + stage: documentation + needs: + - job: simple-build + artifacts: false + - job: configure-docs + artifacts: true + variables: + BUILD_DIR: build-docs + except: + variables: + - $GROMACS_RELEASE + +build-docs-gmxapi: + extends: + - .build-docs-binary + - .gmxapi-extra-installs + stage: documentation + needs: + - job: simple-build + artifacts: false + - job: configure-docs-gmxapi + artifacts: true + variables: + BUILD_DIR: build-docs-gmxapi + except: + variables: + - $GROMACS_RELEASE + + +# The manual build is built separately so that errors in converting +# Sphinx to LaTeX and compiling can always be found in the +# all-output.txt file, while avoiding many thousands of lines of spam +# from pdflatex for normal builds. This does reduce the available +# parallel utilization, and so increases the build time. +# +# TODO why are the doxygen and sphinx log files disappearing +# TODO use a feature from gitlab runner instead of using pipefail to get timings for the job +webpage: + extends: + - .build-docs-webpage + stage: post-test + needs: + - job: build-docs + artifacts: true + - job: run-check-source + artifacts: false + variables: + BUILD_DIR: build-docs + except: + variables: + - $GROMACS_RELEASE + +webpage-gmxapi: + extends: + - .build-docs-webpage + - .gmxapi-extra-installs + stage: post-test + needs: + - job: build-docs-gmxapi + artifacts: true + - job: run-check-source + artifacts: false + variables: + BUILD_DIR: build-docs-gmxapi + except: + variables: + - $GROMACS_RELEASE + +webpage-nightly: + extends: + - .build-docs-webpage + - .configure-gmxapi-template + stage: nightly-deploy + only: + - triggers + - schedules + except: + variables: + - $GROMACS_RELEASE + needs: + - job: simple-build + artifacts: false + - job: linkchecker + artifacts: false + - job: webpage-gmxapi + artifacts: true + variables: + BUILD_DIR: build-docs-gmxapi + script: + - tar czf webpage.tar.gz $BUILD_DIR/docs/html/ + artifacts: + when: always + paths: + - webpage.tar.gz + +webpage-configure-release: + extends: + - .configure-docs-release + - .configure-gmxapi-template + - .no-cache-template + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + variables: + CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on + + +webpage-binary-release: + extends: + - .build-docs-binary + - .gmxapi-extra-installs + stage: release-build + needs: + - job: webpage-configure-release + artifacts: true + variables: + BUILD_DIR: release-doc-builds + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + +webpage-build-release: + extends: + - .build-docs-webpage + - .configure-gmxapi-template + dependencies: + - webpage-binary-release + - webpage-configure-release + stage: release-prepare-deploy + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + variables: + BUILD_DIR: release-doc-builds + +webpage-archive-release: + extends: + - .build-docs-webpage + - .configure-gmxapi-template + stage: release-deploy + only: + refs: + - web + - triggers + - schedules + variables: + - $GROMACS_RELEASE + dependencies: + - webpage-build-release + - package-archive-release + - package-regressiontests-release + variables: + BUILD_DIR: release-doc-builds + script: + - tar czf webpage.tar.gz $BUILD_DIR/docs/html/ + artifacts: + when: always + paths: + - webpage.tar.gz + - gromacs-*tar.gz + - regressiontests-*tar.gz + diff --git a/admin/gitlab-ci/lint.gitlab-ci.yml b/admin/gitlab-ci/lint.gitlab-ci.yml new file mode 100644 index 0000000000..fb2189b094 --- /dev/null +++ b/admin/gitlab-ci/lint.gitlab-ci.yml @@ -0,0 +1,125 @@ +# Repository cleanliness. Source tidiness, linting, and policy compliance. + +build-clang-tidy: + extends: + - .build-clang + - .clang7-template + stage: source-check + needs: + - job: simple-build + artifacts: false + - job: configure-clang-tidy + artifacts: true + variables: + BUILD_DIR: build-clang-tidy + COMPILER_MAJOR_VERSION: 7 + EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION + except: + variables: + - $GROMACS_RELEASE + +run-clang-format: + extends: + - .binary-build-template + - .no-cache-template + - .variables-template + - .tags-template + - .clang-before-script-template + - .build-clang-template + - .clang7-template + stage: source-check + when: always + needs: + - job: simple-build + artifacts: false + variables: + KUBERNETES_CPU_LIMIT: 1 + KUBERNETES_CPU_REQUEST: 1 + KUBERNETES_MEMORY_LIMIT: 2Gi + COMPILER_MAJOR_VERSION: 7 + EXTRA_INSTALLS: clang-format-$COMPILER_MAJOR_VERSION + except: + variables: + - $GROMACS_RELEASE + script: + - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION + - admin/clang-format.sh check --rev=HEAD^ --warnings=clang-format.log + - grep -iq "needs formatting" clang-format.log | tee formatting.txt || true + - if [ -s formatting.txt ] ; then echo "clang-format.sh found issues"; exit 1; fi + artifacts: + when: on_failure + paths: + - clang-format.log + - formatting.txt + +run-copyright-check: + extends: + - .binary-build-template + - .no-cache-template + - .variables-template + - .tags-template + - .clang-before-script-template + - .build-clang-template + - .clang7-template + stage: source-check + when: always + needs: + - job: simple-build + artifacts: false + variables: + KUBERNETES_CPU_LIMIT: 1 + KUBERNETES_CPU_REQUEST: 1 + KUBERNETES_MEMORY_LIMIT: 2Gi + except: + variables: + - $GROMACS_RELEASE + script: + - admin/copyright.sh check --rev=HEAD^ --warnings=copyright.log + - grep -iq "copyright year" copyright.log | tee years.log || true + - grep -iq "copyright header" copyright.log | tee headers.log || true + - if [[ -s years.log || -s headers.log ]] ; then + echo "Copyright information needs updating" ; + exit 1 ; + fi + artifacts: + when: on_failure + paths: + - copyright.log + - years.log + - headers.log + +run-check-source: + extends: + - .no-cache-template + - .variables-template + - .tags-template + - .build-docs-binary-template + - .documentation-before-script-template + stage: source-check + needs: + - job: simple-build + artifacts: false + - job: build-docs + artifacts: true + variables: + KUBERNETES_CPU_LIMIT: 1 + KUBERNETES_CPU_REQUEST: 1 + KUBERNETES_MEMORY_LIMIT: 2Gi + BUILD_DIR: build-docs + COMPILER_MAJOR_VERSION: 7 + except: + variables: + - $GROMACS_RELEASE + script: + - cd $BUILD_DIR + - cmake --build . --target check-source + - grep -qi "error" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee doxygenError.txt || true + - grep -qi "warning" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true + - if [ -s doxygenError.txt ] ; then echo "Found errors while running doxygen"; exit 1; fi + artifacts: + name: docs-artifacts-$CI_COMMIT_REF_SLUG + when: always + expire_in: 1 week + paths: + - $BUILD_DIR/docs/doxygen/doxygen-xml.log + - $BUILD_DIR/docs/doxygen/check-source.log diff --git a/admin/gitlab-ci/release.gitlab-ci.yml b/admin/gitlab-ci/release.gitlab-ci.yml new file mode 100644 index 0000000000..8524309b9f --- /dev/null +++ b/admin/gitlab-ci/release.gitlab-ci.yml @@ -0,0 +1,510 @@ +# Packages, exported artifacts, and release engineering processes. + +# Jobs running in release stage +linkchecker: + extends: + - .build-docs-webpage + stage: nightly-build + dependencies: + - webpage-gmxapi + only: + - schedules + - triggers + - merge_requests + - external_pull_requests + except: + variables: + - $GROMACS_RELEASE + variables: + KUBERNETES_CPU_LIMIT: 1 + KUBERNETES_CPU_REQUEST: 1 + KUBERNETES_MEMORY_LIMIT: 2Gi + BUILD_DIR: build-docs-gmxapi + script: + - cd $BUILD_DIR + - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml --ignore-url html-full + --ignore-url html-user --ignore-url html-lib --ignore-url .tar.gz --ignore-url _sources + -o xml + artifacts: + reports: + junit: $BUILD_DIR/linkchecker-out.xml + +build-archive-nightly: + extends: + - .build-archive + stage: nightly-build + needs: + - job: simple-build + artifacts: false + - job: configure-archive-nightly + artifacts: true + only: + - triggers + - schedules + except: + variables: + - $GROMACS_RELEASE + variables: + BUILD_DIR: build-package + +package-regressiontests-release: + extends: + - .regressiontests-extends-template + - .regressiontests-release-template + needs: + - job: prepare-release-version + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + + +package-archive-release: + extends: + - .build-archive + stage: release-package + needs: + - job: configure-archive-release + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + variables: + BUILD_DIR: build-package + +release-verify: + extends: + - .regressiontests-extends-template + - .release-verify-template + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + +configure-gcc-7-release: + extends: + - .configure-gcc-release + - .no-cache-template + - .gcc7-template + variables: + COMPILER_MAJOR_VERSION: 7 + RELEASE_BUILD_DIR: release-builds-gcc + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + +configure-gcc-7-gmxapi-release: + extends: + - .configure-gcc-release + - .configure-gmxapi-template + - .no-cache-template + - .gcc7-template + variables: + COMPILER_MAJOR_VERSION: 7 + RELEASE_BUILD_DIR: release-builds-gcc + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + +configure-gcc-7-double-release: + extends: + - .configure-gcc-release + - .no-cache-template + - .gcc7-template + variables: + COMPILER_MAJOR_VERSION: 7 + CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON + RELEASE_BUILD_DIR: release-builds-gcc + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + +configure-gcc-8-release: + extends: + - .configure-gcc-release + - .no-cache-template + - .gcc8-template + variables: + COMPILER_MAJOR_VERSION: 8 + RELEASE_BUILD_DIR: release-builds-gcc + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + +configure-clang-7-release: + extends: + - .configure-clang-release + - .no-cache-template + - .clang7-template + variables: + COMPILER_MAJOR_VERSION: 7 + RELEASE_BUILD_DIR: release-builds-clang + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + +configure-clang-7-gmxapi-release: + extends: + - .configure-clang-release + - .configure-gmxapi-template + - .no-cache-template + - .clang7-template + variables: + COMPILER_MAJOR_VERSION: 7 + RELEASE_BUILD_DIR: release-builds-clang + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + +configure-clang-8-release: + extends: + - .configure-clang-release + - .no-cache-template + - .clang8-template + variables: + COMPILER_MAJOR_VERSION: 8 + RELEASE_BUILD_DIR: release-builds-clang + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + dependencies: + - package-archive-release + - package-regressiontests-release + - prepare-release-version + +build-gcc-7-release: + extends: + - .build-gcc + - .gcc7-template + stage: release-build + variables: + BUILD_DIR: release-builds-gcc + needs: + - job: configure-gcc-7-release + artifacts: true + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + +build-gcc-7-gmxapi-release: + extends: + - .build-gcc + - .gmxapi-extra-installs + - .gcc7-template + stage: release-build + variables: + BUILD_DIR: release-builds-gcc + needs: + - job: configure-gcc-7-gmxapi-release + artifacts: true + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + +build-gcc-7-double-release: + extends: + - .build-gcc + - .gcc7-template + stage: release-build + variables: + BUILD_DIR: release-builds-gcc + needs: + - job: configure-gcc-7-double-release + artifacts: true + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + +build-gcc-8-release: + extends: + - .build-gcc + - .gcc8-template + stage: release-build + variables: + BUILD_DIR: release-builds-gcc + needs: + - job: configure-gcc-8-release + artifacts: true + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + +build-clang-7-release: + extends: + - .build-clang + - .clang7-template + stage: release-build + variables: + BUILD_DIR: release-builds-clang + needs: + - job: configure-clang-7-release + artifacts: true + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + +build-clang-7-gmxapi-release: + extends: + - .build-clang + - .gmxapi-extra-installs + - .clang7-template + stage: release-build + variables: + BUILD_DIR: release-builds-clang + needs: + - job: configure-clang-7-gmxapi-release + artifacts: true + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + +build-clang-8-release: + extends: + - .build-clang + - .clang8-template + stage: release-build + variables: + BUILD_DIR: release-builds-clang + needs: + - job: configure-clang-8-release + artifacts: true + only: + refs: + - web + - schedules + - triggers + variables: + - $GROMACS_RELEASE + +test-gcc-7-release: + extends: + - .test-gcc + - .gcc7-template + stage: release-tests + variables: + BUILD_DIR: release-builds-gcc + needs: + - job: configure-gcc-7-release + artifacts: true + - job: build-gcc-7-release + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + +test-gcc-7-gmxapi-release: + extends: + - .test-gcc + - .gmxapi-extra-installs + - .gcc7-template + stage: release-tests + variables: + BUILD_DIR: release-builds-gcc + needs: + - job: configure-gcc-7-gmxapi-release + artifacts: true + - job: build-gcc-7-gmxapi-release + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + +test-gcc-7-double-release: + extends: + - .test-gcc + - .gcc7-template + stage: release-tests + variables: + BUILD_DIR: release-builds-gcc + needs: + - job: configure-gcc-7-double-release + artifacts: true + - job: build-gcc-7-double-release + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + +test-gcc-8-release: + extends: + - .test-gcc + - .gcc8-template + stage: release-tests + variables: + BUILD_DIR: release-builds-gcc + needs: + - job: configure-gcc-8-release + artifacts: true + - job: build-gcc-8-release + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + +test-clang-7-release: + extends: + - .test-clang + - .clang7-template + stage: release-tests + variables: + BUILD_DIR: release-builds-clang + needs: + - job: configure-clang-7-release + artifacts: true + - job: build-clang-7-release + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + +test-clang-7-gmxapi-release: + extends: + - .test-clang + - .gmxapi-extra-installs + - .clang7-template + stage: release-tests + variables: + BUILD_DIR: release-builds-clang + needs: + - job: configure-clang-7-gmxapi-release + artifacts: true + - job: build-clang-7-gmxapi-release + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE + +test-clang-8-release: + extends: + - .test-clang + - .clang8-template + stage: release-tests + variables: + BUILD_DIR: release-builds-clang + needs: + - job: configure-clang-8-release + artifacts: true + - job: build-clang-8-release + artifacts: true + only: + refs: + - triggers + - web + - schedules + variables: + - $GROMACS_RELEASE diff --git a/admin/gitlab-ci/testing-matrix.gitlab-ci.yml b/admin/gitlab-ci/testing-matrix.gitlab-ci.yml new file mode 100644 index 0000000000..b8a75d7835 --- /dev/null +++ b/admin/gitlab-ci/testing-matrix.gitlab-ci.yml @@ -0,0 +1,588 @@ + +.configure-extends-template: + extends: + - .configure-build-template + - .no-cache-template + - .variables-template + - .tags-template + +.configure-release-extends-template: + extends: + - .configure-build-release-template + - .no-cache-template + - .variables-template + - .tags-template + +.build-extends-template: + extends: + - .binary-build-template + - .build-cache-template + - .variables-template + - .tags-template + +.test-extends-template: + extends: + - .test-base-template + - .pull-cache-template + - .test-script-template + - .variables-template + - .tags-template + +.regressiontests-extends-template: + extends: + - .no-cache-template + - .variables-template + - .tags-template + + +# Templates for configuration stage +.configure-gcc: + extends: + - .configure-extends-template + - .gcc-before-script-template + - .build-gcc-template + +.configure-gcc-release: + extends: + - .configure-release-extends-template + - .gcc-before-script-template + - .build-gcc-template + +.configure-gcc-cuda: + extends: + - .configure-gcc + - .cuda-template + +.configure-clang: + extends: + - .configure-extends-template + - .clang-before-script-template + - .build-clang-template + +.configure-clang-release: + extends: + - .configure-release-extends-template + - .clang-before-script-template + - .build-clang-template + +# Templates for build stage +.build-archive: + extends: + - .build-extends-template + - .documentation-before-script-template + - .build-docs-binary-template + - .archive-build-template + +.build-gcc: + extends: + - .build-extends-template + - .gcc-before-script-template + - .build-gcc-template + +.build-clang: + extends: + - .build-extends-template + - .clang-before-script-template + - .build-clang-template + +.build-gcc-cuda: + extends: + - .build-gcc + - .cuda-template + +# Templates for test stage +.test-gcc: + extends: + - .test-extends-template + - .gcc-before-script-template + - .test-gcc-template + +.test-gcc-cuda: + extends: + - .test-gcc + - .cuda-template + +.test-clang: + extends: + - .test-extends-template + - .clang-before-script-template + - .test-clang-template + +# Special job to package regressiontest files and have them available for testing +# Runs during pre-build +prepare-regressiontests: + extends: + - .regressiontests-extends-template + - .regressiontests-template + +prepare-release-version: + extends: + - .regressiontests-extends-template + - .release-version-template + +# Initial build that always needs to pass before follow-up stages run +simple-build: + extends: + - .simple-build-template + - .build-cache-template + - .variables-template + - .tags-template + - .gcc-before-script-template + - .build-gcc-template + - .gcc7-template + variables: + COMPILER_MAJOR_VERSION: 7 + BUILD_DIR: simple-build + except: + variables: + - $GROMACS_RELEASE + +# Jobs running in first pre-build stage +configure-gcc-7: + extends: + - .configure-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: 7 + except: + variables: + - $GROMACS_RELEASE + +configure-gcc-7-gmxapi: + extends: + - .configure-gcc + - .configure-gmxapi-template + - .gcc7-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: 7 + except: + variables: + - $GROMACS_RELEASE + +configure-gcc-7-double: + extends: + - .configure-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: 7 + CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON + except: + variables: + - $GROMACS_RELEASE + +configure-gcc-8: + extends: + - .configure-gcc + - .gcc8-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: 8 + except: + variables: + - $GROMACS_RELEASE + +configure-gcc-8-cuda-10.2: + extends: + - .configure-gcc-cuda + - .gcc-8-cuda-10.2-template + needs: + - job: simple-build + artifacts: false + except: + variables: + - $GROMACS_RELEASE + +configure-gcc-7-simd-sse41: + extends: + - .configure-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: 7 + CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1" + except: + variables: + - $GROMACS_RELEASE + +configure-clang-7: + extends: + - .configure-clang + - .clang7-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: 7 + except: + variables: + - $GROMACS_RELEASE + +configure-clang-7-gmxapi: + extends: + - .configure-clang + - .configure-gmxapi-template + - .clang7-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: 7 + except: + variables: + - $GROMACS_RELEASE + +configure-clang-8: + extends: + - .configure-clang + - .clang8-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: 8 + except: + variables: + - $GROMACS_RELEASE + +# For version of clang before 7, we need to always provide the full version +# Use something like this instead in the download script: +# APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION)) +configure-clang-6: + extends: + - .configure-clang + - .clang6-template + needs: + - job: simple-build + artifacts: false + variables: + COMPILER_MAJOR_VERSION: "6.0" + CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF + except: + variables: + - $GROMACS_RELEASE + +configure-clang-tidy: + extends: + - .configure-clang + - .clang7-template + needs: + - job: simple-build + artifacts: false + variables: + BUILD_DIR: build-clang-tidy + COMPILER_MAJOR_VERSION: 7 + CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON + EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION + except: + variables: + - $GROMACS_RELEASE + +# Only running in scheduled pipelines that are not release builds +configure-archive-nightly: + stage: nightly-configure + only: + - triggers + - schedules + needs: + - job: simple-build + artifacts: false + except: + variables: + - $GROMACS_RELEASE + extends: + - .configure-docs + variables: + BUILD_DIR: build-package + CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None + CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF + CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF + +configure-archive-release: + only: + refs: + - web + - triggers + - schedules + variables: + - $GROMACS_RELEASE + + extends: + - .configure-docs + variables: + BUILD_DIR: build-package + CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None + CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF + CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF + +# Jobs running during build stage +build-gcc-7: + extends: + - .build-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + - job: configure-gcc-7 + artifacts: true + except: + variables: + - $GROMACS_RELEASE + + +build-gcc-7-gmxapi: + extends: + - .build-gcc + - .gmxapi-extra-installs + - .gcc7-template + needs: + - job: simple-build + artifacts: false + - job: configure-gcc-7-gmxapi + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +build-gcc-7-double: + extends: + - .build-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + - job: configure-gcc-7-double + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +build-gcc-8: + extends: + - .build-gcc + - .gcc8-template + needs: + - job: simple-build + artifacts: false + - job: configure-gcc-8 + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +build-gcc-8-cuda-10.2: + extends: + - .build-gcc-cuda + - .gcc-8-cuda-10.2-template + needs: + - job: simple-build + artifacts: false + - job: configure-gcc-8-cuda-10.2 + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +build-gcc-7-simd-sse41: + extends: + - .build-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + - job: configure-gcc-7-simd-sse41 + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +build-clang-7: + extends: + - .build-clang + - .clang7-template + needs: + - job: simple-build + artifacts: false + - job: configure-clang-7 + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +build-clang-7-gmxapi: + extends: + - .build-clang + - .gmxapi-extra-installs + - .clang7-template + needs: + - job: simple-build + artifacts: false + - job: configure-clang-7-gmxapi + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +build-clang-8: + extends: + - .build-clang + - .clang8-template + needs: + - job: simple-build + artifacts: false + - job: configure-clang-8 + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +build-clang-6: + extends: + - .build-clang + - .clang6-template + needs: + - job: simple-build + artifacts: false + - job: configure-clang-6 + artifacts: true + except: + variables: + - $GROMACS_RELEASE + +# Jobs running during test stage +test-gcc-7: + extends: + - .test-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + - job: build-gcc-7 + except: + variables: + - $GROMACS_RELEASE + +test-gcc-7-gmxapi: + extends: + - .test-gcc + - .gmxapi-extra-installs + - .gcc7-template + needs: + - job: simple-build + artifacts: false + - job: build-gcc-7-gmxapi + except: + variables: + - $GROMACS_RELEASE + +test-gcc-7-double: + extends: + - .test-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + - job: build-gcc-7-double + except: + variables: + - $GROMACS_RELEASE + +test-gcc-8: + extends: + - .test-gcc + - .gcc8-template + needs: + - job: simple-build + artifacts: false + - job: build-gcc-8 + except: + variables: + - $GROMACS_RELEASE + +test-gcc-8-cuda-10.2: + variables: + KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu" + KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1 + extends: + - .test-gcc-cuda + - .gcc-8-cuda-10.2-template + needs: + - job: simple-build + artifacts: false + - job: build-gcc-8-cuda-10.2 + except: + variables: + - $GROMACS_RELEASE + +test-gcc-7-simd-sse41: + extends: + - .test-gcc + - .gcc7-template + needs: + - job: simple-build + artifacts: false + - job: build-gcc-7-simd-sse41 + except: + variables: + - $GROMACS_RELEASE + +test-clang-7: + extends: + - .test-clang + - .clang7-template + needs: + - job: simple-build + artifacts: false + - job: build-clang-7 + except: + variables: + - $GROMACS_RELEASE + +test-clang-7-gmxapi: + extends: + - .test-clang + - .gmxapi-extra-installs + - .clang7-template + needs: + - job: simple-build + artifacts: false + - job: build-clang-7-gmxapi + except: + variables: + - $GROMACS_RELEASE + +test-clang-8: + extends: + - .test-clang + - .clang8-template + needs: + - job: simple-build + artifacts: false + - job: build-clang-8 + except: + variables: + - $GROMACS_RELEASE + +test-clang-6: + extends: + - .test-clang + - .clang6-template + needs: + - job: simple-build + artifacts: false + - job: build-clang-6 + except: + variables: + - $GROMACS_RELEASE -- 2.22.0