kakakakakku blog

Weekly Tech Blog: Keep on Learning!

GitHub リポジトリで「リリースノート」を自動的に作ろう

GitHub にはリリースノートを自動的に作る機能があって,マージされたプルリクエストをまとめたりできる👌 OSS ライブラリで semver に沿ってリリースノートを作るのも便利だし,仕事で使っているプライベートリポジトリでも「いつどのプルリクエストがデプロイされたのか」をパッと確認することができて便利❗️

機能を試すだけなら簡単で,GitHub リポジトリで Releases > Draft a new release > Generate release notes と選択するとデフォルト設定でリリースノートを自動的に作ってくれる \( 'ω')/

docs.github.com

リリースノートをカスタマイズする

👾 .github/release.yml

リリースノートの本文をカスタマイズするために .github/release.yml ファイルを作る📝 設定はいくつかあって詳しくはドキュメントに載っているけど,今回はできる限りシンプルな設定にしてみた👌簡単に言うと Dependabot 経由のプルリクエスト(デフォルトで dependencies ラベルが付く)とそれ以外のプルリクエストをカテゴライズしてまとめている❗️

changelog:
  categories:
    - title: Dependencies 🤖
      labels:
        - dependencies
    - title: All Changes
      labels:
        - "*"

ドキュメントに載っている例だともっと細かくて,Semver-Major ラベルを付けたプルリクエストは Breaking Changes 🛠 にカテゴライズして,Semver-Minor ラベルを付けたプルリクエストは Exciting New Features 🎉 にカテゴライズしている💡

# .github/release.yml

changelog:
  exclude:
    labels:
      - ignore-for-release
    authors:
      - octocat
  categories:
    - title: Breaking Changes 🛠
      labels:
        - Semver-Major
        - breaking-change
    - title: Exciting New Features 🎉
      labels:
        - Semver-Minor
        - enhancement
    - title: Other Changes
      labels:
        - "*"

gh release コマンド

そして,リリースノートを自動的に作るときは GitHub リポジトリでポチポチすることもできるけど,gh release コマンドでシュッと作ることもできる👌

$ gh release create v1.0.0 --generate-notes

cli.github.com

GitHub Actions でリリースノートを自動的に作る

さらに自動化を推進するために GitHub Actions でリリースブランチ(main ブランチ・prd ブランチなど)にプルリクエストをマージしたら自動的にリリースノートを作れるようにする❗️

今回は softprops/action-gh-release を使う.個人的に一番使いやすそうだった.ちなみに GitHub Actions 公式の actions/create-release は2021年にアーカイブされている😇

github.com

👾 .github/workflows/create-release.yml

ザッとこんな感じ👌今回は main ブランチにプルリクエストをマージしたら実行するようにした.そして,個人プロジェクトでは semver は必要なく,リリース名(タグ名)はタイムスタンプにした.ちなみにデフォルトでは GitHub リポジトリのデフォルトブランチに対してリリースを作るけど,target_commitish パラメータを指定すれば任意のブランチを指定できる.

name: Create Release

on:
  push:
    branches:
      - main

env:
  TZ: Asia/Tokyo

permissions:
  contents: write

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: echo "TAG_NAME=$(date +'%Y%m%d-%H%M')" >> ${GITHUB_ENV}
      - name: Create Release
        uses: softprops/action-gh-release@v2
        with:
          tag_name: ${{ env.TAG_NAME }}
          generate_release_notes: true
          target_commitish: main

動作確認

個人的に Terraform の検証をするのに使っているサンドボックスリポジトリに導入してみて,2週間ほど運用しているけど,期待通りにリリースノートを作れている👏

これは便利だ〜 \( 'ω')/