最近は、GoバイナリのGitHubリリースにgobump、ghch、goxz、ghrを利用している。これらのツールを組み合わせることで、repairableな形でリリース作業を自動化できる。
GoバイナリのGitHubリリースに一般的に必要な一連のプロセスを分解すると、下記のようになる。
- バージョニング
- CHANGELOGの生成
- クロスコンパイル: Linux、OSX、Windows用バイナリの作成など
- パッケージング: tar.gzの作成など
- GitHub Releaseへのアーカイブアップロード
各ステップを担当するミニマムなツールを組み合わせ、一連のプロセスを実行できる。*1
- gobump: https://github.com/motemen/gobump バージョニング
- ghch: https://github.com/Songmu/ghch CHANGELOGの生成
- goxz: https://github.com/Songmu/goxz クロスコンパイルとパッケージング
- ghr: https://github.com/tcnksm/ghr GitHub Releaseへのアップロード
ghchとghrは特にGoに限らず汎用的に使える。 yuuki/lstf では実際に、gobump+ghch+goxz+ghrによりリリースを自動化している。
References
- 高速に自作パッケージをGithubにリリースするghrというツールをつくった | SOTA
- gobump で Go プロジェクトのバージョニングをおこなう - 詩と創作・思索のひろば
- Gitのtagとpull requestのマージ履歴からChangelogを自動生成する `ghch` | おそらくはそれさえも平凡な日々
- Goツールのクロスビルドとパッケージングのためのgoxzというツールを作った | おそらくはそれさえも平凡な日々
- goreleaserを使ってGoで書いたツールのバイナリをGithub Releasesで配布する - $shibayu36->blog;
- goxc + ghrを使って、Goで書いたツールのバイナリをGithub Releasesで配布する - $shibayu36->blog;
*1:同僚と友人が開発したツールでまかなえててすごい