-
Notifications
You must be signed in to change notification settings - Fork 820
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ci: e2e multi-core optimizations #11685
ci: e2e multi-core optimizations #11685
Conversation
} | ||
const castFile = `${new Date().getTime()}_${index}_${suffix}.cast`; | ||
const castFile = `${testName}_${index}_${suffix}.cast`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (process.env && process.env['CIRCLECI']) { | ||
await staggerTestsThatRunOnTheSameMachine(projectPath); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is basic round robin scheduling during test startup.
I implemented it using the OS/filesystem because there is no other way to communicate between tests, and running init multiple times concurrently seems to cause a lot of errors with simulators (they apparently create files, and throw error if someone else has created them)
@@ -922,7 +922,7 @@ const cleanup = async (): Promise<void> => { | |||
|
|||
const filterPredicate = getFilterPredicate(args); | |||
const accounts = await getAccountsToCleanup(); | |||
for(let i = 0 ;i < 5; i ++){ | |||
for(let i = 0 ;i < 3; i ++){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I found that 5 iterations is overkill, since we've cleaned up most resources at this point - 3 should be enough moving forward
@@ -7,3 +7,4 @@ expect.extend({ toBeAS3Bucket }); | |||
const JEST_TIMEOUT = 1000 * 60 * 60; // 1 hour | |||
|
|||
jest.setTimeout(JEST_TIMEOUT); | |||
jest.retryTimes(1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this change allows a test to retry before all other tests are done, which is ideal because each executor has a worker pool of 3 threads (so there is no need to wait before retrying)
@@ -28,14 +28,14 @@ describe('test lambda layer migration flow introduced in v5.0.0', () => { | |||
let projRoot: string; | |||
let versionToMigrateFrom: string; | |||
|
|||
beforeAll(async () => { | |||
beforeEach(async () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this change, and similar changes to the files in src/tests/ are done to ensure that "createNewProjectDir(..)" is the first thing that happens in a test.
There were only a handful of tests that needed this, specifically - migration tests.
@@ -119,8 +121,8 @@ | |||
"execa": "^5.1.1", | |||
"glob": "^7.2.0", | |||
"husky": "^3.1.0", | |||
"jest": "^26.6.3", | |||
"jest-circus": "^26.6.3", | |||
"jest": "^27.0.0", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not version 28 or 29?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just to limit scope for this PR for the minimum incremental change needed
while(true){ | ||
if(fs.existsSync(lock)) { | ||
await sleep(1 * 1000);// wait | ||
// console.log("waiting to start"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// console.log("waiting to start"); |
const initialDelay = Math.floor(Math.random() * 15 * 1000); | ||
await sleep(initialDelay); | ||
while(true){ | ||
if(fs.existsSync(lock)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a race condition. See https://codeql.github.com/codeql-query-help/javascript/js-file-system-race/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
going to remove this code - so thats good :D
@@ -42,7 +42,9 @@ config(); | |||
* delete project directory | |||
*/ | |||
export const deleteProjectDir = (root: string): void => { | |||
rimraf.sync(root); | |||
if(fs.existsSync(root)){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same condition here https://codeql.github.com/codeql-query-help/javascript/js-file-system-race/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
in this case, projectDir paths are unique between the tests on the same machine - so we should be good
@@ -10,7 +10,7 @@ describe('api directives @auth batch 3a', () => { | |||
let projectDir: string; | |||
|
|||
beforeEach(async () => { | |||
projectDir = await createNewProjectDir('auth3'); | |||
projectDir = await createNewProjectDir('auth11a'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a reason we don't just use UUID's here? Our test file names are undescriptive as is. If we decide to change those in the future, we don't want to track changes within the tests themselves. Is there something that prevents us from using randomized names?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall, really nice work!
Why is the empty file setup-jest.js
needed?
I recommend installing prettier and fixing the indentation in the scripts so we avoid a large amount of white-space changes in future PRs
if(fs.existsSync(root)){ | ||
rimraf.sync(root); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's better to use a try/catch
because otherwise there's a subtle race condition. The directory could be removed after the existsSync returns true
, but before rimraf.sync
is called.
scripts/cci-workflow-results.ts
Outdated
} | ||
|
||
|
||
const runit = async () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: please use a more descriptive name for this function
@@ -0,0 +1,1074 @@ | |||
{ | |||
"lastUpdated": "2022-12-31T02:03:46.162Z", | |||
"totalTestFiles": 266, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this the same as the length of timingData
? If so, I would think computing the length is better to avoid having to ensure both are in sync.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is just some metadata to provide at a glance; its helpful to quickly see when the last updated time was & how many files we having timing data for
...fy-provider-awscloudformation/src/__tests__/iterative-deployment/stack-event-monitor.test.ts
Show resolved
Hide resolved
@@ -10,7 +10,7 @@ describe('api directives @auth batch 3a', () => { | |||
let projectDir: string; | |||
|
|||
beforeEach(async () => { | |||
projectDir = await createNewProjectDir('auth3'); | |||
projectDir = await createNewProjectDir('auth11a'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, instead of manually updating these, we could create a helper function that does this for us. Something like
function getBasename(filename = ''): string {
const filename = path.basename(filename);
const extensionIndex = filename.lastIndexOf('.')
if (extensionIndex < 0) {
return filename ?? 'test';
}
return filename.slice(0, extensionIndex);
}
projectDir = await createNewProjectDir(getBasename(__filename));
spinner.start( | ||
isPulling ? `Fetching updates to backend environment: ${currentEnv} from the cloud.` : `Initializing your environment: ${currentEnv}`, | ||
printer.info( | ||
isPulling ? `Fetching updates to backend environment: ${currentEnv} from the cloud.` : `Initializing your environment: ${currentEnv}` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See the codescanning notice -- printer is now unused, removed the import
scripts/split-e2e-tests-v2.ts
Outdated
}); | ||
|
||
if (workflowJob) { | ||
Object.values(jobByRegion).forEach((regionJobs: any) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Formatting. The formatting in the whole file is non-standard and should be reformatted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks - just ran formatting on all files
} | ||
export function saveJobMetrics(data: any): any { | ||
console.log(`saving job metrics to ${JOB_METRICS_PATH}`); | ||
fs.writeFileSync(JOB_METRICS_PATH, JSON.stringify(data, null, 2)); |
Check warning
Code scanning / CodeQL
Network data written to file
* chore: migrate custom category from inquirer to prompter library * chore: Replace inquirer with amplify-prompts in amplify-category-analytics package * fix: custom category prompter tests * refactor: clean up dependencies in package.json, update messaging in pinpoing-walktrhough, update e2e tests for kinesis and pinpoint prompts * chore: bump codegen version * test: update snapshot after codegen version change * chore: bump api category dependencies to @aws-amplify/[email protected] * fix: cfn ambda outputs when forcePush flag is used * fix: add to migration test list * fix: address comments * fix: removes git clone windows test * chore: removes redundant import * fix: revert windows test * fix: extract api call * fix: set NoEcho flag on OAuth creds CFN param * chore(release): Publish latest [ci skip] - [email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] * ci: e2e multi-core optimizations (#11685) * ci: migrated to new test strategy * chore: add other tests and migration too * chore: cleanup * chore: cleanup * chore: cleanup unused e2e tests * chore: remove generated file * chore: remove parallelization blocker * chore: force parallel runs * chore: cleanup test list * chore: disable retries and cleanup exclusions * chore: bump test count to fill gaps * chore: move random id earlier in project name * chore: update yarn version * chore: fix typo * chore: try to fix delete issues * chore: fix teardown on delete error * ci: create custom file system mutex * chore: cleanup logs * ci: increase randomness of initial lock creation * chore: move migration tests to small isolated vms * chore: adjust concurrency * chore: update naming * ci: update reporter to better handle concurrent tests * ci: add use parent account exceptions * chore: cleanup naming, fix windows artifacts * chore: use data to optimize test scheduling * chore: cleanup * chore: cleanup * chore: fix call flow * chore: workaround duplicate spinner bugs * ci: split api_2 test * chore: increase push timeout * ci: add method to run solo tests * ci: configure retries compatible with worker pools * ci: workaround concurrent polling limits * chore: fix bug with solo tests * chore: move import & geo tests to run solo * chore: add artifact scripts * chore: trigger workflow results * ci: fix artifact path * chore: cleanup * chore: add timer spy * ci: update test lists * chore: cleanup * ci: fix retries * ci: move delays to createProjectDir * ci: use same script for e2e as linux on windows * chore: split storage-1 test * ci: fix config * ci: add bash env * ci: reduce timeout on push * ci: update test lists * ci: update test lists * ci: lower timeout and enable concurrent migration testing * ci: update test list * ci: restructure migration test setups * ci: cleanup to use file names instead of old job names * chore: refactor * ci: fix dependencies * ci: attempt to fix retry on windows * chore: revert retry changes * chore: undo changes to addCircleCiTags * chore: address PR feedback * chore: undo changes to spinners * chore: cleanup unused files * chore: lint & formatting * chore: lint, remove unused import * chore: undo changes to initialize-env.ts * chore: removed overly complicated and confusing logic in pinpoint walkthrough * ci: windows smoke test list (#11797) * ci: migrated to new test strategy * chore: add other tests and migration too * chore: cleanup * chore: cleanup * chore: cleanup unused e2e tests * chore: remove generated file * chore: remove parallelization blocker * chore: force parallel runs * chore: cleanup test list * chore: disable retries and cleanup exclusions * chore: bump test count to fill gaps * chore: move random id earlier in project name * chore: update yarn version * chore: fix typo * chore: try to fix delete issues * chore: fix teardown on delete error * ci: create custom file system mutex * chore: cleanup logs * ci: increase randomness of initial lock creation * chore: move migration tests to small isolated vms * chore: adjust concurrency * chore: update naming * ci: update reporter to better handle concurrent tests * ci: add use parent account exceptions * chore: cleanup naming, fix windows artifacts * chore: use data to optimize test scheduling * chore: cleanup * chore: cleanup * chore: fix call flow * chore: workaround duplicate spinner bugs * ci: split api_2 test * chore: increase push timeout * ci: add method to run solo tests * ci: configure retries compatible with worker pools * ci: workaround concurrent polling limits * chore: fix bug with solo tests * chore: move import & geo tests to run solo * chore: add artifact scripts * chore: trigger workflow results * ci: fix artifact path * chore: cleanup * chore: add timer spy * ci: update test lists * chore: cleanup * ci: fix retries * ci: move delays to createProjectDir * ci: use same script for e2e as linux on windows * chore: split storage-1 test * ci: fix config * ci: add bash env * ci: reduce timeout on push * ci: update test lists * ci: update test lists * ci: lower timeout and enable concurrent migration testing * ci: update test list * ci: restructure migration test setups * ci: cleanup to use file names instead of old job names * chore: refactor * ci: fix dependencies * ci: attempt to fix retry on windows * chore: revert retry changes * chore: undo changes to addCircleCiTags * chore: address PR feedback * chore: undo changes to spinners * chore: cleanup unused files * chore: lint & formatting * chore: lint, remove unused import * chore: undo changes to initialize-env.ts * ci: windows smoke test list for non-dev branches * chore: remove verify-api pre-push hook (#11799) * fix: remove production env variable from amplify script execution * fix: do not overload NODE_ENV env parameter for usage data filtering * fix: do not overload NODE_ENV env parameter for usage data filtering * fix: do not overload NODE_ENV env parameter for usage data filtering * fix: test timeouts on simulator tests (#11804) * ci: fix staleness filters (#11801) * ci: fix staleness filters * ci: only delete stale apps & stacks * chore: refactor * chore: migrate interactions category from inquirer to prompter library * fix: default values for interactions prompter * chore: addressed PR feedback * chore: addressed PR feedback * chore: Persist downstream exceptions in usage metrics (#11711) * chore: Persist downstream exceptions in usage metrics * fix variable name case * chore: Populate cfn exceptions messages in AmplifyFault (#11764) * chore: Persist cfn exceptions in usage metrics * Add a tab between different cfn error messages * refactor filtering the stacks with error * build(deps): bump json5 from 1.0.1 to 1.0.2 (#11697) Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](json5/json5@v1.0.1...v1.0.2) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci: fix cleanup script throttling (#11716) * ci: update cleanup script to reduce throttling * chore: add extract api file * ci: fix condition * chore: cleanup * chore: add back logs * chore: move cleanup to start to avoid deleting apps while running * chore: update cleanup script * chore: revert build change * chore: fix md file * chore: cleanup * chore: address pr feedback * chore: comments * chore: refactor * chore: fix lint issues * chore: feature flag for Lazy Loading and Custom Selection Set support (#11566) * chore: feature flag for iOS LazyReference and ModelPath support * update FF naming * chore: add debug command to all e2e tests * fix: status command with --debug flag * feat: revamp help command (#11667) * feat: revamp help command * feat: revamp help command * feat: revamp help command * feat: revamp help command * feat: revamp help command * feat: revamp help command * feat: revamp help command (resolving merge conflicts) * feat: revamp help command (remove non-null assertions) * feat: revamp help command (remove non-null assertions) * feat: revamp help command (revisions) * feat: revamp help command (revisions) * feat: revamp help command (revisions) * feat: revamp help command (update to use array find) * feat: revamp help command (switch to single quotes) * feat: revamp help command (switch to single quotes) * feat: revamp help command (put imports on same line) * feat: revamp help command (extract api) * feat: revamp help command (prettier on help-helpers) * feat: revamp help command (fix tag line) * feat: revamp help command (changing test names) * feat: revamp help command (refactoring preserveHelpInformation) * fix(global-prefix): remove global-prefix package (#11408) * fix: update prepush hook to clean and rebuild before running verify extract api (#11753) * chore: add codeql scanning (#11518) * chore: add codeql scanning * fix: added quality scan to codeql * fix: make prompter multi-select indicator more distinct (#11742) * Convert back to async method * Add some method comments * fix type in the comments Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: awsluja <[email protected]> Co-authored-by: Michael Law <[email protected]> Co-authored-by: Pavel Lazar <[email protected]> Co-authored-by: Zachary Goldberg <[email protected]> Co-authored-by: MorCohenAres <[email protected]> Co-authored-by: Spencer Stolworthy <[email protected]> Co-authored-by: Edward Foyle <[email protected]> * chore: addressed PR feedback * chore: script to allow simple collection of coverage from all projects (#11798) * chore: add coverage collection script for local unit tests runs * fix: remove unused import * fix: updated dev dependencies * fix: added file level doc, filtered out unwanted coverage on e2e, lib, and test files * fix: more descriptive filename for the script * chore: addressed PR feedback * fix: prompt string to match e2e (#11816) Co-authored-by: Akshay Upadhyay <[email protected]> * chore: correctly filter failed cfn events for displaying error messages (#11815) * chore: do not filter AWS::CloudFormation::Stack type failure events if they have valid error message * Update packages/amplify-provider-awscloudformation/src/aws-utils/aws-cfn.js Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: Pavel Lazar <[email protected]> Co-authored-by: kuhlmanp <[email protected]> Co-authored-by: phani-srikar <[email protected]> Co-authored-by: Al Harris <[email protected]> Co-authored-by: Akshay Upadhyay <[email protected]> Co-authored-by: Edward Foyle <[email protected]> Co-authored-by: aws-amplify-bot <[email protected]> Co-authored-by: Pavel Lazar <[email protected]> Co-authored-by: Danielle Adams <[email protected]> Co-authored-by: awsluja <[email protected]> Co-authored-by: Spencer Stolworthy <[email protected]> Co-authored-by: Amplifiyer <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Michael Law <[email protected]> Co-authored-by: Zachary Goldberg <[email protected]> Co-authored-by: MorCohenAres <[email protected]> Co-authored-by: Spencer Stolworthy <[email protected]> Co-authored-by: akshbhu <[email protected]>
* chore: migrate custom category from inquirer to prompter library * chore: Replace inquirer with amplify-prompts in amplify-category-analytics package * fix: custom category prompter tests * refactor: clean up dependencies in package.json, update messaging in pinpoing-walktrhough, update e2e tests for kinesis and pinpoint prompts * chore: bump codegen version * test: update snapshot after codegen version change * chore: bump api category dependencies to @aws-amplify/[email protected] * fix: cfn ambda outputs when forcePush flag is used * fix: add to migration test list * fix: address comments * fix: removes git clone windows test * chore: removes redundant import * fix: revert windows test * fix: extract api call * fix: set NoEcho flag on OAuth creds CFN param * chore(release): Publish latest [ci skip] - [email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] - [email protected] - [email protected] - [email protected] - @aws-amplify/[email protected] * ci: e2e multi-core optimizations (#11685) * ci: migrated to new test strategy * chore: add other tests and migration too * chore: cleanup * chore: cleanup * chore: cleanup unused e2e tests * chore: remove generated file * chore: remove parallelization blocker * chore: force parallel runs * chore: cleanup test list * chore: disable retries and cleanup exclusions * chore: bump test count to fill gaps * chore: move random id earlier in project name * chore: update yarn version * chore: fix typo * chore: try to fix delete issues * chore: fix teardown on delete error * ci: create custom file system mutex * chore: cleanup logs * ci: increase randomness of initial lock creation * chore: move migration tests to small isolated vms * chore: adjust concurrency * chore: update naming * ci: update reporter to better handle concurrent tests * ci: add use parent account exceptions * chore: cleanup naming, fix windows artifacts * chore: use data to optimize test scheduling * chore: cleanup * chore: cleanup * chore: fix call flow * chore: workaround duplicate spinner bugs * ci: split api_2 test * chore: increase push timeout * ci: add method to run solo tests * ci: configure retries compatible with worker pools * ci: workaround concurrent polling limits * chore: fix bug with solo tests * chore: move import & geo tests to run solo * chore: add artifact scripts * chore: trigger workflow results * ci: fix artifact path * chore: cleanup * chore: add timer spy * ci: update test lists * chore: cleanup * ci: fix retries * ci: move delays to createProjectDir * ci: use same script for e2e as linux on windows * chore: split storage-1 test * ci: fix config * ci: add bash env * ci: reduce timeout on push * ci: update test lists * ci: update test lists * ci: lower timeout and enable concurrent migration testing * ci: update test list * ci: restructure migration test setups * ci: cleanup to use file names instead of old job names * chore: refactor * ci: fix dependencies * ci: attempt to fix retry on windows * chore: revert retry changes * chore: undo changes to addCircleCiTags * chore: address PR feedback * chore: undo changes to spinners * chore: cleanup unused files * chore: lint & formatting * chore: lint, remove unused import * chore: undo changes to initialize-env.ts * chore: removed overly complicated and confusing logic in pinpoint walkthrough * ci: windows smoke test list (#11797) * ci: migrated to new test strategy * chore: add other tests and migration too * chore: cleanup * chore: cleanup * chore: cleanup unused e2e tests * chore: remove generated file * chore: remove parallelization blocker * chore: force parallel runs * chore: cleanup test list * chore: disable retries and cleanup exclusions * chore: bump test count to fill gaps * chore: move random id earlier in project name * chore: update yarn version * chore: fix typo * chore: try to fix delete issues * chore: fix teardown on delete error * ci: create custom file system mutex * chore: cleanup logs * ci: increase randomness of initial lock creation * chore: move migration tests to small isolated vms * chore: adjust concurrency * chore: update naming * ci: update reporter to better handle concurrent tests * ci: add use parent account exceptions * chore: cleanup naming, fix windows artifacts * chore: use data to optimize test scheduling * chore: cleanup * chore: cleanup * chore: fix call flow * chore: workaround duplicate spinner bugs * ci: split api_2 test * chore: increase push timeout * ci: add method to run solo tests * ci: configure retries compatible with worker pools * ci: workaround concurrent polling limits * chore: fix bug with solo tests * chore: move import & geo tests to run solo * chore: add artifact scripts * chore: trigger workflow results * ci: fix artifact path * chore: cleanup * chore: add timer spy * ci: update test lists * chore: cleanup * ci: fix retries * ci: move delays to createProjectDir * ci: use same script for e2e as linux on windows * chore: split storage-1 test * ci: fix config * ci: add bash env * ci: reduce timeout on push * ci: update test lists * ci: update test lists * ci: lower timeout and enable concurrent migration testing * ci: update test list * ci: restructure migration test setups * ci: cleanup to use file names instead of old job names * chore: refactor * ci: fix dependencies * ci: attempt to fix retry on windows * chore: revert retry changes * chore: undo changes to addCircleCiTags * chore: address PR feedback * chore: undo changes to spinners * chore: cleanup unused files * chore: lint & formatting * chore: lint, remove unused import * chore: undo changes to initialize-env.ts * ci: windows smoke test list for non-dev branches * chore: remove verify-api pre-push hook (#11799) * fix: remove production env variable from amplify script execution * fix: do not overload NODE_ENV env parameter for usage data filtering * fix: do not overload NODE_ENV env parameter for usage data filtering * fix: do not overload NODE_ENV env parameter for usage data filtering * fix: test timeouts on simulator tests (#11804) * ci: fix staleness filters (#11801) * ci: fix staleness filters * ci: only delete stale apps & stacks * chore: refactor * chore: migrate interactions category from inquirer to prompter library * fix: default values for interactions prompter * chore: addressed PR feedback * chore: addressed PR feedback * chore: Persist downstream exceptions in usage metrics (#11711) * chore: Persist downstream exceptions in usage metrics * fix variable name case * chore: Populate cfn exceptions messages in AmplifyFault (#11764) * chore: Persist cfn exceptions in usage metrics * Add a tab between different cfn error messages * refactor filtering the stacks with error * build(deps): bump json5 from 1.0.1 to 1.0.2 (#11697) Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](json5/json5@v1.0.1...v1.0.2) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci: fix cleanup script throttling (#11716) * ci: update cleanup script to reduce throttling * chore: add extract api file * ci: fix condition * chore: cleanup * chore: add back logs * chore: move cleanup to start to avoid deleting apps while running * chore: update cleanup script * chore: revert build change * chore: fix md file * chore: cleanup * chore: address pr feedback * chore: comments * chore: refactor * chore: fix lint issues * chore: feature flag for Lazy Loading and Custom Selection Set support (#11566) * chore: feature flag for iOS LazyReference and ModelPath support * update FF naming * chore: add debug command to all e2e tests * fix: status command with --debug flag * feat: revamp help command (#11667) * feat: revamp help command * feat: revamp help command * feat: revamp help command * feat: revamp help command * feat: revamp help command * feat: revamp help command * feat: revamp help command (resolving merge conflicts) * feat: revamp help command (remove non-null assertions) * feat: revamp help command (remove non-null assertions) * feat: revamp help command (revisions) * feat: revamp help command (revisions) * feat: revamp help command (revisions) * feat: revamp help command (update to use array find) * feat: revamp help command (switch to single quotes) * feat: revamp help command (switch to single quotes) * feat: revamp help command (put imports on same line) * feat: revamp help command (extract api) * feat: revamp help command (prettier on help-helpers) * feat: revamp help command (fix tag line) * feat: revamp help command (changing test names) * feat: revamp help command (refactoring preserveHelpInformation) * fix(global-prefix): remove global-prefix package (#11408) * fix: update prepush hook to clean and rebuild before running verify extract api (#11753) * chore: add codeql scanning (#11518) * chore: add codeql scanning * fix: added quality scan to codeql * fix: make prompter multi-select indicator more distinct (#11742) * Convert back to async method * Add some method comments * fix type in the comments Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: awsluja <[email protected]> Co-authored-by: Michael Law <[email protected]> Co-authored-by: Pavel Lazar <[email protected]> Co-authored-by: Zachary Goldberg <[email protected]> Co-authored-by: MorCohenAres <[email protected]> Co-authored-by: Spencer Stolworthy <[email protected]> Co-authored-by: Edward Foyle <[email protected]> * chore: addressed PR feedback * chore: script to allow simple collection of coverage from all projects (#11798) * chore: add coverage collection script for local unit tests runs * fix: remove unused import * fix: updated dev dependencies * fix: added file level doc, filtered out unwanted coverage on e2e, lib, and test files * fix: more descriptive filename for the script * chore: addressed PR feedback * fix: prompt string to match e2e (#11816) Co-authored-by: Akshay Upadhyay <[email protected]> * chore: correctly filter failed cfn events for displaying error messages (#11815) * chore: do not filter AWS::CloudFormation::Stack type failure events if they have valid error message * Update packages/amplify-provider-awscloudformation/src/aws-utils/aws-cfn.js Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: Pavel Lazar <[email protected]> Co-authored-by: kuhlmanp <[email protected]> Co-authored-by: phani-srikar <[email protected]> Co-authored-by: Al Harris <[email protected]> Co-authored-by: Akshay Upadhyay <[email protected]> Co-authored-by: Edward Foyle <[email protected]> Co-authored-by: aws-amplify-bot <[email protected]> Co-authored-by: Pavel Lazar <[email protected]> Co-authored-by: Danielle Adams <[email protected]> Co-authored-by: awsluja <[email protected]> Co-authored-by: Spencer Stolworthy <[email protected]> Co-authored-by: Amplifiyer <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Michael Law <[email protected]> Co-authored-by: Zachary Goldberg <[email protected]> Co-authored-by: MorCohenAres <[email protected]> Co-authored-by: Spencer Stolworthy <[email protected]> Co-authored-by: akshbhu <[email protected]>
Description of changes
Currently, every single test file runs on its own executor.
On windows, that means we only utilize 1 of 4 cores available.
On linux, that means we only utilize 1 of 2 cores on Medium instances, and 1 of 4 cores on Large instances.
This PR updates our testing framework so that we utilize every core available, or 1 core for the operating system, and the remaining cores are assigned to a worker in the worker pool.
We will use this setup moving forward:
Windows Test with 4 CPUs -> 1 core for the OS, and 3 Workers
Linux Test with 4 CPUs -> 1 core for the OS, and 3 Workers
Linux Test with 2 CPUs -> 1 core for the OS, and 1 Worker --- we use this setup sparingly (only for tests that don't run well with other tests)
Here is an example run (99.9% success on the first run, or 798 / 801 tests passing):
https://app.circleci.com/pipelines/github/aws-amplify/amplify-cli/14459/workflows/04f7137d-cc29-4997-8d2e-4433530d0825
All linux tests pass on the first run, some windows tests (8 test files containing 25 individual tests) have been moved to linux only due to flakiness in favor of more consistent runs.
You can also get an idea of the efficiency of this change here: https://app.circleci.com/insights/github/aws-amplify/amplify-cli/workflows/build_test_deploy_v3/overview?branch=run-e2e%2Faluja%2Fe2e-multi-core-optimizations&reporting-window=last-30-days
This PR includes several updates that are collectively required to make this work:
Here are some details on specific changes that were needed to fix problems with concurrency:
Other work:
Issue #, if available
Description of how you validated changes
Checklist
yarn test
passesBy submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.