@ -1,6 +1,8 @@
#!/usr/bin/env node
const fs = require ( 'fs' ) . promises ;
const assert = require ( 'assert' ) . strict ;
const path = require ( 'path' ) ;
const { version } = require ( '../app/manifest/_base.json' ) ;
const runCommand = require ( './lib/runCommand' ) ;
const URL = 'https://github.com/MetaMask/metamask-extension' ;
@ -18,6 +20,7 @@ async function main() {
'--tags' ,
mostRecentTagCommitHash ,
] ) ;
assert . equal ( mostRecentTag [ 0 ] , 'v' , 'Most recent tag should start with v' ) ;
const commitsSinceLastRelease = await runCommand ( 'git' , [
'rev-list' ,
@ -67,11 +70,28 @@ async function main() {
const changelogFilename = path . resolve ( _ _dirname , '..' , 'CHANGELOG.md' ) ;
const changelog = await fs . readFile ( changelogFilename , { encoding : 'utf8' } ) ;
const changelogLines = changelog . split ( '\n' ) ;
const releaseHeaderIndex = changelogLines . findIndex (
( line ) => line === '## Current Develop Branch' ,
// remove the "v" prefix
const mostRecentVersion = mostRecentTag . slice ( 1 ) ;
const isReleaseCandidate = mostRecentVersion !== version ;
const versionHeader = ` ## ${ version } ` ;
const currentDevelopBranchHeader = '## Current Develop Branch' ;
const currentReleaseHeaderPattern = isReleaseCandidate
? // This ensures this doesn't match on a version with a suffix
// e.g. v9.0.0 should not match on the header v9.0.0-beta.0
` ${ versionHeader } $ | ${ versionHeader } \\ s `
: currentDevelopBranchHeader ;
const releaseHeaderIndex = changelogLines . findIndex ( ( line ) =>
line . match ( new RegExp ( currentReleaseHeaderPattern , 'u' ) ) ,
) ;
if ( releaseHeaderIndex === - 1 ) {
throw new Error ( 'Failed to find release header' ) ;
throw new Error (
` Failed to find release header ' ${
isReleaseCandidate ? versionHeader : currentDevelopBranchHeader
} ' ` ,
) ;
}
changelogLines . splice ( releaseHeaderIndex + 1 , 0 , ... changelogEntries ) ;
const updatedChangelog = changelogLines . join ( '\n' ) ;