diff --git a/.circleci/config.yml b/.circleci/config.yml index 5804192ca4515d..09609ecee53f51 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -19,6 +19,8 @@ aliases: name: Install Packages command: yarn --frozen-lockfile + - &TEST_PARALLELISM 20 + - &attach_workspace at: build @@ -102,6 +104,7 @@ jobs: yarn_test: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -111,6 +114,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_test_www: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -120,6 +124,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_test_www_variant: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -129,6 +134,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_test_prod_www: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -138,6 +144,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_test_prod_www_variant: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -147,6 +154,7 @@ jobs: yarn_test_www: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -156,6 +164,7 @@ jobs: yarn_test_www_variant: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -165,6 +174,7 @@ jobs: yarn_test_prod_www: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -174,6 +184,7 @@ jobs: yarn_test_prod_www_variant: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -183,6 +194,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_test_persistent: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout @@ -193,6 +205,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_test_prod: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout @@ -203,6 +216,7 @@ jobs: yarn_test_prod: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -212,7 +226,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_build: docker: *docker environment: *environment - parallelism: 20 + parallelism: *TEST_PARALLELISM steps: - checkout - *restore_yarn_cache @@ -344,6 +358,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_test_build: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - attach_workspace: *attach_workspace @@ -354,6 +369,7 @@ jobs: yarn_test_build: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - attach_workspace: *attach_workspace @@ -404,6 +420,7 @@ jobs: RELEASE_CHANNEL_stable_yarn_test_build_prod: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - attach_workspace: *attach_workspace @@ -414,6 +431,7 @@ jobs: yarn_test_build_prod: docker: *docker environment: *environment + parallelism: *TEST_PARALLELISM steps: - checkout - attach_workspace: *attach_workspace diff --git a/packages/react/src/__tests__/ReactClassEquivalence-test.js b/packages/react/src/__tests__/ReactClassEquivalence-test.js index d4815792add8b4..a08b67720ac60f 100644 --- a/packages/react/src/__tests__/ReactClassEquivalence-test.js +++ b/packages/react/src/__tests__/ReactClassEquivalence-test.js @@ -38,6 +38,10 @@ function runJest(testFile) { cwd, env: Object.assign({}, process.env, { REACT_CLASS_EQUIVALENCE_TEST: 'true', + // Remove these so that the test file is not filtered out by the mechanism + // we use to parallelize tests in CI + CIRCLE_NODE_TOTAL: '', + CIRCLE_NODE_INDEX: '', }), }); diff --git a/scripts/jest/config.base.js b/scripts/jest/config.base.js index 3da2fb6b41489c..0e9508221a654e 100644 --- a/scripts/jest/config.base.js +++ b/scripts/jest/config.base.js @@ -22,6 +22,8 @@ module.exports = { timers: 'fake', snapshotSerializers: [require.resolve('jest-snapshot-serializer-raw')], + testSequencer: require.resolve('./jestSequencer'), + // TODO: Upgrade to Jest 26 which uses jsdom 16 by default. testEnvironment: require.resolve('jest-environment-jsdom-sixteen'), }; diff --git a/scripts/jest/jestSequencer.js b/scripts/jest/jestSequencer.js new file mode 100644 index 00000000000000..b21cbbfc0ccbc9 --- /dev/null +++ b/scripts/jest/jestSequencer.js @@ -0,0 +1,19 @@ +'use strict'; + +const Sequencer = require('@jest/test-sequencer').default; + +class CustomSequencer extends Sequencer { + sort(tests) { + if (process.env.CIRCLE_NODE_TOTAL) { + // In CI, parallelize tests across multiple tasks. + const nodeTotal = parseInt(process.env.CIRCLE_NODE_TOTAL, 10); + const nodeIndex = parseInt(process.env.CIRCLE_NODE_INDEX, 10); + tests = tests + .sort((a, b) => (a.path < b.path ? -1 : 1)) + .filter((_, i) => i % nodeTotal === nodeIndex); + } + return tests; + } +} + +module.exports = CustomSequencer;