diff --git a/lib/modules/manager/npm/post-update/pnpm.spec.ts b/lib/modules/manager/npm/post-update/pnpm.spec.ts index c3f36744d8cc3a811fe7f5a1996cff832380c136..6c2fab912a7f6eefb9d39c9c7b7b13eb119678fe 100644 --- a/lib/modules/manager/npm/post-update/pnpm.spec.ts +++ b/lib/modules/manager/npm/post-update/pnpm.spec.ts @@ -163,4 +163,20 @@ describe('modules/manager/npm/post-update/pnpm', () => { }, ]); }); + + it('uses skips pnpm v7 if lockfileVersion indicates <7', async () => { + mockExecAll(exec); + const configTemp = partial<PostUpdateConfig>({}); + fs.readLocalFile + .mockResolvedValueOnce('{}') // package.json + .mockResolvedValue('lockfileVersion: 5.3\n'); // pnpm-lock.yaml + const res = await pnpmHelper.generateLockFile( + 'some-folder', + {}, + configTemp, + [] + ); + expect(fs.readLocalFile).toHaveBeenCalledTimes(3); + expect(res.lockFile).toBe('lockfileVersion: 5.3\n'); + }); }); diff --git a/lib/modules/manager/npm/post-update/pnpm.ts b/lib/modules/manager/npm/post-update/pnpm.ts index 9b246544fb4cb020f2a78488aaad84a88d3f7965..4b61b802448da9c24d934cabaa24db4288566ab5 100644 --- a/lib/modules/manager/npm/post-update/pnpm.ts +++ b/lib/modules/manager/npm/post-update/pnpm.ts @@ -1,3 +1,5 @@ +import is from '@sindresorhus/is'; +import { load } from 'js-yaml'; import upath from 'upath'; import { GlobalConfig } from '../../../../config/global'; import { TEMPORARY_ERROR } from '../../../../constants/error-messages'; @@ -12,7 +14,7 @@ import { deleteLocalFile, readLocalFile } from '../../../../util/fs'; import type { PostUpdateConfig, Upgrade } from '../../types'; import type { NpmPackage } from '../extract/types'; import { getNodeConstraint } from './node-version'; -import type { GenerateLockFileResult } from './types'; +import type { GenerateLockFileResult, PnpmLockFile } from './types'; export async function generateLockFile( lockFileDir: string, @@ -117,5 +119,18 @@ async function getPnpmContraint( } } } + if (!result) { + const lockFileName = upath.join(lockFileDir, 'pnpm-lock.yaml'); + const content = await readLocalFile(lockFileName, 'utf8'); + if (content) { + const pnpmLock = load(content) as PnpmLockFile; + if ( + is.number(pnpmLock.lockfileVersion) && + pnpmLock.lockfileVersion < 5.4 + ) { + result = '<7'; + } + } + } return result; } diff --git a/lib/modules/manager/npm/post-update/types.ts b/lib/modules/manager/npm/post-update/types.ts index de1bfe88245039aa9de4ef29b8d6b1e5097f028c..7ba05ca902ec467797b0edcfc93df146a0e11099 100644 --- a/lib/modules/manager/npm/post-update/types.ts +++ b/lib/modules/manager/npm/post-update/types.ts @@ -28,3 +28,7 @@ export interface GenerateLockFileResult { stderr?: string; stdout?: string; } + +export interface PnpmLockFile { + lockfileVersion?: number; +}