Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/frontend/parallel_ci_sequencer.js')
-rw-r--r--scripts/frontend/parallel_ci_sequencer.js41
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;