Skip to content

Commit

Permalink
chore: CircleCI test performance improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
olerichter00 committed Apr 19, 2024
1 parent 4e09ed9 commit ff2c2f1
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 1 deletion.
48 changes: 47 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,26 @@ orbs:
horizon: artsy/release@0.0.1
macos: circleci/macos@2.4.1

only-main-or-release-or-build-me: &only-main-or-release-or-build-me
filters:
branches:
only:
- main
- /.*release$/
- /.*build-me$/
- /.*hotfix$/
- /.*beta-$/

only-prs: &only-prs
filters:
branches:
ignore:
- main
- /.*release$/
- /.*build-me$/
- /.*hotfix$/
- /.*beta-$/

commands:
await-previous-builds:
parameters:
Expand Down Expand Up @@ -221,6 +241,28 @@ jobs:
echo "Triggering CodePush deployment..."
./scripts/codepush/deploy-to-codepush.sh Staging
test-js-pr:
parallelism: 8
executor:
name: node/default
tag: "20.9.0"
resource_class: large
steps:
- checkout
- install-node-modules
- run-relay-compiler
- run:
name: Run Jest For Updated Files and Scenes Only
command: ./scripts/ci/ci-test-js-pr
no_output_timeout: 3600s
environment:
JEST_JUNIT_OUTPUT_DIR: ./reports/junit/
JEST_JUNIT_UNIQUE_OUTPUT_NAME: true
- store_artifacts:
path: ./reports/junit/
- store_test_results:
path: ./reports/junit/

test-js:
parallelism: 8
executor:
Expand Down Expand Up @@ -469,7 +511,11 @@ workflows:
only:
- main

- test-js
- test-js:
<<: *only-main-or-release-or-build-me

- test-js-pr:
<<: *only-prs

- build-test-js

Expand Down
21 changes: 21 additions & 0 deletions scripts/ci/ci-test-js-pr
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash

UPDATED_GLOBAL_FILES=$(git diff --name-only origin/main...$CIRCLE_SHA1 | grep -E '^.+\.(ts|tsx)$' | grep -v '^src/app/Scenes/' | grep -v '^src/__generated__/')
UPDATED_PACKAGES=$(git diff --name-only origin/main...$CIRCLE_SHA1 | grep -E "package.json|yarn.lock")
UPDATED_SCENES=$(git diff --name-only origin/main...$CIRCLE_SHA1 | grep -E '^.+\.(ts|tsx)$' | sed -n 's#^src/app/Scenes/\([^/]*\)/.*#src/app/Scenes/\1#p' | uniq)

ALL_UPDATED_FILES=$(git diff --name-only origin/main...$CIRCLE_SHA1 | grep -E '^.+\.(ts|tsx)$' | xargs -n 1 basename)
JEST_OPTIONS="--ci --forceExit --logHeapUsage --runInBand --reporters=default --reporters=jest-junit --shard=$(expr $CIRCLE_NODE_INDEX + 1)/$CIRCLE_NODE_TOTAL"


# If only scene files in `src/app/Scenes` have been updated, run only tests for those scenes.
# If global TypeScript files or `package.json` have been updated, run all tests.
# If no `.ts` or `.tsx` files or packages have been updated, don't run any tests.
if [ -n "$UPDATED_GLOBAL_FILES" ] || [ -n "$UPDATED_PACKAGES" ]
then
yarn jest $JEST_OPTIONS
elif [ -n "$UPDATED_SCENES" ] || [ -n "$ALL_UPDATED_FILES" ]
yarn jest $UPDATED_SCENES $ALL_UPDATED_FILES $JEST_OPTIONS
then
echo "No ts|tsx files are updated. Skipping tests."
fi

0 comments on commit ff2c2f1

Please sign in to comment.