@nsxbet/playwright-orchestrator 0.8.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -7
- package/dist/commands/assign.d.ts +3 -10
- package/dist/commands/assign.d.ts.map +1 -1
- package/dist/commands/assign.js +32 -187
- package/dist/commands/assign.js.map +1 -1
- package/dist/commands/extract-timing.d.ts +1 -0
- package/dist/commands/extract-timing.d.ts.map +1 -1
- package/dist/commands/extract-timing.js +31 -1
- package/dist/commands/extract-timing.js.map +1 -1
- package/dist/commands/filter-report.d.ts +24 -0
- package/dist/commands/filter-report.d.ts.map +1 -0
- package/dist/commands/filter-report.js +123 -0
- package/dist/commands/filter-report.js.map +1 -0
- package/dist/core/ckk-algorithm.d.ts +1 -1
- package/dist/core/ckk-algorithm.d.ts.map +1 -1
- package/dist/core/ckk-algorithm.js +130 -36
- package/dist/core/ckk-algorithm.js.map +1 -1
- package/dist/core/estimate.d.ts +11 -0
- package/dist/core/estimate.d.ts.map +1 -1
- package/dist/core/estimate.js +43 -0
- package/dist/core/estimate.js.map +1 -1
- package/dist/fixture.d.ts +0 -10
- package/dist/fixture.d.ts.map +1 -1
- package/dist/fixture.js +0 -36
- package/dist/fixture.js.map +1 -1
- package/dist/reporter.d.ts +26 -0
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +120 -0
- package/dist/reporter.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -63,7 +63,9 @@ ORCHESTRATOR_SHARD_FILE=shard-1.json bunx playwright test --project "Mobile Chro
|
|
|
63
63
|
# Extract timing from report after tests complete
|
|
64
64
|
bunx playwright-orchestrator extract-timing \
|
|
65
65
|
--report-file ./playwright-report/results.json \
|
|
66
|
-
--output-file ./shard-1-timing.json
|
|
66
|
+
--output-file ./shard-1-timing.json \
|
|
67
|
+
--shard-file ./shard-1.json \
|
|
68
|
+
--project "Mobile Chrome"
|
|
67
69
|
|
|
68
70
|
# Merge timing data from all shards
|
|
69
71
|
bunx playwright-orchestrator merge-timing \
|
|
@@ -99,10 +101,18 @@ For test-level distribution to work, you need **two things**:
|
|
|
99
101
|
import { defineConfig } from "@playwright/test";
|
|
100
102
|
|
|
101
103
|
export default defineConfig({
|
|
102
|
-
reporter: [
|
|
104
|
+
reporter: [
|
|
105
|
+
["@nsxbet/playwright-orchestrator/reporter", {
|
|
106
|
+
filterJson: "playwright-report/results.json",
|
|
107
|
+
}],
|
|
108
|
+
["json", { outputFile: "playwright-report/results.json" }],
|
|
109
|
+
["html"],
|
|
110
|
+
],
|
|
103
111
|
});
|
|
104
112
|
```
|
|
105
113
|
|
|
114
|
+
The `filterJson` option (optional) tells the reporter to rewrite the JSON report after tests complete, removing specs not assigned to this shard. This keeps per-shard reports clean and prevents timing corruption from zero-duration orchestrator-skipped entries.
|
|
115
|
+
|
|
106
116
|
### 2. Test Fixture (in your test setup file)
|
|
107
117
|
|
|
108
118
|
Wrap your base test with `withOrchestratorFilter`:
|
|
@@ -223,14 +233,29 @@ See [docs/external-integration.md](./docs/external-integration.md) for complete
|
|
|
223
233
|
|
|
224
234
|
## CLI Commands
|
|
225
235
|
|
|
226
|
-
| Command | Description
|
|
227
|
-
| ---------------- |
|
|
228
|
-
| `assign` | Distribute tests across shards
|
|
229
|
-
| `extract-timing` | Extract timing from Playwright report
|
|
230
|
-
| `merge-timing` | Merge timing data with EMA smoothing
|
|
236
|
+
| Command | Description |
|
|
237
|
+
| ---------------- | --------------------------------------------------------- |
|
|
238
|
+
| `assign` | Distribute tests across shards |
|
|
239
|
+
| `extract-timing` | Extract timing from Playwright report |
|
|
240
|
+
| `merge-timing` | Merge timing data with EMA smoothing |
|
|
241
|
+
| `filter-report` | Remove orchestrator-skipped tests from merged JSON report |
|
|
231
242
|
|
|
232
243
|
Run `playwright-orchestrator <command> --help` for details.
|
|
233
244
|
|
|
245
|
+
### File Affinity
|
|
246
|
+
|
|
247
|
+
By default, the `assign` command keeps tests from the same file on the same shard when the time difference is small. This reduces redundant page/context initialization costs in frameworks like Next.js where the first test on a page pays a "footprint" cost.
|
|
248
|
+
|
|
249
|
+
The penalty is auto-calculated from timing data (P25 of per-file average durations). You can override or disable it:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
# Disable file affinity
|
|
253
|
+
playwright-orchestrator assign --test-list test-list.json --shards 4 --no-file-affinity
|
|
254
|
+
|
|
255
|
+
# Override penalty (in ms)
|
|
256
|
+
playwright-orchestrator assign --test-list test-list.json --shards 4 --file-affinity-penalty 20000
|
|
257
|
+
```
|
|
258
|
+
|
|
234
259
|
## Development
|
|
235
260
|
|
|
236
261
|
```bash
|
|
@@ -3,24 +3,17 @@ export default class Assign extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
'test-
|
|
7
|
-
'test-list': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
'test-list': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
7
|
'timing-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
8
|
shards: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
9
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
10
|
'output-format': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
'fallback-ms-per-line': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
11
|
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
-
'glob-pattern': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
-
level: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
12
|
timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
-
'
|
|
18
|
-
'
|
|
13
|
+
'file-affinity': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
'file-affinity-penalty': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
15
|
};
|
|
20
16
|
run(): Promise<void>;
|
|
21
|
-
private runTestLevel;
|
|
22
|
-
private runFileLevel;
|
|
23
|
-
private outputTestResult;
|
|
24
17
|
private outputResult;
|
|
25
18
|
private formatDuration;
|
|
26
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAc7C,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,WAAW,SACgC;IAE3D,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;;;;;;;MA4CnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAoG1B,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,cAAc;CAQvB"}
|
package/dist/commands/assign.js
CHANGED
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
2
|
import { Command, Flags } from '@oclif/core';
|
|
3
|
-
import {
|
|
4
|
-
import { assignWithCKK, assignWithLPT, DEFAULT_CKK_TIMEOUT, DEFAULT_MS_PER_LINE, discoverTests, discoverTestsFromFiles, estimateDuration, formatAssignResult, getFileDuration, getTestDurations, loadTestListFromFile, loadTimingData, } from '../core/index.js';
|
|
3
|
+
import { assignWithCKK, calculateFileAffinityPenalty, DEFAULT_CKK_TIMEOUT, getTestDurations, loadTestListFromFile, loadTimingData, } from '../core/index.js';
|
|
5
4
|
export default class Assign extends Command {
|
|
6
|
-
static description = 'Assign
|
|
5
|
+
static description = 'Assign tests to shards based on historical timing data';
|
|
7
6
|
static examples = [
|
|
8
|
-
'<%= config.bin %> assign --test-
|
|
9
|
-
'<%= config.bin %> assign --test-
|
|
10
|
-
'<%= config.bin %> assign --test-dir ./e2e --shards 4 --level test --timeout 500',
|
|
7
|
+
'<%= config.bin %> assign --test-list ./test-list.json --shards 4',
|
|
8
|
+
'<%= config.bin %> assign --test-list ./test-list.json --timing-file ./timing.json --shards 4 --output-format json',
|
|
11
9
|
];
|
|
12
10
|
static flags = {
|
|
13
|
-
'test-dir': Flags.string({
|
|
14
|
-
char: 'd',
|
|
15
|
-
description: 'Path to test directory containing spec files',
|
|
16
|
-
required: false, // Not required when using --test-list
|
|
17
|
-
}),
|
|
18
11
|
'test-list': Flags.string({
|
|
19
|
-
description: 'Path to JSON file with test list (from playwright --list --reporter=json)
|
|
12
|
+
description: 'Path to JSON file with test list (from npx playwright test --list --reporter=json)',
|
|
13
|
+
required: true,
|
|
20
14
|
}),
|
|
21
15
|
'timing-file': Flags.string({
|
|
22
16
|
char: 't',
|
|
@@ -29,7 +23,7 @@ export default class Assign extends Command {
|
|
|
29
23
|
}),
|
|
30
24
|
project: Flags.string({
|
|
31
25
|
char: 'p',
|
|
32
|
-
description: 'Playwright project name (for
|
|
26
|
+
description: 'Playwright project name (for multi-project configs)',
|
|
33
27
|
}),
|
|
34
28
|
'output-format': Flags.string({
|
|
35
29
|
char: 'f',
|
|
@@ -37,101 +31,34 @@ export default class Assign extends Command {
|
|
|
37
31
|
default: 'json',
|
|
38
32
|
options: ['json', 'text'],
|
|
39
33
|
}),
|
|
40
|
-
'fallback-ms-per-line': Flags.integer({
|
|
41
|
-
description: 'Milliseconds per line for duration estimation',
|
|
42
|
-
default: DEFAULT_MS_PER_LINE,
|
|
43
|
-
}),
|
|
44
34
|
verbose: Flags.boolean({
|
|
45
35
|
char: 'v',
|
|
46
36
|
description: 'Show verbose output',
|
|
47
37
|
default: false,
|
|
48
38
|
}),
|
|
49
|
-
'glob-pattern': Flags.string({
|
|
50
|
-
description: 'Glob pattern for test files',
|
|
51
|
-
default: '**/*.spec.ts',
|
|
52
|
-
}),
|
|
53
|
-
level: Flags.string({
|
|
54
|
-
char: 'l',
|
|
55
|
-
description: 'Distribution level: file or test',
|
|
56
|
-
default: 'test',
|
|
57
|
-
options: ['file', 'test'],
|
|
58
|
-
}),
|
|
59
39
|
timeout: Flags.integer({
|
|
60
|
-
description: 'CKK algorithm timeout in milliseconds
|
|
40
|
+
description: 'CKK algorithm timeout in milliseconds',
|
|
61
41
|
default: DEFAULT_CKK_TIMEOUT,
|
|
62
42
|
}),
|
|
63
|
-
'
|
|
64
|
-
description: '
|
|
65
|
-
default:
|
|
43
|
+
'file-affinity': Flags.boolean({
|
|
44
|
+
description: 'Enable file affinity to keep same-file tests on the same shard',
|
|
45
|
+
default: true,
|
|
46
|
+
allowNo: true,
|
|
66
47
|
}),
|
|
67
|
-
'
|
|
68
|
-
|
|
69
|
-
description: 'Directory where playwright.config.ts is located (defaults to test-dir)',
|
|
48
|
+
'file-affinity-penalty': Flags.integer({
|
|
49
|
+
description: 'File affinity penalty in milliseconds (overrides auto-calculation)',
|
|
70
50
|
}),
|
|
71
51
|
};
|
|
72
52
|
async run() {
|
|
73
53
|
const { flags } = await this.parse(Assign);
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const testDir = flags['test-dir'] ? path.resolve(flags['test-dir']) : '';
|
|
79
|
-
const pattern = flags['glob-pattern'];
|
|
80
|
-
if (flags.level === 'test') {
|
|
81
|
-
await this.runTestLevel(testDir, pattern, {
|
|
82
|
-
...flags,
|
|
83
|
-
project: flags.project,
|
|
84
|
-
'use-fallback': flags['use-fallback'],
|
|
85
|
-
'config-dir': flags['config-dir'],
|
|
86
|
-
'test-list': flags['test-list'],
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
if (flags['test-list']) {
|
|
91
|
-
this.error('--test-list is only supported with --level test');
|
|
92
|
-
}
|
|
93
|
-
await this.runFileLevel(testDir, pattern, flags);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
async runTestLevel(testDir, pattern, flags) {
|
|
97
|
-
// Discover tests - prefer pre-generated test list, then Playwright --list, then file parsing
|
|
98
|
-
let tests;
|
|
99
|
-
if (flags['test-list']) {
|
|
100
|
-
// Use pre-generated test list file (most reliable in CI)
|
|
101
|
-
const testListPath = path.resolve(flags['test-list']);
|
|
102
|
-
tests = loadTestListFromFile(testListPath, flags.project);
|
|
103
|
-
if (flags.verbose) {
|
|
104
|
-
this.log(`Using pre-generated test list from ${testListPath}`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
else if (flags['use-fallback']) {
|
|
108
|
-
// Explicit fallback requested
|
|
109
|
-
tests = discoverTestsFromFiles(testDir, pattern);
|
|
110
|
-
if (flags.verbose) {
|
|
111
|
-
this.log('Using file parsing for test discovery (--use-fallback)');
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
try {
|
|
116
|
-
// Try Playwright --list first (handles parameterized tests correctly)
|
|
117
|
-
// Use config-dir if provided, otherwise use test-dir
|
|
118
|
-
tests = discoverTests(testDir, flags.project, flags['config-dir']);
|
|
119
|
-
if (flags.verbose) {
|
|
120
|
-
this.log('Using Playwright --list for test discovery (accurate, includes parameterized tests)');
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
124
|
-
// Fallback to file parsing if Playwright --list fails
|
|
125
|
-
if (flags.verbose) {
|
|
126
|
-
this.warn('Playwright --list failed, falling back to file parsing (may miss parameterized tests)');
|
|
127
|
-
}
|
|
128
|
-
tests = discoverTestsFromFiles(testDir, pattern);
|
|
129
|
-
}
|
|
54
|
+
const testListPath = path.resolve(flags['test-list']);
|
|
55
|
+
const tests = loadTestListFromFile(testListPath, flags.project);
|
|
56
|
+
if (flags.verbose) {
|
|
57
|
+
this.log(`Loaded ${tests.length} tests from ${testListPath}`);
|
|
130
58
|
}
|
|
131
59
|
if (tests.length === 0) {
|
|
132
|
-
|
|
133
|
-
this.
|
|
134
|
-
this.outputTestResult({
|
|
60
|
+
this.warn(`No tests found in ${testListPath}`);
|
|
61
|
+
this.outputResult({
|
|
135
62
|
shards: Object.fromEntries(Array.from({ length: flags.shards }, (_, i) => [i + 1, []])),
|
|
136
63
|
expectedDurations: Object.fromEntries(Array.from({ length: flags.shards }, (_, i) => [i + 1, 0])),
|
|
137
64
|
totalTests: 0,
|
|
@@ -140,15 +67,10 @@ export default class Assign extends Command {
|
|
|
140
67
|
}, flags['output-format']);
|
|
141
68
|
return;
|
|
142
69
|
}
|
|
143
|
-
if (flags.verbose) {
|
|
144
|
-
this.log(`Found ${tests.length} tests in ${testDir}`);
|
|
145
|
-
}
|
|
146
|
-
// Load timing data if available
|
|
147
70
|
let timingData = null;
|
|
148
71
|
if (flags['timing-file']) {
|
|
149
72
|
timingData = loadTimingData(flags['timing-file']);
|
|
150
73
|
}
|
|
151
|
-
// Get test durations
|
|
152
74
|
const testsWithDurations = getTestDurations(tests, timingData);
|
|
153
75
|
const estimatedTests = testsWithDurations
|
|
154
76
|
.filter((t) => t.estimated)
|
|
@@ -156,25 +78,30 @@ export default class Assign extends Command {
|
|
|
156
78
|
if (flags.verbose && estimatedTests.length > 0) {
|
|
157
79
|
this.log(`Estimated duration for ${estimatedTests.length} tests (no historical data)`);
|
|
158
80
|
}
|
|
159
|
-
// Convert to TestWithDuration format
|
|
160
81
|
const testInputs = testsWithDurations.map((t) => ({
|
|
161
82
|
testId: t.testId,
|
|
162
83
|
file: t.file,
|
|
163
84
|
duration: t.duration,
|
|
164
85
|
estimated: t.estimated,
|
|
165
86
|
}));
|
|
166
|
-
|
|
167
|
-
|
|
87
|
+
let fileAffinityPenalty = 0;
|
|
88
|
+
if (flags['file-affinity']) {
|
|
89
|
+
fileAffinityPenalty =
|
|
90
|
+
flags['file-affinity-penalty'] ??
|
|
91
|
+
calculateFileAffinityPenalty(timingData);
|
|
92
|
+
if (flags.verbose) {
|
|
93
|
+
this.log(`File affinity penalty: ${this.formatDuration(fileAffinityPenalty)}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const ckkResult = assignWithCKK(testInputs, flags.shards, flags.timeout, fileAffinityPenalty);
|
|
168
97
|
if (flags.verbose) {
|
|
169
98
|
this.log(`Assignment ${ckkResult.isOptimal ? 'optimal' : 'near-optimal (LPT fallback)'}`);
|
|
170
99
|
this.log(`Makespan: ${this.formatDuration(ckkResult.makespan)}`);
|
|
171
100
|
}
|
|
172
|
-
// Build shard assignments
|
|
173
101
|
const shardTests = {};
|
|
174
102
|
for (const assignment of ckkResult.assignments) {
|
|
175
103
|
shardTests[assignment.shardIndex] = assignment.tests;
|
|
176
104
|
}
|
|
177
|
-
// Build result
|
|
178
105
|
const result = {
|
|
179
106
|
shards: shardTests,
|
|
180
107
|
expectedDurations: Object.fromEntries(ckkResult.assignments.map((a) => [a.shardIndex, a.expectedDuration])),
|
|
@@ -182,73 +109,14 @@ export default class Assign extends Command {
|
|
|
182
109
|
estimatedTests,
|
|
183
110
|
isOptimal: ckkResult.isOptimal,
|
|
184
111
|
};
|
|
185
|
-
this.outputTestResult(result, flags['output-format'], flags.verbose);
|
|
186
|
-
}
|
|
187
|
-
async runFileLevel(testDir, pattern, flags) {
|
|
188
|
-
// Find all test files
|
|
189
|
-
const testFiles = await glob(pattern, {
|
|
190
|
-
cwd: testDir,
|
|
191
|
-
nodir: true,
|
|
192
|
-
});
|
|
193
|
-
if (testFiles.length === 0) {
|
|
194
|
-
this.warn(`No test files found in ${testDir} matching ${pattern}`);
|
|
195
|
-
this.outputResult({
|
|
196
|
-
shards: Object.fromEntries(Array.from({ length: flags.shards }, (_, i) => [i + 1, []])),
|
|
197
|
-
expectedDurations: Object.fromEntries(Array.from({ length: flags.shards }, (_, i) => [i + 1, 0])),
|
|
198
|
-
totalFiles: 0,
|
|
199
|
-
estimatedFiles: [],
|
|
200
|
-
}, flags['output-format']);
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
if (flags.verbose) {
|
|
204
|
-
this.log(`Found ${testFiles.length} test files in ${testDir}`);
|
|
205
|
-
}
|
|
206
|
-
// Load timing data if available
|
|
207
|
-
const timingData = flags['timing-file']
|
|
208
|
-
? loadTimingData(flags['timing-file'])
|
|
209
|
-
: null;
|
|
210
|
-
// Build file list with durations
|
|
211
|
-
const filesWithDurations = [];
|
|
212
|
-
const estimatedFiles = [];
|
|
213
|
-
for (const file of testFiles) {
|
|
214
|
-
const historicalDuration = timingData
|
|
215
|
-
? getFileDuration(timingData, file)
|
|
216
|
-
: undefined;
|
|
217
|
-
if (historicalDuration !== undefined) {
|
|
218
|
-
filesWithDurations.push({
|
|
219
|
-
file,
|
|
220
|
-
duration: historicalDuration,
|
|
221
|
-
estimated: false,
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
// Estimate based on line count
|
|
226
|
-
const fullPath = path.join(testDir, file);
|
|
227
|
-
const estimated = estimateDuration(fullPath, flags['fallback-ms-per-line']);
|
|
228
|
-
filesWithDurations.push({
|
|
229
|
-
file,
|
|
230
|
-
duration: estimated,
|
|
231
|
-
estimated: true,
|
|
232
|
-
});
|
|
233
|
-
estimatedFiles.push(file);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
if (flags.verbose && estimatedFiles.length > 0) {
|
|
237
|
-
this.log(`Estimated duration for ${estimatedFiles.length} files (no historical data)`);
|
|
238
|
-
}
|
|
239
|
-
// Run LPT algorithm
|
|
240
|
-
const assignments = assignWithLPT(filesWithDurations, flags.shards);
|
|
241
|
-
const result = formatAssignResult(assignments, estimatedFiles);
|
|
242
|
-
// Output result
|
|
243
112
|
this.outputResult(result, flags['output-format'], flags.verbose);
|
|
244
113
|
}
|
|
245
|
-
|
|
114
|
+
outputResult(result, format, verbose = false) {
|
|
246
115
|
if (format === 'json') {
|
|
247
116
|
this.log(JSON.stringify(result));
|
|
248
117
|
}
|
|
249
118
|
else {
|
|
250
|
-
|
|
251
|
-
this.log('\n=== Shard Assignments (Test-Level) ===\n');
|
|
119
|
+
this.log('\n=== Shard Assignments ===\n');
|
|
252
120
|
for (const [shard, tests] of Object.entries(result.shards)) {
|
|
253
121
|
const duration = result.expectedDurations[Number(shard)];
|
|
254
122
|
const durationStr = this.formatDuration(duration ?? 0);
|
|
@@ -268,29 +136,6 @@ export default class Assign extends Command {
|
|
|
268
136
|
}
|
|
269
137
|
}
|
|
270
138
|
}
|
|
271
|
-
outputResult(result, format, _verbose = false) {
|
|
272
|
-
if (format === 'json') {
|
|
273
|
-
this.log(JSON.stringify(result));
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
// Text format
|
|
277
|
-
this.log('\n=== Shard Assignments (File-Level) ===\n');
|
|
278
|
-
for (const [shard, files] of Object.entries(result.shards)) {
|
|
279
|
-
const duration = result.expectedDurations[Number(shard)];
|
|
280
|
-
const durationStr = this.formatDuration(duration ?? 0);
|
|
281
|
-
this.log(`Shard ${shard} (${durationStr}):`);
|
|
282
|
-
for (const file of files) {
|
|
283
|
-
const isEstimated = result.estimatedFiles.includes(file);
|
|
284
|
-
this.log(` - ${file}${isEstimated ? ' (estimated)' : ''}`);
|
|
285
|
-
}
|
|
286
|
-
this.log('');
|
|
287
|
-
}
|
|
288
|
-
this.log(`Total files: ${result.totalFiles}`);
|
|
289
|
-
if (result.estimatedFiles.length > 0) {
|
|
290
|
-
this.log(`Files with estimated duration: ${result.estimatedFiles.length}`);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
139
|
formatDuration(ms) {
|
|
295
140
|
const seconds = Math.round(ms / 1000);
|
|
296
141
|
const minutes = Math.floor(seconds / 60);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assign.js","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assign.js","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,mBAAmB,EAEnB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GAIf,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAU,WAAW,GACzB,wDAAwD,CAAC;IAE3D,MAAM,CAAU,QAAQ,GAAG;QACzB,kEAAkE;QAClE,mHAAmH;KACpH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,WAAW,EACT,oFAAoF;YACtF,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0CAA0C;SACxD,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,qDAAqD;SACnE,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SAC1B,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,qBAAqB;YAClC,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,WAAW,EAAE,uCAAuC;YACpD,OAAO,EAAE,mBAAmB;SAC7B,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC;YAC7B,WAAW,EACT,gEAAgE;YAClE,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC;QACF,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC;YACrC,WAAW,EACT,oEAAoE;SACvE,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACtD,MAAM,KAAK,GAAqB,oBAAoB,CAClD,YAAY,EACZ,KAAK,CAAC,OAAO,CACd,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,MAAM,eAAe,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,CACf;gBACE,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAC5D;gBACD,iBAAiB,EAAE,MAAM,CAAC,WAAW,CACnC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAC3D;gBACD,UAAU,EAAE,CAAC;gBACb,cAAc,EAAE,EAAE;gBAClB,SAAS,EAAE,IAAI;aAChB,EACD,KAAK,CAAC,eAAe,CAAC,CACvB,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,UAAU,GAAsB,IAAI,CAAC;QACzC,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YACzB,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,kBAAkB;aACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;aAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,CACN,0BAA0B,cAAc,CAAC,MAAM,6BAA6B,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAuB,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpE,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;QAEJ,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;YAC3B,mBAAmB;gBACjB,KAAK,CAAC,uBAAuB,CAAC;oBAC9B,4BAA4B,CAAC,UAAU,CAAC,CAAC;YAE3C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,GAAG,CACN,0BAA0B,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,aAAa,CAC7B,UAAU,EACV,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,OAAO,EACb,mBAAmB,CACpB,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CACN,cAAc,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,6BAA6B,EAAE,CAChF,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,UAAU,GAA6B,EAAE,CAAC;QAChD,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC/C,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAqB;YAC/B,MAAM,EAAE,UAAU;YAClB,iBAAiB,EAAE,MAAM,CAAC,WAAW,CACnC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CACrE;YACD,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,cAAc;YACd,SAAS,EAAE,SAAS,CAAC,SAAS;SAC/B,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAEO,YAAY,CAClB,MAAwB,EACxB,MAAc,EACd,OAAO,GAAG,KAAK;QAEf,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;gBACvD,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,WAAW,KAAK,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;gBAEpE,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;wBAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAC3D,IAAI,CAAC,GAAG,CAAC,OAAO,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CACN,qBAAqB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,EAAE,CACtE,CAAC;YACF,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,CACN,kCAAkC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CACjE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,EAAU;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;QACtC,OAAO,OAAO,GAAG,CAAC;YAChB,CAAC,CAAC,GAAG,OAAO,KAAK,gBAAgB,GAAG;YACpC,CAAC,CAAC,GAAG,gBAAgB,GAAG,CAAC;IAC7B,CAAC"}
|
|
@@ -7,6 +7,7 @@ export default class ExtractTiming extends Command {
|
|
|
7
7
|
'output-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
shard: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
project: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'shard-file': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
12
|
};
|
|
12
13
|
private testDir;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-timing.d.ts","sourceRoot":"","sources":["../../src/commands/extract-timing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,OAAgB,WAAW,SACyB;IAEpD,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK
|
|
1
|
+
{"version":3,"file":"extract-timing.d.ts","sourceRoot":"","sources":["../../src/commands/extract-timing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,OAAgB,WAAW,SACyB;IAEpD,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;;;;MA8BnB;IAGF,OAAO,CAAC,OAAO,CAAc;IAE7B,OAAO,CAAC,OAAO,CAAc;IAEvB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAoF1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAmD7B;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;CAoD3B"}
|
|
@@ -26,7 +26,11 @@ export default class ExtractTiming extends Command {
|
|
|
26
26
|
project: Flags.string({
|
|
27
27
|
char: 'p',
|
|
28
28
|
description: 'Playwright project name',
|
|
29
|
-
|
|
29
|
+
required: true,
|
|
30
|
+
}),
|
|
31
|
+
'shard-file': Flags.string({
|
|
32
|
+
description: 'Path to shard JSON file — only extract timing for tests in this file',
|
|
33
|
+
required: true,
|
|
30
34
|
}),
|
|
31
35
|
verbose: Flags.boolean({
|
|
32
36
|
char: 'v',
|
|
@@ -60,6 +64,32 @@ export default class ExtractTiming extends Command {
|
|
|
60
64
|
}
|
|
61
65
|
// Extract test-level durations
|
|
62
66
|
const testDurations = this.extractTestDurations(report);
|
|
67
|
+
// Filter by shard file (required)
|
|
68
|
+
const shardFilePath = path.resolve(flags['shard-file']);
|
|
69
|
+
if (!fs.existsSync(shardFilePath)) {
|
|
70
|
+
this.error(`Shard file not found: ${shardFilePath}`);
|
|
71
|
+
}
|
|
72
|
+
let shardIds;
|
|
73
|
+
try {
|
|
74
|
+
shardIds = JSON.parse(fs.readFileSync(shardFilePath, 'utf-8'));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
this.error(`Failed to parse shard file: ${shardFilePath}`);
|
|
78
|
+
}
|
|
79
|
+
if (!Array.isArray(shardIds)) {
|
|
80
|
+
this.error(`Shard file must contain a JSON array: ${shardFilePath}`);
|
|
81
|
+
}
|
|
82
|
+
const allowed = new Set(shardIds);
|
|
83
|
+
const beforeCount = Object.keys(testDurations).length;
|
|
84
|
+
for (const testId of Object.keys(testDurations)) {
|
|
85
|
+
if (!allowed.has(testId)) {
|
|
86
|
+
delete testDurations[testId];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (flags.verbose) {
|
|
90
|
+
const afterCount = Object.keys(testDurations).length;
|
|
91
|
+
this.log(`Filtered by shard file: ${beforeCount} → ${afterCount} tests (removed ${beforeCount - afterCount})`);
|
|
92
|
+
}
|
|
63
93
|
if (flags.verbose) {
|
|
64
94
|
this.log(`Extracted timing for ${Object.keys(testDurations).length} tests`);
|
|
65
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-timing.js","sourceRoot":"","sources":["../../src/commands/extract-timing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,MAAM,CAAU,WAAW,GACzB,iDAAiD,CAAC;IAEpD,MAAM,CAAU,QAAQ,GAAG;QACzB,6GAA6G;QAC7G,mGAAmG;KACpG,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kCAAkC;SAChD,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,CAAC;SACX,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,yBAAyB;YACtC,
|
|
1
|
+
{"version":3,"file":"extract-timing.js","sourceRoot":"","sources":["../../src/commands/extract-timing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class FilterReport extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
'report-file': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
'output-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a test has an orchestrator-skip annotation ("Not in shard").
|
|
13
|
+
*/
|
|
14
|
+
private isOrchestratorSkipped;
|
|
15
|
+
/**
|
|
16
|
+
* Remove orchestrator-skipped entries at three levels:
|
|
17
|
+
* 1. Results: strip skipped results from tests with "Not in shard" annotation
|
|
18
|
+
* 2. Tests: remove tests with no remaining results
|
|
19
|
+
* 3. Specs/Suites: remove empty specs and prune empty suites
|
|
20
|
+
*/
|
|
21
|
+
private filterSuites;
|
|
22
|
+
private countSpecs;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=filter-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-report.d.ts","sourceRoot":"","sources":["../../src/commands/filter-report.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,OAAgB,WAAW,SACyC;IAEpE,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;MAgBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA2DpB,OAAO,CAAC,UAAU;CAYnB"}
|