Files
catbus/scripts/release-notes.mjs
T

31 lines
1.3 KiB
JavaScript

// 从 CHANGELOG.md 取出某个版本的说明,作为 GitHub Release 的正文写到 stdout:开头是安装命令,相对链接换成仓库里的绝对地址。
// 用法:node scripts/release-notes.mjs <版本号>。CHANGELOG 里没有这个版本时退出码 1,release.yml 在发布前用它检查。
import { readFileSync } from 'node:fs'
import { fileURLToPath } from 'node:url'
const BLOB = 'https://github.com/cv-cat/catbus/blob/master/'
const version = process.argv[2]
if (!version) {
console.error('用法:node scripts/release-notes.mjs <版本号>')
process.exit(2)
}
const changelog = readFileSync(fileURLToPath(new URL('../CHANGELOG.md', import.meta.url)), 'utf8').replace(/\r\n/g, '\n')
const section = changelog.split(/^## /m).find((s) => s.startsWith(`[${version}]`))
if (!section) {
console.error(`CHANGELOG.md 里没有 ## [${version}],先写好这个版本的更新日志再打 tag`)
process.exit(1)
}
const body = section
.split('\n')
.slice(1)
.filter((line) => !/^\[[^\]]+\]: /.test(line))
.join('\n')
.replace(/^### /gm, '## ')
.replace(/\]\((?!https?:|#)([^)]+)\)/g, (_, path) => `](${BLOB}${path})`)
.trim()
process.stdout.write(`\`\`\`bash\nnpm i -g catbus-cli@${version}\n\`\`\`\n\n${body}\n\n完整的更新日志见 [CHANGELOG.md](${BLOB}CHANGELOG.md)。\n`)