@@ -334,13 +334,27 @@ export default class ReleasePromotion extends Session {
334
334
335
335
const releaseInfo = isLTS ? `${ ltsCodename } (LTS)` : '(Current)' ;
336
336
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
+ }
344
358
}
345
359
346
360
// Set up the branch so that nightly builds are produced with the next
0 commit comments