From 10012f343ad9ad89e8e56a1fc28b7ed1ec8bae0b Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Wed, 9 May 2018 09:45:10 +0200 Subject: [PATCH] fix: manager -> lernaClient --- lib/manager/npm/extract/monorepo.js | 1 + lib/manager/npm/post-update/index.js | 25 ++++++++++++------- lib/manager/npm/post-update/lerna.js | 10 ++++---- .../__snapshots__/monorepo.spec.js.snap | 4 +++ test/workers/branch/lock-files/index.spec.js | 6 ++--- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/lib/manager/npm/extract/monorepo.js b/lib/manager/npm/extract/monorepo.js index da1a4a81bb..6b4ca6b9e2 100644 --- a/lib/manager/npm/extract/monorepo.js +++ b/lib/manager/npm/extract/monorepo.js @@ -48,6 +48,7 @@ function detectMonorepos(packageFiles) { name => name !== subPackage.packageJsonName ); subPackage.lernaDir = lernaDir; + subPackage.lernaClient = lernaClient; subPackage.yarnLock = subPackage.yarnLock || yarnLock; subPackage.npmLock = subPackage.npmLock || npmLock; } diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js index 0aa80cf48a..466d4fb677 100644 --- a/lib/manager/npm/post-update/index.js +++ b/lib/manager/npm/post-update/index.js @@ -30,7 +30,10 @@ function determineLockFileDirs(config, packageFiles) { // TODO: support lerna // Return every directory that contains a lockfile for (const packageFile of packageFiles.npm) { - if (packageFile.lernaDir) { + if ( + packageFile.lernaDir && + (packageFile.npmLock || packageFile.yarnLock) + ) { lernaDirs.push(packageFile.lernaDir); } else { yarnLockDirs.push(packageFile.yarnLock); @@ -63,7 +66,7 @@ function determineLockFileDirs(config, packageFiles) { logger.debug(`Checking ${p.name} for lock files`); const packageFile = getPackageFile(p.name); // lerna first - if (packageFile.lernaDir) { + if (packageFile.lernaDir && (packageFile.npmLock || packageFile.yarnLock)) { logger.debug(`${packageFile.packageFile} has lerna lock file`); lernaDirs.push(packageFile.lernaDir); } else { @@ -520,17 +523,21 @@ async function getAdditionalFiles(config, packageFiles) { } if (dirs.lernaDirs && dirs.lernaDirs.length) { - let manager; let lockFile; if (config.lernaClient === 'npm') { - manager = 'npm'; - lockFile = 'package-lock.json'; + lockFile = config.npmLock || 'package-lock.json'; } else { - manager = 'yarn'; - lockFile = 'yarn.lock'; + lockFile = config.yarnLock || 'yarn.lock'; } - logger.debug({ manager, lockFile }, 'Generating lock files using lerna'); - const res = await lerna.generateLockFiles(manager, config.tmpDir.path, env); + logger.debug( + { lernaClient: config.lernaClient, lockFile }, + 'Generating lock files using lerna' + ); + const res = await lerna.generateLockFiles( + config.lernaClient, + config.tmpDir.path, + env + ); // istanbul ignore else if (res.error) { // istanbul ignore if diff --git a/lib/manager/npm/post-update/lerna.js b/lib/manager/npm/post-update/lerna.js index f20cd0dd49..2e80f9e217 100644 --- a/lib/manager/npm/post-update/lerna.js +++ b/lib/manager/npm/post-update/lerna.js @@ -4,8 +4,8 @@ module.exports = { generateLockFiles, }; -async function generateLockFiles(manager, tmpDir, env) { - logger.debug(`Spawning lerna to create lock files`); +async function generateLockFiles(lernaClient, tmpDir, env) { + logger.debug(`Spawning lerna with ${lernaClient} to create lock files`); let stdout; let stderr; try { @@ -22,10 +22,10 @@ async function generateLockFiles(manager, tmpDir, env) { lernaVersion = lernaVersion || 'latest'; logger.debug('Using lerna version ' + lernaVersion); const params = - manager === 'npm' + lernaClient === 'npm' ? '--package-lock-only' : '--ignore-scripts --ignore-engines --ignore-platform --mutex network:31879'; - const cmd = `${manager} install ${params} && npx lerna@${lernaVersion} bootstrap -- ${params}`; + const cmd = `${lernaClient} install ${params} && npx lerna@${lernaVersion} bootstrap -- ${params}`; logger.debug({ cmd }); // TODO: Switch to native util.promisify once using only node 8 ({ stdout, stderr } = await exec(cmd, { @@ -38,7 +38,7 @@ async function generateLockFiles(manager, tmpDir, env) { const duration = process.hrtime(startTime); const seconds = Math.round(duration[0] + duration[1] / 1e9); logger.info( - { type: 'lerna', seconds, manager, stdout, stderr }, + { type: 'lerna', seconds, lernaClient, stdout, stderr }, 'Generated lockfile' ); } catch (err) /* istanbul ignore next */ { diff --git a/test/manager/npm/extract/__snapshots__/monorepo.spec.js.snap b/test/manager/npm/extract/__snapshots__/monorepo.spec.js.snap index afa5ecca68..df1c4fda7c 100644 --- a/test/manager/npm/extract/__snapshots__/monorepo.spec.js.snap +++ b/test/manager/npm/extract/__snapshots__/monorepo.spec.js.snap @@ -10,6 +10,7 @@ Array [ "packageFile": "package.json", }, Object { + "lernaClient": undefined, "lernaDir": ".", "monorepoPackages": Array [ "@org/b", @@ -20,6 +21,7 @@ Array [ "yarnLock": undefined, }, Object { + "lernaClient": undefined, "lernaDir": ".", "monorepoPackages": Array [ "@org/a", @@ -46,6 +48,7 @@ Array [ ], }, Object { + "lernaClient": "yarn", "lernaDir": ".", "monorepoPackages": Array [ "@org/b", @@ -56,6 +59,7 @@ Array [ "yarnLock": undefined, }, Object { + "lernaClient": "yarn", "lernaDir": ".", "monorepoPackages": Array [ "@org/a", diff --git a/test/workers/branch/lock-files/index.spec.js b/test/workers/branch/lock-files/index.spec.js index cc3622e87f..5cca0fad0c 100644 --- a/test/workers/branch/lock-files/index.spec.js +++ b/test/workers/branch/lock-files/index.spec.js @@ -97,7 +97,7 @@ describe('manager/npm/post-update', () => { expect(res.yarnLockDirs[0]).toEqual('.'); }); it('returns root directory if using lerna package lock', () => { - config.lernaLockFile = 'yarn'; + config.lernaClient = 'yarn'; config.upgrades = [{}]; config.packageFiles = [ { @@ -364,7 +364,7 @@ describe('manager/npm/post-update', () => { lernaDirs: ['.'], }); config.packageFiles = []; - config.lernaLockFile = 'npm'; + config.lernaClient = 'npm'; lerna.generateLockFiles.mockReturnValueOnce({ error: false }); const res = await getAdditionalFiles(config); expect(res).toMatchSnapshot(); @@ -377,7 +377,7 @@ describe('manager/npm/post-update', () => { pnpmShrinkwrapDirs: [], lernaDirs: ['.'], }); - config.lernaLockFile = 'yarn'; + config.lernaClient = 'yarn'; lerna.generateLockFiles.mockReturnValueOnce({ error: true }); const res = await getAdditionalFiles(config); expect(res).toMatchSnapshot(); -- GitLab