From 06739bf0565ab1f8ce02fc61ec3de3fe6334663a Mon Sep 17 00:00:00 2001 From: Kalvin Chau Date: Wed, 12 Aug 2026 18:58:14 -0700 Subject: [PATCH] fix: accept github squash release titles allow release publishing to accept github squash titles with the matching pr number while preserving strict source validation. --- scripts/release/release.mjs | 5 ++++- scripts/release/tests/release-tooling.test.mjs | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/release/release.mjs b/scripts/release/release.mjs index cf89abc9e..dc7425a6c 100755 --- a/scripts/release/release.mjs +++ b/scripts/release/release.mjs @@ -774,7 +774,10 @@ async function publish(version) { const mergeTitle = run("git", ["show", "-s", "--format=%s", mergeSha], { cwd: root, }); - if (mergeTitle !== subject) fail(`merge commit title is not '${subject}'`); + const githubMergeTitle = `${subject} (#${pr.number})`; + if (mergeTitle !== subject && mergeTitle !== githubMergeTitle) { + fail(`merge commit title does not match PR #${pr.number}`); + } await checkVersions({ root, expected: version, ref: mergeSha }); const sourceConfig = await releaseConfig(gitReader(root, mergeSha)); validateMinimumPublicVersion(version, sourceConfig); diff --git a/scripts/release/tests/release-tooling.test.mjs b/scripts/release/tests/release-tooling.test.mjs index 9126c25a5..f176f07e9 100644 --- a/scripts/release/tests/release-tooling.test.mjs +++ b/scripts/release/tests/release-tooling.test.mjs @@ -285,9 +285,9 @@ describe("release publishing", () => { const releaseHead = f.git(["rev-parse", "HEAD"]).stdout.trim(); expect(f.git(["switch", "main"]).status).toBe(0); expect(f.git(["merge", "--squash", "release/v0.6.0-rc.1"]).status).toBe(0); - expect(f.git(["commit", "-m", "chore: release v0.6.0-rc.1"]).status).toBe( - 0, - ); + expect( + f.git(["commit", "-m", "chore: release v0.6.0-rc.1 (#123)"]).status, + ).toBe(0); const mergeSha = f.git(["rev-parse", "HEAD"]).stdout.trim(); expect(mergeSha).not.toBe(releaseHead); expect(f.git(["push", "origin", "main"]).status).toBe(0);