Skip to content

Commit

Permalink
Parallelize Flow in CI (facebook#20794)
Browse files Browse the repository at this point in the history
* Parallelize Flow in CI

We added more host configs recently, and we run all the checks in
sequence, so sometimes Flow ends up being the slowest CI job.

This splits the job across multiple processes.

* Fix environment variable typo

Co-authored-by: Ricky <[email protected]>

Co-authored-by: Ricky <[email protected]>
  • Loading branch information
acdlite and rickhanlonii authored Feb 10, 2021
1 parent eee874c commit 9e9be6c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
7 changes: 4 additions & 3 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ jobs:
yarn_flow:
docker: *docker
environment: *environment
parallelism: 5

steps:
- checkout
Expand Down Expand Up @@ -384,9 +385,6 @@ workflows:
- yarn_lint:
requires:
- setup
- yarn_flow:
requires:
- setup
- RELEASE_CHANNEL_stable_yarn_build:
requires:
- setup
Expand Down Expand Up @@ -426,6 +424,9 @@ workflows:
unless: << pipeline.parameters.prerelease_commit_sha >>
jobs:
- setup
- yarn_flow:
requires:
- setup
- yarn_test:
requires:
- setup
Expand Down
20 changes: 15 additions & 5 deletions scripts/tasks/flow-ci.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,22 @@ process.on('unhandledRejection', err => {
const runFlow = require('../flow/runFlow');
const inlinedHostConfigs = require('../shared/inlinedHostConfigs');

// Parallelize tests across multiple tasks.
const nodeTotal = process.env.CIRCLE_NODE_TOTAL
? parseInt(process.env.CIRCLE_NODE_TOTAL, 10)
: 1;
const nodeIndex = process.env.CIRCLE_NODE_INDEX
? parseInt(process.env.CIRCLE_NODE_INDEX, 10)
: 0;

async function checkAll() {
// eslint-disable-next-line no-for-of-loops/no-for-of-loops
for (let rendererInfo of inlinedHostConfigs) {
if (rendererInfo.isFlowTyped) {
await runFlow(rendererInfo.shortName, ['check']);
console.log();
for (let i = 0; i < inlinedHostConfigs.length; i++) {
if (i % nodeTotal === nodeIndex) {
const rendererInfo = inlinedHostConfigs[i];
if (rendererInfo.isFlowTyped) {
await runFlow(rendererInfo.shortName, ['check']);
console.log();
}
}
}
}
Expand Down

0 comments on commit 9e9be6c

Please sign in to comment.