diff --git a/lib/config/index.ts b/lib/config/index.ts index a005f9bf1ee8ed..366813c25a0c80 100644 --- a/lib/config/index.ts +++ b/lib/config/index.ts @@ -7,7 +7,6 @@ import * as defaultsParser from './defaults'; import * as definitions from './definitions'; import * as envParser from './env'; import * as fileParser from './file'; -import { resolveConfigPresets } from './presets'; import type { GlobalConfig, ManagerConfig, @@ -47,10 +46,10 @@ export async function parseConfigs( logger.debug('Parsing configs'); // Get configs - const defaultConfig = await resolveConfigPresets(defaultsParser.getConfig()); - const fileConfig = await resolveConfigPresets(fileParser.getConfig(env)); - const cliConfig = await resolveConfigPresets(cliParser.getConfig(argv)); - const envConfig = await resolveConfigPresets(envParser.getConfig(env)); + const defaultConfig = defaultsParser.getConfig(); + const fileConfig = fileParser.getConfig(env); + const cliConfig = cliParser.getConfig(argv); + const envConfig = envParser.getConfig(env); let config: GlobalConfig = mergeChildConfig(fileConfig, envConfig); config = mergeChildConfig(config, cliConfig); diff --git a/lib/constants/error-messages.ts b/lib/constants/error-messages.ts index b032e18fcee8a2..eec1bbff1ecdff 100644 --- a/lib/constants/error-messages.ts +++ b/lib/constants/error-messages.ts @@ -12,6 +12,7 @@ export const PLATFORM_RATE_LIMIT_EXCEEDED = 'rate-limit-exceeded'; // Config Error export const CONFIG_VALIDATION = 'config-validation'; +export const CONFIG_PRESETS_INVALID = 'config-presets-invalid'; export const CONFIG_SECRETS_EXPOSED = 'config-secrets-exposed'; export const CONFIG_SECRETS_INVALID = 'config-secrets-invalid'; diff --git a/lib/workers/global/index.ts b/lib/workers/global/index.ts index 0d7978fb735f75..d7715983fe8c8c 100644 --- a/lib/workers/global/index.ts +++ b/lib/workers/global/index.ts @@ -5,12 +5,14 @@ import { satisfies } from 'semver'; import upath from 'upath'; import * as pkg from '../../../package.json'; import * as configParser from '../../config'; +import { resolveConfigPresets } from '../../config/presets'; import { validateConfigSecrets } from '../../config/secrets'; import type { GlobalConfig, RenovateConfig, RenovateRepository, } from '../../config/types'; +import { CONFIG_PRESETS_INVALID } from '../../constants/error-messages'; import { getProblems, logger, setMeta } from '../../logger'; import { setUtilConfig } from '../../util'; import * as hostRules from '../../util/host-rules'; @@ -70,6 +72,14 @@ function checkEnv(): void { } } +export async function validatePresets(config: GlobalConfig): Promise { + try { + await resolveConfigPresets(config); + } catch (err) /* istanbul ignore next */ { + throw new Error(CONFIG_PRESETS_INVALID); + } +} + export async function start(): Promise { let config: GlobalConfig; try { @@ -78,6 +88,8 @@ export async function start(): Promise { // initialize all submodules config = await globalInitialize(config); + await validatePresets(config); + checkEnv(); // validate secrets. Will throw and abort if invalid