UNPKG

ci-executer

Version:
74 lines (73 loc) 3.14 kB
"use strict"; 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;