From 8a853ce978c5a5480cc25ad8e93b78656066b8a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=B8=96=E8=80=80?= Date: Fri, 21 Aug 2026 00:32:57 +0800 Subject: [PATCH] fix(release): accept both Memmy release branch formats --- .github/workflows/github-draft-release-v2.yml | 9 +++++---- tests/release-workflow.test.ts | 12 ++++++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.github/workflows/github-draft-release-v2.yml b/.github/workflows/github-draft-release-v2.yml index ab71a7cbe..fc180d83f 100644 --- a/.github/workflows/github-draft-release-v2.yml +++ b/.github/workflows/github-draft-release-v2.yml @@ -40,7 +40,8 @@ jobs: github.event_name == 'workflow_dispatch' || (github.event.pull_request.merged == true && github.event.pull_request.head.repo.full_name == github.repository && - startsWith(github.event.pull_request.head.ref, 'release/v')) + (startsWith(github.event.pull_request.head.ref, 'v') || + startsWith(github.event.pull_request.head.ref, 'release/v'))) concurrency: # Tag and Draft Release mutations are repository-global. Queue automatic # and manual recovery runs so they cannot mutate assets concurrently. @@ -69,11 +70,11 @@ jobs: create_draft="false" manual_target_sha_supplied="false" if [[ "$EVENT_NAME" == "pull_request_target" ]]; then - if [[ ! "$PR_HEAD_REF" =~ ^release/v((0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*))$ ]]; then - echo "Release branch must match release/vX.Y.Z" >&2 + if [[ ! "$PR_HEAD_REF" =~ ^(release/)?v((0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*))$ ]]; then + echo "Release branch must match vX.Y.Z or release/vX.Y.Z" >&2 exit 1 fi - version="${BASH_REMATCH[1]}" + version="${BASH_REMATCH[2]}" target_sha="$PR_MERGE_SHA" preflight_level="full" create_draft="true" diff --git a/tests/release-workflow.test.ts b/tests/release-workflow.test.ts index e2492b490..dc0b95195 100644 --- a/tests/release-workflow.test.ts +++ b/tests/release-workflow.test.ts @@ -233,7 +233,7 @@ describe("GitHub Draft Release v2 workflow", () => { } }); - it("creates Draft Releases only from merged release/vX.Y.Z PRs and keeps manual fallback", () => { + it("creates Draft Releases only from merged vX.Y.Z or release/vX.Y.Z PRs and keeps manual fallback", () => { expect(draftWorkflow.on.pull_request_target).toEqual({ types: ["closed"], branches: ["main"], @@ -252,17 +252,17 @@ describe("GitHub Draft Release v2 workflow", () => { "github.event_name == 'workflow_dispatch' || " + "(github.event.pull_request.merged == true && " + "github.event.pull_request.head.repo.full_name == github.repository && " + - "startsWith(github.event.pull_request.head.ref, 'release/v'))", + "(startsWith(github.event.pull_request.head.ref, 'v') || " + + "startsWith(github.event.pull_request.head.ref, 'release/v')))", ); const resolve = draftScript("Resolve and validate release"); expect(resolve).toContain('if [[ "$EVENT_NAME" == "pull_request_target" ]]'); expect(resolve).toContain( - "^release/v((0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*))$", + "^(release/)?v((0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*))$", ); - expect(resolve).toContain("Release branch must match release/vX.Y.Z"); - expect(resolve).not.toContain("vX.Y.Z or release/vX.Y.Z"); - expect(resolve).toContain('version="${BASH_REMATCH[1]}"'); + expect(resolve).toContain("Release branch must match vX.Y.Z or release/vX.Y.Z"); + expect(resolve).toContain('version="${BASH_REMATCH[2]}"'); expect(resolve).toContain('target_sha="$PR_MERGE_SHA"'); expect(resolve).toContain('preflight_level="full"'); expect(resolve).toContain('create_draft="true"');