From beb37bc1283a9cadd38f863110be15a55ab7026a Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Mon, 24 Jul 2017 20:56:15 +0200
Subject: [PATCH] feat(lockFile): Support lockFileMaintenance disabling in env
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

It’s now possible to set `RENOVATE_LOCK_FILE_MAINTENANCE={}` in env to disable lock file maintenance.

Closes #515
---
 docs/configuration.md             |  2 +-
 lib/config/definitions.js         |  1 -
 lib/config/env.js                 |  1 +
 lib/workers/package-file/index.js | 21 +++++++++++----------
 test/config/env.spec.js           |  4 ++++
 5 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/docs/configuration.md b/docs/configuration.md
index 160cd05626..8683cc05b8 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -474,7 +474,7 @@ Obviously, you can't set repository or package file location with this method.
   "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request updates `package.json` lock files to use the latest dependency versions.\n\n{{#if schedule}}\n**Note**: This PR was created on a configured schedule (\"{{schedule}}\"{{#if timezone}} in timezone `{{timezone}}`{{/if}}) and will not receive updates outside those times.\n{{/if}}\n\n{{#if hasErrors}}\n\n---\n\n### Errors\n\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\n\n{{#each errors as |error|}}\n-   `{{error.depName}}`: {{error.message}}\n{{/each}}\n{{/if}}\n\n{{#if hasWarnings}}\n\n---\n\n### Warnings\n\nPlease make sure the following warnings are safe to ignore:\n\n{{#each warnings as |warning|}}\n-   `{{warning.depName}}`: {{warning.message}}\n{{/each}}\n{{/if}}\n\n---\n\nThis {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://renovateapp.com).",
   "schedule": "before 5am on monday"
 }</pre></td>
-  <td></td>
+  <td>`RENOVATE_LOCK_FILE_MAINTENANCE`</td>
   <td><td>
 </tr>
 <tr>
diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index 68eb7a605d..389f016e25 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -313,7 +313,6 @@ const options = [
       schedule: 'before 5am on monday',
     },
     cli: false,
-    env: false,
     mergeable: true,
   },
   // Dependency Groups
diff --git a/lib/config/env.js b/lib/config/env.js
index 50d1004293..5d8db9d41c 100644
--- a/lib/config/env.js
+++ b/lib/config/env.js
@@ -26,6 +26,7 @@ function getConfig(env) {
     list: val => val.split(',').map(el => el.trim()),
     string: val => val,
     integer: val => parseInt(val, 10),
+    json: val => JSON.parse(val),
   };
 
   options.forEach(option => {
diff --git a/lib/workers/package-file/index.js b/lib/workers/package-file/index.js
index 35099da4fc..80a30cdc08 100644
--- a/lib/workers/package-file/index.js
+++ b/lib/workers/package-file/index.js
@@ -70,21 +70,22 @@ async function renovatePackageFile(packageFileConfig) {
   if (await config.api.getFileContent(packageLockFileName)) {
     config.hasPackageLock = true;
   }
-  if (config.hasYarnLock || config.hasPackageLock) {
+  if (
+    config.lockFileMaintenance.enabled &&
+    (config.hasYarnLock || config.hasPackageLock)
+  ) {
+    logger.debug('lockFileMaintenance enabled');
     // Maintain lock files
     const lockFileMaintenanceConf = configParser.mergeChildConfig(
       config,
       config.lockFileMaintenance
     );
-    if (lockFileMaintenanceConf.enabled) {
-      logger.debug('lockFileMaintenance enabled');
-      lockFileMaintenanceConf.type = 'lockFileMaintenance';
-      logger.debug(
-        { config: lockFileMaintenanceConf },
-        `lockFileMaintenanceConf`
-      );
-      upgrades.push(lockFileMaintenanceConf);
-    }
+    lockFileMaintenanceConf.type = 'lockFileMaintenance';
+    logger.debug(
+      { config: lockFileMaintenanceConf },
+      `lockFileMaintenanceConf`
+    );
+    upgrades.push(lockFileMaintenanceConf);
   }
 
   logger.info('Finished processing package file');
diff --git a/test/config/env.spec.js b/test/config/env.spec.js
index 0b09cfd80a..f454a8ad7a 100644
--- a/test/config/env.spec.js
+++ b/test/config/env.spec.js
@@ -34,6 +34,10 @@ describe('config/env', () => {
       const envParam = { RENOVATE_GITHUB_APP_ID: 5 };
       env.getConfig(envParam).should.eql({ githubAppId: 5 });
     });
+    it('supports json', () => {
+      const envParam = { RENOVATE_LOCK_FILE_MAINTENANCE: '{}' };
+      expect(env.getConfig(envParam)).toEqual({ lockFileMaintenance: {} });
+    });
   });
   describe('.getEnvName(definition)', () => {
     it('returns empty', () => {
-- 
GitLab