[ci skip] Reorganize .gitlab-ci.yml
authorM. Eric Irrgang <ericirrgang@gmail.com>
Thu, 12 Mar 2020 16:07:09 +0000 (19:07 +0300)
committerEric Irrgang <ericirrgang@gmail.com>
Thu, 19 Mar 2020 12:04:47 +0000 (13:04 +0100)
* 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
admin/ci-templates/.include-template.yml [deleted file]
admin/gitlab-ci/documentation.gitlab-ci.yml [new file with mode: 0644]
admin/gitlab-ci/lint.gitlab-ci.yml [new file with mode: 0644]
admin/gitlab-ci/release.gitlab-ci.yml [new file with mode: 0644]
admin/gitlab-ci/testing-matrix.gitlab-ci.yml [new file with mode: 0644]

index dcb3fefd331ddbb1744eafc975bff8e6c2b7ec39..b679485105d2d5761bc0e1f542ba75e0906edc61 100644 (file)
@@ -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 (file)
index c3dc219..0000000
+++ /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 (file)
index 0000000..e1b6097
--- /dev/null
@@ -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 (file)
index 0000000..fb2189b
--- /dev/null
@@ -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 (file)
index 0000000..8524309
--- /dev/null
@@ -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 (file)
index 0000000..b8a75d7
--- /dev/null
@@ -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