diff --git a/lib/config/definitions.js b/lib/config/definitions.js index b66fb0b600983d2af0ce2c5d3a0746679f41f534..ddf102736f3e0b8c0e8c7ebbc49c327f120269f7 100644 --- a/lib/config/definitions.js +++ b/lib/config/definitions.js @@ -99,6 +99,15 @@ const options = [ default: false, admin: true, }, + { + name: 'mirrorMode', + description: + 'Set to true if Renovate should use fork mode with a renovate.json in branch `renovate-config`', + stage: 'repository', + type: 'boolean', + default: false, + admin: true, + }, // encryption { name: 'privateKey', diff --git a/lib/workers/repository/init/config.js b/lib/workers/repository/init/config.js index b99c3df5535df42aa6d7b55033ecbd367ba50a89..c8802f571ff62f0d9c8b2719ed3933defac4393b 100644 --- a/lib/workers/repository/init/config.js +++ b/lib/workers/repository/init/config.js @@ -8,6 +8,25 @@ const presets = require('../../../config/presets'); // Check for config in `renovate.json` async function mergeRenovateConfig(config) { let returnConfig = { ...config }; + // istanbul ignore if + if (config.mirrorMode) { + logger.info('Repository is in mirror mode'); + let renovateJson; + try { + renovateJson = JSON.parse( + await platform.getFile('renovate.json', 'renovate-config') + ); + logger.info('Found mirror config'); + } catch (err) { + logger.debug('No mirror config found - using default config'); + renovateJson = { extends: ['config:base'] }; + } + const migratedConfig = migrateAndValidate(config, renovateJson); + const resolvedConfig = await presets.resolveConfigPresets(migratedConfig); + returnConfig = mergeChildConfig(returnConfig, resolvedConfig); + returnConfig.renovateJsonPresent = true; + return returnConfig; + } const fileList = await platform.getFileList(); let configFile; if (fileList.includes('renovate.json')) {