デプロイする前にリリースタグを打つ運用をしているんですが、リリースノートに書く内容を自分で集めるのも面倒なので、みんな自動化してるやろと思って調べてみました。
conventional-changelog/conventional-changelog がポピュラーだけど、今回はコミットの列挙じゃなくてGitHubのプルリクエストを列挙したかったので要件に合わず。
tl;dr
lerna-changelogの方が動作がキビキビしてていいけど、PRにタグを打つのも面倒。
なので、下記のPRのforkをビルドしてnpmで公開しました。
github-changelog-generator
- Ruby
- PRからCHANGELOG.mdを自動で生成してくれる
- ラベルがなければ全部のPRを載せてくれる
- ラベルが打ってあると、enhancement, bug fixなどでカテゴリを分けてくれる
- 起動すると全部のPRを取得するので遅い
- キャッシュはするけど、それでも遅い
lerna-changelog
- Node
- PRからチェンジログに書く内容を標準出力へ出してくれる
- PRにラベルがないと対象としない
- どのラベルを対象とするかは設定可能。GitHubのデフォルトのラベルは大体対応している
- デフォルトで最新のタグからHEADまでの取得なので速い
- from, toも指定可能
- PRがかなり放置されているのでアクティブ性は低い
- タグなしも含む挙動にするPRがあるが2019年から放置されている
上記のforkでmasterのHEADを取り込んでやるのが良さそう。やってみる。
やってみた。GitHub Packagesで公開してみましたが、利用する各位が.npmrcで利用するnpmリポジトリの設定とパーソナルアクセストークンの発行が必要なんですね。それだと使いにくいので結局npmでスコープつけて公開にしました。
PRを閲覧する関係で、GitHubのPersonal Access Tokenが必要(必要権限はrepo)なので、 $ export GITHUB_AUTH=...
で登録し、package.jsonにこんな設定を入れると、
"changelog": { "labels": { "unlabeled": "PRs", "dependencies": "Dependabot" }, "wildcardLabel": "unlabeled" }
こんな感じで標準出力に出してくれるので、 PRsとDependabotの所だけリリースタグを打つときのリリースノートに入れるのが便利かなと。
yarn run v1.22.5 $ /home/runner/work/sandbox/sandbox/node_modules/.bin/lerna-changelog ## Unreleased (2021-03-09) #### PRs * [#6](https://github.com/shrkw/sandbox/pull/6) escape line feed character ([@shrkw](https://github.com/shrkw)) #### Dependabot * [#100](https://github.com/shrkw/sandbox/pull/100) Bump @types/react from 17.0.2 to 17.0.3 ([@dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) #### Committers: 1 - Hiroyuki Shirakawa ([@shrkw](https://github.com/shrkw)) - [@dependabot-preview[bot]](https://github.com/apps/dependabot-preview) Done in 0.83s.
タグを打ったあとに、 $ yarn run lerna-changelog --from=v1 --to=v2
に実行するのでも良い。