From 592abd1c1c0a7b659393da992c1332c10060e711 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Tue, 9 Jul 2024 13:37:29 -0700 Subject: [PATCH 01/47] feat: add warning to init --- packages/amplify-cli/src/commands/init.ts | 3 ++- .../amplify-cli/src/init-steps/preInitMigrationWarning.ts | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts diff --git a/packages/amplify-cli/src/commands/init.ts b/packages/amplify-cli/src/commands/init.ts index 2d2545a1d4d..5455010460f 100644 --- a/packages/amplify-cli/src/commands/init.ts +++ b/packages/amplify-cli/src/commands/init.ts @@ -10,6 +10,7 @@ import { initProviders } from '../init-steps/s2-initProviders'; import { scaffoldProjectHeadless } from '../init-steps/s8-scaffoldHeadless'; import { onHeadlessSuccess, onSuccess } from '../init-steps/s9-onSuccess'; import { checkForNestedProject } from './helpers/projectUtils'; +import { migrationWarning } from '../init-steps/preInitMigrationWarning'; const constructExeInfo = (context: $TSContext): void => { context.exeInfo = { @@ -22,7 +23,7 @@ const constructExeInfo = (context: $TSContext): void => { const runStrategy = (quickstart: boolean) => quickstart ? [preInitSetup, analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] - : [preInitSetup, analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; + : [migrationWarning, preInitSetup, analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; /** * entry point for the init command diff --git a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts new file mode 100644 index 00000000000..e052d772a61 --- /dev/null +++ b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts @@ -0,0 +1,8 @@ +import { $TSContext } from '@aws-amplify/amplify-cli-core'; +import { printer, prompter } from '@aws-amplify/amplify-prompts'; + +export const migrationWarning = async (context: $TSContext): Promise => { + printer.warn( + `AWS Amplify recommends using Amplify Gen 2 for new projects. Learn how to get started at https://docs.amplify.aws/react/start/quickstart/`, + ); +}; From d0a26e040184c218627e9f49f604e0bf98bc2b46 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Tue, 9 Jul 2024 17:23:58 -0700 Subject: [PATCH 02/47] feat: add prompt to init --- packages/amplify-cli/src/commands/init.ts | 3 ++- .../src/init-steps/preInitMigrationWarning.ts | 21 ++++++++++++++++++- .../src/init-steps/s0-analyzeProject.ts | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/amplify-cli/src/commands/init.ts b/packages/amplify-cli/src/commands/init.ts index 5455010460f..4b9a97b8817 100644 --- a/packages/amplify-cli/src/commands/init.ts +++ b/packages/amplify-cli/src/commands/init.ts @@ -34,7 +34,8 @@ export const run = async (context: $TSContext): Promise => { const steps = runStrategy(!!context?.parameters?.options?.quickstart); for (const step of steps) { - await step(context); + const toContinue = await step(context); + if (!toContinue) break; } if (context.exeInfo.sourceEnvName && context.exeInfo.localEnvInfo.envName) { diff --git a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts index e052d772a61..d8653eaec78 100644 --- a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts +++ b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts @@ -1,8 +1,27 @@ import { $TSContext } from '@aws-amplify/amplify-cli-core'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; -export const migrationWarning = async (context: $TSContext): Promise => { +export const migrationWarning = async (context: $TSContext): Promise<$TSContext | false> => { printer.warn( `AWS Amplify recommends using Amplify Gen 2 for new projects. Learn how to get started at https://docs.amplify.aws/react/start/quickstart/`, ); + + const continueWithGen1 = await prompter.confirmContinue('Do you want to continue with Amplify Gen 1?'); + + if (!continueWithGen1) { + return false; + } + + const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ]); + + context.exeInfo.projectConfig = { + whyContinueWithGen1, + }; + + return context; }; diff --git a/packages/amplify-cli/src/init-steps/s0-analyzeProject.ts b/packages/amplify-cli/src/init-steps/s0-analyzeProject.ts index af0ff0015c4..c42de9f7666 100644 --- a/packages/amplify-cli/src/init-steps/s0-analyzeProject.ts +++ b/packages/amplify-cli/src/init-steps/s0-analyzeProject.ts @@ -152,6 +152,7 @@ export const analyzeProject = async (context: $TSContext): Promise<$TSContext> = const setProjectConfig = (context: $TSContext, projectName: string): void => { context.exeInfo.isNewProject = isNewProject(context); context.exeInfo.projectConfig = { + ...context.exeInfo.projectConfig, projectName, version: amplifyCLIConstants.CURRENT_PROJECT_CONFIG_VERSION, }; From 365eab45f15d6de2bb5c961dcb566441d6fd8267 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Tue, 9 Jul 2024 17:32:08 -0700 Subject: [PATCH 03/47] feat: only prompt on new project --- .../amplify-cli/src/init-steps/preInitMigrationWarning.ts | 4 ++++ packages/amplify-cli/src/init-steps/s0-analyzeProject.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts index d8653eaec78..2f62c58737e 100644 --- a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts +++ b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts @@ -1,7 +1,11 @@ import { $TSContext } from '@aws-amplify/amplify-cli-core'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; +import { isNewProject } from './s0-analyzeProject'; export const migrationWarning = async (context: $TSContext): Promise<$TSContext | false> => { + if (!isNewProject(context)) { + return context; + } printer.warn( `AWS Amplify recommends using Amplify Gen 2 for new projects. Learn how to get started at https://docs.amplify.aws/react/start/quickstart/`, ); diff --git a/packages/amplify-cli/src/init-steps/s0-analyzeProject.ts b/packages/amplify-cli/src/init-steps/s0-analyzeProject.ts index c42de9f7666..261845048a7 100644 --- a/packages/amplify-cli/src/init-steps/s0-analyzeProject.ts +++ b/packages/amplify-cli/src/init-steps/s0-analyzeProject.ts @@ -326,7 +326,7 @@ const isNewEnv = (envName: string): boolean => { return !allEnvs.includes(envName); }; -const isNewProject = (context: $TSContext): boolean => { +export const isNewProject = (context: $TSContext): boolean => { let newProject = true; const projectPath = process.cwd(); const projectConfigFilePath = context.amplify.pathManager.getProjectConfigFilePath(projectPath); From 631a2524ab37c4f388041a8738808d2aae006a32 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Tue, 9 Jul 2024 17:40:05 -0700 Subject: [PATCH 04/47] feat: add guide to Gen2 --- packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts index 2f62c58737e..ff6a536353d 100644 --- a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts +++ b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts @@ -13,6 +13,9 @@ export const migrationWarning = async (context: $TSContext): Promise<$TSContext const continueWithGen1 = await prompter.confirmContinue('Do you want to continue with Amplify Gen 1?'); if (!continueWithGen1) { + printer.info('Exiting the Amplify Gen1 project creation flow. 👋'); + printer.blankLine(); + printer.info('To create a new Amplify project using Amplify Gen 2 🫱 https://docs.amplify.aws/'); return false; } From c0c4e3e402e7f39993571e1fc97aad04deacbe02 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Tue, 9 Jul 2024 17:53:51 -0700 Subject: [PATCH 05/47] refactor: change to use process exit --- packages/amplify-cli/src/commands/init.ts | 3 +-- .../amplify-cli/src/init-steps/preInitMigrationWarning.ts | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/amplify-cli/src/commands/init.ts b/packages/amplify-cli/src/commands/init.ts index 4b9a97b8817..5455010460f 100644 --- a/packages/amplify-cli/src/commands/init.ts +++ b/packages/amplify-cli/src/commands/init.ts @@ -34,8 +34,7 @@ export const run = async (context: $TSContext): Promise => { const steps = runStrategy(!!context?.parameters?.options?.quickstart); for (const step of steps) { - const toContinue = await step(context); - if (!toContinue) break; + await step(context); } if (context.exeInfo.sourceEnvName && context.exeInfo.localEnvInfo.envName) { diff --git a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts index ff6a536353d..60d98de9c34 100644 --- a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts +++ b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts @@ -2,7 +2,7 @@ import { $TSContext } from '@aws-amplify/amplify-cli-core'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; import { isNewProject } from './s0-analyzeProject'; -export const migrationWarning = async (context: $TSContext): Promise<$TSContext | false> => { +export const migrationWarning = async (context: $TSContext): Promise<$TSContext> => { if (!isNewProject(context)) { return context; } @@ -16,7 +16,7 @@ export const migrationWarning = async (context: $TSContext): Promise<$TSContext printer.info('Exiting the Amplify Gen1 project creation flow. 👋'); printer.blankLine(); printer.info('To create a new Amplify project using Amplify Gen 2 🫱 https://docs.amplify.aws/'); - return false; + process.exit(0); } const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ From 5d53a55570510f9c6f83518f80a5ca20128f70f2 Mon Sep 17 00:00:00 2001 From: MJ Zhang <0618@users.noreply.github.com> Date: Wed, 10 Jul 2024 08:58:54 -0700 Subject: [PATCH 06/47] Update packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts Co-authored-by: Amplifiyer <51211245+Amplifiyer@users.noreply.github.com> --- packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts index 60d98de9c34..4465af5481a 100644 --- a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts +++ b/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts @@ -15,7 +15,7 @@ export const migrationWarning = async (context: $TSContext): Promise<$TSContext> if (!continueWithGen1) { printer.info('Exiting the Amplify Gen1 project creation flow. 👋'); printer.blankLine(); - printer.info('To create a new Amplify project using Amplify Gen 2 🫱 https://docs.amplify.aws/'); + printer.info('To create a new Amplify Gen2 project, 🫱 https://docs.amplify.aws/'); process.exit(0); } From 49a9f01f2e70fd3c9b41b336b643e38f2e47d55f Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 09:08:47 -0700 Subject: [PATCH 07/47] refactor: rename to gen2Recommendation --- packages/amplify-cli/src/commands/init.ts | 4 ++-- .../{preInitMigrationWarning.ts => gen2Recommendation.ts} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename packages/amplify-cli/src/init-steps/{preInitMigrationWarning.ts => gen2Recommendation.ts} (92%) diff --git a/packages/amplify-cli/src/commands/init.ts b/packages/amplify-cli/src/commands/init.ts index 5455010460f..2108b3891cb 100644 --- a/packages/amplify-cli/src/commands/init.ts +++ b/packages/amplify-cli/src/commands/init.ts @@ -10,7 +10,7 @@ import { initProviders } from '../init-steps/s2-initProviders'; import { scaffoldProjectHeadless } from '../init-steps/s8-scaffoldHeadless'; import { onHeadlessSuccess, onSuccess } from '../init-steps/s9-onSuccess'; import { checkForNestedProject } from './helpers/projectUtils'; -import { migrationWarning } from '../init-steps/preInitMigrationWarning'; +import { gen2Recommendation } from '../init-steps/gen2Recommendation'; const constructExeInfo = (context: $TSContext): void => { context.exeInfo = { @@ -23,7 +23,7 @@ const constructExeInfo = (context: $TSContext): void => { const runStrategy = (quickstart: boolean) => quickstart ? [preInitSetup, analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] - : [migrationWarning, preInitSetup, analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; + : [gen2Recommendation, preInitSetup, analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; /** * entry point for the init command diff --git a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts b/packages/amplify-cli/src/init-steps/gen2Recommendation.ts similarity index 92% rename from packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts rename to packages/amplify-cli/src/init-steps/gen2Recommendation.ts index 4465af5481a..53f9e76d52d 100644 --- a/packages/amplify-cli/src/init-steps/preInitMigrationWarning.ts +++ b/packages/amplify-cli/src/init-steps/gen2Recommendation.ts @@ -2,7 +2,7 @@ import { $TSContext } from '@aws-amplify/amplify-cli-core'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; import { isNewProject } from './s0-analyzeProject'; -export const migrationWarning = async (context: $TSContext): Promise<$TSContext> => { +export const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { if (!isNewProject(context)) { return context; } From 0d3a057f92a0a68228ecfa272032f4fa1f79ad4b Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 11:00:26 -0700 Subject: [PATCH 08/47] refactor: combine gen2Recommendation to preInitSetup --- packages/amplify-cli/src/commands/init.ts | 6 +-- .../src/init-steps/gen2Recommendation.ts | 34 ------------- .../src/init-steps/preInitSetup.ts | 50 ++++++++++++++++++- 3 files changed, 52 insertions(+), 38 deletions(-) delete mode 100644 packages/amplify-cli/src/init-steps/gen2Recommendation.ts diff --git a/packages/amplify-cli/src/commands/init.ts b/packages/amplify-cli/src/commands/init.ts index 2108b3891cb..09fd86bf258 100644 --- a/packages/amplify-cli/src/commands/init.ts +++ b/packages/amplify-cli/src/commands/init.ts @@ -10,7 +10,6 @@ import { initProviders } from '../init-steps/s2-initProviders'; import { scaffoldProjectHeadless } from '../init-steps/s8-scaffoldHeadless'; import { onHeadlessSuccess, onSuccess } from '../init-steps/s9-onSuccess'; import { checkForNestedProject } from './helpers/projectUtils'; -import { gen2Recommendation } from '../init-steps/gen2Recommendation'; const constructExeInfo = (context: $TSContext): void => { context.exeInfo = { @@ -19,11 +18,12 @@ const constructExeInfo = (context: $TSContext): void => { }; }; +const isHeadless = true; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type const runStrategy = (quickstart: boolean) => quickstart - ? [preInitSetup, analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] - : [gen2Recommendation, preInitSetup, analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; + ? [preInitSetup(isHeadless), analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] + : [preInitSetup(!isHeadless), analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; /** * entry point for the init command diff --git a/packages/amplify-cli/src/init-steps/gen2Recommendation.ts b/packages/amplify-cli/src/init-steps/gen2Recommendation.ts deleted file mode 100644 index 53f9e76d52d..00000000000 --- a/packages/amplify-cli/src/init-steps/gen2Recommendation.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { $TSContext } from '@aws-amplify/amplify-cli-core'; -import { printer, prompter } from '@aws-amplify/amplify-prompts'; -import { isNewProject } from './s0-analyzeProject'; - -export const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { - if (!isNewProject(context)) { - return context; - } - printer.warn( - `AWS Amplify recommends using Amplify Gen 2 for new projects. Learn how to get started at https://docs.amplify.aws/react/start/quickstart/`, - ); - - const continueWithGen1 = await prompter.confirmContinue('Do you want to continue with Amplify Gen 1?'); - - if (!continueWithGen1) { - printer.info('Exiting the Amplify Gen1 project creation flow. 👋'); - printer.blankLine(); - printer.info('To create a new Amplify Gen2 project, 🫱 https://docs.amplify.aws/'); - process.exit(0); - } - - const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ - 'I am a current Gen 1 user', - 'Gen 2 is missing features I need from Gen 1', - 'I find the Gen 1 CLI easier to use', - 'Prefer not to answer', - ]); - - context.exeInfo.projectConfig = { - whyContinueWithGen1, - }; - - return context; -}; diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index 1f5eea6654c..5f399d95310 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -3,11 +3,24 @@ import { execSync } from 'child_process'; import * as fs from 'fs-extra'; import * as url from 'url'; import { generateLocalEnvInfoFile } from './s9-onSuccess'; +import { printer, prompter } from '@aws-amplify/amplify-prompts'; +import { isNewProject } from './s0-analyzeProject'; + +export const preInitSetup = (isHeadless) => { + if (isHeadless) { + return preInitSetupBasic; + } else { + return async (context) => { + await gen2Recommendation(context); + await preInitSetupBasic(context); + }; + } +}; /** * Executes before init */ -export const preInitSetup = async (context: $TSContext): Promise<$TSContext> => { +const preInitSetupBasic = async (context: $TSContext): Promise<$TSContext> => { if (context.parameters.options?.app) { // Setting up a sample app context.print.warning('Note: Amplify does not have knowledge of the url provided'); @@ -22,6 +35,41 @@ export const preInitSetup = async (context: $TSContext): Promise<$TSContext> => return context; }; +/** + * recommend using Gen 2 or continue with Gen 1. + * ask for why they are using Gen 1 and store the answer in project-config + */ +const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { + if (!isNewProject(context)) { + return context; + } + printer.warn( + `AWS Amplify recommends using Amplify Gen 2 for new projects. Learn how to get started at https://docs.amplify.aws/react/start/quickstart/`, + ); + + const continueWithGen1 = await prompter.confirmContinue('Do you want to continue with Amplify Gen 1?'); + + if (!continueWithGen1) { + printer.info('Exiting the Amplify Gen1 project creation flow. 👋'); + printer.blankLine(); + printer.info('To create a new Amplify Gen2 project, 🫱 https://docs.amplify.aws/'); + process.exit(0); + } + + const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ]); + + context.exeInfo.projectConfig = { + whyContinueWithGen1, + }; + + return context; +}; + /** * Checks whether a url is a valid remote github repository * From cadc06f211942e0ab188b17923a5cd19c3b26e4f Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 11:04:37 -0700 Subject: [PATCH 09/47] feat: remove goodbye message --- packages/amplify-cli/src/init-steps/preInitSetup.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index 5f399d95310..9a8323af2dc 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -50,9 +50,6 @@ const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { const continueWithGen1 = await prompter.confirmContinue('Do you want to continue with Amplify Gen 1?'); if (!continueWithGen1) { - printer.info('Exiting the Amplify Gen1 project creation flow. 👋'); - printer.blankLine(); - printer.info('To create a new Amplify Gen2 project, 🫱 https://docs.amplify.aws/'); process.exit(0); } From 39f8b34948185d042fc5fcfe56b812384546e220 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 15:15:13 -0700 Subject: [PATCH 10/47] test: fix init.test --- packages/amplify-cli/src/__tests__/commands/init.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/amplify-cli/src/__tests__/commands/init.test.ts b/packages/amplify-cli/src/__tests__/commands/init.test.ts index aa1d8bb6c30..6d9d5215e0d 100644 --- a/packages/amplify-cli/src/__tests__/commands/init.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/init.test.ts @@ -137,7 +137,9 @@ describe('amplify init:', () => { }, }, }; - await preInitSetup(context as unknown as $TSContext); + const isHeadless = true; + const step = preInitSetup(!isHeadless); + await step(context as unknown as $TSContext); expect(execSync).toBeCalledWith(`git ls-remote ${appUrl}`, { stdio: 'ignore' }); expect(execSync).toBeCalledWith(`git clone ${appUrl} .`, { stdio: 'inherit' }); expect(execSync).toBeCalledWith('yarn install', { stdio: 'inherit' }); From e4330c388f1b8dc45546197b65bf80eab464a2d7 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 15:20:05 -0700 Subject: [PATCH 11/47] test: add unit test for preInitSetup --- .../__tests__/init-steps/preInitSetup.test.ts | 86 +++++++++++++++++++ .../src/init-steps/preInitSetup.ts | 4 +- 2 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts diff --git a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts new file mode 100644 index 00000000000..6f7f298eaf6 --- /dev/null +++ b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts @@ -0,0 +1,86 @@ +import { $TSContext } from '@aws-amplify/amplify-cli-core'; +import { printer, prompter } from '@aws-amplify/amplify-prompts'; +import { preInitSetup, preInitSetupBasic, gen2Recommendation } from '../../init-steps/preInitSetup'; +import { isNewProject } from '../../init-steps/s0-analyzeProject'; + +// Mock dependencies +jest.mock('@aws-amplify/amplify-cli-core', () => ({ + ...(jest.requireActual('@aws-amplify/amplify-cli-core') as {}), + FeatureFlags: { + getBoolean: jest.fn(), + getNumber: jest.fn(), + isInitialized: jest.fn().mockReturnValue(true), + ensureDefaultFeatureFlags: jest.fn(), + }, + getPackageManager: jest.fn(), +})); + +jest.mock('@aws-amplify/amplify-prompts', () => ({ + printer: { + warn: jest.fn(), + }, + prompter: { + confirmContinue: jest.fn(), + pick: jest.fn(), + }, +})); + +jest.mock('../../init-steps/s0-analyzeProject', () => ({ + isNewProject: jest.fn(), +})); + +describe('preInitSetup', () => { + it('should return preInitSetupBasic when isHeadless is true', () => { + const result = preInitSetup(true); + expect(result).toBe(preInitSetupBasic); + }); + + it('should return a function when isHeadless is false', () => { + const result = preInitSetup(false); + expect(typeof result).toBe('function'); + }); +}); + +describe('gen2Recommendation', () => { + let context; + + beforeEach(() => { + context = { exeInfo: {} } as $TSContext; + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should recommend using Gen 2 for new projects', async () => { + const isNewProjectMock = jest.mocked(isNewProject); + isNewProjectMock.mockReturnValue(true); + + const confirmContinueMock = jest.mocked(require('@aws-amplify/amplify-prompts').prompter.confirmContinue); + confirmContinueMock.mockResolvedValue(true); + + const pickMock = jest.mocked(require('@aws-amplify/amplify-prompts').prompter.pick); + pickMock.mockResolvedValue('I am a current Gen 1 user'); + + await gen2Recommendation(context); + + expect(require('@aws-amplify/amplify-prompts').printer.warn).toHaveBeenCalledWith( + 'AWS Amplify recommends using Amplify Gen 2 for new projects. Learn how to get started at https://docs.amplify.aws/react/start/quickstart/', + ); + expect(confirmContinueMock).toHaveBeenCalledWith('Do you want to continue with Amplify Gen 1?'); + expect(pickMock).toHaveBeenCalledWith('Why would you like to use Amplify Gen 1?', expect.any(Array)); + expect(context.exeInfo.projectConfig).toEqual({ whyContinueWithGen1: 'I am a current Gen 1 user' }); + }); + + it('should return the context for existing projects', async () => { + const isNewProjectMock = jest.mocked(isNewProject); + isNewProjectMock.mockReturnValue(false); + + const result = await gen2Recommendation(context); + + expect(result).toEqual(context); + expect(printer.warn).not.toHaveBeenCalled(); + expect(prompter.confirmContinue).not.toHaveBeenCalled(); + expect(prompter.pick).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index 9a8323af2dc..4bc7d3ab8b5 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -20,7 +20,7 @@ export const preInitSetup = (isHeadless) => { /** * Executes before init */ -const preInitSetupBasic = async (context: $TSContext): Promise<$TSContext> => { +export const preInitSetupBasic = async (context: $TSContext): Promise<$TSContext> => { if (context.parameters.options?.app) { // Setting up a sample app context.print.warning('Note: Amplify does not have knowledge of the url provided'); @@ -39,7 +39,7 @@ const preInitSetupBasic = async (context: $TSContext): Promise<$TSContext> => { * recommend using Gen 2 or continue with Gen 1. * ask for why they are using Gen 1 and store the answer in project-config */ -const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { +export const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { if (!isNewProject(context)) { return context; } From 08e896acd6a3562f1c03fce975b33c92f7fc9891 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 15:23:05 -0700 Subject: [PATCH 12/47] chore: rename to getPreInitSetup --- packages/amplify-cli/src/__tests__/commands/init.test.ts | 4 ++-- .../src/__tests__/init-steps/preInitSetup.test.ts | 6 +++--- packages/amplify-cli/src/commands/init.ts | 6 +++--- packages/amplify-cli/src/init-steps/preInitSetup.ts | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/commands/init.test.ts b/packages/amplify-cli/src/__tests__/commands/init.test.ts index 6d9d5215e0d..54b4ae14909 100644 --- a/packages/amplify-cli/src/__tests__/commands/init.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/init.test.ts @@ -11,7 +11,7 @@ import { import { execSync } from 'child_process'; import { ensureDir, existsSync, readFileSync, readJSON, readdirSync } from 'fs-extra'; import { sync } from 'which'; -import { preInitSetup } from '../../init-steps/preInitSetup'; +import { getPreInitSetup } from '../../init-steps/preInitSetup'; import { analyzeProject } from '../../init-steps/s0-analyzeProject'; import { initFrontend } from '../../init-steps/s1-initFrontend'; import { scaffoldProjectHeadless } from '../../init-steps/s8-scaffoldHeadless'; @@ -138,7 +138,7 @@ describe('amplify init:', () => { }, }; const isHeadless = true; - const step = preInitSetup(!isHeadless); + const step = getPreInitSetup(!isHeadless); await step(context as unknown as $TSContext); expect(execSync).toBeCalledWith(`git ls-remote ${appUrl}`, { stdio: 'ignore' }); expect(execSync).toBeCalledWith(`git clone ${appUrl} .`, { stdio: 'inherit' }); diff --git a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts index 6f7f298eaf6..d5bb8e4da8d 100644 --- a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts +++ b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts @@ -1,6 +1,6 @@ import { $TSContext } from '@aws-amplify/amplify-cli-core'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; -import { preInitSetup, preInitSetupBasic, gen2Recommendation } from '../../init-steps/preInitSetup'; +import { getPreInitSetup, preInitSetupBasic, gen2Recommendation } from '../../init-steps/preInitSetup'; import { isNewProject } from '../../init-steps/s0-analyzeProject'; // Mock dependencies @@ -31,12 +31,12 @@ jest.mock('../../init-steps/s0-analyzeProject', () => ({ describe('preInitSetup', () => { it('should return preInitSetupBasic when isHeadless is true', () => { - const result = preInitSetup(true); + const result = getPreInitSetup(true); expect(result).toBe(preInitSetupBasic); }); it('should return a function when isHeadless is false', () => { - const result = preInitSetup(false); + const result = getPreInitSetup(false); expect(typeof result).toBe('function'); }); }); diff --git a/packages/amplify-cli/src/commands/init.ts b/packages/amplify-cli/src/commands/init.ts index 09fd86bf258..856dcf8b46c 100644 --- a/packages/amplify-cli/src/commands/init.ts +++ b/packages/amplify-cli/src/commands/init.ts @@ -3,7 +3,7 @@ import { constructInputParams } from '../amplify-service-helper'; import { Context } from '../domain/context'; import { raisePostEnvAddEvent } from '../execution-manager'; import { postInitSetup } from '../init-steps/postInitSetup'; -import { preInitSetup } from '../init-steps/preInitSetup'; +import { getPreInitSetup } from '../init-steps/preInitSetup'; import { analyzeProject, analyzeProjectHeadless } from '../init-steps/s0-analyzeProject'; import { initFrontend } from '../init-steps/s1-initFrontend'; import { initProviders } from '../init-steps/s2-initProviders'; @@ -22,8 +22,8 @@ const isHeadless = true; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type const runStrategy = (quickstart: boolean) => quickstart - ? [preInitSetup(isHeadless), analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] - : [preInitSetup(!isHeadless), analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; + ? [getPreInitSetup(isHeadless), analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] + : [getPreInitSetup(!isHeadless), analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; /** * entry point for the init command diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index 4bc7d3ab8b5..126c889d3a9 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -6,7 +6,7 @@ import { generateLocalEnvInfoFile } from './s9-onSuccess'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; import { isNewProject } from './s0-analyzeProject'; -export const preInitSetup = (isHeadless) => { +export const getPreInitSetup = (isHeadless) => { if (isHeadless) { return preInitSetupBasic; } else { From 22cff01e5e878bdf59bbb86ef5000c3fb21fef7e Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 15:32:57 -0700 Subject: [PATCH 13/47] feat: change verbiage --- packages/amplify-cli/src/init-steps/preInitSetup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index 126c889d3a9..c3126074078 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -44,7 +44,7 @@ export const gen2Recommendation = async (context: $TSContext): Promise<$TSContex return context; } printer.warn( - `AWS Amplify recommends using Amplify Gen 2 for new projects. Learn how to get started at https://docs.amplify.aws/react/start/quickstart/`, + `For new projects, we recommend starting with AWS Amplify Gen 2, our new code-first developer experience. Get started at https://docs.amplify.aws/react/start/quickstart/`, ); const continueWithGen1 = await prompter.confirmContinue('Do you want to continue with Amplify Gen 1?'); From 85cd59a5390f3c81f17dd1a52ab15947d75afadd Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 15:36:29 -0700 Subject: [PATCH 14/47] chore: update unit test --- .../src/__tests__/init-steps/preInitSetup.test.ts | 6 +++--- packages/amplify-cli/src/init-steps/preInitSetup.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts index d5bb8e4da8d..dc22d44098b 100644 --- a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts +++ b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts @@ -56,16 +56,16 @@ describe('gen2Recommendation', () => { const isNewProjectMock = jest.mocked(isNewProject); isNewProjectMock.mockReturnValue(true); - const confirmContinueMock = jest.mocked(require('@aws-amplify/amplify-prompts').prompter.confirmContinue); + const confirmContinueMock = jest.mocked(prompter.confirmContinue); confirmContinueMock.mockResolvedValue(true); - const pickMock = jest.mocked(require('@aws-amplify/amplify-prompts').prompter.pick); + const pickMock = jest.mocked(prompter.pick); pickMock.mockResolvedValue('I am a current Gen 1 user'); await gen2Recommendation(context); expect(require('@aws-amplify/amplify-prompts').printer.warn).toHaveBeenCalledWith( - 'AWS Amplify recommends using Amplify Gen 2 for new projects. Learn how to get started at https://docs.amplify.aws/react/start/quickstart/', + 'For new projects, we recommend starting with AWS Amplify Gen 2, our new code-first developer experience. Get started at https://docs.amplify.aws/react/start/quickstart/', ); expect(confirmContinueMock).toHaveBeenCalledWith('Do you want to continue with Amplify Gen 1?'); expect(pickMock).toHaveBeenCalledWith('Why would you like to use Amplify Gen 1?', expect.any(Array)); diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index c3126074078..9332a6d2b3b 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -44,7 +44,7 @@ export const gen2Recommendation = async (context: $TSContext): Promise<$TSContex return context; } printer.warn( - `For new projects, we recommend starting with AWS Amplify Gen 2, our new code-first developer experience. Get started at https://docs.amplify.aws/react/start/quickstart/`, + 'For new projects, we recommend starting with AWS Amplify Gen 2, our new code-first developer experience. Get started at https://docs.amplify.aws/react/start/quickstart/', ); const continueWithGen1 = await prompter.confirmContinue('Do you want to continue with Amplify Gen 1?'); From f12fe7a4b3a0672728b59608f4933b003c94ff8f Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 10 Jul 2024 16:39:08 -0700 Subject: [PATCH 15/47] feat: add whyContinueWithGen1 to stack metadata --- .../src/template-description-utils.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/amplify-provider-awscloudformation/src/template-description-utils.ts b/packages/amplify-provider-awscloudformation/src/template-description-utils.ts index a07a364048a..5c1baca7dad 100644 --- a/packages/amplify-provider-awscloudformation/src/template-description-utils.ts +++ b/packages/amplify-provider-awscloudformation/src/template-description-utils.ts @@ -83,12 +83,15 @@ export function getDefaultTemplateDescription(context: $TSContext, category: str // get stack type "stackType" const stackTypeDescription = service ? `${category}-${service}` : category; + // get the reason why not switching to Gen2 + const { whyContinueWithGen1 } = context.exeInfo.projectConfig; + const descriptionJson: TemplateDescription = { createdOn: platformDescription, createdBy: deploymentTypeDescription, createdWith: cliVersion, stackType: stackTypeDescription, - metadata: {}, + metadata: { whyContinueWithGen1 }, }; return JSON.stringify(descriptionJson); From bad94300cb6d6afa53cdc60d5edaff9ee4d73353 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Thu, 11 Jul 2024 08:53:54 -0700 Subject: [PATCH 16/47] fix: verify verify_versions_match --- packages/amplify-cli-npm/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-cli-npm/index.ts b/packages/amplify-cli-npm/index.ts index 31efac92c57..bdbeb66151c 100644 --- a/packages/amplify-cli-npm/index.ts +++ b/packages/amplify-cli-npm/index.ts @@ -16,4 +16,4 @@ export const install = async (): Promise => { return binary.install(); }; -// force version bump to 12.12.0 +// force version bump to 12.12.5 From ad48c8d2423362273f65e6c22153ee42b8850758 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Thu, 11 Jul 2024 11:14:33 -0700 Subject: [PATCH 17/47] fix: verify verify_versions_match --- .circleci/local_publish_helpers_codebuild.sh | 170 +++++++++---------- packages/amplify-cli/src/index.ts | 2 +- 2 files changed, 84 insertions(+), 88 deletions(-) diff --git a/.circleci/local_publish_helpers_codebuild.sh b/.circleci/local_publish_helpers_codebuild.sh index 1c2a4b7d692..43c39f5e2f7 100644 --- a/.circleci/local_publish_helpers_codebuild.sh +++ b/.circleci/local_publish_helpers_codebuild.sh @@ -10,16 +10,15 @@ function startLocalRegistry { (cd && nohup npx ${VERDACCIO_PACKAGE:-$default_verdaccio_package} -c $1 &>$tmp_registry_log &) # Wait for Verdaccio to boot attempts=0 - until grep -q 'http address' $tmp_registry_log - do - attempts=$((attempts+1)) - echo "Waiting for Verdaccio, attempt $attempts" - sleep 1 - - if (( attempts > 60 )); then - echo "Verdaccio didn't start"; - exit 1 - fi + until grep -q 'http address' $tmp_registry_log; do + attempts=$((attempts + 1)) + echo "Waiting for Verdaccio, attempt $attempts" + sleep 1 + + if ((attempts > 60)); then + echo "Verdaccio didn't start" + exit 1 + fi done } @@ -32,18 +31,18 @@ function uploadPkgCliCodeBuild { # validate that version is uploaded in right build if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - if [[ "$PROJECT_NAME" != "Release" ]]; then - echo "Invalid project name $PROJECT_NAME for $version release." - exit 1 - fi + if [[ "$PROJECT_NAME" != "Release" ]]; then + echo "Invalid project name $PROJECT_NAME for $version release." + exit 1 + fi elif [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+-rc\. ]]; then - if [[ "$PROJECT_NAME" != "RC" ]]; then - echo "Invalid project name $PROJECT_NAME for $version RC release." - exit 1 - fi + if [[ "$PROJECT_NAME" != "RC" ]]; then + echo "Invalid project name $PROJECT_NAME for $version RC release." + exit 1 + fi elif [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+-$ ]]; then - echo "Version $version is missing a tag"; - exit 1 + echo "Version $version is missing a tag" + exit 1 fi # It's ok to re-upload binaries for the same build to make this step idempotent @@ -58,54 +57,54 @@ function uploadPkgCliCodeBuild { } function generatePkgCli { - cd pkg + cd pkg - # install package depedencies - cp ../yarn.lock ./ - yarn workspaces focus --production + # install package depedencies + cp ../yarn.lock ./ + yarn workspaces focus --production - # Optimize package size - find . \ - -name "*.d.ts" -or -name "*.js.map" -or -name "*.d.ts.map" -or \ - -iname "readme.md" -or -iname "changelog.md" -or -iname "history.md" \ - | xargs rm + # Optimize package size + find . \ + -name "*.d.ts" -or -name "*.js.map" -or -name "*.d.ts.map" -or \ + -iname "readme.md" -or -iname "changelog.md" -or -iname "history.md" | + xargs rm - # Restore .d.ts files required by @aws-amplify/codegen-ui at runtime - cp ../node_modules/typescript/lib/*.d.ts node_modules/typescript/lib/ + # Restore .d.ts files required by @aws-amplify/codegen-ui at runtime + cp ../node_modules/typescript/lib/*.d.ts node_modules/typescript/lib/ - # replace DEV binary entry point with production one - cp ../node_modules/@aws-amplify/cli-internal/bin/amplify.production.template node_modules/@aws-amplify/cli-internal/bin/amplify + # replace DEV binary entry point with production one + cp ../node_modules/@aws-amplify/cli-internal/bin/amplify.production.template node_modules/@aws-amplify/cli-internal/bin/amplify - # Transpile code for packaging - npx babel node_modules --extensions '.js,.jsx,.es6,.es,.ts' --copy-files --include-dotfiles -d ../build/node_modules + # Transpile code for packaging + npx babel node_modules --extensions '.js,.jsx,.es6,.es,.ts' --copy-files --include-dotfiles -d ../build/node_modules - # Include third party licenses - cp ../Third_Party_Licenses.txt ../build/node_modules + # Include third party licenses + cp ../Third_Party_Licenses.txt ../build/node_modules - # Build pkg cli - cp package.json ../build/node_modules/package.json + # Build pkg cli + cp package.json ../build/node_modules/package.json - if [[ "$@" =~ 'arm' ]]; then - npx pkg --no-bytecode --public-packages "*" --public -t node18-linux-arm64 ../build/node_modules -o ../out/amplify-pkg-linux-arm64 - tar -czvf ../out/amplify-pkg-linux-arm64.tgz ../out/amplify-pkg-linux-arm64 - fi + if [[ "$@" =~ 'arm' ]]; then + npx pkg --no-bytecode --public-packages "*" --public -t node18-linux-arm64 ../build/node_modules -o ../out/amplify-pkg-linux-arm64 + tar -czvf ../out/amplify-pkg-linux-arm64.tgz ../out/amplify-pkg-linux-arm64 + fi - if [[ "$@" =~ 'linux' ]]; then - npx pkg -t node18-linux-x64 ../build/node_modules -o ../out/amplify-pkg-linux-x64 - tar -czvf ../out/amplify-pkg-linux-x64.tgz ../out/amplify-pkg-linux-x64 - fi + if [[ "$@" =~ 'linux' ]]; then + npx pkg -t node18-linux-x64 ../build/node_modules -o ../out/amplify-pkg-linux-x64 + tar -czvf ../out/amplify-pkg-linux-x64.tgz ../out/amplify-pkg-linux-x64 + fi - if [[ "$@" =~ 'macos' ]]; then - npx pkg -t node18-macos-x64 ../build/node_modules -o ../out/amplify-pkg-macos-x64 - tar -czvf ../out/amplify-pkg-macos-x64.tgz ../out/amplify-pkg-macos-x64 - fi + if [[ "$@" =~ 'macos' ]]; then + npx pkg -t node18-macos-x64 ../build/node_modules -o ../out/amplify-pkg-macos-x64 + tar -czvf ../out/amplify-pkg-macos-x64.tgz ../out/amplify-pkg-macos-x64 + fi - if [[ "$@" =~ 'win' ]]; then - npx pkg -t node18-win-x64 ../build/node_modules -o ../out/amplify-pkg-win-x64.exe - tar -czvf ../out/amplify-pkg-win-x64.tgz ../out/amplify-pkg-win-x64.exe - fi + if [[ "$@" =~ 'win' ]]; then + npx pkg -t node18-win-x64 ../build/node_modules -o ../out/amplify-pkg-win-x64.exe + tar -czvf ../out/amplify-pkg-win-x64.tgz ../out/amplify-pkg-win-x64.exe + fi - cd .. + cd .. } function verifyPkgCli { @@ -115,28 +114,28 @@ function verifyPkgCli { wc -c out/* function verifySinglePkg { - binary_name=$1 - compressed_binary_name=$2 - binary_threshold_in_bytes=$3 - - # Compressed binary size is not deterministic enough to have stricter threshold. - # I.e. it depends on how compression algorithm can compress bytecode and there are cases where compressed size - # grows even if uncompressed size drops. We don't have control on bytecode and compression. - # Therefore we check if compression gets past half of original size as sanity check. - compressed_binary_threshold_in_bytes=$((binary_threshold_in_bytes/2)) - - binary_size=$(wc -c out/$binary_name | awk '{print $1}') - compressed_binary_size=$(wc -c out/$compressed_binary_name | awk '{print $1}') - - if (( binary_size > binary_threshold_in_bytes )); then - echo "$binary_name size has grown over $binary_threshold_in_bytes bytes" - exit 1 - fi + binary_name=$1 + compressed_binary_name=$2 + binary_threshold_in_bytes=$3 + + # Compressed binary size is not deterministic enough to have stricter threshold. + # I.e. it depends on how compression algorithm can compress bytecode and there are cases where compressed size + # grows even if uncompressed size drops. We don't have control on bytecode and compression. + # Therefore we check if compression gets past half of original size as sanity check. + compressed_binary_threshold_in_bytes=$((binary_threshold_in_bytes / 2)) + + binary_size=$(wc -c out/$binary_name | awk '{print $1}') + compressed_binary_size=$(wc -c out/$compressed_binary_name | awk '{print $1}') + + if ((binary_size > binary_threshold_in_bytes)); then + echo "$binary_name size has grown over $binary_threshold_in_bytes bytes" + exit 1 + fi - if (( compressed_binary_size > compressed_binary_threshold_in_bytes )); then - echo "$compressed_binary_name size has grown over $compressed_binary_threshold_in_bytes bytes" - exit 1 - fi + if ((compressed_binary_size > compressed_binary_threshold_in_bytes)); then + echo "$compressed_binary_name size has grown over $compressed_binary_threshold_in_bytes bytes" + exit 1 + fi } verifySinglePkg "amplify-pkg-linux-x64" "amplify-pkg-linux-x64.tgz" $((830 * 1024 * 1024)) @@ -214,12 +213,11 @@ function retry { n=0 FAILED_TEST_REGEX_FILE="./amplify-e2e-reports/amplify-e2e-failed-test.txt" rm -f $FAILED_TEST_REGEX_FILE - until [ $n -ge $MAX_ATTEMPTS ] - do + until [ $n -ge $MAX_ATTEMPTS ]; do echo "Attempting $@ with max retries $MAX_ATTEMPTS" setAwsAccountCredentials "$@" && break - n=$[$n+1] + n=$(($n + 1)) FIRST_RUN=false echo "Attempt $n completed." sleep $SLEEP_DURATION @@ -261,7 +259,7 @@ function setAwsAccountCredentials { export AWS_SECRET_ACCESS_KEY_ORIG=$AWS_SECRET_ACCESS_KEY export AWS_SESSION_TOKEN_ORIG=$AWS_SESSION_TOKEN # introduce a delay of up to 1 minute to allow for more even spread aws list-accounts calls due to throttling - sleep $[ ( $RANDOM % 60 ) + 1 ]s + sleep $((($RANDOM % 60) + 1))s if [[ "$OSTYPE" == "msys" ]]; then # windows provided by circleci has this OSTYPE useChildAccountCredentials @@ -278,7 +276,7 @@ function runE2eTestCb { _setupCoverage FAILED_TEST_REGEX_FILE="./amplify-e2e-reports/amplify-e2e-failed-test.txt" - if [ -f $FAILED_TEST_REGEX_FILE ]; then + if [ -f $FAILED_TEST_REGEX_FILE ]; then # read the content of failed tests failedTests=$(<$FAILED_TEST_REGEX_FILE) if [[ ! -z "$DISABLE_COVERAGE" ]]; then @@ -300,15 +298,13 @@ function runE2eTestCb { function _setupCoverage { _teardownCoverage echo "Setup Coverage ($E2E_TEST_COVERAGE_DIR)" - if [ ! -d $E2E_TEST_COVERAGE_DIR ] - then + if [ ! -d $E2E_TEST_COVERAGE_DIR ]; then mkdir -p $E2E_TEST_COVERAGE_DIR fi } function _teardownCoverage { - if [ -d $E2E_TEST_COVERAGE_DIR ] - then + if [ -d $E2E_TEST_COVERAGE_DIR ]; then echo "Teardown Coverage ($E2E_TEST_COVERAGE_DIR)" rm -r $E2E_TEST_COVERAGE_DIR fi @@ -323,7 +319,7 @@ function checkPackageVersionsInLocalNpmRegistry { if [[ $cli_internal_version != $cli_version ]]; then echo "Versions did not match." - echo "Manual fix: add a proper conventional commit that touches the amplify-cli-npm package to correct its version bump. For example https://github.com/aws-amplify/amplify-cli/commit/6f14792d1db424aa428ec4836fed7d6dd5cccfd0" + echo "Manual fix: add a proper conventional commit that touches the amplify-cli-npm package to correct its version bump. For example https://github.com/aws-amplify/amplify-cli/pull/13759/commits/15dcd96feae925ff26ca51abfb4a0477890af745" exit 1 else echo "Versions matched." diff --git a/packages/amplify-cli/src/index.ts b/packages/amplify-cli/src/index.ts index 8283cecf304..4281f666dfc 100644 --- a/packages/amplify-cli/src/index.ts +++ b/packages/amplify-cli/src/index.ts @@ -257,5 +257,5 @@ export const executeAmplifyCommand = async (context: Context): Promise => } }; -// bump version to 12.12.0 +// bump version to 12.12.5 // From 2378a19a19b7e438c0efb5fa860c6a59328b6f8e Mon Sep 17 00:00:00 2001 From: "0.618" Date: Thu, 11 Jul 2024 12:40:29 -0700 Subject: [PATCH 18/47] feat: bump versions --- packages/amplify-cli/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/amplify-cli/src/index.ts b/packages/amplify-cli/src/index.ts index 4281f666dfc..b1ca5e8899a 100644 --- a/packages/amplify-cli/src/index.ts +++ b/packages/amplify-cli/src/index.ts @@ -258,4 +258,3 @@ export const executeAmplifyCommand = async (context: Context): Promise => }; // bump version to 12.12.5 -// From ad3ab5eafd48b18ca21432b0b63c95d631a93a36 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Fri, 12 Jul 2024 10:45:26 -0700 Subject: [PATCH 19/47] feat: bump versions --- packages/amplify-cli-npm/index.ts | 1 + packages/amplify-cli/src/index.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/amplify-cli-npm/index.ts b/packages/amplify-cli-npm/index.ts index bdbeb66151c..9f9fc255673 100644 --- a/packages/amplify-cli-npm/index.ts +++ b/packages/amplify-cli-npm/index.ts @@ -16,4 +16,5 @@ export const install = async (): Promise => { return binary.install(); }; +// // force version bump to 12.12.5 diff --git a/packages/amplify-cli/src/index.ts b/packages/amplify-cli/src/index.ts index b1ca5e8899a..0452c1d1e25 100644 --- a/packages/amplify-cli/src/index.ts +++ b/packages/amplify-cli/src/index.ts @@ -257,4 +257,5 @@ export const executeAmplifyCommand = async (context: Context): Promise => } }; +// // bump version to 12.12.5 From cac0e9df24983f5319a0dc8d03028e9b8438aba1 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Fri, 12 Jul 2024 12:06:33 -0700 Subject: [PATCH 20/47] feat: bump versions --- packages/amplify-cli-npm/index.ts | 3 +-- packages/amplify-cli/src/index.ts | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/amplify-cli-npm/index.ts b/packages/amplify-cli-npm/index.ts index 9f9fc255673..cffb591badb 100644 --- a/packages/amplify-cli-npm/index.ts +++ b/packages/amplify-cli-npm/index.ts @@ -16,5 +16,4 @@ export const install = async (): Promise => { return binary.install(); }; -// -// force version bump to 12.12.5 +// force version bump to 12.13.0 diff --git a/packages/amplify-cli/src/index.ts b/packages/amplify-cli/src/index.ts index 0452c1d1e25..7616be8a079 100644 --- a/packages/amplify-cli/src/index.ts +++ b/packages/amplify-cli/src/index.ts @@ -257,5 +257,4 @@ export const executeAmplifyCommand = async (context: Context): Promise => } }; -// -// bump version to 12.12.5 +// bump version to 12.13.0 From dfba32eb5086bd4918c3daebe949ca439c49f543 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Fri, 12 Jul 2024 13:12:19 -0700 Subject: [PATCH 21/47] chore: rename to recommendGen2 --- packages/amplify-cli/src/commands/init.ts | 6 +++--- packages/amplify-cli/src/init-steps/preInitSetup.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/amplify-cli/src/commands/init.ts b/packages/amplify-cli/src/commands/init.ts index 856dcf8b46c..7986e4111b0 100644 --- a/packages/amplify-cli/src/commands/init.ts +++ b/packages/amplify-cli/src/commands/init.ts @@ -18,12 +18,12 @@ const constructExeInfo = (context: $TSContext): void => { }; }; -const isHeadless = true; +const recommendGen2 = true; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type const runStrategy = (quickstart: boolean) => quickstart - ? [getPreInitSetup(isHeadless), analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] - : [getPreInitSetup(!isHeadless), analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; + ? [getPreInitSetup(recommendGen2), analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] + : [getPreInitSetup(!recommendGen2), analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; /** * entry point for the init command diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index 9332a6d2b3b..a06ede21f16 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -6,8 +6,8 @@ import { generateLocalEnvInfoFile } from './s9-onSuccess'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; import { isNewProject } from './s0-analyzeProject'; -export const getPreInitSetup = (isHeadless) => { - if (isHeadless) { +export const getPreInitSetup = (recommendGen2: boolean) => { + if (recommendGen2) { return preInitSetupBasic; } else { return async (context) => { From aa1850cd1a9ffdc2b65ee6c92d5e397fa2b9e8be Mon Sep 17 00:00:00 2001 From: "0.618" Date: Fri, 12 Jul 2024 13:17:32 -0700 Subject: [PATCH 22/47] chore: rename to recommendGen2 in test --- packages/amplify-cli/src/__tests__/commands/init.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/commands/init.test.ts b/packages/amplify-cli/src/__tests__/commands/init.test.ts index 54b4ae14909..f4e29eec1b4 100644 --- a/packages/amplify-cli/src/__tests__/commands/init.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/init.test.ts @@ -137,8 +137,8 @@ describe('amplify init:', () => { }, }, }; - const isHeadless = true; - const step = getPreInitSetup(!isHeadless); + const recommendGen2 = true; + const step = getPreInitSetup(!recommendGen2); await step(context as unknown as $TSContext); expect(execSync).toBeCalledWith(`git ls-remote ${appUrl}`, { stdio: 'ignore' }); expect(execSync).toBeCalledWith(`git clone ${appUrl} .`, { stdio: 'inherit' }); From fba0211cc9bb958db529c2ec4c9ae4f07abf46f4 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Mon, 15 Jul 2024 14:20:19 -0700 Subject: [PATCH 23/47] revert .sh format --- .circleci/local_publish_helpers_codebuild.sh | 168 ++++++++++--------- 1 file changed, 86 insertions(+), 82 deletions(-) diff --git a/.circleci/local_publish_helpers_codebuild.sh b/.circleci/local_publish_helpers_codebuild.sh index 43c39f5e2f7..738df9c2a2c 100644 --- a/.circleci/local_publish_helpers_codebuild.sh +++ b/.circleci/local_publish_helpers_codebuild.sh @@ -10,15 +10,16 @@ function startLocalRegistry { (cd && nohup npx ${VERDACCIO_PACKAGE:-$default_verdaccio_package} -c $1 &>$tmp_registry_log &) # Wait for Verdaccio to boot attempts=0 - until grep -q 'http address' $tmp_registry_log; do - attempts=$((attempts + 1)) - echo "Waiting for Verdaccio, attempt $attempts" - sleep 1 - - if ((attempts > 60)); then - echo "Verdaccio didn't start" - exit 1 - fi + until grep -q 'http address' $tmp_registry_log + do + attempts=$((attempts+1)) + echo "Waiting for Verdaccio, attempt $attempts" + sleep 1 + + if (( attempts > 60 )); then + echo "Verdaccio didn't start"; + exit 1 + fi done } @@ -31,18 +32,18 @@ function uploadPkgCliCodeBuild { # validate that version is uploaded in right build if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - if [[ "$PROJECT_NAME" != "Release" ]]; then - echo "Invalid project name $PROJECT_NAME for $version release." - exit 1 - fi + if [[ "$PROJECT_NAME" != "Release" ]]; then + echo "Invalid project name $PROJECT_NAME for $version release." + exit 1 + fi elif [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+-rc\. ]]; then - if [[ "$PROJECT_NAME" != "RC" ]]; then - echo "Invalid project name $PROJECT_NAME for $version RC release." - exit 1 - fi - elif [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+-$ ]]; then - echo "Version $version is missing a tag" + if [[ "$PROJECT_NAME" != "RC" ]]; then + echo "Invalid project name $PROJECT_NAME for $version RC release." exit 1 + fi + elif [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+-$ ]]; then + echo "Version $version is missing a tag"; + exit 1 fi # It's ok to re-upload binaries for the same build to make this step idempotent @@ -57,54 +58,54 @@ function uploadPkgCliCodeBuild { } function generatePkgCli { - cd pkg + cd pkg - # install package depedencies - cp ../yarn.lock ./ - yarn workspaces focus --production + # install package depedencies + cp ../yarn.lock ./ + yarn workspaces focus --production - # Optimize package size - find . \ - -name "*.d.ts" -or -name "*.js.map" -or -name "*.d.ts.map" -or \ - -iname "readme.md" -or -iname "changelog.md" -or -iname "history.md" | - xargs rm + # Optimize package size + find . \ + -name "*.d.ts" -or -name "*.js.map" -or -name "*.d.ts.map" -or \ + -iname "readme.md" -or -iname "changelog.md" -or -iname "history.md" \ + | xargs rm - # Restore .d.ts files required by @aws-amplify/codegen-ui at runtime - cp ../node_modules/typescript/lib/*.d.ts node_modules/typescript/lib/ + # Restore .d.ts files required by @aws-amplify/codegen-ui at runtime + cp ../node_modules/typescript/lib/*.d.ts node_modules/typescript/lib/ - # replace DEV binary entry point with production one - cp ../node_modules/@aws-amplify/cli-internal/bin/amplify.production.template node_modules/@aws-amplify/cli-internal/bin/amplify + # replace DEV binary entry point with production one + cp ../node_modules/@aws-amplify/cli-internal/bin/amplify.production.template node_modules/@aws-amplify/cli-internal/bin/amplify - # Transpile code for packaging - npx babel node_modules --extensions '.js,.jsx,.es6,.es,.ts' --copy-files --include-dotfiles -d ../build/node_modules + # Transpile code for packaging + npx babel node_modules --extensions '.js,.jsx,.es6,.es,.ts' --copy-files --include-dotfiles -d ../build/node_modules - # Include third party licenses - cp ../Third_Party_Licenses.txt ../build/node_modules + # Include third party licenses + cp ../Third_Party_Licenses.txt ../build/node_modules - # Build pkg cli - cp package.json ../build/node_modules/package.json + # Build pkg cli + cp package.json ../build/node_modules/package.json - if [[ "$@" =~ 'arm' ]]; then - npx pkg --no-bytecode --public-packages "*" --public -t node18-linux-arm64 ../build/node_modules -o ../out/amplify-pkg-linux-arm64 - tar -czvf ../out/amplify-pkg-linux-arm64.tgz ../out/amplify-pkg-linux-arm64 - fi + if [[ "$@" =~ 'arm' ]]; then + npx pkg --no-bytecode --public-packages "*" --public -t node18-linux-arm64 ../build/node_modules -o ../out/amplify-pkg-linux-arm64 + tar -czvf ../out/amplify-pkg-linux-arm64.tgz ../out/amplify-pkg-linux-arm64 + fi - if [[ "$@" =~ 'linux' ]]; then - npx pkg -t node18-linux-x64 ../build/node_modules -o ../out/amplify-pkg-linux-x64 - tar -czvf ../out/amplify-pkg-linux-x64.tgz ../out/amplify-pkg-linux-x64 - fi + if [[ "$@" =~ 'linux' ]]; then + npx pkg -t node18-linux-x64 ../build/node_modules -o ../out/amplify-pkg-linux-x64 + tar -czvf ../out/amplify-pkg-linux-x64.tgz ../out/amplify-pkg-linux-x64 + fi - if [[ "$@" =~ 'macos' ]]; then - npx pkg -t node18-macos-x64 ../build/node_modules -o ../out/amplify-pkg-macos-x64 - tar -czvf ../out/amplify-pkg-macos-x64.tgz ../out/amplify-pkg-macos-x64 - fi + if [[ "$@" =~ 'macos' ]]; then + npx pkg -t node18-macos-x64 ../build/node_modules -o ../out/amplify-pkg-macos-x64 + tar -czvf ../out/amplify-pkg-macos-x64.tgz ../out/amplify-pkg-macos-x64 + fi - if [[ "$@" =~ 'win' ]]; then - npx pkg -t node18-win-x64 ../build/node_modules -o ../out/amplify-pkg-win-x64.exe - tar -czvf ../out/amplify-pkg-win-x64.tgz ../out/amplify-pkg-win-x64.exe - fi + if [[ "$@" =~ 'win' ]]; then + npx pkg -t node18-win-x64 ../build/node_modules -o ../out/amplify-pkg-win-x64.exe + tar -czvf ../out/amplify-pkg-win-x64.tgz ../out/amplify-pkg-win-x64.exe + fi - cd .. + cd .. } function verifyPkgCli { @@ -114,28 +115,28 @@ function verifyPkgCli { wc -c out/* function verifySinglePkg { - binary_name=$1 - compressed_binary_name=$2 - binary_threshold_in_bytes=$3 - - # Compressed binary size is not deterministic enough to have stricter threshold. - # I.e. it depends on how compression algorithm can compress bytecode and there are cases where compressed size - # grows even if uncompressed size drops. We don't have control on bytecode and compression. - # Therefore we check if compression gets past half of original size as sanity check. - compressed_binary_threshold_in_bytes=$((binary_threshold_in_bytes / 2)) - - binary_size=$(wc -c out/$binary_name | awk '{print $1}') - compressed_binary_size=$(wc -c out/$compressed_binary_name | awk '{print $1}') - - if ((binary_size > binary_threshold_in_bytes)); then - echo "$binary_name size has grown over $binary_threshold_in_bytes bytes" - exit 1 - fi + binary_name=$1 + compressed_binary_name=$2 + binary_threshold_in_bytes=$3 - if ((compressed_binary_size > compressed_binary_threshold_in_bytes)); then - echo "$compressed_binary_name size has grown over $compressed_binary_threshold_in_bytes bytes" - exit 1 - fi + # Compressed binary size is not deterministic enough to have stricter threshold. + # I.e. it depends on how compression algorithm can compress bytecode and there are cases where compressed size + # grows even if uncompressed size drops. We don't have control on bytecode and compression. + # Therefore we check if compression gets past half of original size as sanity check. + compressed_binary_threshold_in_bytes=$((binary_threshold_in_bytes/2)) + + binary_size=$(wc -c out/$binary_name | awk '{print $1}') + compressed_binary_size=$(wc -c out/$compressed_binary_name | awk '{print $1}') + + if (( binary_size > binary_threshold_in_bytes )); then + echo "$binary_name size has grown over $binary_threshold_in_bytes bytes" + exit 1 + fi + + if (( compressed_binary_size > compressed_binary_threshold_in_bytes )); then + echo "$compressed_binary_name size has grown over $compressed_binary_threshold_in_bytes bytes" + exit 1 + fi } verifySinglePkg "amplify-pkg-linux-x64" "amplify-pkg-linux-x64.tgz" $((830 * 1024 * 1024)) @@ -213,11 +214,12 @@ function retry { n=0 FAILED_TEST_REGEX_FILE="./amplify-e2e-reports/amplify-e2e-failed-test.txt" rm -f $FAILED_TEST_REGEX_FILE - until [ $n -ge $MAX_ATTEMPTS ]; do + until [ $n -ge $MAX_ATTEMPTS ] + do echo "Attempting $@ with max retries $MAX_ATTEMPTS" setAwsAccountCredentials "$@" && break - n=$(($n + 1)) + n=$[$n+1] FIRST_RUN=false echo "Attempt $n completed." sleep $SLEEP_DURATION @@ -259,7 +261,7 @@ function setAwsAccountCredentials { export AWS_SECRET_ACCESS_KEY_ORIG=$AWS_SECRET_ACCESS_KEY export AWS_SESSION_TOKEN_ORIG=$AWS_SESSION_TOKEN # introduce a delay of up to 1 minute to allow for more even spread aws list-accounts calls due to throttling - sleep $((($RANDOM % 60) + 1))s + sleep $[ ( $RANDOM % 60 ) + 1 ]s if [[ "$OSTYPE" == "msys" ]]; then # windows provided by circleci has this OSTYPE useChildAccountCredentials @@ -276,7 +278,7 @@ function runE2eTestCb { _setupCoverage FAILED_TEST_REGEX_FILE="./amplify-e2e-reports/amplify-e2e-failed-test.txt" - if [ -f $FAILED_TEST_REGEX_FILE ]; then + if [ -f $FAILED_TEST_REGEX_FILE ]; then # read the content of failed tests failedTests=$(<$FAILED_TEST_REGEX_FILE) if [[ ! -z "$DISABLE_COVERAGE" ]]; then @@ -298,13 +300,15 @@ function runE2eTestCb { function _setupCoverage { _teardownCoverage echo "Setup Coverage ($E2E_TEST_COVERAGE_DIR)" - if [ ! -d $E2E_TEST_COVERAGE_DIR ]; then + if [ ! -d $E2E_TEST_COVERAGE_DIR ] + then mkdir -p $E2E_TEST_COVERAGE_DIR fi } function _teardownCoverage { - if [ -d $E2E_TEST_COVERAGE_DIR ]; then + if [ -d $E2E_TEST_COVERAGE_DIR ] + then echo "Teardown Coverage ($E2E_TEST_COVERAGE_DIR)" rm -r $E2E_TEST_COVERAGE_DIR fi From 1e8e25ba3bf8efb06a0096f000c74f7d1dc4caff Mon Sep 17 00:00:00 2001 From: "0.618" Date: Mon, 15 Jul 2024 14:26:02 -0700 Subject: [PATCH 24/47] chore: rename and not export preInitSetup --- packages/amplify-cli/src/init-steps/preInitSetup.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index a06ede21f16..b67ba47c2e5 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -8,11 +8,11 @@ import { isNewProject } from './s0-analyzeProject'; export const getPreInitSetup = (recommendGen2: boolean) => { if (recommendGen2) { - return preInitSetupBasic; + return preInitSetup; } else { return async (context) => { await gen2Recommendation(context); - await preInitSetupBasic(context); + await preInitSetup(context); }; } }; @@ -20,7 +20,7 @@ export const getPreInitSetup = (recommendGen2: boolean) => { /** * Executes before init */ -export const preInitSetupBasic = async (context: $TSContext): Promise<$TSContext> => { +const preInitSetup = async (context: $TSContext): Promise<$TSContext> => { if (context.parameters.options?.app) { // Setting up a sample app context.print.warning('Note: Amplify does not have knowledge of the url provided'); @@ -39,7 +39,7 @@ export const preInitSetupBasic = async (context: $TSContext): Promise<$TSContext * recommend using Gen 2 or continue with Gen 1. * ask for why they are using Gen 1 and store the answer in project-config */ -export const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { +const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { if (!isNewProject(context)) { return context; } From 3d1bb594364458d0e761506f73f1c050faf38cd7 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Mon, 15 Jul 2024 14:57:27 -0700 Subject: [PATCH 25/47] fix: export gen2Recommandation and preInitSetup for test --- .../amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts | 4 ++-- packages/amplify-cli/src/init-steps/preInitSetup.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts index dc22d44098b..1fd41d482a1 100644 --- a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts +++ b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts @@ -1,6 +1,6 @@ import { $TSContext } from '@aws-amplify/amplify-cli-core'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; -import { getPreInitSetup, preInitSetupBasic, gen2Recommendation } from '../../init-steps/preInitSetup'; +import { getPreInitSetup, preInitSetup, gen2Recommendation } from '../../init-steps/preInitSetup'; import { isNewProject } from '../../init-steps/s0-analyzeProject'; // Mock dependencies @@ -32,7 +32,7 @@ jest.mock('../../init-steps/s0-analyzeProject', () => ({ describe('preInitSetup', () => { it('should return preInitSetupBasic when isHeadless is true', () => { const result = getPreInitSetup(true); - expect(result).toBe(preInitSetupBasic); + expect(result).toBe(preInitSetup); }); it('should return a function when isHeadless is false', () => { diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index b67ba47c2e5..db4e36753a8 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -20,7 +20,7 @@ export const getPreInitSetup = (recommendGen2: boolean) => { /** * Executes before init */ -const preInitSetup = async (context: $TSContext): Promise<$TSContext> => { +export const preInitSetup = async (context: $TSContext): Promise<$TSContext> => { if (context.parameters.options?.app) { // Setting up a sample app context.print.warning('Note: Amplify does not have knowledge of the url provided'); @@ -39,7 +39,7 @@ const preInitSetup = async (context: $TSContext): Promise<$TSContext> => { * recommend using Gen 2 or continue with Gen 1. * ask for why they are using Gen 1 and store the answer in project-config */ -const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { +export const gen2Recommendation = async (context: $TSContext): Promise<$TSContext> => { if (!isNewProject(context)) { return context; } From 7ecde5c8da62f9f7ef3c5e70f13bf570ffccd3f0 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 7 Aug 2024 16:26:19 -0700 Subject: [PATCH 26/47] fix: set inital answer for pick --- .../amplify-cli/src/init-steps/preInitSetup.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index db4e36753a8..f7fe41bd95f 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -53,12 +53,16 @@ export const gen2Recommendation = async (context: $TSContext): Promise<$TSContex process.exit(0); } - const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ - 'I am a current Gen 1 user', - 'Gen 2 is missing features I need from Gen 1', - 'I find the Gen 1 CLI easier to use', - 'Prefer not to answer', - ]); + const whyContinueWithGen1 = await prompter.pick( + 'Why would you like to use Amplify Gen 1?', + [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ], + { initial: 3 }, + ); context.exeInfo.projectConfig = { whyContinueWithGen1, From d8fa62446b6b9f9c1f01eed93df9958fc760d466 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Thu, 8 Aug 2024 12:22:59 -0700 Subject: [PATCH 27/47] Revert "fix: set inital answer for pick" This reverts commit 7ecde5c8da62f9f7ef3c5e70f13bf570ffccd3f0. --- .../amplify-cli/src/init-steps/preInitSetup.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index f7fe41bd95f..db4e36753a8 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -53,16 +53,12 @@ export const gen2Recommendation = async (context: $TSContext): Promise<$TSContex process.exit(0); } - const whyContinueWithGen1 = await prompter.pick( - 'Why would you like to use Amplify Gen 1?', - [ - 'I am a current Gen 1 user', - 'Gen 2 is missing features I need from Gen 1', - 'I find the Gen 1 CLI easier to use', - 'Prefer not to answer', - ], - { initial: 3 }, - ); + const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ]); context.exeInfo.projectConfig = { whyContinueWithGen1, From 1d671cf14eacf07a39ebb2fd287c8122f7c9a378 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Thu, 8 Aug 2024 13:15:00 -0700 Subject: [PATCH 28/47] Revert "Revert "fix: set inital answer for pick"" This reverts commit d8fa62446b6b9f9c1f01eed93df9958fc760d466. --- .../amplify-cli/src/init-steps/preInitSetup.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index db4e36753a8..f7fe41bd95f 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -53,12 +53,16 @@ export const gen2Recommendation = async (context: $TSContext): Promise<$TSContex process.exit(0); } - const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ - 'I am a current Gen 1 user', - 'Gen 2 is missing features I need from Gen 1', - 'I find the Gen 1 CLI easier to use', - 'Prefer not to answer', - ]); + const whyContinueWithGen1 = await prompter.pick( + 'Why would you like to use Amplify Gen 1?', + [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ], + { initial: 3 }, + ); context.exeInfo.projectConfig = { whyContinueWithGen1, From 6fc09791d21daeea5ec0df7559f4d4f4cc28ed8e Mon Sep 17 00:00:00 2001 From: "0.618" Date: Thu, 8 Aug 2024 13:18:35 -0700 Subject: [PATCH 29/47] fix: preInitSetup.test --- .../src/__tests__/init-steps/preInitSetup.test.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts index 1fd41d482a1..d54f7a9f949 100644 --- a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts +++ b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts @@ -68,7 +68,16 @@ describe('gen2Recommendation', () => { 'For new projects, we recommend starting with AWS Amplify Gen 2, our new code-first developer experience. Get started at https://docs.amplify.aws/react/start/quickstart/', ); expect(confirmContinueMock).toHaveBeenCalledWith('Do you want to continue with Amplify Gen 1?'); - expect(pickMock).toHaveBeenCalledWith('Why would you like to use Amplify Gen 1?', expect.any(Array)); + expect(pickMock).toHaveBeenCalledWith( + 'Why would you like to use Amplify Gen 1?', + [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ], + { initial: 3 }, + ); expect(context.exeInfo.projectConfig).toEqual({ whyContinueWithGen1: 'I am a current Gen 1 user' }); }); From 71b204c0d610a67839720553727a7938846077b1 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Mon, 12 Aug 2024 14:51:11 -0700 Subject: [PATCH 30/47] fix: e2e test by adding isCI --- packages/amplify-cli/src/init-steps/preInitSetup.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index f7fe41bd95f..b895b8ad12b 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -2,6 +2,7 @@ import { $TSContext, AmplifyError, getPackageManager, LocalEnvInfo, pathManager import { execSync } from 'child_process'; import * as fs from 'fs-extra'; import * as url from 'url'; +import { isCI } from 'ci-info'; import { generateLocalEnvInfoFile } from './s9-onSuccess'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; import { isNewProject } from './s0-analyzeProject'; @@ -11,7 +12,9 @@ export const getPreInitSetup = (recommendGen2: boolean) => { return preInitSetup; } else { return async (context) => { - await gen2Recommendation(context); + if (!isCI) { + await gen2Recommendation(context); + } await preInitSetup(context); }; } From 20157e741f231c8c9ae9fde44a270b6f85acb360 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Tue, 13 Aug 2024 15:11:34 -0700 Subject: [PATCH 31/47] chore: upgrade node-pty --- packages/amplify-e2e-core/package.json | 2 +- packages/amplify-e2e-tests/package.json | 2 +- yarn.lock | 25 ++++++++++++------------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/amplify-e2e-core/package.json b/packages/amplify-e2e-core/package.json index ceb3a549d99..3cc4b457192 100644 --- a/packages/amplify-e2e-core/package.json +++ b/packages/amplify-e2e-core/package.json @@ -39,7 +39,7 @@ "jest-environment-node": "^26.6.2", "lodash": "^4.17.21", "node-fetch": "^2.6.7", - "node-pty": "beta", + "node-pty": "^1.0.0", "retimer": "2.0.0", "rimraf": "^3.0.0", "semver": "^7.5.4", diff --git a/packages/amplify-e2e-tests/package.json b/packages/amplify-e2e-tests/package.json index 08e4038f34b..87aba51c2d9 100644 --- a/packages/amplify-e2e-tests/package.json +++ b/packages/amplify-e2e-tests/package.json @@ -57,7 +57,7 @@ "lodash": "^4.17.21", "moment": "^2.24.0", "node-fetch": "^2.6.7", - "node-pty": "beta", + "node-pty": "^1.0.0", "rimraf": "^3.0.0", "title-case": "^3.0.3", "upper-case": "^2.0.2", diff --git a/yarn.lock b/yarn.lock index cd3b7e2241c..3fe932c95c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -550,7 +550,7 @@ __metadata: jest-environment-node: ^26.6.2 lodash: ^4.17.21 node-fetch: ^2.6.7 - node-pty: beta + node-pty: ^1.0.0 retimer: 2.0.0 rimraf: ^3.0.0 semver: ^7.5.4 @@ -13754,7 +13754,7 @@ __metadata: lodash: ^4.17.21 moment: ^2.24.0 node-fetch: ^2.6.7 - node-pty: beta + node-pty: ^1.0.0 openpgp: ^5.10.2 rimraf: ^3.0.0 title-case: ^3.0.3 @@ -24999,12 +24999,12 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.14.0": - version: 2.15.0 - resolution: "nan@npm:2.15.0" +"nan@npm:^2.17.0": + version: 2.20.0 + resolution: "nan@npm:2.20.0" dependencies: node-gyp: latest - checksum: 797924e8dd64c32d571f322f998d5aa5a732012a23315976456017ea37515b21a808020995d7f48b716476b7e9a6a1ba9cce43bee30399016b9ac7257454ea04 + checksum: 75775309a21ad179a55250d62ce47322c33ca03d8ddb5ad4c555bd820dd72484b3c59253dd9f41cc68dd63453ef04017407fbd081a549bc030d977079bb798b7 languageName: node linkType: hard @@ -25188,14 +25188,13 @@ __metadata: languageName: node linkType: hard -node-pty@beta: - version: 0.11.0-beta19 - resolution: "node-pty@npm:0.11.0-beta19" +"node-pty@npm:^1.0.0": + version: 1.0.0 + resolution: "node-pty@npm:1.0.0" dependencies: - nan: ^2.14.0 - peerDependencies: - node-gyp: ^8.3.0 - checksum: e6e50fa854a404b9e0ef9b621df7c30b5b6f92defed6692b7a63955bd2de7910a5d9f3b2024ed30cdcac5b276deea9bf0826542d0197d0e372dbe399c2b4571b + nan: ^2.17.0 + node-gyp: latest + checksum: c308686826eb2f7616735f4c71e6e41ff630346b14319972dbdf9711640bc6975ce21eab66a47b7ce9a88c70308fe81bfd9840127388d5fa26c52afbad255871 languageName: node linkType: hard From 66ae2a145e2affa25e022758434655a728349938 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 14 Aug 2024 14:07:09 -0700 Subject: [PATCH 32/47] Revert "fix: e2e test by adding isCI" This reverts commit 71b204c0d610a67839720553727a7938846077b1. --- packages/amplify-cli/src/init-steps/preInitSetup.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index b895b8ad12b..f7fe41bd95f 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -2,7 +2,6 @@ import { $TSContext, AmplifyError, getPackageManager, LocalEnvInfo, pathManager import { execSync } from 'child_process'; import * as fs from 'fs-extra'; import * as url from 'url'; -import { isCI } from 'ci-info'; import { generateLocalEnvInfoFile } from './s9-onSuccess'; import { printer, prompter } from '@aws-amplify/amplify-prompts'; import { isNewProject } from './s0-analyzeProject'; @@ -12,9 +11,7 @@ export const getPreInitSetup = (recommendGen2: boolean) => { return preInitSetup; } else { return async (context) => { - if (!isCI) { - await gen2Recommendation(context); - } + await gen2Recommendation(context); await preInitSetup(context); }; } From d94ed5ea5faf720fd9f8b12b9c7204c2b3d5c566 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Wed, 14 Aug 2024 14:15:56 -0700 Subject: [PATCH 33/47] test: add prompt to e2e --- .../src/init/initProjectHelper.ts | 24 +++++++++++++++++++ .../amplify-e2e-core/src/utils/pinpoint.ts | 4 ++++ .../src/init-special-cases/index.ts | 4 ++++ .../src/migration-helpers-v12/init.ts | 12 ++++++++++ .../src/migration-helpers/init.ts | 16 +++++++++++++ 5 files changed, 60 insertions(+) diff --git a/packages/amplify-e2e-core/src/init/initProjectHelper.ts b/packages/amplify-e2e-core/src/init/initProjectHelper.ts index 976fc07086e..f08476dc0bb 100644 --- a/packages/amplify-e2e-core/src/init/initProjectHelper.ts +++ b/packages/amplify-e2e-core/src/init/initProjectHelper.ts @@ -60,6 +60,10 @@ export function initJSProjectWithProfile(cwd: string, settings?: Partial { cwd, stripColors: true, }) + .wait('Do you want to continue with Amplify Gen 1?') + .sendYes() + .wait('Why would you like to use Amplify Gen 1?') + .sendCarriageReturn() .wait('Enter a name for the project') .sendCarriageReturn() .wait('Initialize the project with the above configuration?') @@ -237,6 +253,10 @@ export function initFlutterProjectWithProfile(cwd: string, settings: Record { const chain = spawn(getCLIPath(), ['init'], { cwd, stripColors: true }) + .wait('Do you want to continue with Amplify Gen 1?') + .sendYes() + .wait('Why would you like to use Amplify Gen 1?') + .sendCarriageReturn() .wait('Enter a name for the project') .sendLine(s.name) .wait('Initialize the project with the above configuration?') @@ -286,6 +306,10 @@ export function initProjectWithAccessKey( CLI_DEV_INTERNAL_DISABLE_AMPLIFY_APP_CREATION: '1', }, }) + .wait('Do you want to continue with Amplify Gen 1?') + .sendYes() + .wait('Why would you like to use Amplify Gen 1?') + .sendCarriageReturn() .wait('Enter a name for the project') .sendLine(s.name) .wait('Initialize the project with the above configuration?') diff --git a/packages/amplify-e2e-core/src/utils/pinpoint.ts b/packages/amplify-e2e-core/src/utils/pinpoint.ts index 33b0b44d654..eb40a64d1e9 100644 --- a/packages/amplify-e2e-core/src/utils/pinpoint.ts +++ b/packages/amplify-e2e-core/src/utils/pinpoint.ts @@ -66,6 +66,10 @@ export function initProjectForPinpoint(cwd: string): Promise { CLI_DEV_INTERNAL_DISABLE_AMPLIFY_APP_CREATION: '1', }, }) + .wait('Do you want to continue with Amplify Gen 1?') + .sendYes() + .wait('Why would you like to use Amplify Gen 1?') + .sendCarriageReturn() .wait('Enter a name for the project') .sendLine(settings.name) .wait('Initialize the project with the above configuration?') diff --git a/packages/amplify-e2e-tests/src/init-special-cases/index.ts b/packages/amplify-e2e-tests/src/init-special-cases/index.ts index 556d6345a1b..a9534d1e7f5 100644 --- a/packages/amplify-e2e-tests/src/init-special-cases/index.ts +++ b/packages/amplify-e2e-tests/src/init-special-cases/index.ts @@ -51,6 +51,10 @@ async function initWorkflow(cwd: string, settings: { accessKeyId: string; secret CLI_DEV_INTERNAL_DISABLE_AMPLIFY_APP_CREATION: '1', }, }) + .wait('Do you want to continue with Amplify Gen 1?') + .sendYes() + .wait('Why would you like to use Amplify Gen 1?') + .sendCarriageReturn() .wait('Enter a name for the project') .sendCarriageReturn() .wait('Initialize the project with the above configuration?') diff --git a/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts b/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts index 8b87b639f18..9b2c7147c2a 100644 --- a/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts +++ b/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts @@ -50,6 +50,10 @@ export function initJSProjectWithProfileV12(cwd: string, settings?: Partial { spawn(getCLIPath(testingWithLatestCodebase), ['init'], { cwd, stripColors: true, env }) + .wait('Do you want to continue with Amplify Gen 1?') + .sendYes() + .wait('Why would you like to use Amplify Gen 1?') + .sendCarriageReturn() .wait('Enter a name for the project') .sendLine(s.name) .wait('Enter a name for the environment') @@ -88,6 +92,10 @@ export function initJSProjectWithProfileV4_52_0( return new Promise((resolve, reject) => { spawn(getCLIPath(testingWithLatestCodebase), ['init'], { cwd, stripColors: true, env }) + .wait('Do you want to continue with Amplify Gen 1?') + .sendYes() + .wait('Why would you like to use Amplify Gen 1?') + .sendCarriageReturn() .wait('Enter a name for the project') .sendLine(s.name) .wait('Initialize the project with the above configuration?') @@ -137,6 +145,10 @@ export function initAndroidProjectWithProfile(cwd: string, settings: Record Date: Wed, 14 Aug 2024 16:00:02 -0700 Subject: [PATCH 34/47] fix: set default value for whyContinueWithGen1 --- .../src/template-description-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-provider-awscloudformation/src/template-description-utils.ts b/packages/amplify-provider-awscloudformation/src/template-description-utils.ts index 5c1baca7dad..6cb938e85a4 100644 --- a/packages/amplify-provider-awscloudformation/src/template-description-utils.ts +++ b/packages/amplify-provider-awscloudformation/src/template-description-utils.ts @@ -84,7 +84,7 @@ export function getDefaultTemplateDescription(context: $TSContext, category: str const stackTypeDescription = service ? `${category}-${service}` : category; // get the reason why not switching to Gen2 - const { whyContinueWithGen1 } = context.exeInfo.projectConfig; + const { whyContinueWithGen1 = '' } = context.exeInfo.projectConfig; const descriptionJson: TemplateDescription = { createdOn: platformDescription, From faa0859f81be5ef816e8a7f6e40bba88477390d0 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Fri, 16 Aug 2024 19:08:24 -0700 Subject: [PATCH 35/47] fix: projectConfig undefined and remove default choice --- .../amplify-cli/src/init-steps/preInitSetup.ts | 16 ++++++---------- .../src/template-description-utils.ts | 5 +---- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index f7fe41bd95f..db4e36753a8 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -53,16 +53,12 @@ export const gen2Recommendation = async (context: $TSContext): Promise<$TSContex process.exit(0); } - const whyContinueWithGen1 = await prompter.pick( - 'Why would you like to use Amplify Gen 1?', - [ - 'I am a current Gen 1 user', - 'Gen 2 is missing features I need from Gen 1', - 'I find the Gen 1 CLI easier to use', - 'Prefer not to answer', - ], - { initial: 3 }, - ); + const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ]); context.exeInfo.projectConfig = { whyContinueWithGen1, diff --git a/packages/amplify-provider-awscloudformation/src/template-description-utils.ts b/packages/amplify-provider-awscloudformation/src/template-description-utils.ts index 6cb938e85a4..fa0f26a2d0f 100644 --- a/packages/amplify-provider-awscloudformation/src/template-description-utils.ts +++ b/packages/amplify-provider-awscloudformation/src/template-description-utils.ts @@ -83,15 +83,12 @@ export function getDefaultTemplateDescription(context: $TSContext, category: str // get stack type "stackType" const stackTypeDescription = service ? `${category}-${service}` : category; - // get the reason why not switching to Gen2 - const { whyContinueWithGen1 = '' } = context.exeInfo.projectConfig; - const descriptionJson: TemplateDescription = { createdOn: platformDescription, createdBy: deploymentTypeDescription, createdWith: cliVersion, stackType: stackTypeDescription, - metadata: { whyContinueWithGen1 }, + metadata: { whyContinueWithGen1: context?.exeInfo?.projectConfig?.whyContinueWithGen1 || '' }, }; return JSON.stringify(descriptionJson); From c540b9cbc40466d5e7da979d6350841762b64758 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Fri, 16 Aug 2024 20:41:28 -0700 Subject: [PATCH 36/47] fix: preInitSetup.test.ts --- .../__tests__/init-steps/preInitSetup.test.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts index d54f7a9f949..40f15aa6108 100644 --- a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts +++ b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts @@ -68,16 +68,12 @@ describe('gen2Recommendation', () => { 'For new projects, we recommend starting with AWS Amplify Gen 2, our new code-first developer experience. Get started at https://docs.amplify.aws/react/start/quickstart/', ); expect(confirmContinueMock).toHaveBeenCalledWith('Do you want to continue with Amplify Gen 1?'); - expect(pickMock).toHaveBeenCalledWith( - 'Why would you like to use Amplify Gen 1?', - [ - 'I am a current Gen 1 user', - 'Gen 2 is missing features I need from Gen 1', - 'I find the Gen 1 CLI easier to use', - 'Prefer not to answer', - ], - { initial: 3 }, - ); + expect(pickMock).toHaveBeenCalledWith('Why would you like to use Amplify Gen 1?', [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ]); expect(context.exeInfo.projectConfig).toEqual({ whyContinueWithGen1: 'I am a current Gen 1 user' }); }); From bbeec57c40578377d750c60ed1f8a121038e7625 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Sat, 17 Aug 2024 09:43:00 -0700 Subject: [PATCH 37/47] fix: add default choice back --- .../__tests__/init-steps/preInitSetup.test.ts | 16 ++++++++++------ .../amplify-cli/src/init-steps/preInitSetup.ts | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts index 40f15aa6108..d54f7a9f949 100644 --- a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts +++ b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts @@ -68,12 +68,16 @@ describe('gen2Recommendation', () => { 'For new projects, we recommend starting with AWS Amplify Gen 2, our new code-first developer experience. Get started at https://docs.amplify.aws/react/start/quickstart/', ); expect(confirmContinueMock).toHaveBeenCalledWith('Do you want to continue with Amplify Gen 1?'); - expect(pickMock).toHaveBeenCalledWith('Why would you like to use Amplify Gen 1?', [ - 'I am a current Gen 1 user', - 'Gen 2 is missing features I need from Gen 1', - 'I find the Gen 1 CLI easier to use', - 'Prefer not to answer', - ]); + expect(pickMock).toHaveBeenCalledWith( + 'Why would you like to use Amplify Gen 1?', + [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ], + { initial: 3 }, + ); expect(context.exeInfo.projectConfig).toEqual({ whyContinueWithGen1: 'I am a current Gen 1 user' }); }); diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index db4e36753a8..f7fe41bd95f 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -53,12 +53,16 @@ export const gen2Recommendation = async (context: $TSContext): Promise<$TSContex process.exit(0); } - const whyContinueWithGen1 = await prompter.pick('Why would you like to use Amplify Gen 1?', [ - 'I am a current Gen 1 user', - 'Gen 2 is missing features I need from Gen 1', - 'I find the Gen 1 CLI easier to use', - 'Prefer not to answer', - ]); + const whyContinueWithGen1 = await prompter.pick( + 'Why would you like to use Amplify Gen 1?', + [ + 'I am a current Gen 1 user', + 'Gen 2 is missing features I need from Gen 1', + 'I find the Gen 1 CLI easier to use', + 'Prefer not to answer', + ], + { initial: 3 }, + ); context.exeInfo.projectConfig = { whyContinueWithGen1, From bb73c4b76dfbf838622aa465932501fbeb22d48b Mon Sep 17 00:00:00 2001 From: "0.618" Date: Sun, 18 Aug 2024 17:43:31 -0700 Subject: [PATCH 38/47] fix: remove prompts from migration test --- .../src/migration-helpers/init.ts | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/packages/amplify-migration-tests/src/migration-helpers/init.ts b/packages/amplify-migration-tests/src/migration-helpers/init.ts index 356ccc7eb3b..24621a5d942 100644 --- a/packages/amplify-migration-tests/src/migration-helpers/init.ts +++ b/packages/amplify-migration-tests/src/migration-helpers/init.ts @@ -36,10 +36,6 @@ export function initJSProjectWithProfileV4_28_2( return new Promise((resolve, reject) => { spawn(getCLIPath(testingWithLatestCodebase), ['init'], { cwd, stripColors: true, env }) - .wait('Do you want to continue with Amplify Gen 1?') - .sendYes() - .wait('Why would you like to use Amplify Gen 1?') - .sendCarriageReturn() .wait('Enter a name for the project') .sendLine(s.name) .wait('Enter a name for the environment') @@ -92,10 +88,6 @@ export function initJSProjectWithProfileV4_52_0( return new Promise((resolve, reject) => { spawn(getCLIPath(testingWithLatestCodebase), ['init'], { cwd, stripColors: true, env }) - .wait('Do you want to continue with Amplify Gen 1?') - .sendYes() - .wait('Why would you like to use Amplify Gen 1?') - .sendCarriageReturn() .wait('Enter a name for the project') .sendLine(s.name) .wait('Initialize the project with the above configuration?') @@ -145,10 +137,6 @@ export function initAndroidProjectWithProfile(cwd: string, settings: Record Date: Mon, 2 Sep 2024 12:33:20 -0700 Subject: [PATCH 39/47] test: move new prompt from v12 --- .../amplify-migration-tests/src/migration-helpers-v12/init.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts b/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts index 9b2c7147c2a..d0b79a15646 100644 --- a/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts +++ b/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts @@ -50,10 +50,6 @@ export function initJSProjectWithProfileV12(cwd: string, settings?: Partial Date: Mon, 2 Sep 2024 17:01:14 -0700 Subject: [PATCH 40/47] test: move new prompt from initJSProjectWithProfile --- packages/amplify-e2e-core/src/init/initProjectHelper.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/amplify-e2e-core/src/init/initProjectHelper.ts b/packages/amplify-e2e-core/src/init/initProjectHelper.ts index f08476dc0bb..ed355f3c5e6 100644 --- a/packages/amplify-e2e-core/src/init/initProjectHelper.ts +++ b/packages/amplify-e2e-core/src/init/initProjectHelper.ts @@ -60,9 +60,6 @@ export function initJSProjectWithProfile(cwd: string, settings?: Partial Date: Tue, 3 Sep 2024 14:39:36 -0700 Subject: [PATCH 41/47] Revert "test: move new prompt from initJSProjectWithProfile" This reverts commit eeb6f71316f6623691ad58603842e6e153ef61d0. --- packages/amplify-e2e-core/src/init/initProjectHelper.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/amplify-e2e-core/src/init/initProjectHelper.ts b/packages/amplify-e2e-core/src/init/initProjectHelper.ts index ed355f3c5e6..f08476dc0bb 100644 --- a/packages/amplify-e2e-core/src/init/initProjectHelper.ts +++ b/packages/amplify-e2e-core/src/init/initProjectHelper.ts @@ -60,6 +60,9 @@ export function initJSProjectWithProfile(cwd: string, settings?: Partial Date: Tue, 3 Sep 2024 14:50:37 -0700 Subject: [PATCH 42/47] test: move new prompts from initJSProjectWithProfile --- packages/amplify-e2e-core/src/init/initProjectHelper.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/amplify-e2e-core/src/init/initProjectHelper.ts b/packages/amplify-e2e-core/src/init/initProjectHelper.ts index f08476dc0bb..cc54b288720 100644 --- a/packages/amplify-e2e-core/src/init/initProjectHelper.ts +++ b/packages/amplify-e2e-core/src/init/initProjectHelper.ts @@ -60,10 +60,6 @@ export function initJSProjectWithProfile(cwd: string, settings?: Partial Date: Sat, 7 Sep 2024 17:27:15 -0700 Subject: [PATCH 43/47] chore: change recommendGen2 --- packages/amplify-cli/src/commands/init.ts | 4 ++-- packages/amplify-cli/src/init-steps/preInitSetup.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/amplify-cli/src/commands/init.ts b/packages/amplify-cli/src/commands/init.ts index 7986e4111b0..9f994cda38f 100644 --- a/packages/amplify-cli/src/commands/init.ts +++ b/packages/amplify-cli/src/commands/init.ts @@ -22,8 +22,8 @@ const recommendGen2 = true; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type const runStrategy = (quickstart: boolean) => quickstart - ? [getPreInitSetup(recommendGen2), analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] - : [getPreInitSetup(!recommendGen2), analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; + ? [getPreInitSetup(!recommendGen2), analyzeProjectHeadless, scaffoldProjectHeadless, onHeadlessSuccess] + : [getPreInitSetup(recommendGen2), analyzeProject, initFrontend, initProviders, onSuccess, postInitSetup]; /** * entry point for the init command diff --git a/packages/amplify-cli/src/init-steps/preInitSetup.ts b/packages/amplify-cli/src/init-steps/preInitSetup.ts index f7fe41bd95f..80b89aabbe7 100644 --- a/packages/amplify-cli/src/init-steps/preInitSetup.ts +++ b/packages/amplify-cli/src/init-steps/preInitSetup.ts @@ -8,12 +8,12 @@ import { isNewProject } from './s0-analyzeProject'; export const getPreInitSetup = (recommendGen2: boolean) => { if (recommendGen2) { - return preInitSetup; - } else { return async (context) => { await gen2Recommendation(context); await preInitSetup(context); }; + } else { + return preInitSetup; } }; From 7548ef8f301db91228e39188ffa18d96f811c268 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Sat, 7 Sep 2024 20:15:49 -0700 Subject: [PATCH 44/47] test: fix preInitSetup unit test --- .../amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts index d54f7a9f949..f2fd428f332 100644 --- a/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts +++ b/packages/amplify-cli/src/__tests__/init-steps/preInitSetup.test.ts @@ -31,7 +31,7 @@ jest.mock('../../init-steps/s0-analyzeProject', () => ({ describe('preInitSetup', () => { it('should return preInitSetupBasic when isHeadless is true', () => { - const result = getPreInitSetup(true); + const result = getPreInitSetup(false); expect(result).toBe(preInitSetup); }); From fc21886c99854493bf1574fdc57dc1aaeac64ed0 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Sat, 7 Sep 2024 20:36:50 -0700 Subject: [PATCH 45/47] test: add includeGen2RecommendationPrompt --- .../amplify-e2e-core/src/init/initProjectHelper.ts | 13 ++++++++++++- .../transformer_migration/api.key.migration.test.ts | 1 + .../migration_tests_v12/auth.migration.test.ts | 6 +++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/amplify-e2e-core/src/init/initProjectHelper.ts b/packages/amplify-e2e-core/src/init/initProjectHelper.ts index cc54b288720..88c32280bf4 100644 --- a/packages/amplify-e2e-core/src/init/initProjectHelper.ts +++ b/packages/amplify-e2e-core/src/init/initProjectHelper.ts @@ -27,6 +27,7 @@ const defaultSettings = { providerConfig: undefined, permissionsBoundaryArn: undefined, includeUsageDataPrompt: true, + includeGen2RecommendationPrompt: true, testingWithLatestCodebase: false, }; @@ -59,7 +60,17 @@ export function initJSProjectWithProfile(cwd: string, settings?: Partial { await initJSProjectWithProfile(projRoot, { name: 'gqlkeymigration', includeUsageDataPrompt: false, + includeGen2RecommendationPrompt: false, }); }); diff --git a/packages/amplify-migration-tests/src/__tests__/migration_tests_v12/auth.migration.test.ts b/packages/amplify-migration-tests/src/__tests__/migration_tests_v12/auth.migration.test.ts index b3fee8619a8..e57fa981f28 100644 --- a/packages/amplify-migration-tests/src/__tests__/migration_tests_v12/auth.migration.test.ts +++ b/packages/amplify-migration-tests/src/__tests__/migration_tests_v12/auth.migration.test.ts @@ -37,7 +37,11 @@ describe('v12: amplify migration test auth', () => { describe('...uses user groups and role mappings', () => { it('...maintains correct role mapping when updated with latest version', async () => { - await initJSProjectWithProfile(projRoot1, { name: 'authTest', disableAmplifyAppCreation: false }); + await initJSProjectWithProfile(projRoot1, { + name: 'authTest', + disableAmplifyAppCreation: false, + includeGen2RecommendationPrompt: false, + }); await addAuthWithGroups(projRoot1); await amplifyPushAuth(projRoot1); From fd5f0d73c75dcc3f8e6b5b448d8194fd66931d73 Mon Sep 17 00:00:00 2001 From: "0.618" Date: Sun, 8 Sep 2024 11:44:53 -0700 Subject: [PATCH 46/47] test: add includeGen2RecommendationPrompt to migration-2 --- .../transformer_migration/api.key.migration-2.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/amplify-migration-tests/src/__tests__/migration_tests/transformer_migration/api.key.migration-2.test.ts b/packages/amplify-migration-tests/src/__tests__/migration_tests/transformer_migration/api.key.migration-2.test.ts index 6b6b818fdc2..d5e4bafd268 100644 --- a/packages/amplify-migration-tests/src/__tests__/migration_tests/transformer_migration/api.key.migration-2.test.ts +++ b/packages/amplify-migration-tests/src/__tests__/migration_tests/transformer_migration/api.key.migration-2.test.ts @@ -28,6 +28,7 @@ describe('amplify key force push', () => { await initJSProjectWithProfile(projRoot, { name: 'gqlkeytwomigration', includeUsageDataPrompt: false, + includeGen2RecommendationPrompt: false, }); }); From 808c795d8774548e5c208990ed9b867b760fd81e Mon Sep 17 00:00:00 2001 From: "0.618" Date: Sun, 8 Sep 2024 12:04:11 -0700 Subject: [PATCH 47/47] test: remove prompts from initAndroidProjectWithProfileV12 --- .../amplify-migration-tests/src/migration-helpers-v12/init.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts b/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts index d0b79a15646..abf45abd853 100644 --- a/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts +++ b/packages/amplify-migration-tests/src/migration-helpers-v12/init.ts @@ -143,10 +143,6 @@ export function initAndroidProjectWithProfileV12(cwd: string, settings: Partial< stripColors: true, env, }) - .wait('Do you want to continue with Amplify Gen 1?') - .sendYes() - .wait('Why would you like to use Amplify Gen 1?') - .sendCarriageReturn() .wait('Enter a name for the project') .sendLine(s.name) .wait('Initialize the project with the above configuration?')