はじめに
pnpmを使うプロジェクトで、Dependabot や Renovate を使っていると、pnpm/action-setup を v5 から v6 に上げる PR が飛んできているかもしれません。
pnpm v11への対応しかリリースノートには書かれていませんが、このPRのCIがなぜか落ちていたり、マージしたらローカルで再現しない挙動をしている方がもしかしたらいるかもしれません。
本記事では、何が起きるのか・なぜ起きるのか・どう対応すればいいのかを解説します。
結論を先に: v6.0.3 で修正済みです。
pnpm/action-setup@v6を使っていれば問題はなさそうです。v6.0.0 や v6.0.1 にピン留めしている場合はアップデートしてください。※ v6.0.3 は GitHub 上で prerelease タグが付いていますが、
v6タグが v6.0.3 を指しているため、@v6で利用できます。
何が起きるか
action-setup v6.0.0〜v6.0.1 では、version に 10 を指定しても pnpm v11 beta がインストールされます。
- uses: pnpm/action-setup@v6
with:
version: 10 # 10を指定しているのに...
Run pnpm --version
11.0.0-beta.4-1 # v11 が入る
具体的にどんなエラーが出るか
engines.pnpm を設定しているプロジェクト
package.json で pnpm のバージョンを制約しているプロジェクトでは、インストール時にエラーになります。
ERR_PNPM_UNSUPPORTED_ENGINE Unsupported environment (bad pnpm and/or Node.js version)
Your pnpm version is incompatible with "/home/runner/work/my-app/my-app".
Expected version: 10
Got: 11.0.0-beta.4-1
pnpm version コマンドを使っているワークフロー
pnpm v10 では pnpm version や pnpm login などのコマンドを npm にパススルーしていましたが、v11 ではこのパススルーが削除されました。そのため、以下のようなコマンドが失敗します。
- run: pnpm version patch --no-git-tag-version
ERR unknown option --no-git-tag-version
その他の v10 → v11 の breaking changes
意図せず v11 が使われることで、v10 → v11 間の breaking changes に起因する予期しないエラーが発生する可能性があります。
なぜ起きるのか
action-setup v6.0.0 は pnpm v11 のサポートを追加したバージョンです。
問題は、アクション内部の動作にありました。action-setup は以下のように pnpm をセットアップします。
-
bootstrap: まず v11 のバイナリを
PNPM_HOME/pnpmに配置 -
self-update: 指定バージョン(例: v10)を
PNPM_HOME/bin/pnpmにインストール
しかし、PATH への追加順が原因で PNPM_HOME/pnpm(v11)が PNPM_HOME/bin/pnpm(v10)より優先されてしまい、self-update で正しいバージョンをインストールしても v11 が使われ続けていました。
この問題は #225 で報告され、#230 で PATH の優先順位を修正することで解消されました。
対応策
@v6 を使っている場合(多くの人はこちら)
何もしなくて大丈夫です。
pnpm/action-setup@v6 は現在 v6.0.3 を指しており、修正が含まれています。
- uses: pnpm/action-setup@v6 # v6.0.3 が使われる → 問題なし
with:
version: 10
すでに v6 にアップデート済みで CI が壊れていた場合も、v6 タグが v6.0.3 に更新されているため、ワークフローを再実行すれば直ります。
特定バージョンにピン留めしている場合
v6.0.0 や v6.0.1 にピン留めしている場合は、v6.0.3 以降に更新してください。
v6.0.2で該当の不具合は治りますが、他にも不具合があるので最新を使うのがいいでしょう。
- - uses: pnpm/action-setup@v6.0.0
+ - uses: pnpm/action-setup@v6.0.3
まだ v5 のままの場合
v5 では問題は発生しません。v6 に上げるタイミングは自由ですが、今上げても問題ありません。
ただし、細かいバージョンまで指定しているひとはv6.0.2以降を指定するようにしましょう。
まとめ
今回はたまたまローカルで再現しない不具合を発見し、調査した結果をまとめました。
v6.0.0以降にあげようとしている人の参考になれば幸いです。