@@ -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