GitHubで自動リリース&リリースノート自動作成ができるようにしてみた

はじめに

仕事の関係でGitHub上に管理しているコンテンツのリリースとリリースノート作成にだいぶ困っていたので、GitHub Actionsでよしなにできないかやってみた記事です。 対象としてはGitHub Releasesを使っていて、自動でリリースタグが切られたり、自動でリリースノートが作成されるとうれしい人向け。

元々の問題

仕事の関係でかなりの数のコンテンツを管理して修正してたりしてたんですが、リリースタグとか作っていなかったので「どこで・誰が・何を」修正したかが良くわからないということが起きてました。 で、毎回タスクのチケットとか確認して、そこに貼られているPRとかを見て「ああ、この時に修正されたか」とかやってました。

はっきり言ってかなりコストかかってたので何とかできないか考えてました。

で、そんなときにrelease-drafterの存在を知り、こういうのでリリースノートを良い感じに整形すればよさそうだということに思い至りました。

github.com

ただ、別件でデフォルトブランチにPRがマージされたタイミングで自動的にコンテンツがリリースされていたので微妙に用途に合いませんでした。

なので、今回欲しかったものとしては

  • デフォルトブランチにPRがマージされたら自動でリリースタグを切れる
  • デフォルトブランチにPRがマージされたら自動でリリースノートが作成される

というものになります。

あれこれ調べてみたんですが、リリースノートの自動作成とかリリースタグのバージョンのインクリメントはあるけど、ちょうどいいものはなかった感じでした。

というわけで

既存の便利そうなGitHub Actionsを組み合わせてよしなにできないかやってみました。

作ったもの

github.com

使ったGitHub Actions

github.com

github.com

github.com

やったこと

バージョンのインクリメント

mathieudutour/github-tag-actionを使い、前のリリースタグのバージョンを取得し、インクリメントしたものを生成しています。

      - uses: actions/checkout@v2
      - name: Bump version and push tag
        id: tag_version
        uses: mathieudutour/github-tag-action@v5.6
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

ここで生成したバージョンはリリースタグを切るタイミングで使用しています。

変更内容の自動生成

要するにリリースノートを自動生成します。ここではmetcalfc/changelog-generatorを使って以前のリリースから現在の変更までの差分をよしなに生成しています。

      - name: Generate changelog
        id: changelog
        uses: metcalfc/changelog-generator@v1.0.0
        with:
          myToken: ${{ secrets.GITHUB_TOKEN }}

リリースタグを切る

最後にsoftprops/action-gh-releaseを使ってリリースタグを切ります。

      - name: Publish release
        uses: softprops/action-gh-release@v1
        with:
          name: ${{ steps.tag_version.outputs.new_version }}
          tag_name: ${{ steps.tag_version.outputs.new_tag }}
          body: ${{ steps.changelog.outputs.changelog }}

リリースの名前やタグにはバージョンを自動生成した時の値を渡し、リリースの内容には自動生成したリリースノートを渡しています。

あとはこれを自動でリリースタグ作成&リリースノート作成をしたいリポジトリに追加するだけです。

やってみて

意外と既存のものを組み合わせて良い感じに自動化できたので満足してます。 あとGitHub Actionsでの自動化とか深堀しても面白そうかなと思いました。

参考

github.com

github.com

github.com