From ae622159366b4cc37f84e5ee65e1a28587d256fa Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 28 Jun 2018 12:33:45 +0200
Subject: [PATCH] feat(npm): lerna lockFile maintenance

Adds support for lock file maintenance when lerna is in use.

Closes #1974
---
 lib/manager/npm/post-update/index.js | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js
index 8da96c9e3c..ad606f9b95 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
     );
-- 
GitLab