diff --git a/lib/manager/npm/extract/locked-versions.js b/lib/manager/npm/extract/locked-versions.js index 32921c182398efe7a2144b07140bd75e81057c63..f1325d7c1aafb278adaa6508a381b3c128e85cfd 100644 --- a/lib/manager/npm/extract/locked-versions.js +++ b/lib/manager/npm/extract/locked-versions.js @@ -21,6 +21,10 @@ async function getLockedVersions(packageFiles) { dep.lockedVersion = lockFileCache[yarnLock][`${dep.depName}@${dep.currentValue}`]; } + // istanbul ignore if + if (lockFileCache[yarnLock]['@renovate_yarn_integrity']) { + packageFile.yarnIntegrity = true; + } } else if (npmLock) { logger.debug({ npmLock }, 'npm lockfile'); if (!lockFileCache[npmLock]) { diff --git a/lib/manager/npm/extract/yarn.js b/lib/manager/npm/extract/yarn.js index 8bf56b016242406798fab1489d3886a0d4fc3cff..e9bf2937b73738f85b13556f62cc357a110db333 100644 --- a/lib/manager/npm/extract/yarn.js +++ b/lib/manager/npm/extract/yarn.js @@ -20,6 +20,10 @@ async function getYarnLock(filePath) { for (const [entry, val] of Object.entries(yarnLockParsed.object)) { logger.trace({ entry, version: val.version }); lockFile[entry] = val.version; + // istanbul ignore if + if (val.integrity) { + lockFile['@renovate_yarn_integrity'] = true; + } } return lockFile; } catch (err) { diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js index 347c9a43661dddc374e10c682c9bbad390e53808..106b91f7150ebead36cda0bc8defff7ecf5d8f5b 100644 --- a/lib/manager/npm/post-update/index.js +++ b/lib/manager/npm/post-update/index.js @@ -419,7 +419,7 @@ async function getAdditionalFiles(config, packageFiles) { const res = await yarn.generateLockFile( upath.join(config.localDir, lockFileDir), env, - config.binarysource + config ); if (res.error) { // istanbul ignore if diff --git a/lib/manager/npm/post-update/yarn.js b/lib/manager/npm/post-update/yarn.js index c8f80be8b9564b0b7f053aa1d2f5253c971a20cd..bf87272daecb6b23996b9873f679f3281f5cf751 100644 --- a/lib/manager/npm/post-update/yarn.js +++ b/lib/manager/npm/post-update/yarn.js @@ -7,7 +7,8 @@ module.exports = { generateLockFile, }; -async function generateLockFile(cwd, env, binarySource) { +async function generateLockFile(cwd, env, config = {}) { + const { binarySource, yarnIntegrity } = config; logger.debug(`Spawning yarn install to create ${cwd}/yarn.lock`); let lockFile = null; let stdout; @@ -24,6 +25,11 @@ async function generateLockFile(cwd, env, binarySource) { 'bin/yarn.js' ); cmd = `node ${installedPath}`; + // istanbul ignore if + if (yarnIntegrity) { + logger.info('Using yarn@1.10 for install'); + cmd = cmd.replace('node_modules/yarn/', 'node_modules/yarn110/'); + } } catch (localerr) { logger.debug('No locally installed yarn found'); // Look inside globally installed renovate diff --git a/package.json b/package.json index 7c5a82c56d2dc5dadb6054731a08e1ebd017274d..43edc3c58cc92634dc85ba93bd21422993fed452 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,8 @@ "validator": "10.8.0", "vso-node-api": "6.5.0", "www-authenticate": "0.6.2", - "yarn": "1.9.4" + "yarn": "1.9.4", + "yarn110": "npm:yarn@1.10.1" }, "devDependencies": { "babel-plugin-transform-object-rest-spread": "6.26.0", diff --git a/test/workers/branch/lock-files/yarn.spec.js b/test/workers/branch/lock-files/yarn.spec.js index 3e442cb934b326664ba378f3533d0bc34f98481e..6f487f9c43ae488b97b88264be8f84018615e553 100644 --- a/test/workers/branch/lock-files/yarn.spec.js +++ b/test/workers/branch/lock-files/yarn.spec.js @@ -87,11 +87,9 @@ describe('generateLockFile', () => { stderror: '', }); fs.readFile = jest.fn(() => 'package-lock-contents'); - const res = await yarnHelper.generateLockFile( - 'some-dir', - undefined, - 'global' - ); + const res = await yarnHelper.generateLockFile('some-dir', undefined, { + binarySource: 'global', + }); expect(fs.readFile.mock.calls.length).toEqual(1); expect(res.lockFile).toEqual('package-lock-contents'); }); diff --git a/yarn.lock b/yarn.lock index f85bd8f526a11866e5e381cff33233772a07a3f8..e6df1dd12ef282eecdd241e48ae811249b4dea1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9206,6 +9206,11 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" +"yarn110@npm:yarn@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.10.1.tgz#b792ba28f050ae94cd7e719dbca80639d70da76f" + integrity sha512-EH0H1fyfFxkE4UpG4b+VCaVY4I488I2EyQNmGjGGKmvsSIb0G3b+1IcfGYPI2gqa1du43g4ZA3jH8fXlq6oVxg== + yarn@1.9.4: version "1.9.4" resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.9.4.tgz#3b82d8446b652775723900b470d966861976924b"