From 11d7f26cc12cecfc32628757245f0a29cd84a0e7 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Fri, 3 Nov 2017 07:51:44 +0100 Subject: [PATCH] refactor: perform decrypt as part of merge renovate.json (#1086) Also clarify docs that encrypted config must be contained in renovate.json (i.e. not package.json). --- docs/configuration.md | 2 +- lib/config/decrypt.js | 8 ++------ lib/config/definitions.js | 2 +- lib/workers/repository/apis.js | 9 ++++++++- lib/workers/repository/index.js | 3 --- test/config/decrypt.spec.js | 17 ++++++++--------- 6 files changed, 20 insertions(+), 21 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index b82d4e2f04..d837f7fdbe 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -172,7 +172,7 @@ Obviously, you can't set repository or package file location with this method. </tr> <tr> <td>`encrypted`</td> - <td>A configuration object containing configuration encrypted with project key</td> + <td>A configuration object containing configuration encrypted with project key. Valid inside renovate.json only</td> <td>json</td> <td><pre>null</pre></td> <td>`RENOVATE_ENCRYPTED`</td> diff --git a/lib/config/decrypt.js b/lib/config/decrypt.js index e0c3ae04dc..5897409793 100644 --- a/lib/config/decrypt.js +++ b/lib/config/decrypt.js @@ -4,13 +4,9 @@ module.exports = { decryptConfig, }; -function decryptConfig( - config, - logger = config.logger, - privateKey = config.privateKey -) { - const decryptedConfig = { ...config }; +function decryptConfig(config, logger, privateKey) { logger.trace({ config }, 'decryptConfig'); + const decryptedConfig = { ...config }; for (const key of Object.keys(config)) { const val = config[key]; if (key === 'encrypted' && isObject(val)) { diff --git a/lib/config/definitions.js b/lib/config/definitions.js index c128f35a02..d552e64479 100644 --- a/lib/config/definitions.js +++ b/lib/config/definitions.js @@ -89,7 +89,7 @@ const options = [ { name: 'encrypted', description: - 'A configuration object containing configuration encrypted with project key', + 'A configuration object containing configuration encrypted with project key. Valid inside renovate.json only', stage: 'repository', type: 'json', default: null, diff --git a/lib/workers/repository/apis.js b/lib/workers/repository/apis.js index 05bcf1ac0d..e1613883ca 100644 --- a/lib/workers/repository/apis.js +++ b/lib/workers/repository/apis.js @@ -12,6 +12,8 @@ const githubPlatform = require('../../platform/github'); const gitlabPlatform = require('../../platform/gitlab'); const dockerResolve = require('../../manager/docker/resolve'); +const { decryptConfig } = require('../../config/decrypt'); + module.exports = { detectSemanticCommits, checkMonorepos, @@ -213,8 +215,13 @@ async function mergeRenovateJson(config, branchName) { logger.debug({ config: renovateJson }, 'renovate.json config'); const migratedConfig = migrateAndValidate(config, renovateJson); logger.debug({ config: migratedConfig }, 'renovate.json migrated config'); - const resolvedConfig = await presets.resolveConfigPresets( + const decryptedConfig = decryptConfig( migratedConfig, + logger, + config.privateKey + ); + const resolvedConfig = await presets.resolveConfigPresets( + decryptedConfig, config.logger ); logger.debug({ config: resolvedConfig }, 'renovate.json resolved config'); diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js index 7000cd3b83..73d9b14079 100644 --- a/lib/workers/repository/index.js +++ b/lib/workers/repository/index.js @@ -8,7 +8,6 @@ const apis = require('./apis'); const onboarding = require('./onboarding'); const upgrades = require('./upgrades'); const cleanup = require('./cleanup'); -const { decryptConfig } = require('../../config/decrypt'); module.exports = { pinDependenciesFirst, @@ -109,8 +108,6 @@ async function renovateRepository(repoConfig, token) { logger.trace({ config }, 'post-packageFiles config'); // TODO: why is this fix needed?! config.logger = logger; - config = decryptConfig(config); - logger.trace({ config }, 'post-decrypt config'); const allUpgrades = await upgrades.determineRepoUpgrades(config); const res = await upgrades.branchifyUpgrades(allUpgrades, logger); config.errors = config.errors.concat(res.errors); diff --git a/test/config/decrypt.spec.js b/test/config/decrypt.spec.js index 456f42bd37..62543105a9 100644 --- a/test/config/decrypt.spec.js +++ b/test/config/decrypt.spec.js @@ -1,37 +1,36 @@ const { decryptConfig } = require('../../lib/config/decrypt.js'); -const defaultConfig = require('../../lib/config/defaults').getConfig(); const logger = require('../_fixtures/logger'); const fs = require('fs'); const privateKey = fs.readFileSync('test/_fixtures/keys/private.pem'); -describe('config/massage', () => { - describe('massageConfig', () => { +describe('config/decrypt', () => { + describe('decryptConfig()', () => { let config; beforeEach(() => { - config = { ...defaultConfig, logger }; + config = {}; }); it('returns empty with no privateKey', () => { delete config.encrypted; - const res = decryptConfig(config); + const res = decryptConfig(config, logger); expect(res).toMatchObject(config); }); it('warns if no privateKey found', () => { config.encrypted = { a: '1' }; - const res = decryptConfig(config); + const res = decryptConfig(config, logger); expect(res.encrypted).not.toBeDefined(); expect(res.a).not.toBeDefined(); }); it('handles invalid encrypted type', () => { config.encrypted = 1; config.privateKey = privateKey; - const res = decryptConfig(config); + const res = decryptConfig(config, logger, privateKey); expect(res.encrypted).not.toBeDefined(); }); it('handles invalid encrypted value', () => { config.encrypted = { a: 1 }; config.privateKey = privateKey; - const res = decryptConfig(config); + const res = decryptConfig(config, logger, privateKey); expect(res.encrypted).not.toBeDefined(); expect(res.a).not.toBeDefined(); }); @@ -50,7 +49,7 @@ describe('config/massage', () => { }, }, ]; - const res = decryptConfig(config); + const res = decryptConfig(config, logger, privateKey); expect(res.encrypted).not.toBeDefined(); expect(res.packageFiles[0].devDependencies.encrypted).not.toBeDefined(); expect(res.packageFiles[0].devDependencies.branchPrefix).toEqual( -- GitLab