The ugliest hack to fix rebase issues ever
authorPaul Bauer <paul.bauer.q@gmail.com>
Mon, 13 Apr 2020 14:51:18 +0000 (14:51 +0000)
committerM. Eric Irrgang <mei2n@virginia.edu>
Mon, 13 Apr 2020 14:51:18 +0000 (14:51 +0000)
Change-Id: I1b8202c4f9f36d03d29679850fd2e0672c823968

admin/gitlab-ci/archive.gitlab-ci.yml
admin/gitlab-ci/documentation.gitlab-ci.yml
admin/gitlab-ci/global.gitlab-ci.yml
admin/gitlab-ci/gromacs.gitlab-ci.yml
admin/gitlab-ci/lint.gitlab-ci.yml
admin/gitlab-ci/python-gmxapi.gitlab-ci.yml
admin/gitlab-ci/sample_restraint-regression.gitlab-ci.yml
admin/gitlab-ci/sample_restraint.gitlab-ci.yml

index 1d009808ee0644ddc8e940b56e88ab8756dc4ab6..4c6940364196b37fbdf42cfd59c0c929fe4889fe 100644 (file)
@@ -27,7 +27,7 @@ prepare-release-version:
 regressiontests:prepare:
   extends:
     - .variables:default
-    - .rules:not-for-release
+    - .rules:merge-requests
   cache: {}
   image: biophysics/gcc-gromacs
   stage: configure-build
@@ -74,7 +74,6 @@ regressiontests:package:
     KUBERNETES_MEMORY_LIMIT: 2Gi
   needs:
     - job: prepare-release-version
-      artifacts: true
   script:
     - VERSION=`cat version.json |
       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
@@ -98,7 +97,7 @@ regressiontests:package:
     - git clean -ffdxq
     - git gc
     - git archive -o $REGTESTNAME.tar.gz --prefix $REGTESTNAME/ -9 HEAD
-    - cp $REGTESTNAME.tar.gz gmx-regressiontests.tar.gz
+    - git archive -o gmx-regressiontests.tar.gz --prefix regressiontests/ -9 HEAD
     - mv $REGTESTNAME.tar.gz gmx-regressiontests.tar.gz ..
     - echo "Build regressiontests for branch  $REGTESTBRANCH"
     - cd ..
@@ -136,13 +135,12 @@ archive:configure:release:
 # manually hacking things. TODO: #3361
 .archive:build:
   extends:
+    - .variables:default
     - .gromacs:base:build
     - .use-ccache
-    - .variables:default
     - .before_script:default
     - .docs:build
-  # Dockerfiles are from dockerhub, user eriklindahl
-  image: gromacs/ci-docs-clang:master
+  image: gromacs/ci-docs-llvm:master
   variables:
     KUBERNETES_CPU_LIMIT: 4
     KUBERNETES_CPU_REQUEST: 2
@@ -191,7 +189,6 @@ archive:build:
   stage: nightly-build
   needs:
     - job: archive:configure:nightly
-      artifacts: true
   variables:
     BUILD_DIR: build-package
 
@@ -202,7 +199,6 @@ archive:package:
   stage: release-package
   needs:
     - job: archive:configure:release
-      artifacts: true
   variables:
     BUILD_DIR: build-package
 
@@ -253,7 +249,6 @@ archive:nightly-webpage:
     - job: linkchecker
       artifacts: false
     - job: webpage:build
-      artifacts: true
   variables:
     BUILD_DIR: build-docs
   script:
index 61d1deda415d4e463685937173b390beaec516a1..5061edd4a32041e3d1637f998ebec750dda598d9 100644 (file)
@@ -2,13 +2,13 @@
 
 .docs:configure:
   extends:
-    - .gromacs:base:configure
     - .variables:default
+    - .gromacs:base:configure
     - .before_script:default
-  # Built by admin/dockerfiles/ci-docs-clang
-  # TODO this should be organized more like the current documentation.py script
-  image: gromacs/ci-docs-clang:master
+  # TODO (#3480) this should be organized more like the current documentation.py script
+  image: gromacs/ci-docs-llvm:master
   stage: configure-build
+  cache: {}
   variables:
     KUBERNETES_CPU_LIMIT: 1
     KUBERNETES_CPU_REQUEST: 1
 
 .docs:configure:release:
   extends:
-    - .gromacs:base:configure
     - .variables:default
+    - .gromacs:base:configure
     - .before_script:default
     - .rules:nightly-only-for-release
-  # Built by admin/dockerfiles/ci-docs-clang
-  # TODO this should be organized more like the current documentation.py script
-  image: gromacs/ci-docs-clang:master
+  # TODO (#3480) this should be organized more like the current documentation.py script
+  image: gromacs/ci-docs-llvm:master
   stage: release-configure
   cache: {}
   variables:
 docs:configure:
   extends:
     - .docs:configure
-    - .rules:not-for-release
+    - .rules:basic-push
+  tags: []
   variables:
     BUILD_DIR: build-docs
     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on
 
 .docs:build:
-  # Built by admin/dockerfiles/ci-docs-clang
-  # TODO this should be organized more like the current documentation.py script
-  image: gromacs/ci-docs-clang:master
+  # TODO (#3480) this should be organized more like the current documentation.py script
+  image: gromacs/ci-docs-llvm:master
   script:
     - cd $BUILD_DIR
     - cmake --build . --target gmx -- -j8
@@ -198,16 +197,16 @@ docs:configure:
 
 docs:build:
   extends:
-    - .gromacs:base:build
     - .variables:default
+    - .gromacs:base:build
     - .use-ccache
     - .docs:build
     - .before_script:default
-    - .rules:not-for-release
+    - .rules:basic-push
   stage: documentation
+  tags: []
   needs:
     - job: docs:configure
-      artifacts: true
   variables:
     BUILD_DIR: build-docs
 
@@ -221,12 +220,12 @@ docs:build:
 # TODO use a feature from gitlab runner instead of using pipefail to get timings for the job
 .webpage:build:
   extends:
-    - .gromacs:base:build
     - .variables:default
+    - .gromacs:base:build
     - .before_script:default
-  # Built by admin/dockerfiles/ci-docs-clang
-  # TODO this should be organized more like the current documentation.py script
-  image: gromacs/ci-docs-clang:master
+  # TODO (#3480) this should be organized more like the current documentation.py script
+  image: gromacs/ci-docs-llvm:master
+  cache: {}
   variables:
     KUBERNETES_CPU_LIMIT: 4
     KUBERNETES_CPU_REQUEST: 2
@@ -260,11 +259,11 @@ docs:build:
 webpage:build:
   extends:
     - .webpage:build
-    - .rules:not-for-release
+    - .rules:basic-push
   stage: post-test
+  tags: []
   needs:
     - job: docs:build
-      artifacts: true
     - job: check-source
       artifacts: false
   variables:
@@ -294,7 +293,6 @@ webpage:dependencies:
   stage: release-build
   needs:
     - job: webpage:configure
-      artifacts: true
   variables:
     BUILD_DIR: release-doc-builds
 
index 2ac489e83a3b40aded97eb4ae167b0588e79928c..e86f75bd5713135d81161193914026a64049b9f1 100644 (file)
     BUILD_DIR: build
     INSTALL_DIR: install
     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=ON"
-    EXTRA_INSTALLS: "python3-dev python3-setuptools python3-pip python3-pytest"
 # TODO: Get these from updated Docker images.
 
 # Our generic before_script to install dependencies and prepare the ccache directory.
 .before_script:default:
   before_script:
-    - echo $EXTRA_INSTALLS
-    - time apt-get -qq update
-    - time apt-get -qqy --no-install-suggests --no-install-recommends install
-      $EXTRA_INSTALLS
     - mkdir -p ccache
     - export CCACHE_BASEDIR=${PWD}
     - export CCACHE_DIR=${PWD}/ccache
 
-# Jobs that run for merge requests and schedules, but not when GROMACS_RELEASE
-# is set. Includes non-gromacs projects. Note that jobs using this rule are
+# Jobs that run for new commits and pipelines triggered by schedules or
+# through the web interface, unless GROMACS_RELEASE is set. Excluded from
+# extra pipelines generated by merge request events.
+# Includes non-gromacs projects. Note that jobs using this rule are
 # eligible to run on non-gromacs project infrastructure, and should therefore
 # override the default *tag* parameter to exclude tags specific to the GROMACS
 # GitLab Runner infrastructure. I.e. in the job definition, set `tags: []`
-.rules:basic:
+.rules:basic-push:
   rules:
     - if: '$GROMACS_RELEASE'
       when: never
     - if: '$CI_PIPELINE_SOURCE == "schedule"'
       when: always
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
-      when: always
+      when: never
 
 # Jobs that run for merge requests and schedules, but not when GROMACS_RELEASE
 # is set. Excludes non-gromacs projects.
-.rules:not-for-release:
+.rules:merge-requests:
   rules:
     - if: '$CI_PROJECT_NAMESPACE != "gromacs"'
       when: never
@@ -56,7 +53,7 @@
     - if: '$CI_PIPELINE_SOURCE == "web"'
       when: always
     - if: '$CI_PIPELINE_SOURCE == "push"'
-      when: always
+      when: never
     - if: '$CI_PIPELINE_SOURCE == "schedule"'
       when: always
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
 .use-cuda:
   variables:
     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
-    CUDA_BASE_VERSION: ""
-    BUILD_DIR: build-cuda
-    CMAKE_EXTRA_OPTIONS: -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/
-    CMAKE_GPU_OPTIONS: -DGMX_GPU=ON
+    CMAKE_GPU_OPTIONS: -DGMX_GPU=ON -DGMX_USE_CUDA=ON
+
+.use-mpi:
+  variables:
+    CMAKE_MPI_OPTIONS: "-DGMX_MPI=ON"
+
+.use-opencl:
+  variables:
+    CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
+    CMAKE_GPU_OPTIONS: -DGMX_GPU=ON -DGMX_USE_OPENCL=ON
 
-# Base definition, not to be used directly.
-# Use version-specific `.use-gccX` definitions when defining jobs.
+# Base definition for using gcc.
 .use-gcc:base:
   variables:
-    BUILD_DIR: build-gcc
     CMAKE_COMPILER_SCRIPT: -DCMAKE_C_COMPILER=gcc-$COMPILER_MAJOR_VERSION -DCMAKE_CXX_COMPILER=g++-$COMPILER_MAJOR_VERSION
   before_script:
-    - echo $EXTRA_INSTALLS
-    - time apt-get -qq update
-    - time apt-get -qqy --no-install-suggests --no-install-recommends install
-      $EXTRA_INSTALLS
     - mkdir -p ccache
     - export CCACHE_BASEDIR=${PWD}
     - export CCACHE_DIR=${PWD}/ccache
 
-.use-gcc7:
-  image: gromacs/ci-gcc-7:master
-  variables:
-    COMPILER_MAJOR_VERSION: 7
-  extends:
-    - .use-gcc:base
-
-.use-gcc8:
-  image: gromacs/ci-gcc-8:master
-  variables:
-    COMPILER_MAJOR_VERSION: 8
-  extends:
-    - .use-gcc:base
-
-.use-gcc8:cuda-10.2:
-  image: gromacs/ci-gcc-8-cuda-10.2:master
-  variables:
-    CUDA_BASE_VERSION: "10.2"
-    COMPILER_MAJOR_VERSION: 8
-
-# Base definition, not to be used directly.
-# Use version-specific `.use-clangX` definitions when defining jobs.
+# Base definition for using clang.
 .use-clang:base:
   variables:
-    DEBIAN_FRONTEND: noninteractive
-    BUILD_DIR: build-clang
     CMAKE_COMPILER_SCRIPT: -DCMAKE_C_COMPILER=clang-$COMPILER_MAJOR_VERSION -DCMAKE_CXX_COMPILER=clang++-$COMPILER_MAJOR_VERSION
   before_script:
-    - echo $EXTRA_INSTALLS
-    - time apt-get -qq update
-    - time apt-get -qqy --no-install-suggests --no-install-recommends install
-      $EXTRA_INSTALLS
     - mkdir -p ccache
     - export CCACHE_BASEDIR=${PWD}
     - export CCACHE_DIR=${PWD}/ccache
+    - export ASAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer
 
-.use-clang6:
-  image: gromacs/ci-clang-6:master
-  variables:
-    COMPILER_MAJOR_VERSION: 6
-  extends:
-    - .use-clang:base
-
-.use-clang7:
-  image: gromacs/ci-clang-7:master
-  variables:
-    COMPILER_MAJOR_VERSION: 7
-  extends:
-    - .use-clang:base
-
-.use-clang8:
-  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
-  variables:
-    COMPILER_MAJOR_VERSION: 8
-  extends:
-    - .use-clang:base
-
-.use-clang9:
-  image: gromacs/cmake-3.13.0-llvm-9-intelopencl-openmpi:master
-  variables:
-    COMPILER_MAJOR_VERSION: 9
-  extends:
-    - .use-clang:base
index 8209e2125ecc0c6a63894e51d8f559da27d46018..93dedc81542cc5a400b288afca3feea555a423e5 100644 (file)
@@ -3,24 +3,24 @@
 # Initial build that always needs to pass before follow-up stages run
 simple-build:
   extends:
-    - .use-ccache
     - .variables:default
-    - .use-gcc7
-    - .rules:basic
+    - .use-ccache
+    - .use-clang:base
+    - .rules:basic-push
   stage: pre-build
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   tags: []
   variables:
     KUBERNETES_CPU_LIMIT: 8
     KUBERNETES_CPU_REQUEST: 4
     KUBERNETES_MEMORY_LIMIT: 8Gi
-    CMAKE_COMPILER_SCRIPT: ""
-    CMAKE_EXTRA_OPTIONS: ""
     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
+    COMPILER_MAJOR_VERSION: 9
     BUILD_DIR: simple-build
   script:
     - echo $CMAKE_COMPILER_SCRIPT
@@ -82,8 +82,8 @@ simple-build:
 .gromacs:base:configure:
   extends:
     - .variables:default
-  cache: {}
   stage: configure-build
+  cache: {}
   variables:
     KUBERNETES_CPU_LIMIT: 1
     KUBERNETES_CPU_REQUEST: 1
@@ -134,8 +134,8 @@ simple-build:
 .gromacs:base:release:configure:
   extends:
     - .variables:default
-  cache: {}
   stage: release-configure
+  cache: {}
   variables:
     KUBERNETES_CPU_LIMIT: 1
     KUBERNETES_CPU_REQUEST: 1
@@ -147,6 +147,7 @@ simple-build:
     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
+    CMAKE_REGRESSIONTEST_OPTIONS: "-DREGRESSIONTEST_PATH=../\\$RELEASE_REGRESSIONTESTS"
     RELEASE_BUILD_DIR: release-builds
     RELEASE_SOURCE: release-source-from-tarball
     RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
@@ -201,8 +202,8 @@ simple-build:
       $CMAKE_BUILD_TYPE_OPTIONS
       $CMAKE_GPU_OPTIONS
       $CMAKE_GMXAPI_OPTIONS
-      "-DREGRESSIONTEST_PATH=../$RELEASE_REGRESSIONTESTS"
-      -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
+      $CMAKE_REGRESSIONTEST_OPTIONS
+      -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR
       2>&1 | tee cmakeLog.log
     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
@@ -219,144 +220,149 @@ simple-build:
 gromacs:gcc-7:configure:
   extends:
     - .gromacs:base:configure
-    - .use-gcc7
-    - .rules:not-for-release
+    - .use-gcc:base
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
+  variables:
+    CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
+    CMAKE_GPU_OPTIONS: "-DGMX_GPU=ON -DGMX_USE_OPENCL=ON"
+    COMPILER_MAJOR_VERSION: 7
   dependencies: []
 
-gromacs:gcc-7:release:configure:
+gromacs:gcc-8:configure:
   extends:
-    - .gromacs:base:release:configure
-    - .use-gcc7
-    - .rules:nightly-only-for-release
-  cache: {}
+    - .gromacs:base:configure
+    - .use-gcc:base
+    - .use-opencl
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
+  dependencies: []
   variables:
-    RELEASE_BUILD_DIR: release-builds-gcc
-  dependencies:
-    - archive:package
-    - regressiontests:package
-    - prepare-release-version
+    CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
+    COMPILER_MAJOR_VERSION: 8
+    CMAKE_EXTRA_OPTIONS: "-DGMX_EXTERNAL_CLFFT=ON"
 
-gromacs:gcc-7-simd-sse41:configure:
+gromacs:clang-TSAN:configure:
   extends:
     - .gromacs:base:configure
-    - .use-gcc7
-    - .rules:not-for-release
+    - .use-clang:base
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
   dependencies: []
   variables:
-    CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
+    COMPILER_MAJOR_VERSION: 8
+    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=TSAN"
 
-gromacs:gcc-7-double:configure:
+gromacs:clang-8:configure:
   extends:
     - .gromacs:base:configure
-    - .use-gcc7
-    - .rules:not-for-release
+    - .use-clang:base
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
   dependencies: []
   variables:
-    CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
+    COMPILER_MAJOR_VERSION: 8
 
-gromacs:gcc-7-double:release:configure:
+gromacs:clang-9:configure:
   extends:
-    - .gromacs:base:release:configure
-    - .use-gcc7
-    - .rules:nightly-only-for-release
-  cache: {}
+   - .gromacs:base:configure
+   - .use-clang:base
+   - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   variables:
+    COMPILER_MAJOR_VERSION: 9
     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
-    RELEASE_BUILD_DIR: release-builds-gcc
-  dependencies:
-    - archive:package
-    - regressiontests:package
-    - prepare-release-version
+  dependencies: []
 
-gromacs:gcc-8:configure:
+gromacs:clang-static-analyzer:configure:
   extends:
     - .gromacs:base:configure
-    - .use-gcc8
-    - .rules:not-for-release
+    - .use-clang:base
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
   dependencies: []
+  variables:
+     CMAKE_COMPILER_SCRIPT: "-DCMAKE_CXX_COMPILER=/usr/local/libexec/c++-analyzer -DCMAKE_C_COMPILER=gcc"
+     CMAKE_EXTRA_OPTIONS: "-DGMX_CLANG_ANALYZER=ON -DGMX_OPENMP=OFF -DGMX_USE_RDTSCP=OFF -DGMX_FFT_LIBRARY=fftpack -DGMX_DEVELOPER_BUILD=ON"
+     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
+
+gromacs:clang-ASAN:configure:
+  extends:
+    - .gromacs:base:configure
+    - .use-clang:base
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
+  dependencies: []
+  variables:
+    COMPILER_MAJOR_VERSION: 8
+    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=ASAN"
 
 gromacs:gcc-8:release:configure:
   extends:
     - .gromacs:base:release:configure
-    - .use-gcc8
+    - .use-gcc:base
+    - .use-mpi
+    - .use-cuda
     - .rules:nightly-only-for-release
-  cache: {}
+  image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
   variables:
+    COMPILER_MAJOR_VERSION: 8
     RELEASE_BUILD_DIR: release-builds-gcc
+    CMAKE_EXTRA_OPTIONS: "-DGMX_BUILD_MDRUN_ONLY=ON"
+    CMAKE_BUILD_TYPE_OPTIONS : "-DCMAKE_BUILD_TYPE=RelWithDebug"
+    CMAKE_REGRESSIONTEST_OPTIONS: ""
   dependencies:
     - archive:package
     - regressiontests:package
     - prepare-release-version
 
-gromacs:gcc-8-cuda-10.2:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-cuda
-    - .use-gcc8:cuda-10.2
-    - .rules:not-for-release
-  variables:
-    CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
-  # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
-  dependencies: []
-
-# 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))
-gromacs:clang-6:configure:
+gromacs:gcc-7:release:configure:
   extends:
-    - .gromacs:base:configure
-    - .use-clang6
-    - .rules:not-for-release
-  dependencies: []
+    - .gromacs:base:release:configure
+    - .use-gcc:base
+    - .rules:nightly-only-for-release
+  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
   variables:
-    COMPILER_MAJOR_VERSION: "6.0"
-    CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
-
-gromacs:clang-7:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-clang7
-    - .rules:not-for-release
-  dependencies: []
+    COMPILER_MAJOR_VERSION: 7
+    RELEASE_BUILD_DIR: release-builds-gcc
+    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
+  dependencies:
+    - archive:package
+    - regressiontests:package
+    - prepare-release-version
 
-gromacs:clang-7:release:configure:
+gromacs:clang-9:release:configure:
   extends:
     - .gromacs:base:release:configure
-    - .use-clang7
+    - .use-clang:base
+    - .use-mpi
     - .rules:nightly-only-for-release
-  cache: {}
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   variables:
+    COMPILER_MAJOR_VERSION: 9
     RELEASE_BUILD_DIR: release-builds-clang
+    CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=ON"
+    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
   dependencies:
     - archive:package
     - regressiontests:package
     - prepare-release-version
 
-gromacs:clang-8:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-clang8
-    - .rules:not-for-release
-  dependencies: []
-
 gromacs:clang-8:release:configure:
   extends:
     - .gromacs:base:release:configure
-    - .use-clang8
+    - .use-clang:base
+    - .use-cuda
     - .rules:nightly-only-for-release
-  cache: {}
+  image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master
   variables:
+    COMPILER_MAJOR_VERSION: 8
     RELEASE_BUILD_DIR: release-builds-clang
-  dependencies:
-    - archive:package
-    - regressiontests:package
-    - prepare-release-version
+    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithDebug"
 
 # Jobs running during build stage
 
 .gromacs:base:build:
-  # Dockerfiles are from dockerhub, user eriklindahl
-  # image in admin/dockerimages/ci-docs-py27
   stage: build
   script:
     - cd $BUILD_DIR
@@ -374,364 +380,438 @@ gromacs:clang-8:release:configure:
       - $BUILD_DIR
       - $INSTALL_DIR/
 
+.gromacs:static-analyzer-build:
+  stage: build
+  script:
+    - cd $BUILD_DIR
+    - scan-build -o scan_html cmake --build . -- -j8 2>&1 | tee buildLogFile.log
+    - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
+      | grep -v "CMake" | tee buildErrors.log || true
+    - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
+    - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
+    - cd ..
+  artifacts:
+    when: always
+    paths:
+      - $BUILD_DIR/scan_html
+
 gromacs:gcc-7:build:
   extends:
+    - .variables:default
     - .gromacs:base:build
+    - .before_script:default
     - .use-ccache
-    - .variables:default
-    - .use-gcc7
-    - .rules:not-for-release
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
   needs:
     - job: gromacs:gcc-7:configure
       artifacts: true
 
-gromacs:gcc-7:release:build:
+gromacs:gcc-8:build:
   extends:
+    - .variables:default
     - .gromacs:base:build
+    - .before_script:default
     - .use-ccache
-    - .variables:default
-    - .use-gcc7
-    - .rules:nightly-only-for-release
-  stage: release-build
-  variables:
-    BUILD_DIR: release-builds-gcc
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
   needs:
-    - job: gromacs:gcc-7:release:configure
-      artifacts: true
+    - job: gromacs:gcc-8:configure
 
-gromacs:gcc-7-simd-sse41:build:
+gromacs:clang-TSAN:build:
   extends:
+    - .variables:default
     - .gromacs:base:build
+    - .use-clang:base
     - .use-ccache
-    - .variables:default
-    - .use-gcc7
-    - .rules:not-for-release
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
   needs:
-    - job: gromacs:gcc-7-simd-sse41:configure
-      artifacts: true
+    - job: gromacs:clang-TSAN:configure
 
-gromacs:gcc-7-double:build:
+gromacs:clang-ASAN:build:
   extends:
+    - .variables:default
     - .gromacs:base:build
+    - .use-clang:base
     - .use-ccache
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
+  needs:
+    - job: gromacs:clang-ASAN:configure
+
+gromacs:clang-static-analyzer:build:
+  extends:
     - .variables:default
-    - .use-gcc7
-    - .rules:not-for-release
+    - .gromacs:static-analyzer-build
+    - .use-clang:base
+    - .use-ccache
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
   needs:
-    - job: gromacs:gcc-7-double:configure
-      artifacts: true
+    - job: gromacs:clang-static-analyzer:configure
 
-gromacs:gcc-7-double:release:build:
+gromacs:clang-8:build:
   extends:
+    - .variables:default
     - .gromacs:base:build
+    - .before_script:default
     - .use-ccache
-    - .variables:default
-    - .use-gcc7
-    - .rules:nightly-only-for-release
-  stage: release-build
-  variables:
-    BUILD_DIR: release-builds-gcc
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
   needs:
-    - job: gromacs:gcc-7-double:release:configure
-      artifacts: true
+    - job: gromacs:clang-8:configure
 
-gromacs:gcc-8:build:
+gromacs:clang-9:build:
   extends:
+    - .variables:default
     - .gromacs:base:build
+    - .before_script:default
     - .use-ccache
-    - .variables:default
-    - .use-gcc8
-    - .rules:not-for-release
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   needs:
-    - job: gromacs:gcc-8:configure
-      artifacts: true
+    - job: gromacs:clang-9:configure
 
 gromacs:gcc-8:release:build:
   extends:
+    - .variables:default  
     - .gromacs:base:build
+    - .before_script:default
     - .use-ccache
-    - .variables:default
-    - .use-gcc8
     - .rules:nightly-only-for-release
   stage: release-build
   variables:
     BUILD_DIR: release-builds-gcc
+  image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
   needs:
     - job: gromacs:gcc-8:release:configure
-      artifacts: true
 
-gromacs:gcc-8-cuda-10.2:build:
+gromacs:gcc-7:release:build:
   extends:
-    - .gromacs:base:build
-    - .use-ccache
     - .variables:default
-    - .use-cuda
-    - .use-gcc8:cuda-10.2
-    - .rules:not-for-release
-  variables:
-    CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
-  # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
-  needs:
-    - job: gromacs:gcc-8-cuda-10.2:configure
-      artifacts: true
-
-gromacs:clang-6:build:
-  extends:
     - .gromacs:base:build
+    - .before_script:default
     - .use-ccache
-    - .variables:default
-    - .use-clang6
-    - .rules:not-for-release
+    - .rules:nightly-only-for-release
+  stage: release-build
+  variables:
+    BUILD_DIR: release-builds-gcc
+  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
   needs:
-    - job: gromacs:clang-6:configure
-      artifacts: true
+    - job: gromacs:gcc-7:release:configure
 
-gromacs:clang-7:build:
+gromacs:clang-9:release:build:
   extends:
-    - .gromacs:base:build
-    - .use-ccache
     - .variables:default
-    - .use-clang7
-    - .rules:not-for-release
-  needs:
-    - job: gromacs:clang-7:configure
-      artifacts: true
-
-gromacs:clang-7:release:build:
-  extends:
     - .gromacs:base:build
+    - .before_script:default
     - .use-ccache
-    - .variables:default
-    - .use-clang7
     - .rules:nightly-only-for-release
   stage: release-build
   variables:
     BUILD_DIR: release-builds-clang
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   needs:
-    - job: gromacs:clang-7:release:configure
-      artifacts: true
-
-gromacs:clang-8:build:
-  extends:
-    - .gromacs:base:build
-    - .use-ccache
-    - .variables:default
-    - .use-clang8
-    - .rules:not-for-release
-  needs:
-    - job: gromacs:clang-8:configure
-      artifacts: true
+    - job: gromacs:clang-9:release:configure
 
 gromacs:clang-8:release:build:
   extends:
+    - .variables:default
     - .gromacs:base:build
+    - .before_script:default
     - .use-ccache
-    - .variables:default
-    - .use-clang8
     - .rules:nightly-only-for-release
   stage: release-build
   variables:
     BUILD_DIR: release-builds-clang
+  image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master
   needs:
     - job: gromacs:clang-8:release:configure
-      artifacts: true
 
 # Jobs running during test stage
 
 .gromacs:base:test:
   extends:
     - .variables:default
-  variables:
-    REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
-    REGRESSIONTEST_OMP_RANK_NUMBER: 2
-    REGRESSIONTEST_PME_RANK_NUMBER: 1
-    REGRESSIONTEST_MPI_RUN_COMMAND: ""
-    REGRESSIONTEST_DOUBLE: ""
   stage: test
+  cache: {}
   retry:
-    max: 2
+    max: 1
+  variables:
+    CTEST_RUN_MODE: "ExperimentalTest"
   script:
     - cd $BUILD_DIR
-    - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
+    # Needed to run MPI enabled code in the docker images, until we set up different users
+    - export OMPI_ALLOW_RUN_AS_ROOT=1
+    - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
+    - ctest -D $CTEST_RUN_MODE --output-on-failure | tee ctestLog.log || true
     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
       ctestLog.log | tee ctestErrors.log
-    - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
+    - if [ $CTEST_RUN_MODE == "ExperimentalTest" ] ; then
+      xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml;
+      else
+      touch JUnitTestResults.xml;
+      fi
     - if [ -s ctestErrors.log ] ; then
       echo "Error during running ctest";
       exit 1;
       fi
     - cd ..
-    - tar xzf gmx-regressiontests.tar.gz
-    - source $INSTALL_DIR/bin/GMXRC
-    - cd regressiontests
-    - echo "perl gmxtest.pl -nt $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND"
-    - perl gmxtest.pl -nt $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND -xml all
   artifacts:
     reports:
       junit: $BUILD_DIR/JUnitTestResults.xml
     paths:
       - $BUILD_DIR/Testing
       - $BUILD_DIR/tests
-      - regressiontests
+    when: always
+    expire_in: 1 week
+
+.gromacs:base:regressiontest:
+  extends:
+    - .variables:default
+  variables:
+    REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
+    REGRESSIONTEST_OMP_RANK_NUMBER: 2
+    REGRESSIONTEST_PME_RANK_NUMBER: 1
+    REGRESSIONTEST_MPI_RUN_COMMAND: ""
+    REGRESSIONTEST_DOUBLE: ""
+    REGRESSIONTEST_PARALLEL: "-nt"
+  stage: test
+  cache: {}
+  retry:
+    max: 1
+  script:
+    # This should go away once we are able to run ASAN on mdrun
+    - export ASAN_OPTIONS="detect_leaks=0"
+    # Needed to run MPI enabled code in the docker images, until we set up different users
+    - export OMPI_ALLOW_RUN_AS_ROOT=1
+    - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
+    - tar xzf gmx-regressiontests.tar.gz
+    - source $INSTALL_DIR/bin/GMXRC
+    - cd regressiontests
+    - perl gmxtest.pl $REGRESSIONTEST_PARALLEL $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND -xml all
+  artifacts:
+    reports:
+      junit: regressiontests/gmxtest.xml
     when: always
     expire_in: 1 week
 
 gromacs:gcc-7:test:
   extends:
     - .gromacs:base:test
-    - .use-gcc7
-    - .rules:not-for-release
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
+  variables:
+    KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
+    KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
   needs:
     - job: gromacs:gcc-7:build
-    - job: regressiontests:prepare
 
-gromacs:gcc-7:release:test:
+gromacs:gcc-8:test:
   extends:
     - .gromacs:base:test
-    - .use-gcc7
-    - .rules:nightly-only-for-release
-  stage: release-tests
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
   variables:
-    BUILD_DIR: release-builds-gcc
+    KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
+    KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
   needs:
-    - job: gromacs:gcc-7:release:configure
-      artifacts: true
-    - job: gromacs:gcc-7:release:build
-      artifacts: true
-    - job: regressiontests:package
+    - job: gromacs:gcc-8:build
 
-gromacs:gcc-7-simd-sse41:test:
+gromacs:clang-8:test:
   extends:
     - .gromacs:base:test
-    - .use-gcc7
-    - .rules:not-for-release
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
   needs:
-    - job: gromacs:gcc-7-simd-sse41:build
-    - job: regressiontests:prepare
+    - job: gromacs:clang-8:build
 
-gromacs:gcc-7-double:test:
+gromacs:clang-TSAN:test:
   extends:
     - .gromacs:base:test
-    - .use-gcc7
-    - .rules:not-for-release
-  variables:
-    REGRESSIONTEST_DOUBLE: "-double"
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
   needs:
-    - job: gromacs:gcc-7-double:build
-    - job: regressiontests:prepare
+    - job: gromacs:clang-TSAN:build
 
-gromacs:gcc-7-double:release:test:
+gromacs:clang-ASAN:test:
   extends:
     - .gromacs:base:test
-    - .use-gcc7
-    - .rules:nightly-only-for-release
-  stage: release-tests
+    - .use-clang:base
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
   variables:
-    BUILD_DIR: release-builds-gcc
+    CTEST_RUN_MODE: "ExperimentalMemCheck"
   needs:
-    - job: gromacs:gcc-7-double:release:configure
-      artifacts: true
-    - job: gromacs:gcc-7-double:release:build
-      artifacts: true
-    - job: regressiontests:package
+    - job: gromacs:clang-ASAN:build
 
-gromacs:gcc-8:test:
+gromacs:clang-9:test:
   extends:
     - .gromacs:base:test
-    - .use-gcc8
-    - .rules:not-for-release
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   needs:
-    - job: gromacs:gcc-8:build
-    - job: regressiontests:prepare
+    - job: gromacs:clang-9:build
 
-gromacs:gcc-8:release:test:
+gromacs:gcc-7:regressiontest:
   extends:
-    - .gromacs:base:test
-    - .use-gcc8
-    - .rules:nightly-only-for-release
-  stage: release-tests
+    - .gromacs:base:regressiontest
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
   variables:
-    BUILD_DIR: release-builds-gcc
+    KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
+    KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
+    REGRESSIONTEST_PME_RANK_NUMBER: 0
+    REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
+    REGRESSIONTEST_OMP_RANK_NUMBER: 1
   needs:
-    - job: gromacs:gcc-8:release:configure
-      artifacts: true
-    - job: gromacs:gcc-8:release:build
-      artifacts: true
-    - job: regressiontests:package
+    - job: gromacs:gcc-7:build
+    - job: regressiontests:prepare
 
-gromacs:gcc-8-cuda-10.2:test:
+gromacs:gcc-8:regressiontest:
   extends:
-    - .gromacs:base:test
-    - .use-cuda
-    - .use-gcc8:cuda-10.2
-    - .rules:not-for-release
+    - .gromacs:base:regressiontest
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
   variables:
     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
     REGRESSIONTEST_PME_RANK_NUMBER: 0
     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
     REGRESSIONTEST_OMP_RANK_NUMBER: 1
-    CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
-  # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
   needs:
-    - job: gromacs:gcc-8-cuda-10.2:build
+    - job: gromacs:gcc-8:build
     - job: regressiontests:prepare
 
-gromacs:clang-6:test:
+gromacs:clang-8:regressiontest:
   extends:
-    - .gromacs:base:test
-    - .use-clang6
-    - .rules:not-for-release
+    - .gromacs:base:regressiontest
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
+  needs:
+    - job: gromacs:clang-8:build
+    - job: regressiontests:prepare
+
+gromacs:clang-TSAN:regressiontest:
+  extends:
+    - .gromacs:base:regressiontest
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
+  needs:
+    - job: gromacs:clang-TSAN:build
+    - job: regressiontests:prepare
+
+gromacs:clang-ASAN:regressiontest:
+  extends:
+    - .gromacs:base:regressiontest
+    - .use-clang:base
+    - .rules:merge-requests
+  image: gromacs/cmake-3.13.0-llvm-8-tsan:master
+  needs:
+    - job: gromacs:clang-ASAN:build
+    - job: regressiontests:prepare
+
+gromacs:clang-9:regressiontest:
+  extends:
+    - .gromacs:base:regressiontest
+    - .rules:merge-requests
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   variables:
-    REGRESSIONTEST_OMP_RANK_NUMBER: 0
+    REGRESSIONTEST_DOUBLE: "-double"
   needs:
-    - job: gromacs:clang-6:build
+    - job: gromacs:clang-9:build
     - job: regressiontests:prepare
 
-gromacs:clang-7:test:
+gromacs:gcc-8:release:test:
   extends:
     - .gromacs:base:test
-    - .use-clang7
-    - .rules:not-for-release
+    - .rules:nightly-only-for-release
+  stage: release-tests
+  image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
+  variables:
+    BUILD_DIR: release-builds-gcc
   needs:
-    - job: gromacs:clang-7:build
-    - job: regressiontests:prepare
+    - job: gromacs:gcc-8:release:configure
+    - job: gromacs:gcc-8:release:build
 
-gromacs:clang-7:release:test:
+gromacs:gcc-7:release:test:
   extends:
     - .gromacs:base:test
-    - .use-clang7
     - .rules:nightly-only-for-release
   stage: release-tests
+  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
   variables:
-    BUILD_DIR: release-builds-clang
+    BUILD_DIR: release-builds-gcc
   needs:
-    - job: gromacs:clang-7:release:configure
-      artifacts: true
-    - job: gromacs:clang-7:release:build
-      artifacts: true
-    - job: regressiontests:package
+    - job: gromacs:gcc-7:release:configure
+    - job: gromacs:gcc-7:release:build
 
-gromacs:clang-8:test:
+gromacs:clang-9:release:test:
   extends:
     - .gromacs:base:test
-    - .use-clang8
-    - .rules:not-for-release
+    - .rules:nightly-only-for-release
+  stage: release-tests
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
+  variables:
+    BUILD_DIR: release-builds-clang
   needs:
-    - job: gromacs:clang-8:build
-    - job: regressiontests:prepare
+    - job: gromacs:clang-9:release:configure
+    - job: gromacs:clang-9:release:build
 
 gromacs:clang-8:release:test:
   extends:
     - .gromacs:base:test
-    - .use-clang8
     - .rules:nightly-only-for-release
   stage: release-tests
+  image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master
   variables:
     BUILD_DIR: release-builds-clang
   needs:
     - job: gromacs:clang-8:release:configure
-      artifacts: true
     - job: gromacs:clang-8:release:build
-      artifacts: true
+
+gromacs:gcc-7:release:regressiontest:
+  extends:
+    - .gromacs:base:regressiontest
+    - .rules:nightly-only-for-release
+  stage: release-tests
+  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
+  variables:
+    BUILD_DIR: release-builds-gcc
+  needs:
+    - job: gromacs:gcc-7:release:build
+    - job: regressiontests:package
+
+gromacs:clang-9:release:regressiontest:
+  extends:
+    - .gromacs:base:regressiontest
+    - .rules:nightly-only-for-release
+  stage: release-tests
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
+  variables:
+    BUILD_DIR: release-builds-clang
+    REGRESSIONTEST_DOUBLE: "-double"
+    REGRESSIONTEST_PARALLEL: "-np"
+  needs:
+    - job: gromacs:clang-9:release:build
+    - job: regressiontests:package
+
+gromacs:clang-8:release:regressiontest:
+  extends:
+    - .gromacs:base:regressiontest
+    - .rules:nightly-only-for-release
+  stage: release-tests
+  image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master
+  variables:
+    BUILD_DIR: release-builds-clang
+    KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
+    KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
+    REGRESSIONTEST_PME_RANK_NUMBER: 0
+    REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
+    REGRESSIONTEST_OMP_RANK_NUMBER: 1
+
+  needs:
+    - job: gromacs:clang-8:release:build
     - job: regressiontests:package
+
index 6c3a96af0de84a3563fd562caaa3990f90257d96..07403be39d8348993a8137f18749f3690f49448a 100644 (file)
@@ -1,43 +1,57 @@
 # Repository cleanliness. Source tidiness, linting, and policy compliance.
 
-clang-tidy:configure:
+clang-tidy:configure-push:
   extends:
     - .gromacs:base:configure
-    - .use-clang9
-    - .rules:not-for-release
+    - .use-clang:base
+    - .rules:basic-push
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   dependencies: []
+  tags: []
   variables:
+    COMPILER_MAJOR_VERSION: 9
+    BUILD_DIR: build-clang-tidy
+    CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON
+
+clang-tidy:configure-schedule:
+  extends:
+    - .gromacs:base:configure
+    - .use-clang:base
+    - .rules:nightly-not-for-release
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
+  dependencies: []
+  tags: []
+  variables:
+    COMPILER_MAJOR_VERSION: 9
     BUILD_DIR: build-clang-tidy
     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
-    CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
-  # TODO: Enable GMX_PYTHON_PACKAGE for clang-tidy when dependencies are in Docker image.
 
 clang-tidy:build:
   extends:
     - .gromacs:base:build
     - .use-ccache
     - .variables:default
-    - .use-clang9
     - .rules:nightly-not-for-release
   stage: source-check
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
   needs:
-    - job: clang-tidy:configure
+    - job: clang-tidy:configure-schedule
   variables:
     BUILD_DIR: build-clang-tidy
-    EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
 
 clang-tidy:test:
   extends:
     - .gromacs:base:build
     - .use-ccache
     - .variables:default
-    - .use-clang9
-    - .rules:not-for-release
+    - .rules:basic-push
   stage: source-check
+  image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
+  tags: []
   needs:
-    - job: clang-tidy:configure
+    - job: clang-tidy:configure-push
   variables:
+    COMPILER_MAJOR_VERSION: 9
     BUILD_DIR: build-clang-tidy
     EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
     KUBERNETES_CPU_LIMIT: 4
@@ -59,12 +73,13 @@ clang-tidy:test:
 clang-format:
   extends:
     - .variables:default
-    - .use-clang7
-    - .rules:basic
+    - .rules:basic-push
   cache: {}
   stage: pre-build
+  image: gromacs/ci-docs-llvm:master
   tags: []
   variables:
+    COMPILER_MAJOR_VERSION: 7
     KUBERNETES_CPU_LIMIT: 1
     KUBERNETES_CPU_REQUEST: 1
     KUBERNETES_MEMORY_LIMIT: 2Gi
@@ -83,10 +98,10 @@ clang-format:
 copyright-check:
   extends:
     - .variables:default
-    - .use-clang7
-    - .rules:basic
+    - .rules:basic-push
   cache: {}
   stage: pre-build
+  image: gromacs/ci-docs-llvm:master
   tags: []
   variables:
     KUBERNETES_CPU_LIMIT: 1
@@ -112,9 +127,10 @@ check-source:
     - .variables:default
     - .docs:build
     - .before_script:default
-    - .rules:not-for-release
+    - .rules:basic-push
   cache: {}
   stage: source-check
+  tags: []
   needs:
     - job: docs:build
       artifacts: true
index ac72f92383a7b340ba7845aff1d81f4dbedb3e11..2ab2cd076780c32a619d9555225fc8f8e327a179 100644 (file)
@@ -6,8 +6,9 @@
 .gmxapi-0.1:clang-8:
   extends:
     - .variables:default
-    - .use-clang8
+    - .use-clang:base
   stage: test
+  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
   variables:
     PY_UNIT_TEST_XML: $CI_PROJECT_DIR/py-JUnitTestResults.xml
     PY_MPI_UNIT_TEST_XML: $CI_PROJECT_DIR/py-mpi-JUnitTestResults.xml
@@ -106,7 +107,8 @@ gmxapi-0.1:clang-8:py-3.8.2:
 .gmxapi-0.2:clang-8:gmx2021:
   extends:
     - .variables:default
-    - .use-clang8
+    - .use-clang:base
+  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
   rules:
     - if: '$CI_PROJECT_NAMESPACE != "gromacs"'
       when: never
index 29e59af784977269a1e460c42b786d18c582932f..8ca23620f9cac3d2376ff21652cc288bd6d071e3 100644 (file)
@@ -4,7 +4,8 @@
 .sample_restraint:clang-8:gmx2020:
   extends:
     - .variables:default
-    - .use-clang8
+    - .use-clang:base
+  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
   stage: test
   variables:
     PLUGIN_TEST_XML: $CI_PROJECT_DIR/py-JUnitTestResults.xml
index e0b02b52ca705f8707fd1287a00b65093b5277e7..437eac2aac34b2e281b3bf9949473a10fb9cc7f9 100644 (file)
@@ -2,7 +2,8 @@
 .sample_restraint:clang-8:gmx2021:
   extends:
     - .variables:default
-    - .use-clang8
+    - .use-clang:base
+  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
   stage: test
   variables:
     PLUGIN_TEST_XML: $CI_PROJECT_DIR/py-JUnitTestResults.xml