Select Git revision
developing-prometheus-rules-and-grafana-dashboards.md
validation.ts 16.99 KiB
import is from '@sindresorhus/is';
import { getLanguageList, getManagerList } from '../manager';
import { configRegexPredicate, isConfigRegex, regEx } from '../util/regex';
import * as template from '../util/template';
import { hasValidSchedule, hasValidTimezone } from '../workers/branch/schedule';
import { getOptions } from './definitions';
import { resolveConfigPresets } from './presets';
import type {
RenovateConfig,
RenovateOptions,
ValidationMessage,
} from './types';
import * as managerValidator from './validation-helpers/managers';
const options = getOptions();
let optionTypes: Record<string, RenovateOptions['type']>;
let optionParents: Record<string, RenovateOptions['parent']>;
export interface ValidationResult {
errors: ValidationMessage[];
warnings: ValidationMessage[];
}
const managerList = getManagerList();
function isManagerPath(parentPath: string): boolean {
return (
/^regexManagers\[[0-9]+]$/.test(parentPath) ||
managerList.includes(parentPath)
);
}
export function getParentName(parentPath: string): string {
return parentPath
? parentPath
.replace(/\.?encrypted$/, '')
.replace(/\[\d+\]$/, '')
.split('.')
.pop()
: '.';
}
const topLevelObjects = getLanguageList().concat(getManagerList());
export async function validateConfig(
config: RenovateConfig,
isPreset?: boolean,
parentPath?: string
): Promise<ValidationResult> {
if (!optionTypes) {
optionTypes = {};
options.forEach((option) => {
optionTypes[option.name] = option.type;
});
}
if (!optionParents) {
optionParents = {};
options.forEach((option) => {
if (option.parent) {
optionParents[option.name] = option.parent;
}
});
}
let errors: ValidationMessage[] = [];
let warnings: ValidationMessage[] = [];
function getDeprecationMessage(option: string): string {
const deprecatedOptions = {
branchName: `Direct editing of branchName is now deprecated. Please edit branchPrefix, additionalBranchPrefix, or branchTopic instead`,