Dependabotでバージョンアップデートを使わずにセキュリティアップデートの挙動を変える


TL;DR

open-pull-requests-limit0 にするとバージョンアップデートのPull Requestが作られず、セキュリティアップデートのPull Requestだけになります。

概要

Dependabotには バージョンアップデートセキュリティアップデート の2種類があります。 これらは似ているようで、微妙に挙動が異なります。

今回はハマりやすいポイントをちょっと解説します。

dependabot.ymlは基本バージョンアップデート用の設定

Dependabotセキュリティアップデートは、リポジトリのSettings > Advanced Securityの中に「Dependabot security updates」という項目でEnableすると有効になります。 これだけで、Dependabotはセキュリティリスクのあるパッケージなどを見つけると、それを問題のないバージョンまでアップデートするPull Requestを作り始めます。

一方で、バージョンアップデートは同じページに「Dependabot version updates」という項目があります。 しかし、こちらはEnable/Disableではなく「Configure」というボタンになっており、押すと .github/dependabot.yml の編集画面が開かれます。

ここから分かる通り dependabot.yml基本的に バージョンアップデートのためのファイルなのです。

ところがどっこい

dependabot.ymlセキュリティアップデートにも 作用します。

つまり、セキュリティアップデートのPull Requestの作らせ方を制御するには dependabot.yml を作って設定するしかありません。 これが非常に厄介な仕様です。

「バージョンアップデートをしたいわけではない」のに、 dependabot.yml を作る必要があるので、勝手にバージョンアップデートが動き始めてしまうのです。

解決策

最初に書いた通り open-pull-requests-limit0 にすることで解決できます。

非常にわかりにくい。。

悪い仕様のお手本のような仕様

この open-pull-requests-limit0 にするとバージョンアップデートのPull Requestが作られず、セキュリティアップデートのPull Requestのみが作られるようになる、という仕様。

最悪です。

明らかに直感的ではないですよね。 Pull Request数をゼロに制限しているという「ように見える」のに、セキュリティアップデートはこれを無視して作るのですから。

これが、「dependabot.yml基本的に バージョンアップデートのためのファイル」と説明した理由です。 セキュリティアップデートは、一部の設定は考慮するけど、一部の設定は無視するのです。

皆さんはこんなクソ仕様のシステムを作らないように気をつけましょう。