Skip to content

Commit 55e4a79

Browse files
committed
allow reusing existing tag as long as it points to the correct commit
1 parent c3fb51e commit 55e4a79

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

lib/promote_release.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,27 @@ export default class ReleasePromotion extends Session {
334334

335335
const releaseInfo = isLTS ? `${ltsCodename} (LTS)` : '(Current)';
336336

337-
await new Promise((resolve, reject) => {
338-
const api = new gst.API(process.cwd());
339-
api.sign(`v${version}`, releaseCommitSha, {
340-
insecure: false,
341-
m: `${this.date} Node.js v${version} ${releaseInfo} Release`
342-
}, (err) => err ? reject(err) : resolve());
343-
});
337+
try {
338+
await new Promise((resolve, reject) => {
339+
const api = new gst.API(process.cwd());
340+
api.sign(`v${version}`, releaseCommitSha, {
341+
insecure: false,
342+
m: `${this.date} Node.js v${version} ${releaseInfo} Release`
343+
}, (err) => err ? reject(err) : resolve());
344+
});
345+
} catch (err) {
346+
const tagCommitSHA = await forceRunAsync('git', [
347+
'rev-parse', `refs/tags/v${version}^0`
348+
], { captureStdout: true, ignoreFailure: false });
349+
if (tagCommitSHA.trim() !== releaseCommitSha) {
350+
throw new Error(
351+
`Existing version tag points to ${tagCommitSHA.trim()} instead of ${releaseCommitSha}`,
352+
{ cause: err }
353+
);
354+
}
355+
await forceRunAsync('git', ['tag', '--verify', `v${version}`], { ignoreFailure: false });
356+
this.cli.info('Using the existing tag');
357+
}
344358
}
345359

346360
// Set up the branch so that nightly builds are produced with the next

0 commit comments

Comments
 (0)