これはなに
git のタグをプッシュした際に gren と GitHub Actions を使いリリースノートを自動生成するワークフローを作成する手順をまとめたもの。
tagのプッシュをトリガーにGitHub Actions を実行する
tagのプッシュをトリガーにするには以下のようにすると実現することができます。
name: XXX
on:
push:
tags:
- 'v*'
workflow_dispatch:
GitHub Actions では他にも push や プルリク作成、スケジュール実行などの方法でワークフローを開始することができます。
gren を使いリリースノートを作成する
リリースノートの作成を自動化するには、もとの情報を引っ張ってくる必要があります。
選択肢としては、GitHubのIssueとコミット履歴があったのですが Issue の方が重要な情報を記述していることや、コミット履歴だと順番がごちゃごちゃになる可能性があることがから今回は Issueの情報を元にリリースノートを作成しようと思います。
自前で作ることもできますが、今回は gren を使います。
GREN_GITHUB_TOKEN
にトークンをセットして gren release
とコマンドを実行することで直近のタグと前回のタグの間にクローズされたIssueをまとめてくれます。
Issue以外にもコミット履歴を元に生成したり他にもオプションがあるため好みに合わせてリリースノートをカスタマイズできます。
gren を GitHub Actions に組み込む
GitHub Actions に組み込むためには gren が node.js に依存しているため設定を追加してコマンドw実行します。
最終的には以下のようになりました。
name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
note:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
- name: Install Gren
run: npm install github-release-notes -g
- name: Create a release
run: gren release --username=xxx --repo=xxx--tags=${GITHUB_REF#refs/tags/}
env:
GREN_GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
--tags
を指定しないと連続でタグを作成プッシュしたときに動作しなかったため明示的にバージョンを指定してコマンドを実行しています。
以下のようにリリースが自動生成されます。Issueが紐づき求めていた挙動を実現できました。
まとめ
- GitHub Actions を使って自動的にリリースノートを作成した
- gren では Issueやコミットログを元にリリースノートを作成できる
サンプルも作成したのでよければ参考にしてください
https://github.com/decoch/gren-example