fix(release): normalize appended PR suffixes (#120971)

This commit is contained in:
Vincent Koc
2026-08-09 23:21:32 +08:00
committed by GitHub
parent 9a96375e60
commit 41423753e0
2 changed files with 12 additions and 6 deletions
@@ -684,7 +684,7 @@ export function contributionRecordTarget(section) {
}
export function pullRequestTitleFromCommitSubject(subject, number) {
const match = subject.match(/^(?<title>\S(?:.*?\S)?)(?<pr> \(#(?<number>[1-9]\d*)\))\k<pr>*$/u);
const match = subject.match(/^(?<title>\S(?:.*\S)?)(?<! \(#\d+\)) \(#(?<number>[1-9]\d*)\)$/u);
return match?.groups?.number === String(number) ? match.groups.title : undefined;
}
@@ -839,7 +839,7 @@ function appendReferences(references, additions) {
function normalizedCommitSubject(subject) {
return subject
.replace(/\s+\(#\d+\)\s*$/, "")
.replace(/(?:\s+\(#\d+\))+\s*$/, "")
.replace(/\s+/g, " ")
.trim()
.toLowerCase();
+10 -4
View File
@@ -58,13 +58,13 @@ describe("release-note verification", () => {
});
it("accepts only canonical commit PR suffixes", () => {
const repeated = "Fix status (#102147) (#102147)";
const distinct = "Fix status (#120582) (#120584)";
expect(pullRequestTitleFromCommitSubject("Fix status (#102147)", 102147)).toBe("Fix status");
expect(pullRequestTitleFromCommitSubject("Fix status (#102147) (#102147)", 102147)).toBe(
"Fix status",
);
expect(pullRequestTitleFromCommitSubject(repeated, 102147)).toBeUndefined();
expect(pullRequestTitleFromCommitSubject(distinct, 120584)).toBeUndefined();
expect(pullRequestTitleFromCommitSubject("Fix status(#102147)", 102147)).toBeUndefined();
expect(pullRequestTitleFromCommitSubject("Fix status (#0102147)", 102147)).toBeUndefined();
expect(pullRequestTitleFromCommitSubject("Fix status (#0)", 0)).toBeUndefined();
expect(pullRequestTitleFromCommitSubject(" Fix status (#102147)", 102147)).toBeUndefined();
expect(pullRequestTitleFromCommitSubject("Fix status (#102147) ", 102147)).toBeUndefined();
expect(pullRequestTitleFromCommitSubject("Fix status (#102148)", 102147)).toBeUndefined();
@@ -481,6 +481,12 @@ describe("release-note verification", () => {
},
]),
).toEqual([mainCommit.hash]);
const backportSubject = "fix(gateway): retain work admission across hosted wizard steps";
mainCommit.subject = `${backportSubject} (#120582)`;
integratedBackport.subject = `${mainCommit.subject} (#120584)`;
expect(canonicalMainCommitMatches(integratedBackport, [mainCommit])).toEqual([mainCommit.hash]);
const malformed = { ...integratedBackport, subject: `${backportSubject}(#120582) (#120584)` };
expect(canonicalMainCommitMatches(malformed, [mainCommit])).toEqual([]);
expect(canonicalPullRequests([456], [123])).toEqual([123]);
});