Fix release notes sync race when release is recreated by another workflow

This commit is contained in:
Mohamed Boudra
2026-04-12 14:01:51 +07:00
parent d1fc271ad4
commit cd4db5d81f
+27 -18
View File
@@ -178,22 +178,8 @@ function main() {
const notesPath = path.join(tempDir, `${targetTag}-notes.md`); const notesPath = path.join(tempDir, `${targetTag}-notes.md`);
writeFileSync(notesPath, notes); writeFileSync(notesPath, notes);
try { const editArgs = ["release", "edit", targetTag, "--repo", args.repo, "--notes-file", notesPath];
if (hasRelease(targetTag, args.repo)) { const createArgs = [
runGh(["release", "edit", targetTag, "--repo", args.repo, "--notes-file", notesPath]);
console.log(`Updated release notes for ${targetTag}.`);
return;
}
if (!args.createIfMissing) {
console.log(
`Release ${targetTag} not found. Skipping because --create-if-missing was not provided.`,
);
return;
}
try {
runGh([
"release", "release",
"create", "create",
targetTag, targetTag,
@@ -205,13 +191,36 @@ function main() {
notesPath, notesPath,
"--verify-tag", "--verify-tag",
...(parseReleaseVersion(releaseInfo.version).isPrerelease ? ["--prerelease"] : []), ...(parseReleaseVersion(releaseInfo.version).isPrerelease ? ["--prerelease"] : []),
]); ];
try {
if (hasRelease(targetTag, args.repo)) {
try {
runGh(editArgs);
console.log(`Updated release notes for ${targetTag}.`);
return;
} catch {
console.warn(
`Edit failed for ${targetTag} (release may have been recreated by another workflow); falling through to create.`,
);
}
}
if (!args.createIfMissing) {
console.log(
`Release ${targetTag} not found. Skipping because --create-if-missing was not provided.`,
);
return;
}
try {
runGh(createArgs);
console.log(`Created release ${targetTag} with changelog notes.`); console.log(`Created release ${targetTag} with changelog notes.`);
} catch (createError) { } catch (createError) {
console.warn( console.warn(
`Release creation failed for ${targetTag}; attempting edit in case another workflow created it concurrently.`, `Release creation failed for ${targetTag}; attempting edit in case another workflow created it concurrently.`,
); );
runGh(["release", "edit", targetTag, "--repo", args.repo, "--notes-file", notesPath]); runGh(editArgs);
console.log(`Updated release notes for ${targetTag} after create race.`); console.log(`Updated release notes for ${targetTag} after create race.`);
if (createError instanceof Error) { if (createError instanceof Error) {