diff --git a/packages/amplify-migration-template-gen/package.json b/packages/amplify-migration-template-gen/package.json index 4b969a66d5a..f27bc906460 100644 --- a/packages/amplify-migration-template-gen/package.json +++ b/packages/amplify-migration-template-gen/package.json @@ -11,7 +11,8 @@ "dependencies": { "@aws-sdk/client-cloudformation": "^3.744.0", "@aws-sdk/client-cognito-identity-provider": "^3.592.0", - "@aws-sdk/client-ssm": "^3.592.0" + "@aws-sdk/client-ssm": "^3.592.0", + "ora": "^4.0.3" }, "jest": { "collectCoverageFrom": [ diff --git a/packages/amplify-migration-template-gen/src/template-generator.ts b/packages/amplify-migration-template-gen/src/template-generator.ts index 56fc78bd7df..078c3c0675b 100644 --- a/packages/amplify-migration-template-gen/src/template-generator.ts +++ b/packages/amplify-migration-template-gen/src/template-generator.ts @@ -28,6 +28,7 @@ import { tryRefactorStack } from './cfn-stack-refactor-updater'; import CfnOutputResolver from './resolvers/cfn-output-resolver'; import CfnDependencyResolver from './resolvers/cfn-dependency-resolver'; import CfnParameterResolver from './resolvers/cfn-parameter-resolver'; +import ora from 'ora'; const CFN_RESOURCE_STACK_TYPE = 'AWS::CloudFormation::Stack'; const GEN2_AMPLIFY_AUTH_LOGICAL_ID_PREFIX = 'amplifyAuth'; @@ -242,21 +243,22 @@ class TemplateGenerator { categoryTemplateGenerator: CategoryTemplateGenerator, sourceCategoryStackId: string, ): Promise { + let updatingGen1CategoryStack; try { const { newTemplate, parameters: gen1StackParameters } = await categoryTemplateGenerator.generateGen1PreProcessTemplate(); assert(gen1StackParameters); - console.log(`Updating Gen1 ${category} stack...`); + updatingGen1CategoryStack = ora(`Updating Gen1 ${category} stack...`).start(); const gen1StackUpdateStatus = await tryUpdateStack(this.cfnClient, sourceCategoryStackId, gen1StackParameters, newTemplate); assert(gen1StackUpdateStatus === CFNStackStatus.UPDATE_COMPLETE); - console.log(`Updated Gen1 ${category} stack successfully`); + updatingGen1CategoryStack.succeed(`Updated Gen1 ${category} stack successfully`); return newTemplate; } catch (e) { if (this.isNoResourcesError(e)) { - console.log(e.message); + updatingGen1CategoryStack?.succeed(`No resources found to move in Gen1 ${category} stack. Skipping update.`); return undefined; } throw e; @@ -274,12 +276,12 @@ class TemplateGenerator { }> { const { newTemplate, oldTemplate, parameters } = await categoryTemplateGenerator.generateGen2ResourceRemovalTemplate(); - console.log(`Updating Gen2 ${category} stack...`); + const updatingGen2CategoryStack = ora(`Updating Gen2 ${category} stack...`).start(); const gen2StackUpdateStatus = await tryUpdateStack(this.cfnClient, destinationCategoryStackId, parameters ?? [], newTemplate); assert(gen2StackUpdateStatus === CFNStackStatus.UPDATE_COMPLETE); - console.log(`Updated Gen2 ${category} stack successfully`); + updatingGen2CategoryStack.succeed(`Updated Gen2 ${category} stack successfully`); return { newTemplate, oldTemplate, parameters }; } @@ -369,7 +371,6 @@ class TemplateGenerator { logicalIdMappingForRefactor = logicalIdMapping; } catch (e) { if (typeof e === 'object' && 'message' in e && e.message.includes(NO_RESOURCES_TO_MOVE_ERROR)) { - console.log(e.message); continue; } throw e; @@ -378,6 +379,7 @@ class TemplateGenerator { assert(newSourceTemplate); assert(newDestinationTemplate); + const refactorResources = ora(`Moving ${category} resources from ${this.getSourceToDestinationMessage(isRevert)} stack...`).start(); const { success, failedRefactorMetadata } = await this.refactorResources( logicalIdMappingForRefactor, sourceCategoryStackId, @@ -388,7 +390,7 @@ class TemplateGenerator { destinationTemplateForRefactor, ); if (!success) { - console.log( + refactorResources.fail( `Moving ${category} resources from ${this.getSourceToDestinationMessage(isRevert)} stack failed. Reason: ${ failedRefactorMetadata?.reason }. Status: ${failedRefactorMetadata?.status}. RefactorId: ${failedRefactorMetadata?.stackRefactorId}.`, @@ -399,7 +401,7 @@ class TemplateGenerator { } return false; } else { - console.log(`Moved ${category} resources from ${this.getSourceToDestinationMessage(isRevert)} stack successfully`); + refactorResources.succeed(`Moved ${category} resources from ${this.getSourceToDestinationMessage(isRevert)} stack successfully`); } } if (!isRevert) { @@ -435,7 +437,6 @@ class TemplateGenerator { }, }); } - console.log(`Moving ${category} resources from ${this.getSourceToDestinationMessage(isRevert)} stack...`); const [success, failedRefactorMetadata] = await tryRefactorStack(this.cfnClient, { StackDefinitions: [ { @@ -458,10 +459,10 @@ class TemplateGenerator { gen2StackParameters: Parameter[] | undefined, oldGen2Template: CFNTemplate, ) { - console.log(`Rolling back Gen2 ${category} stack...`); + const rollingBackGen2Stack = ora(`Rolling back Gen2 ${category} stack...`).start(); const gen2StackUpdateStatus = await tryUpdateStack(this.cfnClient, gen2CategoryStackId, gen2StackParameters ?? [], oldGen2Template); assert(gen2StackUpdateStatus === CFNStackStatus.UPDATE_COMPLETE, `Gen2 Stack in a failed state: ${gen2StackUpdateStatus}.`); - console.log(`Rolled back Gen2 ${category} stack successfully`); + rollingBackGen2Stack.succeed(`Rolled back Gen2 ${category} stack successfully`); } private async generateRefactorTemplatesForRevert( diff --git a/yarn.lock b/yarn.lock index bab47e22326..9ba14f549bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1910,6 +1910,7 @@ __metadata: "@aws-sdk/client-ssm": ^3.592.0 "@jest/globals": ^29.7.0 jest: ^29.5.0 + ora: ^4.0.3 typescript: ^5.4.5 languageName: unknown linkType: soft