UNPKG

@aws-amplify/cli-internal

Version:
147 lines 6.97 kB
"use strict"; 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