UNPKG

moonset

Version:
102 lines 14.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Moonset = void 0; require("source-map-support/register"); const yargs = require("yargs"); const executor_1 = require("@moonset/executor"); const util_1 = require("@moonset/util"); class Moonset { async run() { const argv = yargs .option('account', { type: 'string', desc: 'The working account', requiresArg: true }) .option('region', { type: 'string', desc: 'The working region', requiresArg: true }) .option('plugin', { type: 'string', desc: 'load plugin', requiresArg: true }) .command(['config'], 'Configure the crendentials.') .command(['deploy'], 'Deploy the job.', (yargs) => yargs .option('job', { type: 'string', desc: 'job payload', requiresArg: true, demandOption: true })) .command(['run'], 'Run the job.', (yargs) => yargs .option('job', { type: 'string', desc: 'job payload', requiresArg: true, demandOption: true })) .command(['ir'], 'Show the intermediate representation.', (yargs) => yargs .option('job', { type: 'string', desc: 'job payload', requiresArg: true, demandOption: true })) .argv; util_1.logger.debug('Command line arguments:', argv); this.loadPlugins(argv.plugin); this.initEnvs(argv); const cmd = argv._[0]; switch (cmd) { case 'config': util_1.Config.ask(); return; case 'deploy': util_1.logger.info('Not implemented yet.'); return; case 'run': await new executor_1.Executor().run(argv.job); return; case 'ir': const states = new executor_1.Executor().ir(argv.job); console.log(JSON.stringify(states)); return; default: throw new Error('Unknown command: ' + cmd); } } loadPlugins(plugin) { if (plugin) { const plugins = Array.isArray(plugin) ? plugin : [plugin]; plugins.forEach((plugin) => { executor_1.PluginHost.instance.load(plugin); }); } util_1.logger.info(`The plugins: ${plugin}. ` + `The hooks: ${Object.keys(executor_1.PluginHost.instance.hooks)}.`); } initEnvs(argv) { if (util_1.Config.get(util_1.ConfigConstant.WORKING_ACCOUNT)) { process.env[util_1.ConfigConstant.WORKING_ACCOUNT] = util_1.Config.get(util_1.ConfigConstant.WORKING_ACCOUNT); } if (util_1.Config.get(util_1.ConfigConstant.WORKING_REGION)) { process.env[util_1.ConfigConstant.WORKING_REGION] = util_1.Config.get(util_1.ConfigConstant.WORKING_REGION); } if (argv.account) { if (Array.isArray(argv.account)) { argv.account = argv.account[argv.account.length - 1]; } process.env[util_1.ConfigConstant.WORKING_ACCOUNT] = argv.account; } if (argv.region) { if (Array.isArray(argv.region)) { argv.region = argv.region[argv.region.length - 1]; } process.env[util_1.ConfigConstant.WORKING_REGION] = argv.region; } // TODO: This env credentials will be read during cdk deploy. This will // be problematic when we have multiple accounts like working account // and reference accounts. Currently we have only working account // so it's fine for now. // // We might want to support a very simple CDK plugin to support working // account and reference account's credentials. if (!process.env['AWS_ACCESS_KEY_ID'] && util_1.Config.get(util_1.ConfigConstant.WORKING_ACCESS_KEY)) { util_1.logger.info(`Fetch AWS_ACCESS_KEY_ID from ${util_1.CONFIG_PATH}`); process.env['AWS_ACCESS_KEY_ID'] = util_1.Config.get(util_1.ConfigConstant.WORKING_ACCESS_KEY); } if (!process.env['AWS_SECRET_ACCESS_KEY'] && util_1.Config.get(util_1.ConfigConstant.WORKING_SECRET_KEY)) { util_1.logger.info(`Fetch AWS_SECRET_ACCESS_KEY from ${util_1.CONFIG_PATH}`); process.env['AWS_SECRET_ACCESS_KEY'] = util_1.Config.get(util_1.ConfigConstant.WORKING_SECRET_KEY); } } } exports.Moonset = Moonset; new Moonset().run(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9vbnNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vb25zZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQXFDO0FBQ3JDLCtCQUErQjtBQUMvQixnREFBdUQ7QUFDdkQsd0NBQWdGO0FBRWhGLE1BQWEsT0FBTztJQUNsQixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sSUFBSSxHQUFHLEtBQUs7YUFDYixNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUscUJBQXFCO1lBQzdELFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQzthQUNwQixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsb0JBQW9CO1lBQzNELFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQzthQUNwQixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYTtZQUNwRCxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUM7YUFDcEIsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsNkJBQTZCLENBQUM7YUFDbEQsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLEVBQ2xDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO2FBQ1gsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWE7WUFDakQsV0FBVyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQzthQUNqRCxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxjQUFjLEVBQzVCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO2FBQ1gsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWE7WUFD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LEVBQUUsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUM7Z0JBQzlCLGFBQU0sQ0FBQyxHQUFHLENBQUMscUJBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztDQUNGO0FBcEdELDBCQW9HQztBQUVELElBQUksT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3Rlcic7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQge1BsdWdpbkhvc3QsIEV4ZWN1dG9yfSBmcm9tICdAbW9vbnNldC9leGVjdXRvcic7XG5pbXBvcnQge0NvbmZpZywgQ29uZmlnQ29uc3RhbnQgYXMgQ0MsIGxvZ2dlciwgQ09ORklHX1BBVEh9IGZyb20gJ0Btb29uc2V0L3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgTW9vbnNldCB7XG4gIGFzeW5jIHJ1bigpIHtcbiAgICBjb25zdCBhcmd2ID0geWFyZ3NcbiAgICAgICAgLm9wdGlvbignYWNjb3VudCcsIHt0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1RoZSB3b3JraW5nIGFjY291bnQnLFxuICAgICAgICAgIHJlcXVpcmVzQXJnOiB0cnVlfSlcbiAgICAgICAgLm9wdGlvbigncmVnaW9uJywge3R5cGU6ICdzdHJpbmcnLCBkZXNjOiAnVGhlIHdvcmtpbmcgcmVnaW9uJyxcbiAgICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZX0pXG4gICAgICAgIC5vcHRpb24oJ3BsdWdpbicsIHt0eXBlOiAnc3RyaW5nJywgZGVzYzogJ2xvYWQgcGx1Z2luJyxcbiAgICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZX0pXG4gICAgICAgIC5jb21tYW5kKFsnY29uZmlnJ10sICdDb25maWd1cmUgdGhlIGNyZW5kZW50aWFscy4nKVxuICAgICAgICAuY29tbWFuZChbJ2RlcGxveSddLCAnRGVwbG95IHRoZSBqb2IuJyxcbiAgICAgICAgICAgICh5YXJncykgPT4geWFyZ3NcbiAgICAgICAgICAgICAgICAub3B0aW9uKCdqb2InLCB7dHlwZTogJ3N0cmluZycsIGRlc2M6ICdqb2IgcGF5bG9hZCcsXG4gICAgICAgICAgICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSwgZGVtYW5kT3B0aW9uOiB0cnVlfSkpXG4gICAgICAgIC5jb21tYW5kKFsncnVuJ10sICdSdW4gdGhlIGpvYi4nLFxuICAgICAgICAgICAgKHlhcmdzKSA9PiB5YXJnc1xuICAgICAgICAgICAgICAgIC5vcHRpb24oJ2pvYicsIHt0eXBlOiAnc3RyaW5nJywgZGVzYzogJ2pvYiBwYXlsb2FkJyxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVzQXJnOiB0cnVlLCBkZW1hbmRPcHRpb246IHRydWV9KSlcbiAgICAgICAgLmNvbW1hbmQoWydpciddLCAnU2hvdyB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLicsXG4gICAgICAgICAgICAoeWFyZ3MpID0+IHlhcmdzXG4gICAgICAgICAgICAgICAgLm9wdGlvbignam9iJywge3R5cGU6ICdzdHJpbmcnLCBkZXNjOiAnam9iIHBheWxvYWQnLFxuICAgICAgICAgICAgICAgICAgcmVxdWlyZXNBcmc6IHRydWUsIGRlbWFuZE9wdGlvbjogdHJ1ZX0pKVxuICAgICAgICAuYXJndjtcblxuICAgIGxvZ2dlci5kZWJ1ZygnQ29tbWFuZCBsaW5lIGFyZ3VtZW50czonLCBhcmd2KTtcblxuICAgIHRoaXMubG9hZFBsdWdpbnMoYXJndi5wbHVnaW4pO1xuICAgIHRoaXMuaW5pdEVudnMoYXJndik7XG5cbiAgICBjb25zdCBjbWQgPSBhcmd2Ll9bMF07XG4gICAgc3dpdGNoIChjbWQpIHtcbiAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIENvbmZpZy5hc2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnZGVwbG95JzpcbiAgICAgICAgbG9nZ2VyLmluZm8oJ05vdCBpbXBsZW1lbnRlZCB5ZXQuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ3J1bic6XG4gICAgICAgIGF3YWl0IG5ldyBFeGVjdXRvcigpLnJ1bihhcmd2LmpvYik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2lyJzpcbiAgICAgICAgY29uc3Qgc3RhdGVzID0gbmV3IEV4ZWN1dG9yKCkuaXIoYXJndi5qb2IpO1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShzdGF0ZXMpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGNvbW1hbmQ6ICcgKyBjbWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsdWdpbnMocGx1Z2luOiBhbnkpIHtcbiAgICBpZiAocGx1Z2luKSB7XG4gICAgICBjb25zdCBwbHVnaW5zID0gQXJyYXkuaXNBcnJheShwbHVnaW4pID8gcGx1Z2luIDogW3BsdWdpbl07XG4gICAgICBwbHVnaW5zLmZvckVhY2goKHBsdWdpbikgPT4ge1xuICAgICAgICBQbHVnaW5Ib3N0Lmluc3RhbmNlLmxvYWQocGx1Z2luKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsb2dnZXIuaW5mbyhgVGhlIHBsdWdpbnM6ICR7cGx1Z2lufS4gYCArXG4gICAgICAgICAgYFRoZSBob29rczogJHtPYmplY3Qua2V5cyhQbHVnaW5Ib3N0Lmluc3RhbmNlLmhvb2tzKX0uYCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRFbnZzKGFyZ3Y6IGFueSkge1xuICAgIGlmIChDb25maWcuZ2V0KENDLldPUktJTkdfQUNDT1VOVCkpIHtcbiAgICAgIHByb2Nlc3MuZW52W0NDLldPUktJTkdfQUNDT1VOVF0gPSBDb25maWcuZ2V0KENDLldPUktJTkdfQUNDT1VOVCk7XG4gICAgfVxuICAgIGlmIChDb25maWcuZ2V0KENDLldPUktJTkdfUkVHSU9OKSkge1xuICAgICAgcHJvY2Vzcy5lbnZbQ0MuV09SS0lOR19SRUdJT05dID0gQ29uZmlnLmdldChDQy5XT1JLSU5HX1JFR0lPTik7XG4gICAgfVxuICAgIGlmIChhcmd2LmFjY291bnQpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3YuYWNjb3VudCkpIHtcbiAgICAgICAgYXJndi5hY2NvdW50ID0gYXJndi5hY2NvdW50W2FyZ3YuYWNjb3VudC5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3MuZW52W0NDLldPUktJTkdfQUNDT1VOVF0gPSBhcmd2LmFjY291bnQ7XG4gICAgfVxuICAgIGlmIChhcmd2LnJlZ2lvbikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJndi5yZWdpb24pKSB7XG4gICAgICAgIGFyZ3YucmVnaW9uID0gYXJndi5yZWdpb25bYXJndi5yZWdpb24ubGVuZ3RoIC0gMV07XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmVudltDQy5XT1JLSU5HX1JFR0lPTl0gPSBhcmd2LnJlZ2lvbjtcbiAgICB9XG4gICAgLy8gVE9ETzogVGhpcyBlbnYgY3JlZGVudGlhbHMgd2lsbCBiZSByZWFkIGR1cmluZyBjZGsgZGVwbG95LiBUaGlzIHdpbGxcbiAgICAvLyBiZSBwcm9ibGVtYXRpYyB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgYWNjb3VudHMgbGlrZSB3b3JraW5nIGFjY291bnRcbiAgICAvLyBhbmQgcmVmZXJlbmNlIGFjY291bnRzLiBDdXJyZW50bHkgd2UgaGF2ZSBvbmx5IHdvcmtpbmcgYWNjb3VudFxuICAgIC8vIHNvIGl0J3MgZmluZSBmb3Igbm93LlxuICAgIC8vXG4gICAgLy8gV2UgbWlnaHQgd2FudCB0byBzdXBwb3J0IGEgdmVyeSBzaW1wbGUgQ0RLIHBsdWdpbiB0byBzdXBwb3J0IHdvcmtpbmdcbiAgICAvLyBhY2NvdW50IGFuZCByZWZlcmVuY2UgYWNjb3VudCdzIGNyZWRlbnRpYWxzLlxuXG4gICAgaWYgKCFwcm9jZXNzLmVudlsnQVdTX0FDQ0VTU19LRVlfSUQnXSAmJlxuICAgICAgICBDb25maWcuZ2V0KENDLldPUktJTkdfQUNDRVNTX0tFWSkpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBGZXRjaCBBV1NfQUNDRVNTX0tFWV9JRCBmcm9tICR7Q09ORklHX1BBVEh9YCk7XG4gICAgICBwcm9jZXNzLmVudlsnQVdTX0FDQ0VTU19LRVlfSUQnXSA9XG4gICAgICAgICAgICBDb25maWcuZ2V0KENDLldPUktJTkdfQUNDRVNTX0tFWSk7XG4gICAgfVxuICAgIGlmICghcHJvY2Vzcy5lbnZbJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSddJiZcbiAgICAgICAgQ29uZmlnLmdldChDQy5XT1JLSU5HX1NFQ1JFVF9LRVkpKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgRmV0Y2ggQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIGZyb20gJHtDT05GSUdfUEFUSH1gKTtcbiAgICAgIHByb2Nlc3MuZW52WydBV1NfU0VDUkVUX0FDQ0VTU19LRVknXSA9XG4gICAgICAgICAgICBDb25maWcuZ2V0KENDLldPUktJTkdfU0VDUkVUX0tFWSk7XG4gICAgfVxuICB9XG59XG5cbm5ldyBNb29uc2V0KCkucnVuKCk7XG4iXX0=