Parallelize Flow in CI (#20794)

* 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 <rickhanlonii@gmail.com>

Co-authored-by: Ricky <rickhanlonii@gmail.com>
This commit is contained in:
Andrew Clark 2021-02-10 17:54:58 -06:00 committed by GitHub
parent eee874ce6e
commit 9e9be6c6b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 8 deletions

View File

@ -83,6 +83,7 @@ jobs:
yarn_flow:
docker: *docker
environment: *environment
parallelism: 5
steps:
- checkout
@ -384,9 +385,6 @@ workflows:
- yarn_lint:
requires:
- setup
- yarn_flow:
requires:
- setup
- RELEASE_CHANNEL_stable_yarn_build:
requires:
- setup
@ -426,6 +424,9 @@ workflows:
unless: << pipeline.parameters.prerelease_commit_sha >>
jobs:
- setup
- yarn_flow:
requires:
- setup
- yarn_test:
requires:
- setup

View File

@ -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();
}
}
}
}