import conventionalChangelog from 'conventional-changelog' import fs from 'fs' const START_OF_LAST_RELEASE_PATTERN = /(^#+ \[?[0-9]+\.[0-9]+\.[0-9]+| { return new Promise((resolve, reject) => { let oldContent = fs.readFileSync(file, 'utf-8') const oldContentStart = oldContent.search(START_OF_LAST_RELEASE_PATTERN) if (oldContentStart !== -1) { oldContent = oldContent.substring(oldContentStart) } let changelog = '' const changelogStream = conventionalChangelog( { preset: { name: 'conventionalcommits', header: header, types: types, }, tagPrefix: 'v', }, { version: newVersion } ).on('error', function (err) { return reject(err) }) changelogStream.on('data', (buffer) => { changelog += buffer.toString() }) changelogStream.on('end', () => { changelog = changelog.replace(/###\s(\w+)/g, '#### $1').replace(/\n\n\n/g, '\n\n') const finalChangelog = header + '\n' + (changelog + oldContent).replace(/\n+$/, '\n') fs.writeFileSync(file, finalChangelog, 'utf8') return resolve() }) }) } await generateChangelog(process.env.npm_package_version)