🐙

Dependabot が engine-strict を設定していると動かない件

2023/05/13に公開約1,600字

何が起こるのか

package.json
"engines": {
    "node": ">=20.0.0",
    "npm": ">=9.6.4"
}
.npmrc
engine-strict=true

このような設定で Dependabot を npm に対して適用した場合、Dependabot のページ(Insights > Dependency graph > Dependabot)に以下のエラーが表示されます。

Dependabot can't resolve your JavaScript dependency files
Dependabot failed to update your dependencies because there was an error resolving your JavaScript dependency files.

Dependabot encountered the following error:

Dependabot uses Node.js v16.20.0
 and NPM 8.19.4
. Due to the engine-strict setting, the update will not succeed.

エラーメッセージに書いてある通りなのですが、engines を指定していても、Dependabot は無視して特定のバージョンで走るので engine-strict によってエラーを吐いて停止しています。

解決策

  1. engine-strictfalse にする

  2. engines で Dependabot が使っているバージョンを含める

  3. Dependabot の使用を諦める

このいずれかしかありません。

GitHub の対応について

https://github.com/dependabot/dependabot-core/issues/4072#issuecomment-1413222679

上の Issue へのコメントに記載されていることを以下に要約しました。詳しく知りたい場合は原文をあたってみてください。

  • package.json を読んで node, npm のバージョンを切り替えると Dependabot の実行が遅くなってしまう。

  • バージョンを切り替えられるようにすると、多くのバージョンをサポートしなければならなくなる。

  • engine-strict を無視するようにもできるが、engine-strict の意味がなくなる。

これらの理由からこの問題は少なくともすぐには修正されないようです。諦めましょう。

Yarn と pnpm について

Yarn については検証していません。すみません。
もし検証してくださる方がいればコメントに残していただけると助かります。

pnpm は 2023/5/13 現在、Dependabot でサポートされていません。
以下の通りクローズドベータは開始されているようです。
https://github.com/dependabot/dependabot-core/issues/1736#issuecomment-1527947075

これらのバージョンについては以下の Dockerfile に記載されています。
https://github.com/dependabot/dependabot-core/blob/main/npm_and_yarn/Dockerfile

GitHubで編集を提案

Discussion

ログインするとコメントできます