okaryo.log

GitHubActionsを使ってmainブランチへのマージ時にタグとリリースノートを自動生成する | okaryo.log

GitHubActionsを使ってmainブランチへのマージ時にタグとリリースノートを自動生成する

    #GitHubActions#GitHub#CI/CD

はじめに

前回、リリースノートを対応内容ごとにカテゴライズする方法を紹介した。

👉 GitHubリポジトリ内のリリースノートを対応内容ごとにカテゴライズしてイイ感じにする

今回は特定のイベントをトリガーにしてGitHubActionsを使ってタグとリリースノートを自動生成できるようにしてみる。

組んだワークフロー

早速だがGitHubActionsのワークフロー全体は以下のようになった。

name: Generate release note

on:
  pull_request:
    branches:
      - main
    types:
      - closed

jobs:
  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Generate tag
        run: |
          export TAG_NAME=$(sed -n 6P pubspec.yaml | sed 's/version: //')
          git tag $TAG_NAME
          git push origin $TAG_NAME
          echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV
      - name: Generate release note
        uses: softprops/action-gh-release@v1
        with:
          name: ${{ env.TAG_NAME }}
          tag_name: ${{ env.TAG_NAME }}
          generate_release_notes: true

各ステップの解説

トリガー

今回はmainブランチに対するPullRequestがクローズ(=マージ)されたときにワークフローが走るようにした。

他にもrelease/*のようなブランチがマージされたときや、タグがプッシュされたときなどをトリガーにしてリリースノートを作成することもあるだろう。適宜調整していただきたい。

on:
  pull_request:
    branches:
      - main
    types:
      - closed

actions/checkout@v3

リポジトリへチェックアウトするアクション。よく使うものなので詳細は割愛。

Generate tag

ここではタグの生成とプッシュを行っている。自分の場合はFlutterアプリのバージョンが書かれているpubspec.yamlからタグ名となるバージョン番号を取得している。

他にもブランチ名release/*tag/*からタグ名を取得する方法もある。github.refというContextからブランチ名を取得することができるので使い方に合わせて調整してみてほしい。

export TAG_NAME=$(sed -n 6P pubspec.yaml | sed 's/version: //')
git tag $TAG_NAME
git push origin $TAG_NAME

また、今回作成したタグ名は次のステップのリリースノート作成で使いたいので$GITHUB_ENVに書き込んでいる。

$GITHUB_ENVという環境ファイルに環境変数を書き込むことで後続のステップで同じ環境変数が使えるようになる。詳しくは以下の公式ドキュメントを読んでみてほしい。

echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV

Generate release note

リリースノートの自動生成にはsoftprops/action-gh-releaseというアクションを利用させていただいた。

nameでリリースノートの名前、tag_nameでタグ名を指定している。

また、generate_release_notetrueにすることで.github/release.ymlをもとにしてリリースノートの本文も自動生成してくれるようになる。自動生成リリースノートについては以下を読んでみてほしい。

- name: Generate release note
  uses: softprops/action-gh-release@v1
  with:
    name: ${{ env.TAG_NAME }}
    tag_name: ${{ env.TAG_NAME }}
    generate_release_notes: true

softprops/action-gh-releaseには他にも設定できる項目があるので詳しくはREADMEを読んでいただきたい。

完成!

以上のワークフローを設定した上で、mainブランチに対するPullRequestをマージすると確かにGitHubActionsによってタグとリリースノートが自動生成されるようになった!

GeneratedReleaseNote

おわり

タグとリリースノートの作成といった面倒な作業もGitHubActionsを使うことで簡単に自動化することができた。

ぜひ試してみてほしい。


関連記事
最新記事
プロモーション

This site uses Google Analytics.