diff --git a/src/extractors.test.ts b/src/extractors.test.ts index a8d0d7d..101b2b1 100644 --- a/src/extractors.test.ts +++ b/src/extractors.test.ts @@ -384,6 +384,35 @@ describe("commit message magic word behavior", () => { }); }); +describe("revert branch handling", () => { + it("blocks extraction from merge commit with revert branch name", () => { + const result = extractLinearIssueIdentifiersForCommit({ + sha: "abc", + branchName: "revert-571-romain/bac-39", + message: "Merge pull request #572 from org/revert-571-romain/bac-39", + }); + expect(result).toEqual([]); + }); + + it("blocks extraction when revert branch has multiple identifiers", () => { + const result = extractLinearIssueIdentifiersForCommit({ + sha: "abc", + branchName: "revert-571-romain/drive-320-and-drive-321", + message: null, + }); + expect(result).toEqual([]); + }); + + it("blocks PR number extraction from revert branch", () => { + const result = extractPullRequestNumbersForCommit({ + sha: "abc", + branchName: "revert-571-romain/bac-39", + message: "Merge pull request #572 from org/revert-571-romain/bac-39", + }); + expect(result).toEqual([]); + }); +}); + describe("extractPullRequestNumbersForCommit", () => { // Messages that should extract PR numbers it.each([ diff --git a/src/extractors.ts b/src/extractors.ts index 66cc8b9..f030f37 100644 --- a/src/extractors.ts +++ b/src/extractors.ts @@ -134,6 +134,13 @@ export function extractLinearIssueIdentifiersForCommit(commit: CommitContext): s return []; } + // GitHub auto-generates branch names like "revert-571-romain/bac-39" for revert PRs. + // Block extraction to prevent the original issue identifier from being added to the release. + if (/(^|\/)revert-\d+-/i.test(commit.branchName ?? "")) { + log(`Skipping revert branch ${commit.branchName} for commit ${commit.sha}`); + return []; + } + const found = new Map(); // Branch name: extract all matches (branch names are always intentional) @@ -172,6 +179,12 @@ export function extractPullRequestNumbersForCommit(commit: CommitContext): numbe return []; } + // Skip merge commits of revert PRs — branch name like "revert-571-romain/bac-39" + if (/(^|\/)revert-\d+-/i.test(commit.branchName ?? "")) { + log(`Skipping revert merge commit ${commit.sha}`); + return []; + } + const prNumbers: number[] = []; // GitHub squash: "Title (#123)" - must be at end of title (first line)