moonset
Version: 
102 lines • 14.8 kB
JavaScript
;
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=