[GitHub Actions] リリースノートを自動生成する際にハマったことのメモ
概要
GitHub リポジトリでリリースする際、 Generate release notes
という機能を使うことが出来ます。
これを使うと、リリース内容の入力欄にマージされたPull Request の一覧を記入してくれるので、入力の手間を軽減出来ます。
この機能はGitHub REST API として提供されているため、コードとして実装することも可能です。 それを応用して、下記Pull Request のように「説明」欄を自動入力するGitHub Actions を整備しました。
https://github.com/tshion/yumemi-inc_android-engineer-codecheck/pull/186
その作業の過程で詰まったことなどをメモしたいと思います。
詰まったこと
1. Generate release notes
だけしたい場合はREST API を使う
GitHub のUI では、GitHub Release を作成する際に
ボタン Generate release notes
をクリックすることでリリース内容を自動生成してくれます。
GitHub Release を作成せずに Generate release notes
のみ行いたい場合は、
下記のGitHub REST API を使うことで実現できます。
Generate release notes content for a release
2. GitHub CLI に直接 Generate release notes
を実行できるコマンドは無い
GitHub CLI では、リリース関連のコマンドとして下記が提供されています。
gh release create
gh release delete
gh release delete-asset
gh release download
gh release edit
gh release list
gh release upload
gh release view
GitHub Release の作成時なら gh release create --generate-notes
とすることで自動生成されます。
しかし作成しない場合は Generate release notes
に相当するものが無いため、
下記のようにREST API 経由で操作する必要があります。
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/OWNER/REPO/releases/generate-notes \
-f "tag_name=v1.0.0" -f "target_commitish=main" -f "previous_tag_name=v0.9.2" -f "configuration_file_path=.github/custom_release_config.yml
3. 存在しないGit タグを指定すると、最新のメジャーバージョンとの変更点が表示される
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/tshion/apply-git-user/releases/generate-notes" \
-f "tag_name=preview"
例えば上記を実行すると、最新バージョンではなく、最新のメジャーバージョンとの変更点が表示されます。
存在しないGit タグを指定した際、最新バージョンとの比較をする場合は下記の方法で実現できます。
- パラメータ
target_commitish
にGit タグを付与するブランチ を指定する - パラメータ
previous_tag_name
に比較したいGit タグを指定する