diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js index 8da96c9e3c961bc2d945dcb725fc893e59153d53..ad606f9b95ec099b6a75a0015dc547f9d920fddd 100644 --- a/lib/manager/npm/post-update/index.js +++ b/lib/manager/npm/post-update/index.js @@ -26,15 +26,13 @@ function determineLockFileDirs(config, packageFiles) { for (const upgrade of config.upgrades) { if (upgrade.type === 'lockFileMaintenance') { - // TODO: support lerna // Return every directory that contains a lockfile for (const packageFile of packageFiles.npm) { if ( packageFile.lernaDir && (packageFile.npmLock || packageFile.yarnLock) ) { - logger.info('Skipping lerna lockFileMaintenance - unsupported'); - // TODO: lernaDirs.push(packageFile.lernaDir); + lernaDirs.push(packageFile.lernaDir); } else { yarnLockDirs.push(packageFile.yarnLock); npmLockDirs.push(packageFile.npmLock); @@ -460,17 +458,16 @@ async function getAdditionalFiles(config, packageFiles) { for (const lernaDir of dirs.lernaDirs) { let lockFile; - if (config.lernaClient === 'npm') { - lockFile = config.npmLock || 'package-lock.json'; - } else { - lockFile = config.yarnLock || 'yarn.lock'; - } - logger.debug( - { lernaClient: config.lernaClient, lockFile }, - 'Generating lock files using lerna' + logger.debug(`Finding package.json for lerna directory "${lernaDir}"`); + const lernaPackageFile = packageFiles.npm.find( + p => path.dirname(p.packageFile) === lernaDir ); + if (!lernaPackageFile) { + logger.debug('No matching package.json found'); + throw new Error('lerna-no-lockfile'); + } const res = await lerna.generateLockFiles( - config.lernaClient, + lernaPackageFile.lernaClient, upath.join(config.tmpDir.path, lernaDir), env );