パッケージ配信の origin をオンプレミスのサーバーから、s3 に変更したことに伴ってサーバーで毎日作成していた trunk と ruby_2_5 の snapshot パッケージの作成が s3 に対応しておらず、しばらく更新されていない、という状態だったのを heroku container 使っていい感じな定期ジョブを作成するような仕組みを作って以前のように更新されるようにした。
最初は codebuild や cloud build, Travis CI などでできるかなあと調べていたけど、Docker Image を作ってその中に閉じたジョブを定期実行する、という用件だけを満たすなら heroku の container デプロイと heroku scheduler を使えば、おおよそ安定した定期ジョブを作成できるということが分かったのが収穫だった。実行時間を指定したい、とかネットワーク経路が、ということがないならもう全部これでいいよ。
https://github.com/ruby/snapshot
できたのはこれです。もともとあった crontab を持ってきてそれっぽく動くようにしただけなのでだいぶ汚いんですが
rake snapshot
などで、macOS や linux なら手元ですぐに Ruby のパッケージが作成されるdocker build .
すれば docker コンテナの中ですぐ実行できるheroku container:push web
, heroku container:release web
して heroku scheduler で rake task を指定すれば s3 にアップロードされる(要 aws credentials)ということができます。そんだけ、というのもあるんですが、実際にはパッケージ作成というのは貴重な Ruby コミッタ複数人の時間を 10h くらい占有する厳しい作業だったりするので、このリポジトリでやってることを発展させれば毎回発生しているパッケージ作成時のトラブルなどをなくして Ruby コミッタのコードを書く時間を増やせるというわけです。素晴らしい。
今後に向けては、snapshot だけじゃなくてリリースパッケージの作成や、Windows でも docker 経由で手元にパッケージを作って持ってくるようにする機能とか、CI 統合してパッケージ作成スクリプト自体のテスト(nobu がしょっちゅう壊す)をしていくつもりです。
pull-request お待ちしています。