最近、私が所属する ROUTE06 で私が作った github-nippou がよく使われ始め、リリース頻度が上がってきました。github-nippou の Web 版 が出来た影響が大きそうです。

今まで何年も手作業(!)でリリース作業をしていましたが、この度えいやっと自動化しましたので、ここに記録を残します。

これまでの手動リリースフロー

MacBook 上で、こんなことをしていました。温かみのある手作業です。☺️

  1. git pull で最新の main ブランチをローカルに持ってくる
  2. lib/version.go を手動で書き換え、git commit&push する
  3. $ make distgox を使ってクロスビルドする
  4. $ make releaseghr を使って GitHub にリリースする

これからの自動リリースフロー

  1. 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 を更新する
  2. リリース PR をマージすると、tagpr は新しいバージョンの git のタグを振りつつ、Releases に新しいバージョンのリリースを作る
  3. 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 さんプロダクトにお世話になることを実感しています。🙏

ghr のクロスビルドツールを確認したら 、こちらも Songmu さんプロダクトでした。いつか使わせてもらうかも。

追記: 2024-07-30

[2024-07-30-1] で「まだ自動化出来ていないこと」に対応しました 🎉