From 1352bbeb180e6683bf83ab3c33c2d8e310be5cf0 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Mon, 14 May 2018 08:11:23 +0200
Subject: [PATCH] feat: discard npmrc if containing variables
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

.npmrc files will fail during lock file generation if they contain unexpanded variables, so it’s better to discard them instead.
---
 lib/manager/npm/extract/index.js       | 10 +++++++++-
 test/manager/npm/extract/index.spec.js | 15 +++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index ee0f113a7e..0bf8367315 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -58,7 +58,15 @@ async function extractDependencies(content, packageFile, config) {
     npmrc = await platform.getFile(
       upath.join(path.dirname(packageFile), '.npmrc')
     );
-    if (!npmrc) {
+    if (npmrc) {
+      if (
+        npmrc.includes('=${') &&
+        !(config.global && config.global.exposeEnv)
+      ) {
+        logger.info('Discarding .npmrc file with variables');
+        npmrc = undefined;
+      }
+    } else {
       npmrc = undefined;
     }
   }
diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js
index ff50edd003..9feba1afad 100644
--- a/test/manager/npm/extract/index.spec.js
+++ b/test/manager/npm/extract/index.spec.js
@@ -75,6 +75,21 @@ describe('manager/npm/extract', () => {
       );
       expect(res).toMatchSnapshot();
     });
+    it('finds and discards .npmrc', async () => {
+      platform.getFile = jest.fn(fileName => {
+        if (fileName === '.npmrc') {
+          // eslint-disable-next-line
+          return '//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}\n';
+        }
+        return null;
+      });
+      const res = await npmExtract.extractDependencies(
+        input01Content,
+        'package.json',
+        { global: {} }
+      );
+      expect(res.npmrc).toBeUndefined();
+    });
     it('finds lerna', async () => {
       platform.getFile = jest.fn(fileName => {
         if (fileName === 'lerna.json') {
-- 
GitLab