Merge branch release-2020 into master
[alexxy/gromacs.git] / .gitlab-ci.yml
index fd58a9b844634a5d2d77f23a242d401ebcc0411d..ae0f97fc4611acb6b4b89c3be11e054af7aaffb1 100644 (file)
@@ -1,40 +1,40 @@
 include:
-    - local: '/admin/ci-templates/.include-template.yml'
+  - local: '/admin/ci-templates/.include-template.yml'
 
 .configure-extends-template:
-    extends:
-        - .configure-build-template
-        - .no-cache-template
-        - .variables-template
-        - .tags-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
+  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
+  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
+  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
+  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.
@@ -76,16 +76,16 @@ stages:
 
 # Templates for configuration stage
 .configure-gcc:
-    extends:
-      - .configure-extends-template
-      - .gcc-before-script-template
-      - .build-gcc-template
+  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
+  extends:
+    - .configure-release-extends-template
+    - .gcc-before-script-template
+    - .build-gcc-template
 
 .configure-gcc-cuda:
     extends:
@@ -93,64 +93,64 @@ stages:
       - .cuda-template
 
 .configure-clang:
-    extends:
-      - .configure-extends-template
-      - .clang-before-script-template
-      - .build-clang-template
+  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
+  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
+  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
+  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
+  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
+  extends:
+    - .build-extends-template
+    - .gcc-before-script-template
+    - .build-gcc-template
 
 .build-clang:
-    extends:
-      - .build-extends-template
-      - .clang-before-script-template
-      - .build-clang-template
+  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
+  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
+  extends:
+    - .binary-build-template
+    - .variables-template
+    - .tags-template
+    - .no-cache-template
+    - .build-docs-webpage-template
+    - .documentation-before-script-template
 
 .build-gcc-cuda:
     extends:
@@ -159,10 +159,10 @@ stages:
 
 # Templates for test stage
 .test-gcc:
-    extends:
-      - .test-extends-template
-      - .gcc-before-script-template
-      - .test-gcc-template
+  extends:
+    - .test-extends-template
+    - .gcc-before-script-template
+    - .test-gcc-template
 
 .test-gcc-cuda:
     extends:
@@ -170,94 +170,94 @@ stages:
       - .cuda-template
 
 .test-clang:
-    extends:
-      - .test-extends-template
-      - .clang-before-script-template
-      - .test-clang-template
+  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
+  extends:
+    - .regressiontests-extends-template
+    - .regressiontests-template
 
 prepare-release-version:
-    extends:
-      - .regressiontests-extends-template
-      - .release-version-template
+  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
+  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:
-        COMPILER_MAJOR_VERSION: 7
-        BUILD_DIR: simple-build
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 # Jobs running in first pre-build stage
 configure-gcc-7:
-    extends:
-      - .configure-gcc
-      - .gcc7-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  extends:
+    - .configure-gcc
+    - .gcc7-template
+  needs:
+    - job: simple-build
+      artifacts: false
+  variables:
+    COMPILER_MAJOR_VERSION: 7
+  except:
     variables:
-        COMPILER_MAJOR_VERSION: 7
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 configure-gcc-7-gmxapi:
-    extends:
-      - .configure-gcc
-      - .configure-gmxapi-template
-      - .gcc7-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  extends:
+    - .configure-gcc
+    - .configure-gmxapi-template
+    - .gcc7-template
+  needs:
+    - job: simple-build
+      artifacts: false
+  variables:
+    COMPILER_MAJOR_VERSION: 7
+  except:
     variables:
-        COMPILER_MAJOR_VERSION: 7
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 configure-gcc-7-double:
-    extends:
-      - .configure-gcc
-      - .gcc7-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  extends:
+    - .configure-gcc
+    - .gcc7-template
+  needs:
+    - job: simple-build
+      artifacts: false
+  variables:
+    COMPILER_MAJOR_VERSION: 7
+    CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
+  except:
     variables:
-        COMPILER_MAJOR_VERSION: 7
-        CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 configure-gcc-8:
-    extends:
-      - .configure-gcc
-      - .gcc8-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  extends:
+    - .configure-gcc
+    - .gcc8-template
+  needs:
+    - job: simple-build
+      artifacts: false
+  variables:
+    COMPILER_MAJOR_VERSION: 8
+  except:
     variables:
-        COMPILER_MAJOR_VERSION: 8
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 configure-gcc-8-cuda-10.2:
     extends:
@@ -271,197 +271,197 @@ configure-gcc-8-cuda-10.2:
         - $GROMACS_RELEASE
 
 configure-gcc-7-simd-sse41:
-    extends:
-      - .configure-gcc
-      - .gcc7-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  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:
-        COMPILER_MAJOR_VERSION: 7
-        CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 configure-clang-7:
-    extends:
-      - .configure-clang
-      - .clang7-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  extends:
+    - .configure-clang
+    - .clang7-template
+  needs:
+    - job: simple-build
+      artifacts: false
+  variables:
+    COMPILER_MAJOR_VERSION: 7
+  except:
     variables:
-        COMPILER_MAJOR_VERSION: 7
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 configure-clang-7-gmxapi:
-    extends:
-      - .configure-clang
-      - .configure-gmxapi-template
-      - .clang7-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  extends:
+    - .configure-clang
+    - .configure-gmxapi-template
+    - .clang7-template
+  needs:
+    - job: simple-build
+      artifacts: false
+  variables:
+    COMPILER_MAJOR_VERSION: 7
+  except:
     variables:
-        COMPILER_MAJOR_VERSION: 7
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 configure-clang-8:
-    extends:
-      - .configure-clang
-      - .clang8-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  extends:
+    - .configure-clang
+    - .clang8-template
+  needs:
+    - job: simple-build
+      artifacts: false
+  variables:
+    COMPILER_MAJOR_VERSION: 8
+  except:
     variables:
-        COMPILER_MAJOR_VERSION: 8
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $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
+  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:
-        COMPILER_MAJOR_VERSION: "6.0"
-        CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 configure-clang-tidy:
-    extends:
-      - .configure-clang
-      - .clang7-template
-    needs:
-      - job: simple-build
-        artifacts: false
+  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:
-        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
+      - $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
+  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
+  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:
-        BUILD_DIR: build-docs-gmxapi
-        CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on
-    except:
-      variables:
-        - $GROMACS_RELEASE
+      - $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
+  stage: nightly-configure
+  only:
+    - triggers
+    - schedules
+  needs:
+    - job: simple-build
+      artifacts: false
+  except:
     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
+      - $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
+  only:
+    refs:
+      - web
+      - triggers
+      - schedules
     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
+      - $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
+  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
+  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
+  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:
@@ -684,191 +684,380 @@ test-clang-6:
 # Jobs running in source checking stage
 build-clang-tidy:
   extends:
-    - .build-clang
-    - .clang7-template
-  stage: source-check
+    - .build-gcc
+    - .gcc8-template
   needs:
     - job: simple-build
-      artifacts: false 
-    - job: configure-clang-tidy
+      artifacts: false
+    - job: configure-gcc-8
       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:
+build-gcc-7-simd-sse41:
   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
+    - .build-gcc
+    - .gcc7-template
   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
+      artifacts: false
+    - job: configure-gcc-7-simd-sse41
+      artifacts: true
   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:
+build-clang-7:
   extends:
-    - .binary-build-template
-    - .no-cache-template
-    - .variables-template
-    - .tags-template
-    - .clang-before-script-template
-    - .build-clang-template
+    - .build-clang
     - .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
+      artifacts: false
+    - job: configure-clang-7
+      artifacts: true
   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:
+build-clang-7-gmxapi:
   extends:
-    - .no-cache-template
-    - .variables-template
-    - .tags-template
-    - .build-docs-binary-template
-    - .documentation-before-script-template
-  stage: source-check
+    - .build-clang
+    - .gmxapi-extra-installs
+    - .clang7-template
   needs:
     - job: simple-build
-      artifacts: false 
-    - job: build-docs
+      artifacts: false
+    - job: configure-clang-7-gmxapi
       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:
+build-clang-8:
   extends:
-    - .build-docs-binary
-  stage: documentation
+    - .build-clang
+    - .clang8-template
   needs:
     - job: simple-build
-      artifacts: false 
-    - job: configure-docs
+      artifacts: false
+    - job: configure-clang-8
       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:
+build-clang-6:
   extends:
-    - .build-docs-webpage
-  stage: post-test
+    - .build-clang
+    - .clang6-template
   needs:
-    - job: build-docs
-      artifacts: true
-    - job: run-check-source
+    - job: simple-build
       artifacts: false
-  variables:
-    BUILD_DIR: build-docs
+    - job: configure-clang-6
+      artifacts: true
   except:
     variables:
       - $GROMACS_RELEASE
 
-webpage-gmxapi:
+# Jobs running during test stage
+test-gcc-7:
   extends:
-    - .build-docs-webpage
-    - .gmxapi-extra-installs
+    - .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-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
@@ -890,582 +1079,578 @@ linkchecker:
   dependencies:
     - webpage-gmxapi
   only:
-    - schedules
+    - 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
-    - merge_requests
-    - external_pull_requests
+    - schedules
   except:
     variables:
       - $GROMACS_RELEASE
+  needs:
+    - job: simple-build
+      artifacts: false
+    - job: linkchecker
+      artifacts: false
+    - job: webpage-gmxapi
+      artifacts: true
   variables:
-      KUBERNETES_CPU_LIMIT: 1
-      KUBERNETES_CPU_REQUEST: 1
-      KUBERNETES_MEMORY_LIMIT: 2Gi
-      BUILD_DIR: build-docs-gmxapi
+    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 
+    - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
   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
+    when: always
+    paths:
+      - webpage.tar.gz
 
-webpage-nightly:
-    extends:
-      - .build-docs-webpage
-      - .configure-gmxapi-template
-    stage: nightly-deploy
-    only:
+package-regressiontests-release:
+  extends:
+    - .regressiontests-extends-template
+    - .regressiontests-release-template
+  needs:
+    - job: prepare-release-version
+      artifacts: true
+  only:
+    refs:
       - triggers
+      - web
       - 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
+      - $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
+  extends:
+    - .build-archive
+  stage: release-package
+  needs:
+    - job: configure-archive-release
+      artifacts: true
+  only:
+    refs:
+      - triggers
+      - web
+      - schedules
     variables:
-        BUILD_DIR: build-package
+      - $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
+  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
+  extends:
+    - .configure-docs-release
+    - .configure-gmxapi-template
+    - .no-cache-template
+  only:
+    refs:
+      - web
+      - schedules
+      - triggers
     variables:
-      CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on
+      - $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
+  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:
-        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
+      - $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
+  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:
-        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
+      - $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
+  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:
-        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
+      - $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
+  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:
-        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
+      - $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
+  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:
-        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
+      - $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
+  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:
-        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
+      - $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
+  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:
-        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
+      - $GROMACS_RELEASE
+  dependencies:
+    - package-archive-release
+    - package-regressiontests-release
+    - prepare-release-version
 
 build-gcc-7-release:
-    extends:
-      - .build-gcc
-      - .gcc7-template
-    stage: release-build
+  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:
-        BUILD_DIR: release-builds-gcc
-    needs:
-      - job: configure-gcc-7-release
-        artifacts: true
-    only:
-      refs:
-        - web
-        - schedules
-        - triggers
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 build-gcc-7-gmxapi-release:
-    extends:
-      - .build-gcc
-      - .gmxapi-extra-installs
-      - .gcc7-template
-    stage: release-build
+  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:
-        BUILD_DIR: release-builds-gcc
-    needs:
-      - job: configure-gcc-7-gmxapi-release
-        artifacts: true
-    only:
-      refs:
-        - web
-        - schedules
-        - triggers
-      variables:
-        - $GROMACS_RELEASE
+      - $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
+  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
+  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:
-        BUILD_DIR: release-builds-gcc
-    needs:
-      - job: configure-gcc-8-release
-        artifacts: true
-    only:
-      refs:
-        - web
-        - schedules
-        - triggers
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 build-clang-7-release:
-    extends:
-      - .build-clang
-      - .clang7-template
-    stage: release-build
+  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:
-        BUILD_DIR: release-builds-clang
-    needs:
-      - job: configure-clang-7-release
-        artifacts: true
-    only:
-      refs:
-        - web
-        - schedules
-        - triggers
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 build-clang-7-gmxapi-release:
-    extends:
-      - .build-clang
-      - .gmxapi-extra-installs
-      - .clang7-template
-    stage: release-build
+  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:
-        BUILD_DIR: release-builds-clang
-    needs:
-      - job: configure-clang-7-gmxapi-release
-        artifacts: true
-    only:
-      refs:
-        - web
-        - schedules
-        - triggers
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 build-clang-8-release:
-    extends:
-      - .build-clang
-      - .clang8-template
-    stage: release-build
+  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:
-        BUILD_DIR: release-builds-clang
-    needs:
-      - job: configure-clang-8-release
-        artifacts: true
-    only:
-      refs:
-        - web
-        - schedules
-        - triggers
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 webpage-binary-release:
-    extends:
-      - .build-docs-binary
-      - .gmxapi-extra-installs
-    stage: release-build
-    needs:
-      - job: webpage-configure-release
-        artifacts: true
+  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:
-        BUILD_DIR: release-doc-builds
-    only:
-      refs:
-        - triggers
-        - web
-        - schedules
-      variables:
-        - $GROMACS_RELEASE
+      - $GROMACS_RELEASE
 
 test-gcc-7-release:
-    extends:
-      - .test-gcc
-      - .gcc7-template
-    stage: release-tests
+  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:
-        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
+      - $GROMACS_RELEASE
 
 test-gcc-7-gmxapi-release:
-    extends:
-      - .test-gcc
-      - .gmxapi-extra-installs
-      - .gcc7-template
-    stage: release-tests
+  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:
-        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
+      - $GROMACS_RELEASE
 
 test-gcc-7-double-release:
-    extends:
-      - .test-gcc
-      - .gcc7-template
-    stage: release-tests
+  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:
-        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
+      - $GROMACS_RELEASE
 
 test-gcc-8-release:
-    extends:
-      - .test-gcc
-      - .gcc8-template
-    stage: release-tests
+  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:
-        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
+      - $GROMACS_RELEASE
 
 test-clang-7-release:
-    extends:
-      - .test-clang
-      - .clang7-template
-    stage: release-tests
+  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:
-        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
+      - $GROMACS_RELEASE
 
 test-clang-7-gmxapi-release:
-    extends:
-      - .test-clang
-      - .gmxapi-extra-installs
-      - .clang7-template
-    stage: release-tests
+  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:
-        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
+      - $GROMACS_RELEASE
 
 test-clang-8-release:
-    extends:
-      - .test-clang
-      - .clang8-template
-    stage: release-tests
+  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:
-        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
+      - $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:
@@ -1475,32 +1660,32 @@ webpage-build-release:
     variables:
       - $GROMACS_RELEASE
   variables:
-      BUILD_DIR: release-doc-builds
+    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
+  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