keeweb/util/extract-release-notes.js

41 lines
1.4 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const version = process.argv
.filter((arg) => arg.startsWith('--version='))
.map((arg) => arg.replace('--version=', ''))[0];
if (!version) {
throw new Error('No version, launch with --version=1.2.3');
}
const output = process.argv
.filter((arg) => arg.startsWith('--output='))
.map((arg) => arg.replace('--output=', ''))[0];
if (!output) {
throw new Error('No output file, launch with --output=path/to/output-file.md');
}
// eslint-disable-next-line no-console
console.log(`Reading release notes for v${version}`);
const releaseNotesPath = path.join(__dirname, '../release-notes.md');
const releaseNotes = fs.readFileSync(releaseNotesPath, 'utf8');
const regex = new RegExp(`#####\\s+v${version.replace(/\./g, '\\.')}.*?\n([\\s\\S]*?)\n#####`);
const match = releaseNotes.match(regex);
if (!match) {
throw new Error(`Release notes for v${version} not found`);
}
const bodyReleaseNotes = match[1].trim().replace(/\s*\n/g, '\n');
const body = `${bodyReleaseNotes}
Want to keep releases happening? Donate to KeeWeb on [OpenCollective](https://opencollective.com/keeweb) or [GitHub](https://github.com/sponsors/keeweb). Thank you!`;
fs.mkdirSync(path.dirname(output), { recursive: true });
fs.writeFileSync(output, body);
// eslint-disable-next-line no-console
console.log(`Saved release notes for v${version} to ${output}`);