diff --git a/lib/manager/npm/post-update/yarn.spec.ts b/lib/manager/npm/post-update/yarn.spec.ts index 2ad39862c96e0b5ee2813e6704c29b175a1475ed..5d29e4c1ba04c7b2cfff5b91640bab8a8d0997b6 100644 --- a/lib/manager/npm/post-update/yarn.spec.ts +++ b/lib/manager/npm/post-update/yarn.spec.ts @@ -40,6 +40,9 @@ describe(getName(__filename), () => { fs.readFile.mockResolvedValue('package-lock-contents' as never); const config = { dockerMapDotfiles: true, + compatibility: { + yarn: '^1.10.0', + }, postUpdateOptions: ['yarnDedupeFewer', 'yarnDedupeHighest'], }; const res = await yarnHelper.generateLockFile('some-dir', {}, config); diff --git a/lib/manager/npm/post-update/yarn.ts b/lib/manager/npm/post-update/yarn.ts index 899a780cd699cccef2b125a24d66f54b40cad4f4..817afd3c8140b33cff1f3f003d474094941444a3 100644 --- a/lib/manager/npm/post-update/yarn.ts +++ b/lib/manager/npm/post-update/yarn.ts @@ -1,5 +1,7 @@ import is from '@sindresorhus/is'; import { readFile } from 'fs-extra'; +import { validRange } from 'semver'; +import { quote } from 'shlex'; import { join } from 'upath'; import { SYSTEM_INSUFFICIENT_DISK_SPACE } from '../../../constants/error-messages'; import { DatasourceError } from '../../../datasource'; @@ -43,7 +45,12 @@ export async function generateLockFile( logger.debug(`Spawning yarn install to create ${cwd}/yarn.lock`); let lockFile = null; try { - const preCommands = ['npm i -g yarn']; + let installYarn = 'npm i -g npm'; + const yarnCompatibility = config.compatibility?.yarn; + if (validRange(yarnCompatibility)) { + installYarn += `@${quote(yarnCompatibility)}`; + } + const preCommands = [installYarn]; if ( config.skipInstalls !== false && (await hasYarnOfflineMirror(cwd)) === false