🎉

Dependabot が pnpm v9 の lockfile のフォーマットに対応しました

2024/05/05に公開

経緯

pnpm v9 では pnpm-lock.yaml のフォーマットが変わっており、Dependabot が lockfile のパースに失敗するという問題がありました。

https://github.com/dependabot/dependabot-core/issues/9522

dependabot/dependabot-core#9562 の PR でパースに失敗する問題が解消し、2024/05/04 にリリースされました。

https://github.com/dependabot/dependabot-core/releases/tag/v0.255.0

まだ誰も触っていなさそうだったので、人柱になってみようと思います。
(結論、ちゃんと動いたので適当に読み飛ばしてもらって OK です。)

実験開始

1. pnpm を v9 にアップデートする

corepack を使ってアップデートしていきます。

$ corepack use pnpm@latest
Installing pnpm@9.0.6 in the project...

 ERR_PNPM_UNSUPPORTED_ENGINE  Unsupported environment (bad pnpm and/or Node.js version)

Your pnpm version is incompatible with "path/to/project".

Expected version: ^8.15.7
Got: 9.0.6

怒られました。
package.json の engines を "pnpm": "^9.0.6" にして再トライします。

$ corepack use pnpm@latest
Installing pnpm@9.0.6 in the project...

Lockfile is up to date, resolution step is skipped
Packages: +17 -12
+++++++++++++++++------------
Progress: resolved 17, reused 17, downloaded 0, added 12, done
Done in 1.9s

うまくいきました 🎉
pnpm の更新後にインストールが行われ、lockfile も更新されたみたいです。

pnpm-lock.yaml
lockfileVersion: '9.0'  # 更新前は '6.0'
...

あとはお好みで pnpm dedupe を実行してください。

2. Dependabot の設定を用意する

手元に運用中のリポジトリがなかったので、サクっと設定ファイルを書いて push します。

.github/dependabot.yaml
version: 2
updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      interval: weekly
      timezone: Asia/Tokyo
    groups:
      dependencies:
        dependency-type: production
      devDependencies:
        dependency-type: development

3. Dependabot が PR を作るまで待つ

数分後、Dependabot が無事 PR を作成してくれました 🎉

diff を見てみましょう。

lockfile のバージョンが戻るような不具合もなさそうです。
CI がないので手元にチェックアウトしてビルドや動作確認を行いましたが、特に問題なさそうです。

あとがき

かなり大きなフォーマットの変更なので対応するのには時間がかかるだろうなぁ…と遠い目をしていましたが、案外早く対応されて感謝です。

Dependabot で pnpm の更新を行うとコンフリクトが起きやすく rebase に時間を要する印象でしたが、今回のフォーマットの変更でコンフリクトが起きづらくなったようです。

https://github.com/pnpm/pnpm/releases/tag/v9.0.0

今後はマージの速度があがると嬉しいなぁ…と思うばかりです。

Discussion