diff --git a/packages/amplify-category-auth/resources/overrides-resource/auth/override.ts.sample b/packages/amplify-category-auth/resources/overrides-resource/auth/override.ts.sample index 79386f9750c..377db7f1a9f 100644 --- a/packages/amplify-category-auth/resources/overrides-resource/auth/override.ts.sample +++ b/packages/amplify-category-auth/resources/overrides-resource/auth/override.ts.sample @@ -1,5 +1,5 @@ -import { AmplifyAuthCognitoStackTemplate } from '@aws-amplify/cli-extensibility-helper'; +import { AmplifyAuthCognitoStackTemplate, AmplifyProjectInfo } from '@aws-amplify/cli-extensibility-helper'; + +export function override(resources: AmplifyAuthCognitoStackTemplate, amplifyProjectInfo: AmplifyProjectInfo) { -export function override(resources: AmplifyAuthCognitoStackTemplate) { - } diff --git a/packages/amplify-category-auth/resources/overrides-resource/userPoolGroups/override.ts.sample b/packages/amplify-category-auth/resources/overrides-resource/userPoolGroups/override.ts.sample index 1c3dfafd1e1..efa362cb365 100644 --- a/packages/amplify-category-auth/resources/overrides-resource/userPoolGroups/override.ts.sample +++ b/packages/amplify-category-auth/resources/overrides-resource/userPoolGroups/override.ts.sample @@ -1,5 +1,5 @@ -import { AmplifyUserPoolGroupStackTemplate } from '@aws-amplify/cli-extensibility-helper'; +import { AmplifyProjectInfo, AmplifyUserPoolGroupStackTemplate } from '@aws-amplify/cli-extensibility-helper'; + +export function override(resources: AmplifyUserPoolGroupStackTemplate, amplifyProjectInfo: AmplifyProjectInfo) { -export function override(resources: AmplifyUserPoolGroupStackTemplate) { - } diff --git a/packages/amplify-category-auth/src/provider-utils/awscloudformation/auth-stack-builder/auth-stack-transform.ts b/packages/amplify-category-auth/src/provider-utils/awscloudformation/auth-stack-builder/auth-stack-transform.ts index ac7285cf208..9040d2c27c8 100644 --- a/packages/amplify-category-auth/src/provider-utils/awscloudformation/auth-stack-builder/auth-stack-transform.ts +++ b/packages/amplify-category-auth/src/provider-utils/awscloudformation/auth-stack-builder/auth-stack-transform.ts @@ -29,6 +29,7 @@ import { generateNestedAuthTriggerTemplate } from '../utils/generate-auth-trigge import { createUserPoolGroups, updateUserPoolGroups } from '../utils/synthesize-resources'; import { AmplifyAuthCognitoStack } from './auth-cognito-stack-builder'; import { AuthStackSynthesizer } from './stack-synthesizer'; +import { getProjectInfo } from '@aws-amplify/cli-extensibility-helper'; /** * Class to handle Auth cdk generation / override functionality @@ -123,10 +124,11 @@ export class AmplifyAuthTransform extends AmplifyCategoryTransform { external: true, }, }); + const projectInfo = getProjectInfo(); try { await sandboxNode .run(overrideCode, path.join(overrideDir, 'build', 'override.js')) - .override(this._authTemplateObj as AmplifyAuthCognitoStack & AmplifyStackTemplate); + .override(this._authTemplateObj as AmplifyAuthCognitoStack & AmplifyStackTemplate, projectInfo); } catch (err) { throw new AmplifyError( 'InvalidOverrideError', diff --git a/packages/amplify-category-auth/src/provider-utils/awscloudformation/auth-stack-builder/user-pool-group-stack-transform.ts b/packages/amplify-category-auth/src/provider-utils/awscloudformation/auth-stack-builder/user-pool-group-stack-transform.ts index 34d2a8d5383..307f132bd61 100644 --- a/packages/amplify-category-auth/src/provider-utils/awscloudformation/auth-stack-builder/user-pool-group-stack-transform.ts +++ b/packages/amplify-category-auth/src/provider-utils/awscloudformation/auth-stack-builder/user-pool-group-stack-transform.ts @@ -22,6 +22,7 @@ import { AuthInputState } from '../auth-inputs-manager/auth-input-state'; import { CognitoCLIInputs } from '../service-walkthrough-types/awsCognito-user-input-types'; import { AmplifyUserPoolGroupStack, AmplifyUserPoolGroupStackOutputs } from './index'; import { AuthStackSynthesizer } from './stack-synthesizer'; +import { getProjectInfo } from '@aws-amplify/cli-extensibility-helper'; /** * UserPool groups metadata @@ -194,8 +195,11 @@ export class AmplifyUserPoolGroupTransform extends AmplifyCategoryTransform { timeout: 5000, sandbox: {}, }); + const projectInfo = getProjectInfo(); try { - await sandboxNode.run(overrideCode).override(this._userPoolGroupTemplateObj as AmplifyUserPoolGroupStack & AmplifyStackTemplate); + await sandboxNode + .run(overrideCode) + .override(this._userPoolGroupTemplateObj as AmplifyUserPoolGroupStack & AmplifyStackTemplate, projectInfo); } catch (err: $TSAny) { throw new AmplifyError( 'InvalidOverrideError', diff --git a/packages/amplify-category-storage/resources/overrides-resource/DynamoDB/override.ts.sample b/packages/amplify-category-storage/resources/overrides-resource/DynamoDB/override.ts.sample index bd398a12bdb..22d10ca06ba 100644 --- a/packages/amplify-category-storage/resources/overrides-resource/DynamoDB/override.ts.sample +++ b/packages/amplify-category-storage/resources/overrides-resource/DynamoDB/override.ts.sample @@ -1,5 +1,5 @@ -import { AmplifyDDBResourceTemplate } from '@aws-amplify/cli-extensibility-helper'; +import { AmplifyDDBResourceTemplate, AmplifyProjectInfo } from '@aws-amplify/cli-extensibility-helper'; + +export function override(resources: AmplifyDDBResourceTemplate, amplifyProjectInfo: AmplifyProjectInfo) { -export function override(resources: AmplifyDDBResourceTemplate) { - } diff --git a/packages/amplify-category-storage/resources/overrides-resource/S3/override.ts.sample b/packages/amplify-category-storage/resources/overrides-resource/S3/override.ts.sample index bdcb1521dd0..b72992d6f5f 100644 --- a/packages/amplify-category-storage/resources/overrides-resource/S3/override.ts.sample +++ b/packages/amplify-category-storage/resources/overrides-resource/S3/override.ts.sample @@ -1,5 +1,5 @@ -import { AmplifyS3ResourceTemplate } from '@aws-amplify/cli-extensibility-helper'; +import { AmplifyProjectInfo, AmplifyS3ResourceTemplate } from '@aws-amplify/cli-extensibility-helper'; + +export function override(resources: AmplifyS3ResourceTemplate, amplifyProjectInfo: AmplifyProjectInfo) { -export function override(resources: AmplifyS3ResourceTemplate) { - } diff --git a/packages/amplify-category-storage/src/provider-utils/awscloudformation/cdk-stack-builder/ddb-stack-transform.ts b/packages/amplify-category-storage/src/provider-utils/awscloudformation/cdk-stack-builder/ddb-stack-transform.ts index 4c0cb49db39..baf079e6910 100644 --- a/packages/amplify-category-storage/src/provider-utils/awscloudformation/cdk-stack-builder/ddb-stack-transform.ts +++ b/packages/amplify-category-storage/src/provider-utils/awscloudformation/cdk-stack-builder/ddb-stack-transform.ts @@ -1,4 +1,4 @@ -import { AmplifyDDBResourceTemplate } from '@aws-amplify/cli-extensibility-helper'; +import { AmplifyDDBResourceTemplate, getProjectInfo } from '@aws-amplify/cli-extensibility-helper'; import { $TSAny, $TSContext, AmplifyError, buildOverrideDir, JSONUtilities, pathManager } from 'amplify-cli-core'; import { formatter } from 'amplify-prompts'; import * as cdk from 'aws-cdk-lib'; @@ -214,8 +214,11 @@ export class DDBStackTransform { external: true, }, }); + const projectInfo = getProjectInfo(); try { - await sandboxNode.run(overrideCode, overrideJSFilePath).override(this._resourceTemplateObj as AmplifyDDBResourceTemplate); + await sandboxNode + .run(overrideCode, overrideJSFilePath) + .override(this._resourceTemplateObj as AmplifyDDBResourceTemplate, projectInfo); } catch (err) { throw new AmplifyError( 'InvalidOverrideError', diff --git a/packages/amplify-category-storage/src/provider-utils/awscloudformation/cdk-stack-builder/s3-stack-transform.ts b/packages/amplify-category-storage/src/provider-utils/awscloudformation/cdk-stack-builder/s3-stack-transform.ts index 0de5c9c4b7f..e4a891e5660 100644 --- a/packages/amplify-category-storage/src/provider-utils/awscloudformation/cdk-stack-builder/s3-stack-transform.ts +++ b/packages/amplify-category-storage/src/provider-utils/awscloudformation/cdk-stack-builder/s3-stack-transform.ts @@ -1,5 +1,5 @@ import * as cdk from 'aws-cdk-lib'; -import { AmplifyS3ResourceTemplate } from '@aws-amplify/cli-extensibility-helper'; +import { AmplifyS3ResourceTemplate, getProjectInfo } from '@aws-amplify/cli-extensibility-helper'; import { $TSAny, $TSContext, @@ -223,7 +223,10 @@ export class AmplifyS3ResourceStackTransform { }, }); try { - await sandboxNode.run(overrideCode, overrideJSFilePath).override(this.resourceTemplateObj as AmplifyS3ResourceTemplate); + const projectInfo = getProjectInfo(); + await sandboxNode + .run(overrideCode, overrideJSFilePath) + .override(this.resourceTemplateObj as AmplifyS3ResourceTemplate, projectInfo); } catch (err: $TSAny) { throw new AmplifyError( 'InvalidOverrideError', diff --git a/packages/amplify-cli-extensibility-helper/API.md b/packages/amplify-cli-extensibility-helper/API.md index 1e53a3883bc..f87414bd0ca 100644 --- a/packages/amplify-cli-extensibility-helper/API.md +++ b/packages/amplify-cli-extensibility-helper/API.md @@ -125,10 +125,10 @@ export interface AmplifyDDBResourceTemplate extends AmplifyCDKL1 { } // @public (undocumented) -export type AmplifyProjectInfo = { +export type AmplifyProjectInfo = Readonly<{ envName: string; projectName: string; -}; +}>; export { AmplifyResourceProps } diff --git a/packages/amplify-cli-extensibility-helper/src/types.ts b/packages/amplify-cli-extensibility-helper/src/types.ts index a0237bdedfa..941c71c4eba 100644 --- a/packages/amplify-cli-extensibility-helper/src/types.ts +++ b/packages/amplify-cli-extensibility-helper/src/types.ts @@ -1,7 +1,7 @@ /** * PUBLIC API: Amplify project type */ -export type AmplifyProjectInfo = { +export type AmplifyProjectInfo = Readonly<{ envName: string; projectName: string; -}; +}>; diff --git a/packages/amplify-e2e-core/src/utils/index.ts b/packages/amplify-e2e-core/src/utils/index.ts index d53379d7139..4864e491677 100644 --- a/packages/amplify-e2e-core/src/utils/index.ts +++ b/packages/amplify-e2e-core/src/utils/index.ts @@ -13,6 +13,7 @@ export * from './appsync'; export * from './envVars'; export * from './getAppId'; export * from './headless'; +export * from './overrides'; export * from './nexpect'; export * from './pinpoint'; export * from './projectMeta'; diff --git a/packages/amplify-e2e-core/src/utils/overrides.ts b/packages/amplify-e2e-core/src/utils/overrides.ts new file mode 100644 index 00000000000..1afe720a9dd --- /dev/null +++ b/packages/amplify-e2e-core/src/utils/overrides.ts @@ -0,0 +1,7 @@ +import * as fs from 'fs-extra'; + +export const replaceOverrideFileWithProjectInfo = (srcPath: string, destPath: string, envName: string, projectName: string) => { + const content = fs.readFileSync(srcPath).toString(); + const contentWithProjectInfo = content.replace('##EXPECTED_ENV_NAME', envName).replace('##EXPECTED_PROJECT_NAME', projectName); + fs.writeFileSync(destPath, contentWithProjectInfo); +}; diff --git a/packages/amplify-e2e-tests/overrides/override-auth.ts b/packages/amplify-e2e-tests/overrides/override-auth.ts index 80be85aed65..b5d0ff6c695 100644 --- a/packages/amplify-e2e-tests/overrides/override-auth.ts +++ b/packages/amplify-e2e-tests/overrides/override-auth.ts @@ -1,9 +1,22 @@ -export function override(props: any): any { +import { AmplifyProjectInfo, AmplifyAuthCognitoStackTemplate } from '@aws-amplify/cli-extensibility-helper'; + +export function override(props: AmplifyAuthCognitoStackTemplate, amplifyProjectInfo: AmplifyProjectInfo): void { props.userPool.deviceConfiguration = { challengeRequiredOnNewDevice: true, }; props.userPool.userAttributeUpdateSettings = { attributesRequireVerificationBeforeUpdate: ['email'], }; - return props; + + if (!amplifyProjectInfo || !amplifyProjectInfo.envName || !amplifyProjectInfo.projectName) { + throw new Error(`Project info is missing in override: ${JSON.stringify(amplifyProjectInfo)}`); + } + + if (amplifyProjectInfo.envName != '##EXPECTED_ENV_NAME') { + throw new Error(`Unexpected envName: ${amplifyProjectInfo.envName}`); + } + + if (amplifyProjectInfo.projectName != '##EXPECTED_PROJECT_NAME') { + throw new Error(`Unexpected envName: ${amplifyProjectInfo.envName}`); + } } diff --git a/packages/amplify-e2e-tests/overrides/override-root.ts b/packages/amplify-e2e-tests/overrides/override-root.ts index ad75eccc003..a88d104a647 100644 --- a/packages/amplify-e2e-tests/overrides/override-root.ts +++ b/packages/amplify-e2e-tests/overrides/override-root.ts @@ -1,7 +1,20 @@ +import { AmplifyProjectInfo, AmplifyRootStackTemplate } from '@aws-amplify/cli-extensibility-helper'; + function getRandomInt(max) { return Math.floor(Math.random() * max); } -export function override(props: any): void { +export function override(props: AmplifyRootStackTemplate, amplifyProjectInfo: AmplifyProjectInfo): void { props.authRole.roleName = `mockRole-${getRandomInt(10000)}`; - return props; + + if (!amplifyProjectInfo || !amplifyProjectInfo.envName || !amplifyProjectInfo.projectName) { + throw new Error(`Project info is missing in override: ${JSON.stringify(amplifyProjectInfo)}`); + } + + if (amplifyProjectInfo.envName != '##EXPECTED_ENV_NAME') { + throw new Error(`Unexpected envName: ${amplifyProjectInfo.envName}`); + } + + if (amplifyProjectInfo.projectName != '##EXPECTED_PROJECT_NAME') { + throw new Error(`Unexpected envName: ${amplifyProjectInfo.envName}`); + } } diff --git a/packages/amplify-e2e-tests/overrides/override-storage-ddb.ts b/packages/amplify-e2e-tests/overrides/override-storage-ddb.ts index 77aa96fab46..54804f78b18 100644 --- a/packages/amplify-e2e-tests/overrides/override-storage-ddb.ts +++ b/packages/amplify-e2e-tests/overrides/override-storage-ddb.ts @@ -1,5 +1,19 @@ -export function override(props: any) { +import { AmplifyDDBResourceTemplate, AmplifyProjectInfo } from '@aws-amplify/cli-extensibility-helper'; + +export function override(props: AmplifyDDBResourceTemplate, amplifyProjectInfo: AmplifyProjectInfo): void { props.dynamoDBTable.streamSpecification = { streamViewType: 'NEW_AND_OLD_IMAGES', }; + + if (!amplifyProjectInfo || !amplifyProjectInfo.envName || !amplifyProjectInfo.projectName) { + throw new Error(`Project info is missing in override: ${JSON.stringify(amplifyProjectInfo)}`); + } + + if (amplifyProjectInfo.envName != '##EXPECTED_ENV_NAME') { + throw new Error(`Unexpected envName: ${amplifyProjectInfo.envName}`); + } + + if (amplifyProjectInfo.projectName != '##EXPECTED_PROJECT_NAME') { + throw new Error(`Unexpected envName: ${amplifyProjectInfo.envName}`); + } } diff --git a/packages/amplify-e2e-tests/overrides/override-storage-s3.ts b/packages/amplify-e2e-tests/overrides/override-storage-s3.ts index 19203128d71..30e3e839e8b 100644 --- a/packages/amplify-e2e-tests/overrides/override-storage-s3.ts +++ b/packages/amplify-e2e-tests/overrides/override-storage-s3.ts @@ -1,6 +1,20 @@ -export function override(props: any) { +import { AmplifyProjectInfo, AmplifyS3ResourceTemplate } from '@aws-amplify/cli-extensibility-helper'; + +export function override(props: AmplifyS3ResourceTemplate, amplifyProjectInfo: AmplifyProjectInfo) { //Enable versioning on the bucket props.s3Bucket.versioningConfiguration = { status: 'Enabled', }; + + if (!amplifyProjectInfo || !amplifyProjectInfo.envName || !amplifyProjectInfo.projectName) { + throw new Error(`Project info is missing in override: ${JSON.stringify(amplifyProjectInfo)}`); + } + + if (amplifyProjectInfo.envName != '##EXPECTED_ENV_NAME') { + throw new Error(`Unexpected envName: ${amplifyProjectInfo.envName}`); + } + + if (amplifyProjectInfo.projectName != '##EXPECTED_PROJECT_NAME') { + throw new Error(`Unexpected envName: ${amplifyProjectInfo.envName}`); + } } diff --git a/packages/amplify-e2e-tests/src/__tests__/auth_6.test.ts b/packages/amplify-e2e-tests/src/__tests__/auth_6.test.ts index 59be9f2a0a0..6c939ede574 100644 --- a/packages/amplify-e2e-tests/src/__tests__/auth_6.test.ts +++ b/packages/amplify-e2e-tests/src/__tests__/auth_6.test.ts @@ -11,6 +11,7 @@ import { getProjectMeta, getUserPool, initJSProjectWithProfile, + replaceOverrideFileWithProjectInfo, runAmplifyAuthConsole, } from '@aws-amplify/amplify-e2e-core'; import * as path from 'path'; @@ -101,7 +102,7 @@ describe('zero config auth', () => { // test happy path const srcOverrideFilePath = path.join(__dirname, '..', '..', 'overrides', 'override-auth.ts'); - fs.copyFileSync(srcOverrideFilePath, destOverrideFilePath); + replaceOverrideFileWithProjectInfo(srcOverrideFilePath, destOverrideFilePath, 'integtest', PROJECT_NAME); await amplifyPushOverride(projRoot); // check overwritten config diff --git a/packages/amplify-e2e-tests/src/__tests__/init_e.test.ts b/packages/amplify-e2e-tests/src/__tests__/init_e.test.ts index ce1410bb54f..b6b04d7d722 100644 --- a/packages/amplify-e2e-tests/src/__tests__/init_e.test.ts +++ b/packages/amplify-e2e-tests/src/__tests__/init_e.test.ts @@ -11,6 +11,7 @@ import { createNewProjectDir, deleteProjectDir, getProjectMeta, + replaceOverrideFileWithProjectInfo, } from '@aws-amplify/amplify-e2e-core'; import { addEnvironment } from '../environment/env'; @@ -27,7 +28,8 @@ describe('amplify init e', () => { }); it('should init the project and override root and push', async () => { - await initJSProjectWithProfile(projRoot, {}); + const projectName = 'initTest'; + await initJSProjectWithProfile(projRoot, { name: projectName }); const meta = getProjectMeta(projRoot).providers.awscloudformation; expect(meta.Region).toBeDefined(); const { AuthRoleName, UnauthRoleName, UnauthRoleArn, AuthRoleArn, DeploymentBucketName } = meta; @@ -54,12 +56,13 @@ describe('amplify init e', () => { // test happy path const srcOverrideFilePath = path.join(__dirname, '..', '..', 'overrides', 'override-root.ts'); - fs.copyFileSync(srcOverrideFilePath, destOverrideFilePath); + replaceOverrideFileWithProjectInfo(srcOverrideFilePath, destOverrideFilePath, 'integtest', projectName); await amplifyPushOverride(projRoot); const newEnvMeta = getProjectMeta(projRoot).providers.awscloudformation; expect(newEnvMeta.AuthRoleName).toContain('mockRole'); // create a new env, and the override should remain in place + replaceOverrideFileWithProjectInfo(srcOverrideFilePath, destOverrideFilePath, 'envb', projectName); await addEnvironment(projRoot, { envName: 'envb' }); const newestEnvMeta = getProjectMeta(projRoot).providers.awscloudformation; expect(newestEnvMeta.AuthRoleName).toContain('mockRole'); diff --git a/packages/amplify-e2e-tests/src/__tests__/storage-5.test.ts b/packages/amplify-e2e-tests/src/__tests__/storage-5.test.ts index ea315dc4fc0..5c020c7b2a8 100644 --- a/packages/amplify-e2e-tests/src/__tests__/storage-5.test.ts +++ b/packages/amplify-e2e-tests/src/__tests__/storage-5.test.ts @@ -16,6 +16,7 @@ import { initJSProjectWithProfile, overrideDDB, overrideS3, + replaceOverrideFileWithProjectInfo, updateDDBWithTrigger, updateSimpleDDBwithGSI, } from '@aws-amplify/amplify-e2e-core'; @@ -44,7 +45,8 @@ describe('s3 override tests', () => { }); it('override S3 Removal property', async () => { - await initJSProjectWithProfile(projRoot, {}); + const projectName = 's3OverrideTest'; + await initJSProjectWithProfile(projRoot, { name: projectName }); await addAuthWithDefault(projRoot, {}); await addS3WithGuestAccess(projRoot, {}); await overrideS3(projRoot); @@ -68,7 +70,7 @@ describe('s3 override tests', () => { // test happy path const srcOverrideFilePath = path.join(__dirname, '..', '..', 'overrides', 'override-storage-s3.ts'); const cfnFilePath = path.join(projRoot, 'amplify', 'backend', 'storage', resourceName, 'build', 'cloudformation-template.json'); - fs.copyFileSync(srcOverrideFilePath, destOverrideFilePath); + replaceOverrideFileWithProjectInfo(srcOverrideFilePath, destOverrideFilePath, 'integtest', projectName); await buildOverrideStorage(projRoot); let s3CFNFileJSON = JSONUtilities.readJson<$TSObject>(cfnFilePath); // check if overrides are applied to the cfn file @@ -173,7 +175,8 @@ describe('ddb override tests', () => { it('override DDB StreamSpecification property', async () => { const resourceName = `dynamo${uuid.v4().split('-')[0]}`; - await initJSProjectWithProfile(projRoot, {}); + const projectName = 'ddbOverrideTest'; + await initJSProjectWithProfile(projRoot, { name: projectName }); await addSimpleDDB(projRoot, { name: resourceName }); await overrideDDB(projRoot); @@ -204,7 +207,7 @@ describe('ddb override tests', () => { `${resourceName}-cloudformation-template.json`, ); - fs.copyFileSync(srcOverrideFilePath, destOverrideFilePath); + replaceOverrideFileWithProjectInfo(srcOverrideFilePath, destOverrideFilePath, 'integtest', projectName); await buildOverrideStorage(projRoot); let ddbCFNFileJSON = JSONUtilities.readJson<$TSObject>(cfnFilePath); // check if overrides are applied to the cfn file diff --git a/packages/amplify-migration-tests/src/__tests__/migration_tests/overrides/init-migration.test.ts b/packages/amplify-migration-tests/src/__tests__/migration_tests/overrides/init-migration.test.ts index 2f41c43afa6..99453746e2b 100644 --- a/packages/amplify-migration-tests/src/__tests__/migration_tests/overrides/init-migration.test.ts +++ b/packages/amplify-migration-tests/src/__tests__/migration_tests/overrides/init-migration.test.ts @@ -1,4 +1,3 @@ -import * as fs from 'fs-extra'; import * as path from 'path'; import { deleteProject, @@ -7,6 +6,7 @@ import { deleteProjectDir, getProjectMeta, amplifyPushOverride, + replaceOverrideFileWithProjectInfo, } from '@aws-amplify/amplify-e2e-core'; import { JSONUtilities } from 'amplify-cli-core'; import { versionCheck, allowedVersionsToMigrateFrom, initJSProjectWithProfileV4_52_0 } from '../../../migration-helpers'; @@ -30,7 +30,8 @@ describe('amplify init', () => { }); it('should init the project and override root and push', async () => { - await initJSProjectWithProfileV4_52_0(projRoot, {}); + const projectName = 'initMigrationTest'; + await initJSProjectWithProfileV4_52_0(projRoot, { name: projectName }); const meta = getProjectMeta(projRoot).providers.awscloudformation; expect(meta.Region).toBeDefined(); // turn ON feature flag @@ -42,7 +43,7 @@ describe('amplify init', () => { await amplifyOverrideRoot(projRoot, { testingWithLatestCodebase: true }); const srcOverrideFilePath = path.join(__dirname, '..', '..', '..', '..', '..', 'amplify-e2e-tests', 'overrides', 'override-root.ts'); const destOverrideFilePath = path.join(projRoot, 'amplify', 'backend', 'awscloudformation', 'override.ts'); - fs.copyFileSync(srcOverrideFilePath, destOverrideFilePath); + replaceOverrideFileWithProjectInfo(srcOverrideFilePath, destOverrideFilePath, 'integtest', projectName); await amplifyPushOverride(projRoot, true); const newEnvMeta = getProjectMeta(projRoot).providers.awscloudformation; expect(newEnvMeta.AuthRoleName).toContain('mockRole'); diff --git a/packages/amplify-migration-tests/src/__tests__/migration_tests_v10/auth-override.migration.test.ts b/packages/amplify-migration-tests/src/__tests__/migration_tests_v10/auth-override.migration.test.ts index bd0d5e049e3..73ce34a5d93 100644 --- a/packages/amplify-migration-tests/src/__tests__/migration_tests_v10/auth-override.migration.test.ts +++ b/packages/amplify-migration-tests/src/__tests__/migration_tests_v10/auth-override.migration.test.ts @@ -10,12 +10,12 @@ import { getAppId, getProjectMeta, getUserPool, + replaceOverrideFileWithProjectInfo, } from '@aws-amplify/amplify-e2e-core'; import { versionCheck, allowedVersionsToMigrateFrom } from '../../migration-helpers'; import { initJSProjectWithProfileV10 } from '../../migration-helpers-v10/init'; import { assertNoParameterChangesBetweenProjects, collectCloudformationDiffBetweenProjects } from '../../migration-helpers/utils'; import * as path from 'path'; -import * as fs from 'fs-extra'; describe('amplify migration test auth', () => { let projRoot1: string; @@ -41,7 +41,8 @@ describe('amplify migration test auth', () => { }); it('...should add auth with overrides and work fine on latest version', async () => { - await initJSProjectWithProfileV10(projRoot1, { name: 'authTest', disableAmplifyAppCreation: false }); + const projectName = 'authTest'; + await initJSProjectWithProfileV10(projRoot1, { name: projectName, disableAmplifyAppCreation: false }); await addAuthWithDefault(projRoot1, {}); await amplifyPushWithoutCodegen(projRoot1); @@ -55,7 +56,7 @@ describe('amplify migration test auth', () => { // this is where we will write our override logic to const destOverrideFilePath = path.join(projRoot1, 'amplify', 'backend', 'auth', `${authResourceName}`, 'override.ts'); const srcOverrideFilePath = path.join(__dirname, '..', '..', '..', 'overrides', 'override-auth.ts'); - fs.copyFileSync(srcOverrideFilePath, destOverrideFilePath); + replaceOverrideFileWithProjectInfo(srcOverrideFilePath, destOverrideFilePath, 'integtest', projectName); await amplifyPushOverride(projRoot1); const appId = getAppId(projRoot1); diff --git a/packages/amplify-provider-awscloudformation/resources/overrides-resource/override.ts.sample b/packages/amplify-provider-awscloudformation/resources/overrides-resource/override.ts.sample index 5f65af35290..03876262b19 100644 --- a/packages/amplify-provider-awscloudformation/resources/overrides-resource/override.ts.sample +++ b/packages/amplify-provider-awscloudformation/resources/overrides-resource/override.ts.sample @@ -1,5 +1,5 @@ -import { AmplifyRootStackTemplate } from '@aws-amplify/cli-extensibility-helper'; +import { AmplifyProjectInfo, AmplifyRootStackTemplate } from '@aws-amplify/cli-extensibility-helper'; + +export function override(resources: AmplifyRootStackTemplate, amplifyProjectInfo: AmplifyProjectInfo) { -export function override(resources: AmplifyRootStackTemplate) { - } diff --git a/packages/amplify-provider-awscloudformation/src/initializer.ts b/packages/amplify-provider-awscloudformation/src/initializer.ts index 3489dbe98e1..46d83a96427 100644 --- a/packages/amplify-provider-awscloudformation/src/initializer.ts +++ b/packages/amplify-provider-awscloudformation/src/initializer.ts @@ -24,6 +24,7 @@ import { configurePermissionsBoundaryForInit } from './permissions-boundary/perm import { prePushCfnTemplateModifier } from './pre-push-cfn-processor/pre-push-cfn-modifier'; import { fileLogger } from './utils/aws-logger'; import { storeCurrentCloudBackend } from './utils/upload-current-cloud-backend'; +import { getProjectInfo } from '@aws-amplify/cli-extensibility-helper'; const logger = fileLogger('initializer'); @@ -102,7 +103,8 @@ export const run = async (context: $TSContext): Promise => { external: true, }, }); - await sandboxNode.run(overrideCode).override(configuration); + const projectInfo = getProjectInfo(); + await sandboxNode.run(overrideCode).override(configuration, projectInfo); } } catch (err) { // absolutely want to throw if there is a compile or runtime error diff --git a/packages/amplify-provider-awscloudformation/src/root-stack-builder/root-stack-transform.ts b/packages/amplify-provider-awscloudformation/src/root-stack-builder/root-stack-transform.ts index f072f5d130b..1ce1981da10 100644 --- a/packages/amplify-provider-awscloudformation/src/root-stack-builder/root-stack-transform.ts +++ b/packages/amplify-provider-awscloudformation/src/root-stack-builder/root-stack-transform.ts @@ -1,4 +1,4 @@ -import { AmplifyRootStackTemplate } from '@aws-amplify/cli-extensibility-helper'; +import { AmplifyRootStackTemplate, getProjectInfo } from '@aws-amplify/cli-extensibility-helper'; import * as cdk from 'aws-cdk-lib'; import { $TSContext, @@ -78,8 +78,9 @@ export class AmplifyRootStackTransform { external: true, }, }); + const projectInfo = getProjectInfo(); try { - await sandboxNode.run(overrideCode).override(this._rootTemplateObj as AmplifyRootStackTemplate); + await sandboxNode.run(overrideCode).override(this._rootTemplateObj as AmplifyRootStackTemplate, projectInfo); } catch (err) { throw new AmplifyError( 'InvalidOverrideError',