diff options
Diffstat (limited to 'scripts/frontend/parallel_ci_sequencer.js')
-rw-r--r-- | scripts/frontend/parallel_ci_sequencer.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/scripts/frontend/parallel_ci_sequencer.js b/scripts/frontend/parallel_ci_sequencer.js new file mode 100644 index 00000000000..d7a674535a6 --- /dev/null +++ b/scripts/frontend/parallel_ci_sequencer.js @@ -0,0 +1,41 @@ +const Sequencer = require('@jest/test-sequencer').default; + +class ParallelCISequencer extends Sequencer { + constructor() { + super(); + this.ciNodeIndex = Number(process.env.CI_NODE_INDEX || '1'); + this.ciNodeTotal = Number(process.env.CI_NODE_TOTAL || '1'); + } + + sort(tests) { + const sortedTests = this.sortByPath(tests); + const testsForThisRunner = this.distributeAcrossCINodes(sortedTests); + + console.log(`CI_NODE_INDEX: ${this.ciNodeIndex}`); + console.log(`CI_NODE_TOTAL: ${this.ciNodeTotal}`); + console.log(`Total number of tests: ${tests.length}`); + console.log(`Total number of tests for this runner: ${testsForThisRunner.length}`); + + return testsForThisRunner; + } + + sortByPath(tests) { + return tests.sort((test1, test2) => { + if (test1.path < test2.path) { + return -1; + } + if (test1.path > test2.path) { + return 1; + } + return 0; + }); + } + + distributeAcrossCINodes(tests) { + return tests.filter((test, index) => { + return index % this.ciNodeTotal === this.ciNodeIndex - 1; + }); + } +} + +module.exports = ParallelCISequencer; |