最近、私が所属する ROUTE06 で私が作った github-nippou がよく使われ始め、リリース頻度が上がってきました。github-nippou の Web 版 が出来た影響が大きそうです。
今まで何年も手作業(!)でリリース作業をしていましたが、この度えいやっと自動化しましたので、ここに記録を残します。
これまでの手動リリースフロー
MacBook 上で、こんなことをしていました。温かみのある手作業です。☺️
- git pull で最新の main ブランチをローカルに持ってくる
- lib/version.go を手動で書き換え、git commit&push する
$ make dist
で gox を使ってクロスビルドする$ make release
で ghr を使って GitHub にリリースする
これからの自動リリースフロー
- main ブランチに commit が追加されると、tagpr
1 がリリース PR を作る
- 例: https://github.com/masutaka/github-nippou/pull/132
- CHANGELOG.md とともに、lib/version.go も更新してくれる
- デフォルトではパッチバージョンが 1 つ上がる。メジャーバージョンを上げたいときは
tagpr:major
ラベルを、マイナーバージョンを上げたいときはtagpr:minor
ラベルを付ければ良い
- すでに存在していれば、tagpr はリリース PR を更新する
- 例: https://github.com/masutaka/github-nippou/pull/132
- リリース PR をマージすると、tagpr は新しいバージョンの git のタグを振りつつ、Releases に新しいバージョンのリリースを作る
- goreleaser が github-nippou のバイナリをビルドし、上記リリースにアップロードする
以上を masutaka/github-nippou/.github/workflows/release.yml に実装しました。リリース PR をマージするだけで、リリース作業が完了します。
参考にしたもの
k1LoW/runn/.github/workflows/tagpr.yml をかなり参考にしつつ、削れる箇所は削りました。
今回の自動化で gox+ghr の組み合わせを変える必要はなかったのですが、goreleaser は昔見た記事 で気になっていたので導入してみました。1 つのツールが複数のことをやるのは UNIX 的ではないかもしれませんがね…。
また、タイミングが良いのか悪いのか、gox リポジトリ が 2023/11/01 にアーカイブされていたことも少し関係します。
まだ自動化出来ていないこと
github-nippou の formula リポジトリの更新はまだ手作業です。
ただ今回の件で、maltmill
2 を知ったので $ make update
で formula ファイルを更新できるようにはしました。
k1LoW/homebrew-tap は GitHub Actions の schedule で自動更新してたので、同じことをやれば良いのですが(続く)、
🔗 ワークフローの無効化と有効化 - GitHub Docs
パブリックリポジトリでは、60日間にリポジトリにアクティビティがなかった場合、スケジュールされたワークフローは自動的に無効化されます。
更新頻度が低い私のリポジトリで同じことをやると、☝️ この 60 日間の制限に引っかかり、Keepalive Workflow を導入する/しないなどを考える必要がありそうで、一旦保留にしています。
まとめと雑感
2014 年に誕生し、ruby gems から golang へと書き換えた github-nippou のリリースがようやく自動化されました。とても満足しています。
こうしてみると、これから益々 Songmu さんプロダクトにお世話になることを実感しています。🙏
- https://github.com/Songmu/tagpr
- https://github.com/Songmu/gh2changelog 3
- https://github.com/Songmu/maltmill
ghr のクロスビルドツールを確認したら 、こちらも Songmu さんプロダクトでした。いつか使わせてもらうかも。
追記: 2024-07-30
[2024-07-30-1] で「まだ自動化出来ていないこと」に対応しました 🎉