@aws-amplify/cli-internal
Version:
Amplify CLI
147 lines • 6.97 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.run = void 0;
const amplify_cli_core_1 = require("@aws-amplify/amplify-cli-core");
const amplify_prompts_1 = require("@aws-amplify/amplify-prompts");
const generate_1 = require("./gen2-migration/generate");
const lock_1 = require("./gen2-migration/lock");
const refactor_1 = require("./gen2-migration/refactor");
const spinning_logger_1 = require("./gen2-migration/_common/spinning-logger");
const chalk_1 = __importDefault(require("chalk"));
const assess_1 = require("./gen2-migration/assess");
const gen1_app_1 = require("./gen2-migration/_common/gen1-app");
const validations_1 = require("./gen2-migration/_common/validations");
const retain_1 = require("./gen2-migration/retain");
const STEPS = {
lock: {
class: lock_1.AmplifyMigrationLockStep,
description: 'Locks your Gen1 environment to prevent updates during migration',
},
generate: {
class: generate_1.AmplifyMigrationGenerateStep,
description: 'Generates Gen2 application code from your existing Gen1 environment',
},
refactor: {
class: refactor_1.AmplifyMigrationRefactorStep,
description: 'Moves stateful resources from your Gen1 CloudFormation stacks to your Gen2 stacks',
},
retain: {
class: retain_1.AmplifyMigrationRetainStep,
description: 'Apply retain to every resource in every Gen1 stack below the root',
},
};
const run = async (context) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
const stepName = ((_a = context.input.subCommands) !== null && _a !== void 0 ? _a : [])[0];
const step = STEPS[stepName];
if (!step && stepName !== 'assess') {
displayHelp(context);
return;
}
shiftParams(context);
const skipValidations = (_c = ((_b = context.input.options) !== null && _b !== void 0 ? _b : {})['skip-validations']) !== null && _c !== void 0 ? _c : false;
const validationsOnly = (_e = ((_d = context.input.options) !== null && _d !== void 0 ? _d : {})['validations-only']) !== null && _e !== void 0 ? _e : false;
const rollingBack = (_g = ((_f = context.input.options) !== null && _f !== void 0 ? _f : {})['rollback']) !== null && _g !== void 0 ? _g : false;
const disableAutoRollback = (_j = ((_h = context.input.options) !== null && _h !== void 0 ? _h : {})['no-rollback']) !== null && _j !== void 0 ? _j : false;
const additionalStatefulResources = ((_k = context.parameters.options) !== null && _k !== void 0 ? _k : {})['additional-stateful-resource-types'];
if (skipValidations && validationsOnly) {
throw new amplify_cli_core_1.AmplifyError('InputValidationError', {
message: 'Cannot specify both --skip-validations and --validation-only',
});
}
if (rollingBack && disableAutoRollback) {
throw new amplify_cli_core_1.AmplifyError('InputValidationError', {
message: 'Cannot specify both --rollback and --no-rollback',
});
}
const gen1App = await gen1_app_1.Gen1App.create(context, additionalStatefulResources);
const logger = new spinning_logger_1.SpinningLogger(`${stepName}] [${gen1App.appName}/${gen1App.envName}`, { debug: amplify_prompts_1.isDebug });
if (stepName === 'assess') {
const assessor = new assess_1.AmplifyMigrationAssessor(gen1App, logger);
assessor.run();
return;
}
const validations = new validations_1.AmplifyGen2MigrationValidations(logger, gen1App, context);
const implementation = new step.class(logger, gen1App, context, validations);
amplify_prompts_1.printer.blankLine();
logger.start('Planning');
let plan;
try {
plan = rollingBack ? await implementation.rollback() : await implementation.forward();
logger.succeed('→ Planning complete');
}
catch (error) {
logger.failed('→ Planning failed');
amplify_prompts_1.printer.blankLine();
throw error;
}
if (!skipValidations) {
const passed = await plan.validate();
if (!passed) {
const skipCommand = `amplify ${context.input.argv.join(' ').trim()} --skip-validations`;
amplify_prompts_1.printer.blankLine();
throw new amplify_cli_core_1.AmplifyError('PreflightValidationError', {
message: 'Validations failed',
resolution: `Resolve the validation errors or skip them by running '${skipCommand}'`,
});
}
}
if (validationsOnly)
return;
amplify_prompts_1.printer.blankLine();
amplify_prompts_1.printer.info(chalk_1.default.yellow(`You are about to ${rollingBack ? 'rollback' : 'execute'} '${stepName}' on environment '${gen1App.appName}/${gen1App.envName}'.`));
amplify_prompts_1.printer.blankLine();
await plan.describe();
if (!rollingBack) {
amplify_prompts_1.printer.info(chalk_1.default.grey(`(You can rollback this command by running: 'amplify gen2-migration ${stepName} --rollback')`));
amplify_prompts_1.printer.blankLine();
}
amplify_prompts_1.printer.info(chalk_1.default.yellow('⚠️ This command is in developer preview. For more information, visit https://docs.amplify.aws/react/start/migrate-to-gen2'));
amplify_prompts_1.printer.blankLine();
if (!(await amplify_prompts_1.prompter.confirmContinue())) {
return;
}
amplify_prompts_1.printer.blankLine();
try {
await plan.execute();
return;
}
catch (error) {
if (!rollingBack && !disableAutoRollback) {
amplify_prompts_1.printer.blankLine();
amplify_prompts_1.printer.error(`Failed: ${error}`);
amplify_prompts_1.printer.blankLine();
const rollbackPlan = await implementation.rollback();
await rollbackPlan.execute();
}
throw error;
}
};
exports.run = run;
function shiftParams(context) {
delete context.parameters.first;
delete context.parameters.second;
delete context.parameters.third;
const { subCommands } = context.input;
if (subCommands && subCommands.length > 1) {
context.parameters.first = subCommands[1];
if (subCommands.length > 2) {
context.parameters.second = subCommands[2];
}
if (subCommands.length > 3) {
context.parameters.third = subCommands[3];
}
}
}
function displayHelp(context) {
const commands = [
{ name: 'assess', description: 'Assesses migration readiness for your Gen1 environment' },
...Object.entries(STEPS).map(([name, v]) => ({ name, description: v.description })),
];
context.amplify.showHelp('amplify gen2-migration <subcommands>', commands);
amplify_prompts_1.printer.info('');
}
//# sourceMappingURL=gen2-migration.js.map