Closed2

pnpm v7でrenovateがエラーを吐いたときの話

haxibamihaxibami

環境

  • pnpm v7.0.0
  • renovate v32.36.0(GitHub appで利用)

概要

v7.0.0のpnpmを使用しているプロジェクトで、renovateを用いた依存関係更新を行うと、renovateのプルリクエストに以下のようなエラーが表示され、CIがfailする場合がある。

⚠ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: pnpm-lock.yaml
npm notice 
npm notice New minor version of npm available! 8.5.0 -> 8.6.0
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v8.6.0>
npm notice Run `npm install -g npm@8.6.0` to update!
npm notice 

どうやらPRではpnpm-lock.yamlの更新に失敗し、package.jsonのみが更新されているらしい。CIがコケた直接の原因はこれらのファイルの内容の不一致にあるようだ。

haxibamihaxibami

解決策

プロジェクトルートの.npmrcに以下の一行を付加する。

.npmrc
strict-peer-dependencies=false

詳細

関連Issue:

https://github.com/renovatebot/renovate/issues/14904

pnpm v7で--strict-peer-dependenciesオプションのデフォルト値がtrueとなったことで、peerDependenciesの警告を無視して運用しているプロジェクトでは、pnpm update <package>等がエラーコードで終了するようになった。これに伴い、renovate側でもpnpm-lock.yaml関連の処理がエラー扱いされ、同ファイルが更新対象から外されることになったと思われる。

あくまで仕様変更の問題であるため、該当オプションをfalseにしてやれば問題なく動作する(試した限り、renovateは.npmrcを読んでくれるようだ)。

このスクラップは2022/05/02にクローズされました