【GitHub Actions】 pnpm v10でCI/CDが突如失敗しました
はじめに
こんにちは、がんがんです。GitHub ActionsでESLint jobが突如失敗するというケースに遭遇しました。
原因を調査すると ESLint ではなく pnpm のアップデートが何やら絡んでそうでした。
現在CI/CDも復旧しており、本件の調査備忘録を残しておきたいと思います。
3行まとめ
- pnpm v9.7 以降は corepack の仕様が少し変わります
- GitHub Actions に pnpm のセットアップを追加することで解決します
- バージョンの固定、リリースノートの観測は大事
エラーが発生していた箇所
エラーが発生していたのは setup/node
ジョブでした。今まで通っていたセットアップでコケており、あまり身に覚えのないエラーでした。
以下のようなエラーが発生していました。 Renovate bot のマージ以外はマージしてなかったので「なんでやろ? 🤔🤔🤔」となりました。
Error: /usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:21535
if (key == null || signature == null) throw new Error(`Cannot find matching keyid: ${JSON.stringify({ signatures, keys })}`);
原因は corepack enable でした
原因を調査すると pnpm v9.7のバージョンアップ が原因でした。
pnpm v9.7のリリースノートに以下のような記載があります。
Added pnpm version management. If the
manage-package-manager-versions
setting is set totrue
, pnpm will switch to the version specified in thepackageManager
field ofpackage.json
#8363.
どうやら corepack 有効にするだけでは pnpm を利用できず、あらかじめ pnpm のインストールが必要になったようです。
以下の記事が非常に分かりやすくまとめられていました。バージョンアップの対応策はこちらの記事を見ていただいた方が分かりやすいです。
pnpm v10 のドキュメントではmanage-package-manager-versions = true
がデフォルトと記述されています。
対応した内容
GitHub Actions から corepack を剥がし、pnpm を別途インストールするように変更しました。
steps:
- uses: actions/checkout@v4
- - run: corepack enable
- - uses: actions/setup-node@v4
+ - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
+ - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
with:
node-version-file: 'package.json'
cache: 'pnpm'
おわりに
今回はGitHub Actions + pnpm v10 で発生したエラーについての調査備忘録を書きました。
ユーンさんの「pnpm v10 で corepack 不要で pnpm 自身のバージョン管理が可能に」は公開日に観測しており「CI/CDからcorepack剥がす必要ありか。後で詳細調べよう」と思ったことを記憶しています。
調べることをすっかり忘れ、忘れていた頃に急遽叩かれた気持ちでした。定期的なリリース確認、バージョンの固定は大事だなって改めて思いました。明日は我が身です。
pnpm v10対応はDockerfile作成時にも同様の対応が必要になります。こちらは別途備忘録を残せたらと思っています。
Discussion