リリースノート作るのは Release Drafter で良さそう

自分の中でやりたいけどやらないことの1つにリリースノート作りがある。

手動で作るのは面倒なので、自動で作成したい。
後は個人で作っている Rails アプリケーションや Go で作った CLI などがあるので、言語とかアプリケーションに依存しない方法で探していました。

とりあえず世にある OSS はどうやって作ってるのかなーというのを見つつ良い方法を探してみた。

そこで出てきたのが Release Drafter でした。

github.com

このツールは "Drafts your next release notes as pull requests are merged into master." と書いてあるように PR をマージすると Github Releases を draft の状態で作りながら Release Note を作ってくれる。

これは Bootstrap でも使われてるようです。
github.com

もともとは Github Apps として作られていたようですが、v5.1.0 から Github Actions での動作もサポートしたようです。

Github Actions で使用することで自分の任意のタイミング (build step が成功したら) で実行できるので既存のワークフローにも入れやすいかなと思い今回はこちらを使用しました。

設定自体はREADMEに書いてあるように .github/release-drafter.yml で設定を編集しつつ Github Actions で下記のような step を追加します。

jobs:
  update_release_draft:
    runs-on: ubuntu-latest
    steps:
      - uses: release-drafter/release-drafter@v5
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

これだけで始められるのでかなり手軽でした。

運用としては下記のような設定を .github/release-drafter.yml に追加しておけば PR のラベルに応じてグループ分けして Github Releases に PR の URL を追加してくれます。

categories:
  - title: '🚀 Features'
    labels:
      - 'feature'
      - 'enhancement'
  - title: '🐛 Bug Fixes'
    labels:
      - 'fix'
      - 'bugfix'
      - 'bug'
  - title: '🧰 Maintenance'
    label: 'chore'

基本的にはこれで終わり。
自分の場合は Go で作った CLI が 新しい Release を作った時に GoReleaser によってビルドしたファイルをReleaseに添付しておりそのタイミングで changelog を GoReleaser によって書き込んでいました。

これでは Release Drafter と機能が重複するで、リリースノートは Release Drafter に任せてビルドされたファイルなどは GoReleaser でアップロードするようにするために GoReleaser の設定で changelog の部分を下記のように skip します。

changelog:
  skip: true

これで自分の管理しているアプリケーションは体験を統一しつつ自動でリリースノートが作れるようになったので悩みの種がひとつへった。