From 8d3be355b7e9ae1180d2c5cade873058141fcd3d Mon Sep 17 00:00:00 2001 From: Shinrai Date: Mon, 3 Aug 2026 21:43:52 -0700 Subject: [PATCH] fix(ci): derive release base in never-supersede concurrency (not hardcoded master/main) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The concurrency group must never supersede release-relevant runs so the release PR posts a green check. The base branch is now DERIVED the same way resolve-release-base does — the CLDMV_RELEASE_BASE var, else the repo's default_branch — instead of the hardcoded refs/heads/master || refs/heads/main. next/hotfixes stay literal (the flow's fixed integration branches) and the release-PR detection (github.head_ref == next/hotfixes) was already base-agnostic. Mirrors the CLDMV/.github core-cicd ci.yml template. --- .github/workflows/ci.yml | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 08c44d3..642eed3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -139,19 +139,23 @@ on: # Concurrency policy, by context: # - FEATURE branches / feature PRs → cancel superseded runs (per-ref group + # cancel-in-progress): a newer push makes the older run redundant. -# - RELEASE-relevant contexts → NEVER superseded. Pushes to -# master/main/next/hotfixes and the next/hotfixes → master/main release PRs -# each get a UNIQUE group per run (run_id appended), so nothing cancels them. -# During the burst of pushes a release makes to next/hotfixes (the feature -# squash, the post-hotfix master→next sync merge, the bot's `chore: bump -# version`), every run completes and posts a GREEN check instead of the -# earlier one being cancelled into a red X on the release PR. A bare -# `cancel-in-progress: false` is NOT enough — GitHub still cancels the middle -# PENDING run when a newer one queues; a unique group avoids all of it. -# github.head_ref is set only on pull_request (the PR's head → next/hotfixes for -# release PRs); github.ref carries the branch on push. +# - RELEASE-relevant contexts → NEVER superseded. Pushes to the release base +# branch (derived: the CLDMV_RELEASE_BASE var → the repo's default branch), +# to next/hotfixes, and the next/hotfixes → base release PRs each get a +# UNIQUE group per run (run_id appended), so nothing cancels them. During +# the burst of pushes a release makes to next/hotfixes (the feature squash, +# the post-hotfix base→next sync merge, the bot's `chore: bump version`), +# every run completes and posts a GREEN check instead of the earlier one +# being cancelled into a red X on the release PR. A bare +# `cancel-in-progress: false` is NOT enough — GitHub still cancels the +# middle PENDING run when a newer one queues; a unique group avoids it. +# The base is NOT hardcoded to master/main — it derives the same way +# resolve-release-base does (CLDMV_RELEASE_BASE override → default_branch). +# next/hotfixes are the flow's fixed integration-branch names. github.head_ref +# is set only on pull_request (the release PR's head → next/hotfixes); +# github.ref carries the branch on push. concurrency: - group: ci-${{ github.workflow }}-${{ github.ref }}${{ (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/next' || github.ref == 'refs/heads/hotfixes' || github.head_ref == 'next' || github.head_ref == 'hotfixes') && format('-{0}', github.run_id) || '' }} + group: ci-${{ github.workflow }}-${{ github.ref }}${{ (github.ref == format('refs/heads/{0}', vars.CLDMV_RELEASE_BASE != '' && vars.CLDMV_RELEASE_BASE || github.event.repository.default_branch) || github.ref == 'refs/heads/next' || github.ref == 'refs/heads/hotfixes' || github.head_ref == 'next' || github.head_ref == 'hotfixes') && format('-{0}', github.run_id) || '' }} cancel-in-progress: true # Workflow-level: matches the broadest write surface the called