はじめに
仕事の関係でGitHub上に管理しているコンテンツのリリースとリリースノート作成にだいぶ困っていたので、GitHub Actionsでよしなにできないかやってみた記事です。 対象としてはGitHub Releasesを使っていて、自動でリリースタグが切られたり、自動でリリースノートが作成されるとうれしい人向け。
元々の問題
仕事の関係でかなりの数のコンテンツを管理して修正してたりしてたんですが、リリースタグとか作っていなかったので「どこで・誰が・何を」修正したかが良くわからないということが起きてました。 で、毎回タスクのチケットとか確認して、そこに貼られているPRとかを見て「ああ、この時に修正されたか」とかやってました。
はっきり言ってかなりコストかかってたので何とかできないか考えてました。
で、そんなときにrelease-drafterの存在を知り、こういうのでリリースノートを良い感じに整形すればよさそうだということに思い至りました。
ただ、別件でデフォルトブランチにPRがマージされたタイミングで自動的にコンテンツがリリースされていたので微妙に用途に合いませんでした。
なので、今回欲しかったものとしては
- デフォルトブランチにPRがマージされたら自動でリリースタグを切れる
- デフォルトブランチにPRがマージされたら自動でリリースノートが作成される
というものになります。
あれこれ調べてみたんですが、リリースノートの自動作成とかリリースタグのバージョンのインクリメントはあるけど、ちょうどいいものはなかった感じでした。
というわけで
既存の便利そうなGitHub Actionsを組み合わせてよしなにできないかやってみました。
作ったもの
使ったGitHub Actions
やったこと
バージョンのインクリメント
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での自動化とか深堀しても面白そうかなと思いました。