forest-cli
Version:
The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.
83 lines • 7.08 kB
JavaScript
const { Flags } = require('@oclif/core');
const EnvironmentManager = require('../../services/environment-manager');
const AbstractAuthenticatedCommand = require('../../abstract-authenticated-command').default;
const withCurrentProject = require('../../services/with-current-project');
class CreateCommand extends AbstractAuthenticatedCommand {
constructor(argv, config, plan) {
super(argv, config, plan);
const { assertPresent, env, environmentRenderer } = this.context;
assertPresent({ env, environmentRenderer });
this.env = env;
this.environmentRenderer = environmentRenderer;
}
async runAuthenticated() {
const parsed = await this.parse(CreateCommand);
const config = await withCurrentProject({ ...this.env, ...parsed.flags });
const isProduction = config.type === 'production';
// Only production environments may be created without a URL; a remote env
// without an apiEndpoint would be created permanently inactive.
if (!isProduction && !config.url) {
this.logger.error('The --url option is required unless --type production is set.');
this.exit(1);
}
// Roles cannot be disabled on production: the server skips role creation entirely
// when areRolesDisabled is true, which would leave the project without its default roles.
if (isProduction && config.disableRoles) {
this.logger.error('The --disableRoles option cannot be used with --type production.');
this.exit(1);
}
const manager = new EnvironmentManager(config);
try {
const environment = await manager.createEnvironment();
this.environmentRenderer.render(environment, config);
}
catch (error) {
if (error.response && error.status !== 403) {
const errorData = JSON.parse(error.response.text);
if (errorData &&
errorData.errors &&
errorData.errors.length &&
errorData.errors[0] &&
errorData.errors[0].detail) {
this.logger.error(errorData.errors[0].detail);
this.exit(1);
}
}
throw error;
}
}
}
CreateCommand.description = 'Create a new environment.';
CreateCommand.flags = {
projectId: Flags.integer({
char: 'p',
description: 'Forest project ID.',
default: null,
}),
name: Flags.string({
char: 'n',
description: 'Environment name.',
required: true,
}),
url: Flags.string({
char: 'u',
description: 'Application URL. Required, except with --type production where it may be omitted.',
}),
type: Flags.string({
char: 't',
description: 'Environment type (defaults to "remote" when omitted). Use "production" to create the first production environment. Development environments are created with "forest init".',
options: ['production', 'remote'],
}),
format: Flags.string({
char: 'format',
description: 'Ouput format.',
options: ['table', 'json'],
default: 'table',
}),
disableRoles: Flags.boolean({
description: 'Disable roles on new environment.',
default: false,
}),
};
module.exports = CreateCommand;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Vudmlyb25tZW50cy9jcmVhdGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN6QyxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sNEJBQTRCLEdBQUcsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzdGLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFFMUUsTUFBTSxhQUFjLFNBQVEsNEJBQTRCO0lBQ3RELFlBQVksSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO1FBQzVCLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFCLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNqRSxhQUFhLENBQUMsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFMUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxZ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