Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
7741a45
refactor: e2e-core
Jul 9, 2025
aa73c2d
refactor: e2e tests aside from resource clean up
Jul 9, 2025
f3dfb1b
refactor: cleanup scripts
Jul 10, 2025
00ee5fe
Merge branch 'dev' into sdk-migrations-2
Oct 22, 2025
65d79de
fix: run sequentially
Oct 23, 2025
921f45e
fix: sequential
Oct 23, 2025
b9a0472
chore: adjust node config
Oct 24, 2025
208af76
refactor: remove aws.js file, update category-hosting
Oct 24, 2025
bf3d983
refactor: amplify-container-hosting
Oct 24, 2025
fda6327
refactor: dynamodb scan
Oct 24, 2025
a57d838
chore: remove dynamo-scan-v2
Oct 24, 2025
a8abcdd
Merge branch 'dev' into sdk-migrations-2
Oct 24, 2025
1abcc7c
chore: remove deps on v2
Oct 24, 2025
9d89824
chore: dedupe
Oct 24, 2025
0463f22
Revert "chore: adjust node config"
Oct 27, 2025
03fd451
Revert "fix: sequential"
Oct 27, 2025
6cd9194
Revert "fix: run sequentially"
Oct 27, 2025
c17703c
chore: increase node space
Oct 27, 2025
bebbc87
chore: increase node space
Oct 27, 2025
c0e1f73
Merge branch 'dev' into sdk-migrations-2
Oct 27, 2025
c5c8ea6
fix: double pinpoint
Oct 27, 2025
ab10a99
chore: debug
Oct 27, 2025
985bb87
fix: bucket endpoint
Oct 27, 2025
b557034
fix: run clean up sequentially, layer2, debugging custom-resource
Oct 27, 2025
c79e113
fix: balance between squential and parallel
Oct 28, 2025
c8a9098
fix: updating cleanup script, parallelism, missing cloudformation config
Oct 28, 2025
dc59846
fix: credentials fallback
Oct 28, 2025
3fe5d99
chore: remove unused import
Oct 28, 2025
1347f6d
fix: string
Oct 28, 2025
7072fbf
fix: replace build with buildID to take up less memory
Oct 28, 2025
93ba722
chore: final adjustments
Oct 29, 2025
294d5c4
chore: remove global-gc
Oct 29, 2025
2d8f1fd
Merge branch 'sdk-migrations-2' of github.com:aws-amplify/amplify-cli…
Oct 29, 2025
8ccebd2
chore: upgrade sdk v3 packages
Oct 29, 2025
9313b84
Merge branch 'dev' into sdk-migrations-2
Oct 29, 2025
d0fa1f5
fix: adjust package versions
Oct 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,23 +62,19 @@ describe('cloudfront-manager', () => {

const mockcftInvalidationData = {};

const mockInvalidateMethod = jest.fn(() => {
return {
promise: () => Promise.resolve(mockcftInvalidationData),
};
});
const mockSendMethod = jest.fn(() => Promise.resolve(mockcftInvalidationData));

class mockCloudFront {
class mockCloudFrontClient {
constructor() {
this.createInvalidation = mockInvalidateMethod;
this.send = mockSendMethod;
}
}

test('invalidateCloudFront', async () => {
const mockCloudFrontClient = async (context, action) => Promise.resolve(new mockCloudFront());
const result = await cloudFrontManager.invalidateCloudFront(mockContext, mockCloudFrontClient);
const mockCloudFrontClientFactory = async (context, action) => Promise.resolve(new mockCloudFrontClient());
const result = await cloudFrontManager.invalidateCloudFront(mockContext, mockCloudFrontClientFactory);
expect(result).toBe(mockContext);
expect(mockInvalidateMethod).toBeCalled();
expect(mockSendMethod).toBeCalled();
expect(mockContext.exeInfo.cftInvalidationData).toEqual(mockcftInvalidationData);
});
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const chalk = require('chalk');
const constants = require('../../constants');
const CloudFront = require('aws-sdk/clients/cloudfront');
const { CloudFrontClient, CreateInvalidationCommand } = require('@aws-sdk/client-cloudfront');

const providerName = 'awscloudformation';

Expand Down Expand Up @@ -28,7 +28,8 @@ async function invalidate(context, cloudFrontClient = getCloudFrontClient) {
};

try {
const data = await cloudFront.createInvalidation(invalidateParams).promise();
const command = new CreateInvalidationCommand(invalidateParams);
const data = await cloudFront.send(command);
context.print.info('CloudFront invalidation request sent successfuly.');
context.print.info(chalk.green(CloudFrontSecureURL));
context.exeInfo.cftInvalidationData = data;
Expand All @@ -45,7 +46,7 @@ async function getCloudFrontClient(context, action) {
const providerPlugins = context.amplify.getProviderPlugins(context);
const provider = require(providerPlugins[providerName]);
const config = await provider.getConfiguredAWSClientConfig(context, constants.CategoryName, action);
return new CloudFront(config);
return new CloudFrontClient(config);
}

module.exports = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const sequential = require('promise-sequential');
const fileScanner = require('./file-scanner');
const constants = require('../../constants');
const { uploadFile } = require('./upload-file');
const S3 = require('aws-sdk/clients/s3');
const { S3Client } = require('@aws-sdk/client-s3');

const serviceName = 'S3AndCloudFront';
const providerName = 'awscloudformation';
Expand Down Expand Up @@ -43,7 +43,7 @@ async function getS3Client(context, action) {
const providerPlugins = context.amplify.getProviderPlugins(context);
const provider = require(providerPlugins[providerName]);
const config = await provider.getConfiguredAWSClientConfig(context, constants.CategoryName, action);
return new S3(config);
return new S3Client(config);
}

function getHostingBucketName(context) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const fs = require('fs-extra');
const path = require('path');
const mime = require('mime-types');
const { Upload } = require('@aws-sdk/lib-storage');

async function uploadFile(s3Client, hostingBucketName, distributionDirPath, filePath, hasCloudFront) {
let relativeFilePath = path.relative(distributionDirPath, filePath);
Expand All @@ -19,7 +20,12 @@ async function uploadFile(s3Client, hostingBucketName, distributionDirPath, file
uploadParams.ACL = 'public-read';
}

const data = await s3Client.upload(uploadParams).promise();
const upload = new Upload({
client: s3Client,
params: uploadParams,
});

const data = await upload.done();

return data;
}
Expand Down
4 changes: 3 additions & 1 deletion packages/amplify-category-hosting/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
"dependencies": {
"@aws-amplify/amplify-cli-core": "4.4.3",
"@aws-amplify/amplify-prompts": "2.8.7",
"aws-sdk": "^2.1692.0",
"@aws-sdk/client-cloudfront": "^3.919.0",
"@aws-sdk/client-s3": "^3.919.0",
"@aws-sdk/lib-storage": "^3.919.0",
"chalk": "^4.1.1",
"fs-extra": "^8.1.0",
"mime-types": "^2.1.26",
Expand Down
2 changes: 1 addition & 1 deletion packages/amplify-category-notifications/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"@aws-amplify/amplify-prompts": "2.8.7",
"@aws-amplify/amplify-provider-awscloudformation": "8.11.14",
"@aws-sdk/client-iam": "^3.919.0",
"@aws-sdk/client-pinpoint": "^3.919.0",
"@aws-sdk/client-pinpoint": "3.901.0",
"@smithy/node-http-handler": "^4.4.3",
"chalk": "^4.1.1",
"fs-extra": "^8.1.0",
Expand Down
1 change: 0 additions & 1 deletion packages/amplify-console-hosting/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
"@aws-sdk/client-amplify": "^3.919.0",
"@aws-sdk/client-s3": "^3.919.0",
"archiver": "^7.0.1",
"aws-sdk": "^2.1692.0",
"chalk": "^4.1.1",
"cli-table3": "^0.6.0",
"execa": "^5.1.1",
Expand Down
2 changes: 2 additions & 0 deletions packages/amplify-container-hosting/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
"@aws-amplify/amplify-category-api": "^5.15.1",
"@aws-amplify/amplify-cli-core": "4.4.3",
"@aws-amplify/amplify-environment-parameters": "1.9.22",
"@aws-sdk/client-s3": "^3.919.0",
"@aws-sdk/lib-storage": "^3.919.0",
"fs-extra": "^8.1.0",
"inquirer": "^7.3.3",
"mime-types": "^2.1.26",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
const fs = require('fs-extra');
const mime = require('mime-types');
const constants = require('../constants');
const S3 = require('aws-sdk/clients/s3');
const { S3Client } = require('@aws-sdk/client-s3');
const { Upload } = require('@aws-sdk/lib-storage');

export async function getS3Client(context, action) {
const providerPlugins = context.amplify.getProviderPlugins(context);
const provider = require(providerPlugins[constants.providerName]);
const config = await provider.getConfiguredAWSClientConfig(context, constants.CategoryName, action);
return new S3(config);
return new S3Client(config);
}

export async function uploadFile(s3Client, bucketName, filePath, fileKey) {
Expand All @@ -20,7 +21,12 @@ export async function uploadFile(s3Client, bucketName, filePath, fileKey) {
ContentType: contentType || 'text/plain',
};

const data = await s3Client.upload(uploadParams).promise();
const upload = new Upload({
client: s3Client,
params: uploadParams,
});

const data = await upload.done();

return data;
}
21 changes: 19 additions & 2 deletions packages/amplify-e2e-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,30 @@
},
"dependencies": {
"@aws-amplify/amplify-cli-core": "4.4.3",
"@aws-sdk/client-pinpoint": "^3.919.0",
"@aws-sdk/client-amplifybackend": "^3.919.0",
"@aws-sdk/client-amplifyuibuilder": "^3.919.0",
"@aws-sdk/client-appsync": "^3.919.0",
"@aws-sdk/client-cloudformation": "^3.919.0",
"@aws-sdk/client-cloudwatch-events": "^3.919.0",
"@aws-sdk/client-cloudwatch-logs": "^3.919.0",
"@aws-sdk/client-cognito-identity": "^3.919.0",
"@aws-sdk/client-cognito-identity-provider": "^3.919.0",
"@aws-sdk/client-dynamodb": "^3.919.0",
"@aws-sdk/client-iam": "^3.919.0",
"@aws-sdk/client-kinesis": "^3.919.0",
"@aws-sdk/client-lambda": "^3.919.0",
"@aws-sdk/client-lex-model-building-service": "^3.919.0",
"@aws-sdk/client-location": "^3.919.0",
"@aws-sdk/client-pinpoint": "3.901.0",
"@aws-sdk/client-rekognition": "^3.919.0",
"@aws-sdk/client-s3": "^3.919.0",
"@aws-sdk/client-ssm": "^3.919.0",
"@aws-sdk/client-sts": "^3.919.0",
"@aws-sdk/credential-providers": "^3.919.0",
"@aws-sdk/lib-dynamodb": "^3.919.0",
"amplify-headless-interface": "1.17.8",
"aws-amplify": "^5.3.16",
"aws-appsync": "^4.1.1",
"aws-sdk": "^2.1464.0",
"chalk": "^4.1.1",
"dotenv": "^8.2.0",
"execa": "^5.1.1",
Expand Down
13 changes: 5 additions & 8 deletions packages/amplify-e2e-core/src/categories/lambda-function.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { nspawn as spawn, ExecutionContext, KEY_DOWN_ARROW, getCLIPath, getProjectMeta, getBackendAmplifyMeta, invokeFunction } from '..';
import { Lambda } from 'aws-sdk';
import { InvokeCommandOutput } from '@aws-sdk/client-lambda';
import { singleSelect, multiSelect, moveUp, moveDown } from '../utils/selectors';
import { globSync } from 'glob';
import * as path from 'path';
Expand Down Expand Up @@ -636,21 +636,18 @@ export const functionMockAssert = (
});
};

export const functionCloudInvoke = async (
cwd: string,
settings: { funcName: string; payload: string },
): Promise<Lambda.InvocationResponse> => {
export const functionCloudInvoke = async (cwd: string, settings: { funcName: string; payload: string }): Promise<InvokeCommandOutput> => {
const meta = getProjectMeta(cwd);
const lookupName = settings.funcName;
expect(meta.function[lookupName]).toBeDefined();
const { Name: functionName, Region: region } = meta.function[lookupName].output;
expect(functionName).toBeDefined();
expect(region).toBeDefined();
const result = await invokeFunction(functionName, settings.payload, region);
if (!result.$response.data) {
throw new Error('No data in lambda response');
if (!result.Payload) {
throw new Error('No payload in lambda response');
}
return result.$response.data as Lambda.InvocationResponse;
return result;
};

const getTemplateChoices = (runtime: FunctionRuntimes) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { AmplifyUIBuilder } from 'aws-sdk';
import { CreateComponentData } from '@aws-sdk/client-amplifyuibuilder';

// FormCheckout used from AmplifyUIKit
// Source: https://www.figma.com/community/file/1047600760128127424

export const formCheckoutComponent: AmplifyUIBuilder.CreateComponentData = {
export const formCheckoutComponent: CreateComponentData = {
name: 'FormCheckout',
componentType: 'Flex',
schemaVersion: '1.0',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { AmplifyUIBuilder } from 'aws-sdk';
import { CreateComponentData } from '@aws-sdk/client-amplifyuibuilder';

// MyIcon used from AmplifyUIKit
// Source: https://www.figma.com/community/file/1047600760128127424

export const myIconComponent: AmplifyUIBuilder.CreateComponentData = {
export const myIconComponent: CreateComponentData = {
name: 'MyIcon',
componentType: 'Icon',
schemaVersion: '1.0',
Expand Down
65 changes: 32 additions & 33 deletions packages/amplify-e2e-core/src/utils/auth-utils.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { Amplify, Auth } from 'aws-amplify';
import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync';
import { CognitoIdentityServiceProvider } from 'aws-sdk';
import {
CognitoIdentityProviderClient,
AdminCreateUserCommand,
AdminAddUserToGroupCommand,
} from '@aws-sdk/client-cognito-identity-provider';
import fs from 'fs-extra';
import path from 'path';
import { getAwsAndroidConfig, getAwsIOSConfig, getBackendAmplifyMeta, getCLIInputs, getProjectMeta, setCLIInputs } from './projectMeta';
Expand All @@ -19,53 +23,48 @@ export async function setupUser(
region?: string,
): Promise<void> {
const cognitoClient = getConfiguredCognitoClient(region);
await cognitoClient
.adminCreateUser({
UserPoolId: userPoolId,
UserAttributes: [{ Name: 'email', Value: 'username@amazon.com' }],
Username: username,
MessageAction: 'SUPPRESS',
TemporaryPassword: tempPassword,
})
.promise();
const createUserCommand = new AdminCreateUserCommand({
UserPoolId: userPoolId,
UserAttributes: [{ Name: 'email', Value: 'username@amazon.com' }],
Username: username,
MessageAction: 'SUPPRESS',
TemporaryPassword: tempPassword,
});
await cognitoClient.send(createUserCommand);

await authenticateUser(username, tempPassword, password);

if (groupName) {
await cognitoClient
.adminAddUserToGroup({
UserPoolId: userPoolId,
Username: username,
GroupName: groupName,
})
.promise();
const addToGroupCommand = new AdminAddUserToGroupCommand({
UserPoolId: userPoolId,
Username: username,
GroupName: groupName,
});
await cognitoClient.send(addToGroupCommand);
}
}

export async function addUserToGroup(userPoolId: string, username: string, groupName: string, region?: string): Promise<void> {
const cognitoClient = getConfiguredCognitoClient(region);
await cognitoClient
.adminAddUserToGroup({
UserPoolId: userPoolId,
Username: username,
GroupName: groupName,
})
.promise();
const command = new AdminAddUserToGroupCommand({
UserPoolId: userPoolId,
Username: username,
GroupName: groupName,
});
await cognitoClient.send(command);
}

export function getConfiguredCognitoClient(region = process.env.CLI_REGION): CognitoIdentityServiceProvider {
const cognitoClient = new CognitoIdentityServiceProvider({ apiVersion: '2016-04-19', region });

export function getConfiguredCognitoClient(region = process.env.CLI_REGION): CognitoIdentityProviderClient {
const awsconfig = {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
sessionToken: process.env.AWS_SESSION_TOKEN,
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
sessionToken: process.env.AWS_SESSION_TOKEN,
},
region,
};

cognitoClient.config.update(awsconfig);

return cognitoClient;
return new CognitoIdentityProviderClient(awsconfig);
}

export function getConfiguredAppsyncClientCognitoAuth(url: string, region: string, user: any) {
Expand Down
2 changes: 1 addition & 1 deletion packages/amplify-e2e-core/src/utils/pinpoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export async function pinpointAppExist(pinpointProjectId: string, region: string
ApplicationId: pinpointProjectId,
});
const response = await pinpointClient.send(command);
if (response.ApplicationResponse.Id === pinpointProjectId) {
if (response.ApplicationResponse?.Id === pinpointProjectId) {
result = true;
}
} catch (err) {
Expand Down
Loading
Loading