@nsxbet/playwright-orchestrator 0.5.3 → 0.6.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.
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Playwright Orchestrator Fixture
3
+ *
4
+ * A Playwright fixture that filters tests based on a JSON shard file.
5
+ * This provides actual test skipping (unlike the reporter which only adds metadata).
6
+ *
7
+ * Usage in your test setup file (e.g., tests/setup.ts):
8
+ * ```typescript
9
+ * import { test } from '@playwright/test';
10
+ * import { setupOrchestratorFilter } from '@nsxbet/playwright-orchestrator/fixture';
11
+ *
12
+ * setupOrchestratorFilter(test);
13
+ * ```
14
+ *
15
+ * Environment variables:
16
+ * - ORCHESTRATOR_SHARD_FILE: Path to JSON file with array of test IDs
17
+ * - ORCHESTRATOR_DEBUG: Set to "1" to enable debug logging
18
+ *
19
+ * @module @nsxbet/playwright-orchestrator/fixture
20
+ */
21
+ import type { TestType } from '@playwright/test';
22
+ /**
23
+ * Sets up the orchestrator filter as a beforeEach hook.
24
+ * This will skip tests that are not in the current shard.
25
+ *
26
+ * @param test - The test object from @playwright/test
27
+ */
28
+ export declare function setupOrchestratorFilter<T extends object, W extends object>(test: TestType<T, W>): void;
29
+ /**
30
+ * Check if a test should run based on the shard file.
31
+ * Can be called manually in individual tests.
32
+ *
33
+ * @param testInfo - The testInfo object from Playwright
34
+ * @returns true if the test should run, false if it should be skipped
35
+ */
36
+ export declare function shouldRunTest(testInfo: {
37
+ file: string;
38
+ titlePath: string[];
39
+ project: {
40
+ name: string;
41
+ };
42
+ }): boolean;
43
+ //# sourceMappingURL=fixture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAmDjD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EACxE,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,IAAI,CAoBN;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B,GAAG,OAAO,CAWV"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Playwright Orchestrator Fixture
3
+ *
4
+ * A Playwright fixture that filters tests based on a JSON shard file.
5
+ * This provides actual test skipping (unlike the reporter which only adds metadata).
6
+ *
7
+ * Usage in your test setup file (e.g., tests/setup.ts):
8
+ * ```typescript
9
+ * import { test } from '@playwright/test';
10
+ * import { setupOrchestratorFilter } from '@nsxbet/playwright-orchestrator/fixture';
11
+ *
12
+ * setupOrchestratorFilter(test);
13
+ * ```
14
+ *
15
+ * Environment variables:
16
+ * - ORCHESTRATOR_SHARD_FILE: Path to JSON file with array of test IDs
17
+ * - ORCHESTRATOR_DEBUG: Set to "1" to enable debug logging
18
+ *
19
+ * @module @nsxbet/playwright-orchestrator/fixture
20
+ */
21
+ import * as fs from 'node:fs';
22
+ import * as path from 'node:path';
23
+ // Cache the shard file to avoid re-reading on every test
24
+ let cachedAllowedTestIds = null;
25
+ let cacheInitialized = false;
26
+ function loadShardFile() {
27
+ if (cacheInitialized)
28
+ return cachedAllowedTestIds;
29
+ cacheInitialized = true;
30
+ const shardFile = process.env.ORCHESTRATOR_SHARD_FILE;
31
+ if (!shardFile || !fs.existsSync(shardFile)) {
32
+ if (process.env.ORCHESTRATOR_DEBUG === '1') {
33
+ console.log('[Orchestrator] No shard file, running all tests');
34
+ }
35
+ return null;
36
+ }
37
+ try {
38
+ const testIds = JSON.parse(fs.readFileSync(shardFile, 'utf-8'));
39
+ cachedAllowedTestIds = new Set(testIds);
40
+ console.log(`[Orchestrator] Loaded ${cachedAllowedTestIds.size} tests for this shard`);
41
+ return cachedAllowedTestIds;
42
+ }
43
+ catch (error) {
44
+ console.error('[Orchestrator] Failed to load shard file:', error);
45
+ throw error;
46
+ }
47
+ }
48
+ function buildTestId(filePath, titlePath, projectName) {
49
+ const file = path.relative(process.cwd(), filePath).replace(/\\/g, '/');
50
+ const fileName = path.basename(filePath);
51
+ // Filter titlePath to exclude project name, filename, and empty strings
52
+ const filteredTitles = titlePath.filter((title) => {
53
+ if (!title || title === '')
54
+ return false;
55
+ if (title === projectName)
56
+ return false;
57
+ if (title === fileName)
58
+ return false;
59
+ return true;
60
+ });
61
+ return [file, ...filteredTitles].join('::');
62
+ }
63
+ /**
64
+ * Sets up the orchestrator filter as a beforeEach hook.
65
+ * This will skip tests that are not in the current shard.
66
+ *
67
+ * @param test - The test object from @playwright/test
68
+ */
69
+ export function setupOrchestratorFilter(test) {
70
+ // biome-ignore lint/correctness/noEmptyPattern: Playwright requires empty destructuring for fixtures
71
+ test.beforeEach(async ({}, testInfo) => {
72
+ const allowedTestIds = loadShardFile();
73
+ if (allowedTestIds) {
74
+ const testId = buildTestId(testInfo.file, testInfo.titlePath, testInfo.project.name);
75
+ if (!allowedTestIds.has(testId)) {
76
+ if (process.env.ORCHESTRATOR_DEBUG === '1') {
77
+ console.log(`[Orchestrator Skip] ${testId}`);
78
+ }
79
+ test.skip(true, 'Not in shard');
80
+ }
81
+ }
82
+ });
83
+ }
84
+ /**
85
+ * Check if a test should run based on the shard file.
86
+ * Can be called manually in individual tests.
87
+ *
88
+ * @param testInfo - The testInfo object from Playwright
89
+ * @returns true if the test should run, false if it should be skipped
90
+ */
91
+ export function shouldRunTest(testInfo) {
92
+ const allowedTestIds = loadShardFile();
93
+ if (!allowedTestIds)
94
+ return true;
95
+ const testId = buildTestId(testInfo.file, testInfo.titlePath, testInfo.project.name);
96
+ return allowedTestIds.has(testId);
97
+ }
98
+ //# sourceMappingURL=fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,yDAAyD;AACzD,IAAI,oBAAoB,GAAuB,IAAI,CAAC;AACpD,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B,SAAS,aAAa;IACpB,IAAI,gBAAgB;QAAE,OAAO,oBAAoB,CAAC;IAElD,gBAAgB,GAAG,IAAI,CAAC;IACxB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAEtD,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAChE,oBAAoB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CACT,yBAAyB,oBAAoB,CAAC,IAAI,uBAAuB,CAC1E,CAAC;QACF,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;QAClE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,QAAgB,EAChB,SAAmB,EACnB,WAAoB;IAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,wEAAwE;IACxE,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,KAAK,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAoB;IAEpB,qGAAqG;IACrG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;QACrC,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;QAEvC,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,WAAW,CACxB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,OAAO,CAAC,IAAI,CACtB,CAAC;YAEF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;gBAC/C,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAI7B;IACC,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;IACvC,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,MAAM,GAAG,WAAW,CACxB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,OAAO,CAAC,IAAI,CACtB,CAAC;IAEF,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,oBAAqB,YAAW,QAAQ;IAC3D,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,KAAK,CAA0C;IAEvD,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK;IAsB1C,WAAW,CAAC,IAAI,EAAE,QAAQ;IAa1B;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;CAiBpB"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,oBAAqB,YAAW,QAAQ;IAC3D,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,KAAK,CAA0C;IAEvD,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK;IAsB1C,WAAW,CAAC,IAAI,EAAE,QAAQ;IAa1B;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;CAsBpB"}
package/dist/reporter.js CHANGED
@@ -72,13 +72,21 @@ export default class OrchestratorReporter {
72
72
  .relative(process.cwd(), test.location.file)
73
73
  .replace(/\\/g, '/');
74
74
  const fileName = path.basename(test.location.file);
75
- // Filter titlePath to exclude project name and filename
75
+ // Filter titlePath to exclude project name, filename, and empty strings
76
76
  // titlePath typically starts with [projectName, fileName, ...describes, testTitle]
77
77
  const titlePath = test.titlePath();
78
+ const projectName = test.parent?.project()?.name;
78
79
  const filteredTitles = titlePath.filter((title) => {
79
- // Skip if it's the project name (first element, usually matches project config)
80
+ // Skip empty strings
81
+ if (!title || title === '')
82
+ return false;
83
+ // Skip if it's the project name
84
+ if (title === projectName)
85
+ return false;
80
86
  // Skip if it matches the filename
81
- return title !== fileName && title !== test.parent?.project()?.name;
87
+ if (title === fileName)
88
+ return false;
89
+ return true;
82
90
  });
83
91
  return [file, ...filteredTitles].join('::');
84
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAQlC,MAAM,CAAC,OAAO,OAAO,oBAAoB;IAC/B,cAAc,GAAuB,IAAI,CAAC;IAC1C,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;IAEvD,OAAO,CAAC,OAAmB,EAAE,MAAa;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAEtD,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YACjE,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CACT,kBAAkB,IAAI,CAAC,cAAc,CAAC,IAAI,uBAAuB,CAClE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,WAAW,CAAC,IAAc;QACxB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACK,WAAW,CAAC,IAAc;QAChC,MAAM,IAAI,GAAG,IAAI;aACd,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;aAC3C,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEnD,wDAAwD;QACxD,mFAAmF;QACnF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAChD,gFAAgF;YAChF,kCAAkC;YAClC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nsxbet/playwright-orchestrator",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "description": "Intelligent Playwright test distribution across CI shards using historical timing data",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -15,6 +15,11 @@
15
15
  "types": "./dist/reporter.d.ts",
16
16
  "import": "./dist/reporter.js",
17
17
  "require": "./dist/reporter.js"
18
+ },
19
+ "./fixture": {
20
+ "types": "./dist/fixture.d.ts",
21
+ "import": "./dist/fixture.js",
22
+ "require": "./dist/fixture.js"
18
23
  }
19
24
  },
20
25
  "bin": {