Echo the path to and version of CMake for CI builds
[alexxy/gromacs.git] / admin / gitlab-ci / gromacs.gitlab-ci.yml
index 0cdf11cee8e5fe8f2bbc418c7d542ce0c3bbe4c8..71dee72decd343eb5f6b7ace034baed9e657fc30 100644 (file)
@@ -1,15 +1,30 @@
-# Build, test, and install variously configured GROMACS installations.
+# Test goal: Initial build with close-to-default settings that always needs to pass before follow-up CI stages run
+# Test intents (should change rarely and conservatively):
+#   OS: Ubuntu oldest supported
+#   Compiler: Clang
+#   Build type: Debug
+#   CMake: oldest supported
+#   GPU: no
+#   SIMD: no
+#   Scope: configure, build, unit tests
+# Test implementation choices (free to change as needed):
+#   OS: Ubuntu 20.04
+#   Compiler: Clang 12
+#   FFT: FFTW3
+#   Parallelism nt/ntomp: 4/2
 
-# Initial build that always needs to pass before follow-up stages run
 simple-build:
+  # Test scope: configure, build, unit tests
   extends:
     - .variables:default
     - .use-ccache
     - .use-clang:base
     - .rules:basic-push
   stage: pre-build
-  image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
+
   variables:
+    CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     KUBERNETES_CPU_LIMIT: 8
     KUBERNETES_CPU_REQUEST: 4
     KUBERNETES_MEMORY_REQUEST: 8Gi
@@ -19,9 +34,10 @@ simple-build:
     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
+    COMPILER_MAJOR_VERSION: 12
     BUILD_DIR: simple-build
   script:
+    - CMAKE=${CMAKE:-$(which cmake)}
     - echo $CMAKE_COMPILER_SCRIPT
     - echo $CMAKE_EXTRA_OPTIONS
     - echo $CMAKE_SIMD_OPTIONS
@@ -38,7 +54,9 @@ simple-build:
       mkdir $BUILD_DIR ;
       fi
     - cd $BUILD_DIR
-    - cmake ..
+    - which $CMAKE
+    - $CMAKE --version
+    - $CMAKE ..
       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
       $CMAKE_COMPILER_SCRIPT
       $CMAKE_EXTRA_OPTIONS
@@ -52,12 +70,12 @@ simple-build:
       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
-    - cmake --build . -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee buildLogFile.log
-    - cmake --build . --target tests -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee testBuildLogFile.log
+    - $CMAKE --build . -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee buildLogFile.log
+    - $CMAKE --build . --target tests -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee testBuildLogFile.log
     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
       | grep -v "CMake" | tee buildErrors.log || true
     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
-    - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
+    - $CMAKE --build . --target install 2>&1 | tee installBuildLogFile.log
     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
     - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
@@ -75,809 +93,3 @@ simple-build:
       - $BUILD_DIR/*log
     when: always
     expire_in: 1 week
-
-# Jobs running in first pre-build stage
-
-.gromacs:base:configure:
-  extends:
-    - .variables:default
-  stage: configure-build
-  cache: {}
-  variables:
-    KUBERNETES_CPU_LIMIT: 1
-    KUBERNETES_CPU_REQUEST: 1
-    KUBERNETES_MEMORY_REQUEST: 2Gi
-    CMAKE_COMPILER_SCRIPT: ""
-    CMAKE_EXTRA_OPTIONS: ""
-    CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
-    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"
-  script:
-    - echo $CMAKE_COMPILER_SCRIPT
-    - echo $CMAKE_EXTRA_OPTIONS
-    - echo $CMAKE_SIMD_OPTIONS
-    - echo $CMAKE_GPU_OPTIONS
-    - echo $CMAKE_MPI_OPTIONS
-    - echo $CMAKE_PRECISION_OPTIONS
-    - echo $CMAKE_BUILD_TYPE_OPTIONS
-    - echo $CMAKE_GMXAPI_OPTIONS
-    - if [[ -d $BUILD_DIR ]] ; then
-      rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
-      else
-      echo "Preparing new build directory" ;
-      mkdir $BUILD_DIR ;
-      fi
-    - cd $BUILD_DIR
-    - cmake ..
-      -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
-      $CMAKE_COMPILER_SCRIPT
-      $CMAKE_EXTRA_OPTIONS
-      $CMAKE_SIMD_OPTIONS
-      $CMAKE_MPI_OPTIONS
-      $CMAKE_PRECISION_OPTIONS
-      $CMAKE_BUILD_TYPE_OPTIONS
-      $CMAKE_GPU_OPTIONS
-      $CMAKE_GMXAPI_OPTIONS
-      -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
-      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
-    - cd ..
-  artifacts:
-    when: always
-    paths:
-      - $BUILD_DIR
-
-.gromacs:base:release:configure:
-  extends:
-    - .variables:default
-  stage: release-configure
-  cache: {}
-  variables:
-    KUBERNETES_CPU_LIMIT: 1
-    KUBERNETES_CPU_REQUEST: 1
-    KUBERNETES_MEMORY_REQUEST: 2Gi
-    CMAKE_COMPILER_SCRIPT: ""
-    CMAKE_EXTRA_OPTIONS: ""
-    CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
-    CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
-    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
-  script:
-    - VERSION=`cat version.json |
-      python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
-    - if [[ $GROMACS_RELEASE != "true" ]] ; then
-      VERSION=$VERSION-dev ;
-      fi
-    - SOURCENAME=gromacs-$VERSION
-    - SOURCETARBALL=$SOURCENAME.tar.gz
-    - REGTESTNAME=regressiontests-$VERSION
-    - REGTESTTARBALL=$REGTESTNAME.tar.gz
-    - echo "$SOURCETARBALL"
-    - echo "$REGTESTTARBALL"
-    - RELEASE_TARBALLS=release-tarballs
-    - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
-    - mv $SOURCETARBALL $RELEASE_TARBALLS
-    - mv $REGTESTTARBALL $RELEASE_TARBALLS
-    - cd $RELEASE_TARBALLS
-    # We rename the source and regressiontest directories
-    # to have names for them that don't change for different versions.
-    - tar -xf $SOURCETARBALL
-    - mv $SOURCENAME ../$RELEASE_SOURCE
-    - tar -xf $REGTESTTARBALL
-    - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
-    - rm $SOURCETARBALL $REGTESTTARBALL
-    - cd ..
-    - echo $CMAKE_COMPILER_SCRIPT
-    - echo $CMAKE_EXTRA_OPTIONS
-    - echo $CMAKE_SIMD_OPTIONS
-    - echo $CMAKE_GPU_OPTIONS
-    - echo $CMAKE_MPI_OPTIONS
-    - echo $CMAKE_PRECISION_OPTIONS
-    - echo $CMAKE_BUILD_TYPE_OPTIONS
-    - echo $CMAKE_GMXAPI_OPTIONS
-    - if [[ -d $RELEASE_BUILD_DIR ]] ; then
-      echo "Cleaning up build directory" ;
-      rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
-      else
-      echo "Preparing new build directory" ;
-      mkdir $RELEASE_BUILD_DIR ;
-      fi
-    - cd $RELEASE_BUILD_DIR
-    - cmake ../$RELEASE_SOURCE/
-      -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
-      $CMAKE_COMPILER_SCRIPT
-      $CMAKE_EXTRA_OPTIONS
-      $CMAKE_SIMD_OPTIONS
-      $CMAKE_MPI_OPTIONS
-      $CMAKE_PRECISION_OPTIONS
-      $CMAKE_BUILD_TYPE_OPTIONS
-      $CMAKE_GPU_OPTIONS
-      $CMAKE_GMXAPI_OPTIONS
-      $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
-    - cd ..
-  artifacts:
-    when: always
-    paths:
-      - $RELEASE_BUILD_DIR
-      - $RELEASE_REGRESSIONTESTS
-      - $RELEASE_SOURCE
-
-# Templates for configuration stage
-
-gromacs:gcc-7:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-gcc:base
-    - .use-opencl
-    - .rules:merge-requests
-  image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
-  variables:
-    CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
-    CMAKE_EXTRA_OPTIONS: "-DGMX_EXTERNAL_CLFFT=ON"
-    COMPILER_MAJOR_VERSION: 7
-
-gromacs:gcc-8-cuda-11.0:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-gcc:base
-    - .use-cuda
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
-  variables:
-    CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
-    COMPILER_MAJOR_VERSION: 8
-
-gromacs:clang-TSAN:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-clang:base
-    - .rules:merge-requests
-  image: gromacs/cmake-3.13.0-llvm-8-tsan-master
-  variables:
-    COMPILER_MAJOR_VERSION: 8
-    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=TSAN"
-
-gromacs:clang-8:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-clang:base
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
-  variables:
-    COMPILER_MAJOR_VERSION: 8
-
-gromacs:clang-9-mpi:configure:
-  extends:
-   - .gromacs:base:configure
-   - .use-clang:base
-   - .use-mpi
-   - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
-  variables:
-    COMPILER_MAJOR_VERSION: 9
-    CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
-
-gromacs:clang-static-analyzer:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-clang:base
-    - .rules:merge-requests
-  image: gromacs/cmake-3.13.0-llvm-8-tsan-master
-  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
-  variables:
-    COMPILER_MAJOR_VERSION: 8
-    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=ASAN"
-
-gromacs:clang-UBSAN:configure:
-  extends:
-    - .gromacs:base:configure
-    - .use-clang:base
-    - .rules:merge-requests
-  image: gromacs/cmake-3.13.0-llvm-8-tsan-master
-  variables:
-    COMPILER_MAJOR_VERSION: 8
-    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=UBSAN"
-
-gromacs:gcc-8-cuda-11.0:release:configure:
-  extends:
-    - .gromacs:base:release:configure
-    - .use-gcc:base
-    - .use-mpi
-    - .use-cuda
-    - .rules:nightly-only-for-release
-  image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-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=RelWithDebInfo"
-    CMAKE_REGRESSIONTEST_OPTIONS: ""
-  dependencies:
-    - archive:package
-    - regressiontests:package
-    - prepare-release-version
-
-gromacs:gcc-7:release:configure:
-  extends:
-    - .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: 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-9:release:configure:
-  extends:
-    - .gromacs:base:release:configure
-    - .use-clang:base
-    - .use-mpi
-    - .rules:nightly-only-for-release
-  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-cuda-10.1:release:configure:
-  extends:
-    - .gromacs:base:release:configure
-    - .use-clang:base
-    - .use-cuda
-    - .rules:nightly-only-for-release
-  image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
-  variables:
-    COMPILER_MAJOR_VERSION: 8
-    RELEASE_BUILD_DIR: release-builds-clang
-    CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
-
-# Jobs running during build stage
-
-.gromacs:base:build:
-  stage: build
-  script:
-    - cd $BUILD_DIR
-    - cmake --build . -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee buildLogFile.log
-    - cmake --build . --target tests -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee testBuildLogFile.log
-    - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
-      | grep -v "CMake" | tee buildErrors.log || true
-    - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
-    - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
-    - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
-    - cd ..
-  artifacts:
-    when: always
-    paths:
-      - $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
-    - .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-8-cuda-11.0:build:
-  extends:
-    - .variables:default
-    - .gromacs:base:build
-    - .before_script:default
-    - .use-ccache
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
-  needs:
-    - job: gromacs:gcc-8-cuda-11.0:configure
-
-gromacs:clang-TSAN: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-TSAN:configure
-
-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
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-ASAN:configure
-
-gromacs:clang-UBSAN: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
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-UBSAN:configure
-
-gromacs:clang-static-analyzer:build:
-  extends:
-    - .variables:default
-    - .gromacs:static-analyzer-build
-    - .use-clang:base
-    - .use-ccache
-    - .rules:merge-requests
-  image: gromacs/cmake-3.13.0-llvm-8-tsan-master
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-static-analyzer:configure
-
-gromacs:clang-8:build:
-  extends:
-    - .variables:default
-    - .gromacs:base:build
-    - .before_script:default
-    - .use-ccache
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
-  needs:
-    - job: gromacs:clang-8:configure
-
-gromacs:clang-9-mpi:build:
-  extends:
-    - .variables:default
-    - .gromacs:base:build
-    - .before_script:default
-    - .use-ccache
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
-  needs:
-    - job: gromacs:clang-9-mpi:configure
-
-gromacs:gcc-8-cuda-11.0:release:build:
-  extends:
-    - .variables:default  
-    - .gromacs:base:build
-    - .before_script:default
-    - .use-ccache
-    - .rules:nightly-only-for-release
-  stage: release-build
-  variables:
-    BUILD_DIR: release-builds-gcc
-  image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
-  needs:
-    - job: gromacs:gcc-8-cuda-11.0:release:configure
-
-gromacs:gcc-7:release:build:
-  extends:
-    - .variables:default
-    - .gromacs:base:build
-    - .before_script:default
-    - .use-ccache
-    - .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:gcc-7:release:configure
-
-gromacs:clang-9:release:build:
-  extends:
-    - .variables:default
-    - .gromacs:base:build
-    - .before_script:default
-    - .use-ccache
-    - .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-9:release:configure
-
-gromacs:clang-8-cuda-10.1:release:build:
-  extends:
-    - .variables:default
-    - .gromacs:base:build
-    - .before_script:default
-    - .use-ccache
-    - .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-cuda-10.1:release:configure
-
-# Jobs running during test stage
-
-.gromacs:base:test:
-  extends:
-    - .variables:default
-  stage: test
-  cache: {}
-  retry:
-    max: 1
-  variables:
-    CTEST_RUN_MODE: "ExperimentalTest"
-  script:
-    - cd $BUILD_DIR
-    - export UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1:suppressions=$CI_PROJECT_DIR/admin/ubsan-suppressions.txt
-    # 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
-    - export ASAN_OPTIONS="check_initialization_order=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true:detect_stack_use_after_return=true"
-    - 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 $CI_PROJECT_DIR/scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/*.xml > JUnitTestResults.xml
-    - if [ -s ctestErrors.log ] ; then
-      echo "Error during running ctest";
-      exit 1;
-      fi
-    - cd ..
-  artifacts:
-    reports:
-      junit: $BUILD_DIR/JUnitTestResults.xml
-    paths:
-      - $BUILD_DIR/Testing
-      - $BUILD_DIR/tests
-    when: always
-    expire_in: 1 week
-
-.gromacs:base:regressiontest:
-  extends:
-    - .variables:default
-  variables:
-    KUBERNETES_CPU_LIMIT: 4
-    KUBERNETES_CPU_REQUEST: 4
-    KUBERNETES_MEMORY_REQUEST: 4Gi
-    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:
-    - export LSAN_OPTIONS="suppressions=$CI_PROJECT_DIR/admin/lsan-suppressions.txt:print_suppressions=0"
-    - export ASAN_OPTIONS="check_initialization_order=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true:detect_stack_use_after_return=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
-    - 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:
-    paths:
-      - regressiontests/gmxtest.xml
-    when: always
-    expire_in: 1 week
-
-gromacs:gcc-7:test:
-  extends:
-    - .gromacs:base:test
-    - .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
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:gcc-7:build
-
-gromacs:gcc-8-cuda-11.0:test:
-  extends:
-    - .gromacs:base:test
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
-  variables:
-    KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
-    KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:gcc-8-cuda-11.0:build
-
-gromacs:clang-8:test:
-  extends:
-    - .gromacs:base:test
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
-  needs:
-    - job: gromacs:clang-8:build
-
-gromacs:clang-TSAN:test:
-  extends:
-    - .gromacs:base:test
-    - .rules:merge-requests
-  image: gromacs/cmake-3.13.0-llvm-8-tsan-master
-  needs:
-    - job: gromacs:clang-TSAN:build
-
-gromacs:clang-ASAN:test:
-  extends:
-    - .gromacs:base:test
-    - .use-clang:base
-    - .rules:merge-requests
-  image: gromacs/cmake-3.13.0-llvm-8-tsan-master
-  variables:
-    CTEST_RUN_MODE: "ExperimentalMemCheck"
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-ASAN:build
-
-gromacs:clang-UBSAN:test:
-  extends:
-    - .gromacs:base:test
-    - .use-clang:base
-    - .rules:merge-requests
-  image: gromacs/cmake-3.13.0-llvm-8-tsan-master
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-UBSAN:build
-
-gromacs:clang-9-mpi:test:
-  extends:
-    - .gromacs:base:test
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-9-mpi:build
-
-gromacs:gcc-7:regressiontest:
-  extends:
-    - .gromacs:base:regressiontest
-    - .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
-    REGRESSIONTEST_PME_RANK_NUMBER: 0
-    REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
-    REGRESSIONTEST_OMP_RANK_NUMBER: 1
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:gcc-7:build
-    - job: regressiontests:prepare
-
-gromacs:gcc-8-cuda-11.0:regressiontest:
-  extends:
-    - .gromacs:base:regressiontest
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-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
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:gcc-8-cuda-11.0:build
-    - job: regressiontests:prepare
-
-gromacs:clang-8:regressiontest:
-  extends:
-    - .gromacs:base:regressiontest
-    - .rules:merge-requests
-  image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
-  tags:
-    - k8s-scilifelab
-  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
-  tags:
-    - k8s-scilifelab
-  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
-  tags:
-    - k8s-scilifelab
-  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_DOUBLE: "-double"
-    REGRESSIONTEST_PARALLEL: "-np"
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-9-mpi:build
-    - job: regressiontests:prepare
-
-gromacs:gcc-8-cuda-11.0:release:test:
-  extends:
-    - .gromacs:base:test
-    - .rules:nightly-only-for-release
-  stage: release-tests
-  image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
-  variables:
-    KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
-    KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
-    BUILD_DIR: release-builds-gcc
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:gcc-8-cuda-11.0:release:configure
-    - job: gromacs:gcc-8-cuda-11.0:release:build
-
-gromacs:gcc-7:release:test:
-  extends:
-    - .gromacs:base:test
-    - .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:configure
-    - job: gromacs:gcc-7:release:build
-
-gromacs:clang-9:release:test:
-  extends:
-    - .gromacs:base:test
-    - .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-9:release:configure
-    - job: gromacs:clang-9:release:build
-
-gromacs:clang-8-cuda-10.1:release:test:
-  extends:
-    - .gromacs:base:test
-    - .rules:nightly-only-for-release
-  stage: release-tests
-  image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
-  variables:
-    KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
-    KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
-    BUILD_DIR: release-builds-clang
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-8-cuda-10.1:release:configure
-    - job: gromacs:clang-8-cuda-10.1:release:build
-
-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
-  tags:
-    - k8s-scilifelab
-  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"
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-9:release:build
-    - job: regressiontests:package
-
-gromacs:clang-8-cuda-10.1: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
-  tags:
-    - k8s-scilifelab
-  needs:
-    - job: gromacs:clang-8-cuda-10.1:release:build
-    - job: regressiontests:package
-