zcatalyst-cli
Version:
Command Line Tool for CATALYST
91 lines (90 loc) • 4.53 kB
JavaScript
'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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const endpoints_1 = require("../../endpoints");
const iac_1 = __importDefault(require("../../endpoints/lib/iac"));
const index_js_1 = __importDefault(require("../../error/index.js"));
const command_1 = __importDefault(require("../../internal/command"));
const prompt_1 = __importDefault(require("../../prompt"));
const runtime_store_1 = __importDefault(require("../../runtime-store"));
const constants_1 = require("../../util_modules/constants");
const scopes_js_1 = __importDefault(require("../../authentication/constants/scopes.js"));
const env_1 = require("../../util_modules/env");
const index_1 = require("../../util_modules/logger/index");
const option_1 = require("../../util_modules/option");
const project_1 = require("../../util_modules/project");
const shell_1 = require("../../util_modules/shell");
const getExportProjectId = () => __awaiter(void 0, void 0, void 0, function* () {
const projectId = (0, project_1.getProjectId)(null);
if (projectId !== null) {
return projectId;
}
const allProjects = (yield (yield (0, endpoints_1.projectAPI)()).getAllProjects());
if (allProjects.length === 0) {
throw new index_js_1.default('No projects found', {
exit: 0,
errorId: 'PROJ-USE-1'
});
}
if (allProjects.length === 1) {
(0, index_1.message)('only one project found in remote, using that');
return allProjects[0].id;
}
const projectAns = yield prompt_1.default.ask(prompt_1.default.question('project', 'Which project do you wish to export ? ', {
type: 'list',
choices: allProjects.map((project) => {
return prompt_1.default.choice(project.project_name, {
value: project.id,
short: project.project_name
});
})
}));
return projectAns.project;
});
exports.default = new command_1.default('iac:export')
.description('Create a zip file out of existing project in console')
.option('--production', 'flag for pointing to production environment')
.needs('auth', [scopes_js_1.default.project_export_read, scopes_js_1.default.project_export_create])
.needs('config', { optional: true })
.needs('rc', { optional: true, skipOrgCheck: false })
.action(() => __awaiter(void 0, void 0, void 0, function* () {
const env = (0, option_1.getOptionValue)('production', false) ? 'Production' : 'Development';
const projectId = yield getExportProjectId();
const bundleResp = yield new iac_1.default(projectId, { env }).bundle(constants_1.IAC.template_format.json);
(0, index_1.info)();
(0, index_1.success)(`Successfully scheduled export job for project "${(0, project_1.getProjectName)(projectId)}" with jobid "${bundleResp.id}"`);
if ((0, env_1.isPrimaryShell)()) {
const exitListeners = process.listeners('exit');
process.removeAllListeners('exit');
const allGlobalOpts = runtime_store_1.default.get('context.opts.globalOpts', {});
const optsArr = Object.keys(allGlobalOpts).reduce((arr, key) => {
arr.push('--' + key);
if (allGlobalOpts[key]) {
arr.push(allGlobalOpts[key]);
}
return arr;
}, [
'--org',
(0, project_1.getEnvId)(),
...(env === 'Production' ? ['--production'] : [])
]);
(0, shell_1.spawn)('catalyst', ['iac:status', 'export', ...optsArr], {
shell: true,
stdio: 'inherit'
}).SYNC();
(exitListeners || []).forEach((listner) => {
process.addListener('exit', listner);
});
}
}));