regressiontests:prepare:
extends:
- .variables:default
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
cache: {}
image: gromacs/ci-docs-llvm-master
stage: configure-build
- .gromacs:base:configure
- .use-gcc:base
- .use-opencl
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
variables:
CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
- .gromacs:base:configure
- .use-gcc:base
- .use-cuda
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
variables:
CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
- .use-gcc:base
- .use-cuda
- .use-mpi
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
variables:
CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
extends:
- .gromacs:base:configure
- .use-clang:base
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.13.0-llvm-8-tsan-master
variables:
COMPILER_MAJOR_VERSION: 8
extends:
- .gromacs:base:configure
- .use-clang:base
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.13.0-llvm-8-tsan-master
variables:
COMPILER_MAJOR_VERSION: 8
- .gromacs:base:build
- .before_script:default
- .use-ccache
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
needs:
- job: gromacs:gcc-7:configure
- .gromacs:base:build
- .before_script:default
- .use-ccache
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
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:base:build
- .before_script:default
- .use-ccache
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
needs:
- job: gromacs:gcc-8-cuda-11.0:configureMPI
- .gromacs:base:build
- .use-clang:base
- .use-ccache
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.13.0-llvm-8-tsan-master
needs:
- job: gromacs:clang-TSAN:configure
- .gromacs:base:build
- .use-clang:base
- .use-ccache
- - .rules:merge-requests
+ - .rules:merge-and-post-merge-acceptance
image: gromacs/cmake-3.13.0-llvm-8-tsan-master
tags:
- k8s-scilifelab
gromacs:gcc-8-cuda-11.0:test-gpucommupd:
extends:
- .gromacs:base:test
- - .rules:merge-requests
+ - .rules:post-merge-acceptance
image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
variables:
KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
gromacs:clang-TSAN:test:
extends:
- .gromacs:base:test
- - .rules:merge-requests
+ - .rules:post-merge-acceptance
image: gromacs/cmake-3.13.0-llvm-8-tsan-master
needs:
- job: gromacs:clang-TSAN:build
extends:
- .gromacs:base:test
- .use-clang:base
- - .rules:merge-requests
+ - .rules:post-merge-acceptance
image: gromacs/cmake-3.13.0-llvm-8-tsan-master
tags:
- k8s-scilifelab
gromacs:gcc-7:regressiontest:
extends:
- .gromacs:base:regressiontest
- - .rules:merge-requests
+ - .rules:post-merge-acceptance
image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
variables:
KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
gromacs:gcc-8-cuda-11.0:regressiontest-gpucommupd-tMPI:
extends:
- .gromacs:base:regressiontest
- - .rules:merge-requests
+ - .rules:post-merge-acceptance
image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
variables:
KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
gromacs:gcc-8-cuda-11.0:regressiontest-gpucommupd-MPI:
extends:
- .gromacs:base:regressiontest
- - .rules:merge-requests
+ - .rules:post-merge-acceptance
image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
variables:
KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
gromacs:clang-TSAN:regressiontest:
extends:
- .gromacs:base:regressiontest
- - .rules:merge-requests
+ - .rules:post-merge-acceptance
image: gromacs/cmake-3.13.0-llvm-8-tsan-master
tags:
- k8s-scilifelab
if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
+# Exclude from selective "schedule" pipelines, e.g. just those
+# that should run the post-merge-acceptance jobs.
+.rules-element:if-post-merge-acceptance-then-never: &if-post-merge-acceptance-then-never
+ if: '$POST_MERGE_ACCEPTANCE'
+ when: never
+
# Include in pipelines triggered in the merge request process.
.rules-element:if-mr-then-always: &if-mr-then-always
if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
+# Include job when running for merge request or when pushing to protected branch.
+.rules-element:if-post-merge-acceptance-or-mr-then-always: &if-post-merge-acceptance-or-mr-then-always
+ if: '$CI_PIPELINE_SOURCE == "merge_request_event" ||
+ ($CI_PIPELINE_SOURCE == "push" &&
+ ($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "release-*"))'
+ when: always
+
+# Include job only for post submit push
+.rules-element:if-post-merge-acceptance-then-always: &if-post-merge-acceptance-then-always
+ if: '$CI_PIPELINE_SOURCE == "push" &&
+ ($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "release-*")'
+ when: always
+
# When composing a rule set, note that the first matching rule is applied.
# If you want later rules to be evaluated, you must make sure that the *if*
# clause of the earlier rules does not match. This may require inverting the
.rules:basic-push:
rules:
- *if-release-then-never
+ - *if-mr-then-never
+ - *if-post-merge-acceptance-then-never
- *if-web-then-always
- *if-push-then-always
- *if-schedule-then-always
+
+# Jobs to run after successful merge of a new commit.
+# Only run on GROMACS infrastructure and only when merging into
+# the master or release branches.
+.rules:post-merge-acceptance:
+ rules:
+ - *if-not-gromacs-then-never
+ - *if-release-then-never
- *if-mr-then-never
+ - *if-post-merge-acceptance-then-always
+ - *if-web-then-always
+ - *if-schedule-then-always
# Jobs that run for merge requests and schedules, but not when GROMACS_RELEASE
-# is set. Excludes non-gromacs projects.
+# is set. Excludes non-GROMACS projects.
# More elaborate rule sets for merge requests should be based on the same sequence.
.rules:merge-requests:
rules:
- *if-not-gromacs-then-never
- *if-release-then-never
- - *if-web-then-always
- *if-push-then-never
+ - *if-post-merge-acceptance-then-never
+ - *if-web-then-always
- *if-schedule-then-always
- *if-mr-then-always
+# Jobs running both in post submit and for merge requests
+# Excludes non-GROMACS projects.
+.rules:merge-and-post-merge-acceptance:
+ rules:
+ - *if-not-gromacs-then-never
+ - *if-release-then-never
+ - *if-web-then-always
+ - *if-schedule-then-always
+ - *if-post-merge-acceptance-or-mr-then-always
+
# Jobs that run for merge requests and schedules for branch `master`,
# but not when GROMACS_RELEASE is set.
# Excludes non-gromacs projects.
rules:
- *if-not-gromacs-then-never
- *if-release-then-never
+ - *if-post-merge-acceptance-then-never
- *if-web-then-always
# This rule catches "push" and other events in branches other than `master`
# but allows merge_request_events for merge requests targeting master.
rules:
- *if-not-gromacs-then-never
- *if-release-then-never
+ - *if-post-merge-acceptance-then-never
# This next rule catches "push" and other events in branches other than `release-2020`
# but allows merge_request_events for merge requests targeting `release-2020`.
# This rule is before "web" so the web interface won't include jobs that can't succeed
rules:
- *if-not-gromacs-then-never
- *if-not-release-then-never
+ - *if-post-merge-acceptance-then-never
- *if-web-then-always
- *if-schedule-then-always
rules:
- *if-not-gromacs-then-never
- *if-release-then-never
+ - *if-post-merge-acceptance-then-never
- *if-web-then-always
- *if-schedule-then-always
Nightly scheduled pipelines run against ``master`` and *release* branches in
the GROMACS repository.
+Running post-merge-acceptance pipelines
+"""""""""""""""""""""""""""""""""""""""
+
+The Gitlab CI for |Gromacs| runs a set of jobs by default only after a MR has been
+accepted and the resulting commit is included in the target branch if it is ``master``
+or one of the *release* branches. Those jobs can be triggered manually using the
+``POST_MERGE_ACCEPTANCE`` input variable documented below when executing a new pipeline
+through the Gitlab web interface.
+
Global templates
~~~~~~~~~~~~~~~~
allow for merge requests that require updated regression tests with
valid CI tests.
+ POST_MERGE_ACCEPTANCE
+ Read-only environment variable that indicates that only jobs scheduled to
+ run after a commit has been merged into its target branch should be executed.
+ Can be set to run pipelines through the web interface or as schedules.
+ For use please see the *rules* mix-ins in :file:`admin/gitlab-ci/global.gitlab-ci.yml`.
+
.. todo:: Define common variables.
``BUILD_DIR``, ``INSTALL_DIR``, ``CACHE_FALLBACK_KEY``, ...