2つのGemfile.lockの差分を検知する

というGitHub ActionsのCustom actionを書いた。大きなバージョン変更の過渡期など、2つのGemfile.lockを並行運用する場合におすすめ。

https://github.com/r7kamura/gemfile-diff

2つのGemfile.lock

そもそもGemfile.lockが2つあるってどういう状況だ?

これは例えば、並行運用する期間を設けながら、丁寧にGemのバージョンを上げるときに発生する。具体的には、Rails 5.2とRails 6.0のようなケース。ANDPAD Rails 6.0へのアップグレード - ANDPAD Tech Blogという記事でも、実際にそういう例を紹介している。

Rails 5.2版Gemfile.lockとRails 6.0版Gemfile.lockを抱えているとする。これに全然関係なく「devise gemのバージョンを上げるぞ」という活動が発生する。bundle update –conservative devise が実行されてPull Requestがつくられる。本当は BUNDLE_GEMFILE=Gemfile-rails-6-0 bundle update –conservative devise も実行しなければならない。しかし忘れられている。CIが成功してmergeされる。こうなると、Rails 6.0で新しい版のdeviseが動くかどうか分からない。

更新忘れを検知

CIで差分を検知し、2つのGemfile.locktが正しく更新されていなければ失敗させたい。そういうときにGitHub Actionsで便利に使えるのが今回つくったgemfile-diffというCustom action。

ちなみにこれはファイルをRubyで読み込んで内容を比較するだけなので、普段CircleCIとかを利用しているプロジェクトでも別に問題無く使える。この検知にだけGitHub Actionsを使えば良い。話としてはRuboCopとかと同じ。