From d5039fb5de74eb4542a4c4d1645836be49d1b1b6 Mon Sep 17 00:00:00 2001 From: "Sure Admin (bot)" Date: Thu, 6 Aug 2026 23:08:01 +0200 Subject: [PATCH] fix(ci): avoid bumping prerelease versions on PR branches (#2886) * fix(ci): avoid bumping prerelease versions on PR branches * fix(ci): quote prerelease tag source branch lookup --- .github/workflows/publish.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 6a93d58f1..eacc0b60a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -426,6 +426,8 @@ jobs: steps: - name: Determine source branch for tag id: source_branch + env: + TAG_NAME: ${{ github.ref_name }} run: | # Fetch all branches to find which one contains this tag's commit git init --quiet @@ -436,15 +438,27 @@ jobs: BRANCHES=$(git branch -r --contains ${{ github.sha }} | grep -v HEAD | sed 's/origin\///' | xargs) echo "Branches containing commit: $BRANCHES" - # Prefer non-main branches (release branches) over main + # Prefer the matching release branch over main. Do not select arbitrary + # feature or PR branches that happen to contain the tagged commit. SOURCE_BRANCH="main" + RELEASE_BRANCH="$(printf '%s\n' "$TAG_NAME" | sed -E 's/^v([0-9]+)\.([0-9]+)\..*/v\1.\2-release-branch/')" + for branch in $BRANCHES; do - if [ "$branch" != "main" ] && [ "$branch" != "master" ]; then + if [ "$branch" = "$RELEASE_BRANCH" ]; then SOURCE_BRANCH="$branch" break fi done + if [ "$SOURCE_BRANCH" = "main" ]; then + for branch in $BRANCHES; do + if [[ "$branch" =~ ^v[0-9]+\.[0-9]+-release-branch$ ]]; then + SOURCE_BRANCH="$branch" + break + fi + done + fi + echo "Selected source branch: $SOURCE_BRANCH" echo "branch=$SOURCE_BRANCH" >> $GITHUB_OUTPUT