Shion のもくログ(旧: Shion の技術メモ)

使った技術のメモや、うまくいかなかった事とかを綴ります

PR

[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 タグを指定する

参考文献

PR