From 4b38793471791414328e923ff0699e11f20f8a6b Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Sat, 5 Jan 2019 08:56:18 +0100 Subject: [PATCH] refactor: trustLevel --- lib/datasource/npm/npmrc.js | 6 +++--- lib/datasource/npm/releases.js | 5 ++--- lib/manager/composer/artifacts.js | 2 +- lib/manager/gomod/artifacts.js | 2 +- lib/manager/npm/extract/index.js | 5 +---- lib/manager/npm/post-update/index.js | 2 +- lib/workers/global/index.js | 4 +++- lib/workers/repository/init/apis.js | 5 +---- lib/workers/repository/init/config.js | 10 ++-------- test/datasource/npm/index.spec.js | 26 ++++++++++++++------------ 10 files changed, 29 insertions(+), 38 deletions(-) diff --git a/lib/datasource/npm/npmrc.js b/lib/datasource/npm/npmrc.js index 12e1d8f981..a73bf75012 100644 --- a/lib/datasource/npm/npmrc.js +++ b/lib/datasource/npm/npmrc.js @@ -14,7 +14,7 @@ function getNpmrc() { return npmrc; } -function setNpmrc(input, trustLevel = 'low') { +function setNpmrc(input) { if (input) { if (input === npmrcRaw) { return; @@ -27,7 +27,7 @@ function setNpmrc(input, trustLevel = 'low') { for (const [key, val] of Object.entries(npmrc)) { // istanbul ignore if if ( - trustLevel === 'low' && + global.trustLevel !== 'high' && key.endsWith('registry') && val && val.includes('localhost') @@ -46,7 +46,7 @@ function setNpmrc(input, trustLevel = 'low') { delete npmrc[key]; } } - if (trustLevel !== 'high') { + if (global.trustLevel !== 'high') { return; } for (const key in npmrc) { diff --git a/lib/datasource/npm/releases.js b/lib/datasource/npm/releases.js index b7e14f324e..cb8ad80849 100644 --- a/lib/datasource/npm/releases.js +++ b/lib/datasource/npm/releases.js @@ -6,9 +6,8 @@ module.exports = { }; async function getPkgReleases(purl, config) { - if (config) { - const trustLevel = config.global ? config.global.trustLevel : 'low'; - setNpmrc(config.npmrc, trustLevel); + if (config && config.npmrc) { + setNpmrc(config.npmrc); } const res = await getDependency(purl.fullname, global.testNpmRetries); if (res) { diff --git a/lib/manager/composer/artifacts.js b/lib/manager/composer/artifacts.js index 9426f015d7..54d0bf88bb 100644 --- a/lib/manager/composer/artifacts.js +++ b/lib/manager/composer/artifacts.js @@ -99,7 +99,7 @@ async function getArtifacts( await fs.outputFile(localAuthFileName, JSON.stringify(authJson)); } const env = - config.global && config.global.trustLevel === 'high' + global.trustLevel === 'high' ? process.env : { HOME: process.env.HOME, diff --git a/lib/manager/gomod/artifacts.js b/lib/manager/gomod/artifacts.js index 879d5e5de2..ad1f0cc4d5 100644 --- a/lib/manager/gomod/artifacts.js +++ b/lib/manager/gomod/artifacts.js @@ -42,7 +42,7 @@ async function getArtifacts( await fs.outputFile(localGoSumFileName, existingGoSumContent); } const env = - config.global && config.global.trustLevel === 'high' + global.trustLevel === 'high' ? process.env : { HOME: process.env.HOME, diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js index 273729d521..27fc428af9 100644 --- a/lib/manager/npm/extract/index.js +++ b/lib/manager/npm/extract/index.js @@ -96,10 +96,7 @@ async function extractPackageFile(content, fileName, config) { npmrc = npmrc.replace(/(^|\n)package-lock.*?(\n|$)/g, ''); } if (npmrc) { - if ( - npmrc.includes('=${') && - !(config.global && config.global.trustLevel === 'high') - ) { + if (npmrc.includes('=${') && !(global.trustLevel === 'high')) { logger.info('Discarding .npmrc file with variables'); npmrc = undefined; } diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js index 6d877f018f..fb76bb5327 100644 --- a/lib/manager/npm/post-update/index.js +++ b/lib/manager/npm/post-update/index.js @@ -345,7 +345,7 @@ async function getAdditionalFiles(config, packageFiles) { await fs.ensureDir(process.env.YARN_CACHE_FOLDER); const env = - config.global && config.global.trustLevel === 'high' + global.trustLevel === 'high' ? process.env : { HOME: process.env.HOME, diff --git a/lib/workers/global/index.js b/lib/workers/global/index.js index 093a89542f..a20798b1d1 100644 --- a/lib/workers/global/index.js +++ b/lib/workers/global/index.js @@ -39,12 +39,14 @@ async function start() { 'Available now for GitLab: [Renovate Pro](https://renovatebot.com/pro) with real-time webhook handling and priority job queue.'; } // Move global variables that we need to use later - const importGlobals = ['trustLevel', 'prBanner', 'prFooter']; + const importGlobals = ['prBanner', 'prFooter']; config.global = {}; importGlobals.forEach(key => { config.global[key] = config[key]; delete config[key]; }); + global.trustLevel = config.trustLevel || 'low'; + delete config.trustLevel; detectRenovateVersion(); // Iterate through repositories sequentially for (const repository of config.repositories) { diff --git a/lib/workers/repository/init/apis.js b/lib/workers/repository/init/apis.js index ebef7106c5..2e06f5d85f 100644 --- a/lib/workers/repository/init/apis.js +++ b/lib/workers/repository/init/apis.js @@ -20,10 +20,7 @@ async function initApis(input) { config = await assignPlatform(config); config = await getPlatformConfig(config); npmApi.resetMemCache(); - npmApi.setNpmrc( - config.npmrc, - config.global ? config.global.trustLevel : 'low' - ); + npmApi.setNpmrc(config.npmrc); delete config.gitPrivateKey; return config; } diff --git a/lib/workers/repository/init/config.js b/lib/workers/repository/init/config.js index f9628deae9..4c83bc4600 100644 --- a/lib/workers/repository/init/config.js +++ b/lib/workers/repository/init/config.js @@ -129,10 +129,7 @@ async function mergeRenovateConfig(config) { // istanbul ignore if if (decryptedConfig.npmrc) { logger.debug('Found npmrc in decrypted config - setting'); - npmApi.setNpmrc( - decryptedConfig.npmrc, - config.global ? config.global.trustLevel : 'low' - ); + npmApi.setNpmrc(decryptedConfig.npmrc); } // Decrypt after resolving in case the preset contains npm authentication instead const resolvedConfig = decryptConfig( @@ -146,10 +143,7 @@ async function mergeRenovateConfig(config) { logger.debug( 'Ignoring any .npmrc files in repository due to configured npmrc' ); - npmApi.setNpmrc( - resolvedConfig.npmrc, - config.global ? config.global.trustLevel : 'low' - ); + npmApi.setNpmrc(resolvedConfig.npmrc); resolvedConfig.ignoreNpmrcFile = true; } // istanbul ignore if diff --git a/test/datasource/npm/index.spec.js b/test/datasource/npm/index.spec.js index 6a510e17ba..aaad9c4951 100644 --- a/test/datasource/npm/index.spec.js +++ b/test/datasource/npm/index.spec.js @@ -18,6 +18,7 @@ describe('api/npm', () => { jest.resetAllMocks(); global.repoCache = {}; delete global.testNpmRetries; + global.trustLevel = 'low'; npm.resetCache(); npmResponse = { name: 'foobar', @@ -354,17 +355,17 @@ describe('api/npm', () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(200, npmResponse); - npm.setNpmrc('foo=bar'); - const res = await npm.getPkgReleases({ fullname: 'foobar' }); + const npmrc = 'foo=bar'; + const res = await npm.getPkgReleases({ fullname: 'foobar' }, { npmrc }); expect(res).toMatchSnapshot(); }); it('should cache package info from npm', async () => { - npm.setNpmrc('//registry.npmjs.org/:_authToken=abcdefghijklmnopqrstuvwxyz'); nock('https://registry.npmjs.org') .get('/foobar') .reply(200, npmResponse); - const res1 = await npm.getPkgReleases({ fullname: 'foobar' }); - const res2 = await npm.getPkgReleases({ fullname: 'foobar' }); + const npmrc = '//registry.npmjs.org/:_authToken=abcdefghijklmnopqrstuvwxyz'; + const res1 = await npm.getPkgReleases({ fullname: 'foobar' }, { npmrc }); + const res2 = await npm.getPkgReleases({ fullname: 'foobar' }, { npmrc }); expect(res1).not.toBe(null); expect(res1).toEqual(res2); }); @@ -378,11 +379,10 @@ describe('api/npm', () => { nock('https://npm.mycustomregistry.com') .get('/foobar') .reply(200, npmResponse); - npm.setNpmrc( + const npmrc = 'registry=https://npm.mycustomregistry.com/\n//npm.mycustomregistry.com/:_auth = ' + - Buffer.from('abcdef').toString('base64') - ); - const res = await npm.getPkgReleases({ fullname: 'foobar' }); + Buffer.from('abcdef').toString('base64'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }, { npmrc }); expect(res).toMatchSnapshot(); }); it('should replace any environment variable in npmrc', async () => { @@ -390,16 +390,18 @@ describe('api/npm', () => { .get('/foobar') .reply(200, npmResponse); process.env.REGISTRY = 'https://registry.from-env.com'; + global.trustLevel = 'high'; // eslint-disable-next-line no-template-curly-in-string - npm.setNpmrc('registry=${REGISTRY}', 'high'); - const res = await npm.getPkgReleases({ fullname: 'foobar' }); + const npmrc = 'registry=${REGISTRY}'; + const res = await npm.getPkgReleases({ fullname: 'foobar' }, { npmrc }); expect(res).toMatchSnapshot(); }); it('should throw error if necessary env var is not present', () => { let e; try { + global.trustLevel = 'high'; // eslint-disable-next-line no-template-curly-in-string - npm.setNpmrc('registry=${REGISTRY_MISSING}', 'high'); + npm.setNpmrc('registry=${REGISTRY_MISSING}'); } catch (err) { e = err; } -- GitLab