UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

113 lines (112 loc) 5.35 kB
import { CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_VALIDATION } from "../../../constants/error-messages.js"; import { setUserConfigFileNames } from "../../../config/app-strings.js"; import { logger } from "../../../logger/index.js"; import { mergeChildConfig } from "../../../config/utils.js"; import { InheritConfig } from "../../../config/inherit.js"; import { compile } from "../../../util/template/index.js"; import { resolveConfigPresets } from "../../../config/presets/index.js"; import { validateConfig } from "../../../config/validation.js"; import { decryptConfig } from "../../../config/decrypt.js"; import { applySecretsAndVariablesToConfig } from "../../../config/secrets.js"; import { platform } from "../../../modules/platform/index.js"; import { removeGlobalConfig } from "../../../config/index.js"; import { parseFileConfig } from "../../../config/parse.js"; import { applyHostRules } from "./merge.js"; import { isNonEmptyArray, isNullOrUndefined, isString } from "@sindresorhus/is"; import { dequal } from "dequal"; //#region lib/workers/repository/init/inherited.ts async function mergeInheritedConfig(config) { if (!config.repository || !config.inheritConfig) return config; if (!isString(config.inheritConfigRepoName) || !isString(config.inheritConfigFileName)) { logger.error({ inheritConfigRepoName: config.inheritConfigRepoName, inheritConfigFileName: config.inheritConfigFileName }, "Invalid inherited config."); return config; } const templateConfig = { topLevelOrg: config.topLevelOrg, parentOrg: config.parentOrg, repository: config.repository }; const inheritConfigRepoName = compile(config.inheritConfigRepoName, templateConfig, false); logger.trace({ templateConfig, inheritConfigRepoName }, "Compiled inheritConfigRepoName result."); logger.debug(`Checking for inherited config file ${config.inheritConfigFileName} in repo ${inheritConfigRepoName}.`); let configFileRaw = null; try { configFileRaw = await platform.getRawFile(config.inheritConfigFileName, inheritConfigRepoName); } catch (err) { if (config.inheritConfigStrict) { logger.debug({ err }, "Error getting inherited config."); throw new Error(CONFIG_INHERIT_NOT_FOUND); } logger.trace({ err }, `Error getting inherited config.`); } if (!configFileRaw) { logger.debug(`No inherited config found in ${inheritConfigRepoName}.`); return config; } const parseResult = parseFileConfig(config.inheritConfigFileName, configFileRaw); if (!parseResult.success) { logger.debug({ parseResult }, "Error parsing inherited config."); throw new Error(CONFIG_INHERIT_PARSE_ERROR); } const inheritedConfig = parseResult.parsedContents; logger.debug({ config: inheritedConfig }, `Inherited config`); const res = await validateConfig("inherit", inheritedConfig); if (res.errors.length) { logger.warn({ errors: res.errors }, "Found errors in inherited configuration."); throw new Error(CONFIG_VALIDATION); } if (res.warnings.length) logger.warn({ warnings: res.warnings }, "Found warnings in inherited configuration."); if (isNonEmptyArray(inheritedConfig.configFileNames)) { logger.debug({ configFileNames: inheritedConfig.configFileNames }, "Updated the config filenames list"); setUserConfigFileNames(inheritedConfig.configFileNames); delete config.configFileNames; } let decryptedConfig = await decryptConfig(inheritedConfig, config.repository); let filteredConfig = removeGlobalConfig(decryptedConfig, true); if (!dequal(decryptedConfig, filteredConfig)) logger.debug({ inheritedConfig: decryptedConfig, filteredConfig }, "Removed global config from inherited config."); if (isNullOrUndefined(filteredConfig.extends)) { filteredConfig = applySecretsAndVariablesToConfig({ config: filteredConfig, secrets: config.secrets ?? {}, variables: config.variables ?? {} }); applyHostRules(filteredConfig); filteredConfig = InheritConfig.set(filteredConfig); return mergeChildConfig(config, filteredConfig); } logger.debug("Resolving presets found in inherited config"); const { config: resolvedConfig } = await resolveConfigPresets(filteredConfig, config, config.ignorePresets); logger.trace({ config: resolvedConfig }, "Resolved inherited config"); const validationRes = await validateConfig("inherit", resolvedConfig); if (validationRes.errors.length) { logger.warn({ errors: validationRes.errors }, "Found errors in presets inside the inherited configuration."); throw new Error(CONFIG_VALIDATION); } if (validationRes.warnings.length) logger.warn({ warnings: validationRes.warnings }, "Found warnings in presets inside the inherited configuration."); decryptedConfig = await decryptConfig(resolvedConfig, config.repository); filteredConfig = removeGlobalConfig(decryptedConfig, true); if (!dequal(decryptedConfig, filteredConfig)) logger.debug({ inheritedConfig: decryptedConfig, filteredConfig }, "Removed global config from inherited config presets."); filteredConfig = applySecretsAndVariablesToConfig({ config: filteredConfig, secrets: config.secrets ?? {}, variables: config.variables ?? {} }); applyHostRules(filteredConfig); filteredConfig = InheritConfig.set(filteredConfig); return mergeChildConfig(config, filteredConfig); } //#endregion export { mergeInheritedConfig }; //# sourceMappingURL=inherited.js.map