リリースを自動化したら思ったより楽になった
※2020/02/22 追記 Goで作ったツールは以下のGoReleaser + GithubActionsを使う方法に置き換えました。
-- 追記ここまで
rnzooの0.5.0を開発していくにあたって、機能的な追加の他に、リリースの自動化を行いました。もともとビルド自体はbashスクリプトで自動化していて、dockerを使ったコンテナ上でのビルドとアーカイブファイルの作成を行っていました。
今回、devバージョンをちょこちょこ出しながら進めるために、リリースにかかる手間を減らしたくなったので、少し腰を据えて改善しました。おかげで0.5.0-devは6まで簡単に繰り返しリリースしていくことができました。
以前
実際のリリース(homebrewに反映させる)は、毎回以下をやっていました。
- tagを作成、githubにpush
- ビルド+アーカイブ作成のスクリプトを実行
- githubのリリースにアーカイブを手でブラウザからアップロード
- homebrewのリポジトリに、バージョンとハッシュ値変更するプルリクを作成、マージ
書くとあんまりたいしたことないですが、手作業満載で、頻繁にやらない分、あれどうしてたっけみたいな状態になっていました。
何をやったか
単純にスクリプト化しました。とりあえず動作確認できたら、tag作ってリリーススクリプト実行してリリースされるというところまで。詳細は以下プルリクを参照ください。 https://github.com/reiki4040/rnzoo/pull/20/files
hubコマンドを使って、リリースファイルをアップロード
調べてみたらhubコマンドでできるということで、インストールしてスクリプトに追加しました。
Pull Requestを自動で作成する
こっちに書いたように、関連するプルリクを自動で作成して、最後確認してマージするように。別にPullRequestにせず、masterにそのままpushでもいいんですが、応用が利きそうなので、あえてPullRequestを経由する形にしました。
未解決
テスト
今回homebrewのauditだけ入れていますが、この自動化に際して、hashが間違っていたり、対象ファイルが存在しない(url間違っていた)などを拾ってくれたので、テスト大事ですね。
CI/CDサービスとの連携
まだ自分でキックしないといけないので、自動で開始できるともっと楽になるはず。プルリク作ったら自動テスト実施とか、マージしたらリリースみたいな自然なフローをサポートしてくれる形にしたい。
まとめ
当たり前ですが、自動化すると手間とミスが減るので楽ですね。プロジェクトの最初で足回りちゃんと作るのが後で効いてくるんだなと実感しました。地味地味としたところの突っ掛かりがなくなると、集中しやすくなります。