ci-executer
Version:
Job executer for CI
74 lines (73 loc) • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const chalk = require("chalk");
const fs = require("fs");
const path = require("path");
const finder = require("find-package-json");
const Ajv = require("ajv");
const jtomler_1 = require("jtomler");
const json_from_default_schema_1 = require("json-from-default-schema");
const config_schema = require("./schemes/config.json");
const job_schema = require("./schemes/jobs.json");
const pkg = finder(__dirname).next().value;
commander_1.program.version(`version: ${pkg.version}`, "-v, --version", "output the current version.");
commander_1.program.name(pkg.name);
commander_1.program.option("-c, --config <path>", "Path to config file.");
commander_1.program.option("-s, --scope <name>", "Name of execution scope.", "default");
commander_1.program.parse(process.argv);
if (process.env["CI_EXECUTER_CONFIG_PATH"] === undefined) {
if (commander_1.program.config === undefined) {
console.error(`${chalk.red("[ERROR]")} Not set --config key`);
process.exit(1);
}
}
else {
commander_1.program.config = process.env["CI_EXECUTER_CONFIG_PATH"];
}
if (process.env["CI_EXECUTER_SCOPE"] !== undefined) {
commander_1.program.scope = process.env["CI_EXECUTER_SCOPE"];
}
const full_config_path = path.resolve(process.cwd(), commander_1.program.config);
if (!fs.existsSync(full_config_path)) {
console.error(`${chalk.red("[ERROR]")} Config file ${full_config_path} not found`);
process.exit(1);
}
const config = json_from_default_schema_1.default(jtomler_1.default(full_config_path), config_schema);
const ajv = new Ajv();
const validate = ajv.compile(config_schema);
if (!validate(config)) {
console.error(`${chalk.red("[ERROR]")} Schema errors:\n${JSON.stringify(validate.errors, null, 2)}`);
process.exit(1);
}
let index = 0;
const names_list = [];
for (let item of config.jobs) {
const ajv_item = new Ajv();
const validate_item = ajv_item.compile(job_schema);
if (typeof item.include === "string") {
const full_config_path = path.resolve(process.cwd(), item.include);
if (!fs.existsSync(full_config_path)) {
console.error(`${chalk.red("[ERROR]")} Job file ${full_config_path} not found`);
process.exit(1);
}
item = json_from_default_schema_1.default(jtomler_1.default(full_config_path), job_schema);
config.jobs[index] = item;
}
else {
item = json_from_default_schema_1.default(item, job_schema);
config.jobs[index] = item;
}
if (!validate_item(item)) {
console.error(`${chalk.red("[ERROR]")} Config job parsing error. Schema errors:\n${JSON.stringify(validate_item.errors, null, 2)}`);
process.exit(1);
}
if (names_list.includes(item.name)) {
console.error(`${chalk.red("[ERROR]")} Job named ${item.name} already exist`);
process.exit(1);
}
names_list.push(item.name);
index++;
}
config.scope = commander_1.program.scope;
exports.default = config;