UNPKG

@pubgcorp/pk-template

Version:
234 lines 20.6 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.exec = exports.tpl = exports.promptSuccess = exports.promptSkip = exports.promptStart = exports.prompt = exports.isValidDeployment = exports.visitEachDeployments = exports.getEnvNames = exports.getCurrentDirectoryApp = exports.atModuleDir = exports.atAppDir = exports.invokeModuleHooks = exports.atProjectDir = exports.atDir = exports.atHomeDir = exports.tryCatch = exports.log = void 0; const exception_1 = require("../pk-util/exception"); const projectConf_1 = require("../pk-conf/projectConf"); const path_1 = require("path"); const module_1 = require("../pk-conf/module"); const os_1 = require("os"); const preserveDir_1 = require("../pk-util/preserveDir"); const lazy_1 = require("../lazy"); const child_process_1 = require("child_process"); const fs_1 = require("fs"); const log = (...args) => console.log(...args); exports.log = log; const tryCatch = (cb, debug) => __awaiter(void 0, void 0, void 0, function* () { try { yield cb(); } catch (e) { yield (0, exception_1.exceptionHandler)(e, debug); } }); exports.tryCatch = tryCatch; const atHomeDir = (cb) => __awaiter(void 0, void 0, void 0, function* () { const home = (0, os_1.homedir)(); yield (0, exports.atDir)(home, () => __awaiter(void 0, void 0, void 0, function* () { yield cb(home); })); }); exports.atHomeDir = atHomeDir; const atDir = (dir, cb) => __awaiter(void 0, void 0, void 0, function* () { yield (0, preserveDir_1.preserveDir)(() => __awaiter(void 0, void 0, void 0, function* () { process.chdir(dir); yield cb(dir); })); }); exports.atDir = atDir; const atProjectDir = (cb) => __awaiter(void 0, void 0, void 0, function* () { const { projectRoot, projectConf } = projectConf_1.PkProjectConf.find(); if (!projectRoot || !projectConf) { throw new Error(`cannot find ${projectConf_1.PkProjectConf.FILENAME}`); } yield (0, exports.atDir)(projectRoot, () => __awaiter(void 0, void 0, void 0, function* () { yield cb(projectRoot, projectConf); })); }); exports.atProjectDir = atProjectDir; const invokeModuleHooks = (pk, projectConf, name, value) => __awaiter(void 0, void 0, void 0, function* () { for (const mod of projectConf.data.modules) { const hookPath = (0, path_1.join)(process.cwd(), 'pk-modules', mod.name, 'hooks', `${name}.js`); if ((0, fs_1.existsSync)(hookPath)) { const hook = require(hookPath)(pk); yield hook(value); } } }); exports.invokeModuleHooks = invokeModuleHooks; const atAppDir = (appName, cb) => __awaiter(void 0, void 0, void 0, function* () { const { projectRoot, projectConf } = projectConf_1.PkProjectConf.find(); if (!projectRoot || !projectConf) { throw new Error(`cannot find ${projectConf_1.PkProjectConf.FILENAME}`); } const app = projectConf.getApp(appName); if (!app) { throw new Error(`app ${appName} does not exists`); } yield (0, exports.atDir)((0, path_1.join)(projectRoot, appName), () => __awaiter(void 0, void 0, void 0, function* () { yield cb(app); })); }); exports.atAppDir = atAppDir; const atModuleDir = (moduleName, cb) => __awaiter(void 0, void 0, void 0, function* () { const { projectRoot, projectConf } = projectConf_1.PkProjectConf.find(); if (!projectRoot || !projectConf) { throw new Error(`cannot find ${projectConf_1.PkProjectConf.FILENAME}`); } const module = projectConf.getModule(moduleName); if (!module) { throw new Error(`module ${moduleName} does not exists`); } yield (0, exports.atDir)((0, path_1.join)(projectRoot, module_1.MODULE_DIR, moduleName), () => __awaiter(void 0, void 0, void 0, function* () { yield cb(module); })); }); exports.atModuleDir = atModuleDir; const getCurrentDirectoryApp = (apps, root, cwd) => { const app = apps.find(app => (0, path_1.normalize)(cwd) === (0, path_1.normalize)((0, path_1.join)(root, app.name))); if (!app) { throw new Error('please specify app anme'); } return app; }; exports.getCurrentDirectoryApp = getCurrentDirectoryApp; const getEnvNames = (projectConf, app) => { const envs = {}; if (projectConf.data.envs) { for (const env of projectConf.data.envs) { envs[env.name] = true; } } if (app.envs) { for (const env of app.envs) { envs[env.name] = true; } } return Object.keys(envs); }; exports.getEnvNames = getEnvNames; const visitEachDeployments = (appName, envName, clusterName, cbb) => __awaiter(void 0, void 0, void 0, function* () { const cwd = process.cwd(); yield (0, exports.atProjectDir)((projectRoot, projectConf) => __awaiter(void 0, void 0, void 0, function* () { if (!projectConf.data.apps || projectConf.data.apps.length == 0) { throw new Error('no apps defined in pk-project.yaml'); } if (appName == '.') { appName = (0, exports.getCurrentDirectoryApp)(projectConf.data.apps, projectRoot, cwd).name; } // const appNames = targetAppNames(projectRoot, projectConf); for (const app of projectConf.data.apps) { if (appName != 'all' && appName != app.name) { continue; } yield (0, exports.atAppDir)(app.name, (app) => __awaiter(void 0, void 0, void 0, function* () { const envs = app.envs || projectConf.data.envs; if (envs.length == 0) { if (envName && envName != 'all') { throw new Error(`env ${envName} does not exists`); } } for (const env of envs) { if (envName != 'all' && envName && envName != env.name) { continue; } for (const cluster of env.clusters) { if (clusterName != 'all' && clusterName && clusterName != cluster) { continue; } console.log(`* app = ${app.name}, env = ${env.name}, cluster = ${cluster}`); yield cbb(projectRoot, projectConf, app, env.name, cluster); } } })); } })); }); exports.visitEachDeployments = visitEachDeployments; const isValidDeployment = (appName, envName, clusterName) => __awaiter(void 0, void 0, void 0, function* () { const { projectRoot, projectConf } = projectConf_1.PkProjectConf.find(); if (!projectRoot || !projectConf) { // throw new Error(`cannot find ${PkProjectConf.FILENAME}`); return false; } if (!projectConf.data.apps || projectConf.data.apps.length == 0) { // throw new Error('no apps defined in pk-project.yaml'); return false; } const app = projectConf.getApp(appName); if (!app) { // throw new Error(`app ${appName} does not exists`); return false; } const envs = app.envs || projectConf.data.envs; const env = envs.find(e => e.name === envName); if (!env) { // throw new Error(`env ${envName} does not exists`); return false; } const cluster = env.clusters.find(c => c === clusterName); if (!cluster) { // throw new Error(`cluster ${clusterName} does not exists`); return false; } return true; }); exports.isValidDeployment = isValidDeployment; const prompt = (inq) => __awaiter(void 0, void 0, void 0, function* () { return yield (0, lazy_1.getInquirer)().prompt(inq); }); exports.prompt = prompt; const promptStart = (msg) => { console.log((0, lazy_1.getChalk)().grey(` ${msg} ...`)); }; exports.promptStart = promptStart; const promptSkip = () => { console.log((0, lazy_1.getChalk)().grey(' skipped !!!')); }; exports.promptSkip = promptSkip; const promptSuccess = (msg) => { console.log((0, lazy_1.getChalk)().grey(` ${msg} !!!`)); }; exports.promptSuccess = promptSuccess; const tpl = (file) => { const _ = (0, lazy_1.getUnderscore)(); const tpl = (0, fs_1.readFileSync)(file, 'utf8'); return _.template(tpl); }; exports.tpl = tpl; const exec = (command) => __awaiter(void 0, void 0, void 0, function* () { console.log((0, lazy_1.getChalk)().grey(` * exec: ${command}`)); return new Promise((resolve, reject) => { var _a, _b; try { const ps = (0, child_process_1.exec)(command); process.stdout.write(' '); const cb = (data) => { const indented = data.replace(/\n/g, '\n '); process.stdout.write((0, lazy_1.getChalk)().grey(indented)); }; (_a = ps.stdout) === null || _a === void 0 ? void 0 : _a.on('data', cb); (_b = ps.stderr) === null || _b === void 0 ? void 0 : _b.on('data', cb); ps.on('close', code => { console.log(); if (code == 0) { resolve(); } reject(new Error(`process exited with code = ${code}`)); }); } catch (e) { reject(e); } }); }); exports.exec = exec; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9way9saWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLG9EQUF3RDtBQUN4RCx3REFBdUQ7QUFFdkQsK0JBQXVDO0FBQ3ZDLDhDQUErQztBQUMvQywyQkFBNkI7QUFDN0Isd0RBQXFEO0FBQ3JELGtDQUErRDtBQUMvRCxpREFBMkQ7QUFDM0QsMkJBQThDO0FBR3ZDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUE3QyxRQUFBLEdBQUcsT0FBMEM7QUFDbkQsTUFBTSxRQUFRLEdBQUcsQ0FBTyxFQUFPLEVBQUUsS0FBYyxFQUFFLEVBQUU7SUFDeEQsSUFBSTtRQUNGLE1BQU0sRUFBRSxFQUFFLENBQUM7S0FDWjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFBLDRCQUFnQixFQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNsQztBQUNILENBQUMsQ0FBQSxDQUFBO0FBTlksUUFBQSxRQUFRLFlBTXBCO0FBRU0sTUFBTSxTQUFTLEdBQUcsQ0FBTyxFQUFxQyxFQUFFLEVBQUU7SUFDdkUsTUFBTSxJQUFJLEdBQUcsSUFBQSxZQUFPLEdBQUUsQ0FBQztJQUV2QixNQUFNLElBQUEsYUFBSyxFQUFDLElBQUksRUFBRSxHQUFTLEVBQUU7UUFDM0IsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQyxDQUFBLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQSxDQUFBO0FBTlksUUFBQSxTQUFTLGFBTXJCO0FBRU0sTUFBTSxLQUFLLEdBQUcsQ0FBTyxHQUFXLEVBQUUsRUFBaUMsRUFBRSxFQUFFO0lBQzVFLE1BQU0sSUFBQSx5QkFBVyxFQUFDLEdBQVMsRUFBRTtRQUMzQixPQUFPLENBQUMsS0FBSyxDQUFD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