diff options
author | Douglas Wilson <douglas.wilson@gmail.com> | 2021-03-18 09:29:28 +0000 |
---|---|---|
committer | Matthew Pickering <matthewtpickering@gmail.com> | 2021-06-23 08:52:26 +0100 |
commit | 633bbc1fd4762a2bb73ba1c5b9e0c279f1dd3c40 (patch) | |
tree | 6817d9594d521902fd15c1bc82f0d31e00f67768 /.gitlab-ci.yml | |
parent | 8fba28ec51f9aaaa396b8afb2a3ba8984eabe38e (diff) | |
download | haskell-633bbc1fd4762a2bb73ba1c5b9e0c279f1dd3c40.tar.gz |
ci: Don't allow the nightly pipeline to be interrupted.
Since 58cfcc65 the default for jobs has been "interruptible", this means
that when new commits are pushed to a branch which already has a running
pipeline then the old pipelines for this branch are cancelled.
This includes the master branch, and in particular, new commits merged
to the master branch will cancel the nightly job.
The semantics of pipeline cancelling are actually a bit more complicated
though. The interruptible flag is *per job*, but once a pipeline has run
*any* non-interruptible job, then the whole pipeline is considered
non-interruptible (ref
https://gitlab.com/gitlab-org/gitlab/-/issues/32837). This leads to the
hack in this MR where by default all jobs are `interruptible: True`, but
for pipelines we definitely want to run, there is a dummy job which
happens first, which is `interreuptible: False`. This has the effect of
dirtying the whole pipeline and preventing another push to master from
cancelling it.
For now, this patch solves the immediate problem of making sure nightly
jobs are not cancelled.
In the future, we may want to enable this job also for the master
branch, making that change might mean we need more CI capacity than
currently available.
[skip ci]
Ticket: #19554
Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com>
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r-- | .gitlab-ci.yml | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b0a767eac2..eaa577a1a2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -42,6 +42,7 @@ default: interruptible: true stages: + - not-interruptible - tool-lint # Source linting of the tools - quick-build # A very quick smoke-test to weed out broken commits - full-build # Build all the things @@ -106,6 +107,49 @@ workflow: # x86_64-linux to ensure low-latency availability. # +#### +# HACK +### +# +# Since 58cfcc65 the default for jobs has been "interruptible", this means +# that when new commits are pushed to a branch which already has a running +# pipeline then the old pipelines for this branch are cancelled. +# +# This includes the master branch, and in particular, new commits merged +# to the master branch will cancel the nightly job. +# +# The semantics of pipeline cancelling are actually a bit more complicated +# though. The interruptible flag is *per job*, but once a pipeline has run +# *any* non-interruptible job, then the whole pipeline is considered +# non-interruptible (ref +# https://gitlab.com/gitlab-org/gitlab/-/issues/32837). This leads to the +# hack in this MR where by default all jobs are `interruptible: True`, but +# for pipelines we definitely want to run, there is a dummy job which +# happens first, which is `interreuptible: False`. This has the effect of +# dirtying the whole pipeline and +# +# For now, this patch solves the immediate problem of making sure nightly +# jobs are not cancelled. +# In the future, we may want to enable this job also for the master +# branch, making that change might mean we need more CI capacity than +# currently available. + + +not-interruptible: + stage: not-interruptible + script: "true" + interruptible: false + image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV" + tags: + - lint + rules: +# - if: '$CI_COMMIT_BRANCH == "master"' +# when: always + - if: $NIGHTLY + when: always + + + ############################################################ # tool linting |