いけむランド

はてダからやってきました

dependabot で関連する更新の PR をひとつにまとめてつくるようにする方法

dependabot が生成する pull request で圧死しそうになってる日々です。

増築を重ねた build.gradle だと、以下みたいな感じで必要なライブラリが無尽蔵に増えてしまうことがよくあり、あるライブラリとそのサブライブラリのバージョンが一致すべきものも、特に考えなしにたくさん並べてしまう場合もある。

dependencies {
  implementation "com.example:hogehoge:1.0.0"
  implementation "com.example:hogehoge-aaa:1.0.0"
  implementation "com.example:hogehoge-bbb:1.0.0"
  implementation "com.example:hogehoge-ccc:1.0.0"
}

それでいざライブラリの更新を dependabot が検出すると、サブライブラリそれぞれの PR まで個別につくられてしまう。(↓がその例)

https://github.com/dependabot/dependabot-core/issues/2265#issuecomment-626533927

全部 CI が pass してくれれば、順番に粛々と rebase して merge すれば良いが、それでも間にバージョン不一致な状態の commit が残るのは正直気持ち悪い。

PR をつくる時点でいい感じに dependabot が忖度してくれればいいが、実際にそういう機能はこれを書いている時点では未実装である。

github.com

みんな困っていないのかと思って調べてみると、build.gradle 内で dependabot が解釈できる書き方にすれば、やってくれることがわかった。

dev.to

ext {
  hogehogeVersion = "1.0.0"
}
dependencies {
  implementation "com.example:hogehoge:$hogehogeVersion"
  implementation "com.example:hogehoge-aaa:$hogehogeVersion"
  implementation "com.example:hogehoge-bbb:$hogehogeVersion"
  implementation "com.example:hogehoge-ccc:$hogehogeVersion"
}

バージョンを変数に入れて一元管理すると良い。具体的には dependabot-core の中で定義されている正規表現にマッチさせるようにすれば良さそう。

github.com

ちなみにこういうことをせずに放っておくと、リポジトリあたりの PR 生成上限数に抵触して、それ以上生成してもらえないという悲しい状態になるため、みんなは気をつけて欲しい。

docs.github.com