.github/workflows/website.yml sets a workflow-level concurrency block (lines 19-21):
concurrency:
group: pages-${{ github.ref }}
cancel-in-progress: true
Three jobs opt out of cancellation with their own block on a different group:
deploy-production (lines 94-96)
deploy-preview (lines 135-137)
cleanup-preview (lines 217-219)
concurrency:
group: gh-pages-deploy
cancel-in-progress: false
Job-level concurrency doesn't override workflow-level. Both apply. The job-level group only protects against cancellation from gh-pages-deploy, so a new run on the same ref still cancels the whole in-flight run, deploy jobs included.
Effect
Rapid pushes cancel a deploy mid-flight. Worst case is deploy-production on main, where a cancelled gh-pages push can leave that branch partially updated. This is precisely what cancel-in-progress: false was meant to prevent.
Suggested fix
Scope the workflow-level group so it doesn't cover the deploy jobs, or drop it and let each job declare its own.
.github/workflows/website.ymlsets a workflow-level concurrency block (lines 19-21):Three jobs opt out of cancellation with their own block on a different group:
deploy-production(lines 94-96)deploy-preview(lines 135-137)cleanup-preview(lines 217-219)Job-level concurrency doesn't override workflow-level. Both apply. The job-level group only protects against cancellation from
gh-pages-deploy, so a new run on the same ref still cancels the whole in-flight run, deploy jobs included.Effect
Rapid pushes cancel a deploy mid-flight. Worst case is
deploy-productiononmain, where a cancelledgh-pagespush can leave that branch partially updated. This is precisely whatcancel-in-progress: falsewas meant to prevent.Suggested fix
Scope the workflow-level group so it doesn't cover the deploy jobs, or drop it and let each job declare its own.