Select Git revision
extract.spec.ts
config-validator.ts 3.95 KiB
#!/usr/bin/env node
// istanbul ignore file
import 'source-map-support/register';
import { dequal } from 'dequal';
import { pathExists, readFile } from 'fs-extra';
import { configFileNames } from './config/app-strings';
import { massageConfig } from './config/massage';
import { migrateConfig } from './config/migration';
import type { RenovateConfig } from './config/types';
import { validateConfig } from './config/validation';
import { logger } from './logger';
import {
getConfig as getFileConfig,
getParsedContent,
} from './workers/global/config/parse/file';
let returnVal = 0;
async function validate(
desc: string,
config: RenovateConfig,
isPreset = false
): Promise<void> {
const { isMigrated, migratedConfig } = migrateConfig(config);
if (isMigrated) {
logger.warn(
{
oldConfig: config,
newConfig: migratedConfig,
},
'Config migration necessary'
);
}
const massagedConfig = massageConfig(migratedConfig);
const res = await validateConfig(massagedConfig, isPreset);
if (res.errors.length) {
logger.error(
{ file: desc, errors: res.errors },
'Found errors in configuration'
);
returnVal = 1;
}
if (res.warnings.length) {
logger.warn(
{ file: desc, warnings: res.warnings },
'Found errors in configuration'
);
returnVal = 1;
}
}
type PackageJson = {
renovate?: RenovateConfig;
'renovate-config'?: Record<string, RenovateConfig>;
};
(async () => {
if (process.argv.length > 2) {
for (const file of process.argv.slice(2)) {
try {
if (!(await pathExists(file))) {
returnVal = 1;
logger.error({ file }, 'File does not exist');
break;
}
const parsedContent = await getParsedContent(file);
try {
logger.info(`Validating ${file}`);
await validate(file, parsedContent);
} catch (err) {