From c58633f9f167b5894053baad4c82ce3eca69c4a6 Mon Sep 17 00:00:00 2001 From: Shinrai Date: Mon, 3 Aug 2026 21:43:23 -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 | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c1c49eb..b18b558 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -131,14 +131,27 @@ on: required: false default: true -# Cancel superseded runs on feature branches; keep every master/main run as the -# permanent green record. Keyed on github.ref so push and pull_request events -# for the same branch share a group (the `if:` on the ci job already prevents -# non-fork PR sync from running, but the shared group guards against edge -# cases). +# 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 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 }} - cancel-in-progress: ${{ github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main' }} + 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 # `workflow-ci.yml` reaches across its branches: