@empiricalrun/playwright-utils 0.60.1 → 0.60.3
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/CHANGELOG.md +18 -0
- package/dist/api-worker-client.d.ts +3 -0
- package/dist/api-worker-client.d.ts.map +1 -1
- package/dist/api-worker-client.js +4 -0
- package/dist/generated/api-worker-openapi.d.ts +2192 -2202
- package/dist/generated/api-worker-openapi.d.ts.map +1 -1
- package/dist/reporter/attachment-cleanup.d.ts.map +1 -1
- package/dist/reporter/attachment-cleanup.js +11 -4
- package/dist/reporter/lifecycle-events.d.ts.map +1 -1
- package/dist/reporter/lifecycle-events.js +4 -0
- package/dist/reporter/parity-utils.d.ts.map +1 -1
- package/dist/reporter/parity-utils.js +4 -1
- package/dist/reporter/util.d.ts.map +1 -1
- package/dist/reporter/util.js +9 -24
- package/dist/telemetry.d.ts +6 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +37 -9
- package/dist/test/expect/visual.d.ts.map +1 -1
- package/dist/test/expect/visual.js +2 -2
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.js +1 -1
- package/package.json +6 -6
- package/upstream-oracle/README.md +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-cleanup.d.ts","sourceRoot":"","sources":["../../src/reporter/attachment-cleanup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attachment-cleanup.d.ts","sourceRoot":"","sources":["../../src/reporter/attachment-cleanup.ts"],"names":[],"mappings":"AAgEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAyC;IAEzD,YAAY,UAAU,GAAE,MAAmC,EAU1D;IAED;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,QAiBjD;IAED;;;OAGG;IACH,YAAY,CAAC,cAAc,EAAE,MAAM,QASlC;IAED,OAAO,CAAC,MAAM;IA4Bd,OAAO,CAAC,cAAc;IAStB,UAAU,SAaT;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAE3C;IAED,IAAI,KAAK;QAEL,eAAe;QACf,aAAa;QACb,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,SAAS;QACT,UAAU;MAEb;CACF"}
|
|
@@ -39,9 +39,13 @@ function getDiskUsage() {
|
|
|
39
39
|
return "unavailable";
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
+
// Where the test-run worker checks out the test repo.
|
|
43
|
+
const WORKER_REPO_DIR = "/app/source-repo";
|
|
42
44
|
function getDiskBreakdown() {
|
|
43
45
|
try {
|
|
44
|
-
|
|
46
|
+
// /tmp also holds browser profiles and download dirs that no attachment
|
|
47
|
+
// accounts for, so it is listed whole alongside its artifact dirs.
|
|
48
|
+
const output = (0, child_process_1.execSync)("du -sh test-results/.playwright-artifacts-* test-results/ blob-report/ blob-report-incremental/ playwright-report/ /tmp/playwright-artifacts-* /tmp 2>/dev/null | sort -rh", { encoding: "utf8", timeout: 8000, cwd: WORKER_REPO_DIR }).trim();
|
|
45
49
|
if (!output) {
|
|
46
50
|
return "none";
|
|
47
51
|
}
|
|
@@ -177,9 +181,12 @@ class AttachmentCleanup {
|
|
|
177
181
|
clearInterval(this._diskLogTimer);
|
|
178
182
|
this._diskLogTimer = null;
|
|
179
183
|
}
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
|
|
184
|
+
// One line per run, only on the worker: the only record of what filled the
|
|
185
|
+
// disk when a run hits ENOSPC. Local runs stay quiet.
|
|
186
|
+
if (!fs_1.default.existsSync(WORKER_REPO_DIR)) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
logger_1.logger.info(`[AttachmentCleanup] Summary: registered=${this._registeredCount}, pending=${this._pending.size}, uploaded=${this._uploadedCount}, evicted=${this._evictedCount} (${formatBytes(this._evictedBytes)}), totalSize=${formatBytes(this._totalSize)}, disk=${getDiskUsage()}, breakdown=${getDiskBreakdown()}`);
|
|
183
190
|
}
|
|
184
191
|
set onEvict(callback) {
|
|
185
192
|
this._onEvict = callback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/reporter/lifecycle-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAmBnC,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,SAAS,EAAE,CAwDb;AAGD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,MAAM,GACd,SAAS,CAgCX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAeX;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAoBb;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CA0Cb;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAgBX;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,SAAS,CAcX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,GACd,SAAS,
|
|
1
|
+
{"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/reporter/lifecycle-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAmBnC,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,SAAS,EAAE,CAwDb;AAGD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,MAAM,GACd,SAAS,CAgCX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAeX;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAoBb;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CA0Cb;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAgBX;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,SAAS,CAcX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,GACd,SAAS,CA4BX;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAqCb;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAW7D"}
|
|
@@ -245,7 +245,11 @@ function buildOnStepBeginEvent(test, result, step, resultIdMap, stepIdMap, rootD
|
|
|
245
245
|
id: stepId,
|
|
246
246
|
parentStepId,
|
|
247
247
|
title: step.title,
|
|
248
|
+
// subtitle and params are new in Playwright 1.63; undefined on older
|
|
249
|
+
// versions, which JSON serialization drops like upstream's blob does.
|
|
250
|
+
subtitle: step.subtitle,
|
|
248
251
|
category: step.category,
|
|
252
|
+
params: step.params,
|
|
249
253
|
startTime: step.startTime.getTime(),
|
|
250
254
|
// Relative to rootDir like every other location in the blob; the
|
|
251
255
|
// merged HTML report renders this path as-is.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parity-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/parity-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAiD3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAwED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,gBAAgB,GACrB,gBAAgB,CAclB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"parity-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/parity-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAiD3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAwED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,gBAAgB,GACrB,gBAAgB,CAclB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA+CzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAgDvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAYA;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EAAE,EACtB,SAAS,EAAE,SAAS,EAAE,GACrB,MAAM,EAAE,CASV"}
|
|
@@ -100,7 +100,10 @@ function stepSignatures(events) {
|
|
|
100
100
|
const location = params.step.location
|
|
101
101
|
? `${params.step.location.file}:${params.step.location.line}`
|
|
102
102
|
: "";
|
|
103
|
-
|
|
103
|
+
const { subtitle, params: stepParams } = params.step;
|
|
104
|
+
list.push(`${params.step.category}:${params.step.title}@${location}` +
|
|
105
|
+
(subtitle ? ` subtitle=${subtitle}` : "") +
|
|
106
|
+
(stepParams ? ` params=${JSON.stringify(stepParams)}` : ""));
|
|
104
107
|
signatures.set(key, list);
|
|
105
108
|
}
|
|
106
109
|
return signatures;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/reporter/util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EACL,UAAU,IAAI,oBAAoB,EAElC,QAAQ,EACT,MAAM,2BAA2B,CAAC;AA0BnC,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqB7D;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,SAAS,UAQhC;AAED,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5E,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CA6CD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ;IAqBlD,MAAM;IACN,WAAW;EAEd;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/reporter/util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EACL,UAAU,IAAI,oBAAoB,EAElC,QAAQ,EACT,MAAM,2BAA2B,CAAC;AA0BnC,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqB7D;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,SAAS,UAQhC;AAED,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5E,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CA6CD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ;IAqBlD,MAAM;IACN,WAAW;EAEd;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GACnC,GAAG,CAIL;AAED,wBAAsB,gCAAgC,CACpD,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,iBAoFjB;AAED;;;;;;;;;;GAUG;AACH;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,mBAAmB,EAAE,MAAM,EAC3B,QAAQ,EAAE,MAAM,EAChB,cAAc,GAAE,OAAe,GAC9B,iBAAiB,CAgBnB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,6CA+BlB"}
|
package/dist/reporter/util.js
CHANGED
|
@@ -15,11 +15,11 @@ exports.checkFileExistsAsync = checkFileExistsAsync;
|
|
|
15
15
|
exports.updateSummaryJsonAttachmentPaths = updateSummaryJsonAttachmentPaths;
|
|
16
16
|
const zip_1 = require("@empiricalrun/r2-uploader/zip");
|
|
17
17
|
const reporter_1 = require("@empiricalrun/reporter");
|
|
18
|
-
const async_retry_1 = __importDefault(require("async-retry"));
|
|
19
18
|
const crypto_1 = __importDefault(require("crypto"));
|
|
20
19
|
const fs_1 = __importDefault(require("fs"));
|
|
21
20
|
const mime_1 = __importDefault(require("mime"));
|
|
22
21
|
const path_1 = __importDefault(require("path"));
|
|
22
|
+
const api_worker_client_1 = require("../api-worker-client");
|
|
23
23
|
const logger_1 = require("../logger");
|
|
24
24
|
// Mirrors https://github.com/microsoft/playwright/blob/main/packages/playwright-core/src/tools/cli-client/program.ts#L440
|
|
25
25
|
function calculateSha1(buffer) {
|
|
@@ -125,40 +125,25 @@ function suitesAndProjectForTest(test) {
|
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
127
|
async function sendTestCaseUpdateToDashboard(params) {
|
|
128
|
-
const DOMAIN = process.env.DASHBOARD_DOMAIN || "https://api.empirical.run";
|
|
129
128
|
try {
|
|
130
129
|
const requestBody = {
|
|
131
130
|
name: "test_case_run_end",
|
|
132
131
|
data: {
|
|
133
132
|
...params,
|
|
133
|
+
result: {
|
|
134
|
+
...params.result,
|
|
135
|
+
startTime: params.result.startTime instanceof Date
|
|
136
|
+
? params.result.startTime.toISOString()
|
|
137
|
+
: params.result.startTime,
|
|
138
|
+
},
|
|
134
139
|
},
|
|
135
140
|
};
|
|
136
|
-
if (!DOMAIN) {
|
|
137
|
-
console.warn("No dashboard domain found. Skipping send message to dashboard.");
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
141
|
if (!process.env.EMPIRICALRUN_API_KEY) {
|
|
141
142
|
console.log("No API token found. Skipping send message to dashboard.");
|
|
142
143
|
return;
|
|
143
144
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
method: "PUT",
|
|
147
|
-
headers: {
|
|
148
|
-
"Content-Type": "application/json",
|
|
149
|
-
Authorization: `Bearer ${process.env.EMPIRICALRUN_API_KEY}`,
|
|
150
|
-
},
|
|
151
|
-
body: JSON.stringify(requestBody),
|
|
152
|
-
});
|
|
153
|
-
if (!response.ok) {
|
|
154
|
-
throw new Error(`Failed to publish test case diagnois: ${response.status}`);
|
|
155
|
-
}
|
|
156
|
-
}, {
|
|
157
|
-
retries: 3,
|
|
158
|
-
minTimeout: 1000,
|
|
159
|
-
maxTimeout: 60_000,
|
|
160
|
-
factor: 3,
|
|
161
|
-
});
|
|
145
|
+
const client = new api_worker_client_1.ApiWorkerClient();
|
|
146
|
+
await client.putTestCaseRunEndEvent(requestBody);
|
|
162
147
|
logger_1.logger.debug("Successfully sent test case update to dashboard");
|
|
163
148
|
}
|
|
164
149
|
catch (e) {
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -24,5 +24,11 @@ export declare function trackOverlayDismissed(opts: {
|
|
|
24
24
|
output: number;
|
|
25
25
|
};
|
|
26
26
|
}): Promise<void>;
|
|
27
|
+
export declare function trackLLMResponseGenerated(opts: {
|
|
28
|
+
modelName: string;
|
|
29
|
+
tokensInput: number;
|
|
30
|
+
tokensOutput: number;
|
|
31
|
+
chatSessionSource: string;
|
|
32
|
+
}): Promise<void>;
|
|
27
33
|
export {};
|
|
28
34
|
//# sourceMappingURL=telemetry.d.ts.map
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAUtE,wBAAsB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBrE;AAED,UAAU,uBAAuB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhB;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhB"}
|
package/dist/telemetry.js
CHANGED
|
@@ -3,20 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.trackEvent = trackEvent;
|
|
4
4
|
exports.trackReportUpload = trackReportUpload;
|
|
5
5
|
exports.trackOverlayDismissed = trackOverlayDismissed;
|
|
6
|
-
|
|
6
|
+
exports.trackLLMResponseGenerated = trackLLMResponseGenerated;
|
|
7
|
+
const api_worker_client_1 = require("./api-worker-client");
|
|
8
|
+
// Events go to api-worker on the project API key the run already carries, so
|
|
9
|
+
// a runner needs no telemetry secret. Best-effort: no key means no telemetry,
|
|
10
|
+
// and a failed send is never retried or surfaced to the test.
|
|
7
11
|
async function trackEvent(event) {
|
|
8
|
-
|
|
9
|
-
if (!apiKey) {
|
|
12
|
+
if (!process.env.EMPIRICALRUN_API_KEY) {
|
|
10
13
|
return;
|
|
11
14
|
}
|
|
12
15
|
try {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const { client } = new api_worker_client_1.ApiWorkerClient();
|
|
17
|
+
const { response } = await client.POST("/api/v1/telemetry/track", {
|
|
18
|
+
body: {
|
|
19
|
+
// api-worker accepts only test-run events; the ones sent from here
|
|
20
|
+
// are all on its allowlist.
|
|
21
|
+
name: event.name,
|
|
22
|
+
properties: event.properties,
|
|
23
|
+
timestamp: event.timestamp?.toISOString(),
|
|
18
24
|
},
|
|
19
|
-
|
|
25
|
+
// Plain fetch, not the client's retrying one: a test should not wait
|
|
26
|
+
// out backoff for a metric.
|
|
27
|
+
fetch,
|
|
28
|
+
signal: AbortSignal.timeout(10_000),
|
|
20
29
|
});
|
|
21
30
|
if (!response.ok) {
|
|
22
31
|
throw new Error(`Telemetry request failed: ${response.status}`);
|
|
@@ -64,3 +73,22 @@ async function trackOverlayDismissed(opts) {
|
|
|
64
73
|
},
|
|
65
74
|
});
|
|
66
75
|
}
|
|
76
|
+
async function trackLLMResponseGenerated(opts) {
|
|
77
|
+
await trackEvent({
|
|
78
|
+
name: "llm_response_generated",
|
|
79
|
+
properties: {
|
|
80
|
+
environment: process.env.TEST_RUN_ENVIRONMENT || "unknown",
|
|
81
|
+
model_name: opts.modelName,
|
|
82
|
+
chat_session_id: undefined,
|
|
83
|
+
chat_session_source: opts.chatSessionSource,
|
|
84
|
+
tokens_input: opts.tokensInput,
|
|
85
|
+
tokens_output: opts.tokensOutput,
|
|
86
|
+
cost_input: 0,
|
|
87
|
+
cost_output: 0,
|
|
88
|
+
tokens_cache_read: 0,
|
|
89
|
+
tokens_cache_creation: 0,
|
|
90
|
+
project_repo_name: process.env.GIT_REPO_NAME ?? "unknown",
|
|
91
|
+
repo_name: process.env.GIT_REPO_NAME ?? "unknown",
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual.d.ts","sourceRoot":"","sources":["../../../src/test/expect/visual.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"visual.d.ts","sourceRoot":"","sources":["../../../src/test/expect/visual.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAY,MAAM,kBAAkB,CAAC;AAWhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA0E7C,wBAAsB,WAAW,CAC/B,MAAM,EAAE,IAAI,GAAG,OAAO,EACtB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,CAAC,CA2FxB"}
|
|
@@ -4,13 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.toLookRight = toLookRight;
|
|
7
|
-
const llm_1 = require("@empiricalrun/llm");
|
|
8
7
|
const vision_1 = require("@empiricalrun/llm/vision");
|
|
9
8
|
const fs_1 = __importDefault(require("fs"));
|
|
10
9
|
const openai_1 = __importDefault(require("openai"));
|
|
11
10
|
const os_1 = __importDefault(require("os"));
|
|
12
11
|
const path_1 = __importDefault(require("path"));
|
|
13
12
|
const api_worker_client_1 = require("../../api-worker-client");
|
|
13
|
+
const telemetry_1 = require("../../telemetry");
|
|
14
14
|
const mouse_pointer_1 = require("../scripts/mouse-pointer");
|
|
15
15
|
function getCallerLine() {
|
|
16
16
|
const stack = new Error().stack;
|
|
@@ -145,7 +145,7 @@ go through the reasons and pick the one that made you choose Fail`,
|
|
|
145
145
|
],
|
|
146
146
|
});
|
|
147
147
|
const response = completion.choices[0]?.message;
|
|
148
|
-
await (0,
|
|
148
|
+
await (0, telemetry_1.trackLLMResponseGenerated)({
|
|
149
149
|
modelName: model,
|
|
150
150
|
tokensInput: completion.usage?.prompt_tokens ?? 0,
|
|
151
151
|
tokensOutput: completion.usage?.completion_tokens ?? 0,
|
|
@@ -94,7 +94,7 @@ class OverlayDismissAgent {
|
|
|
94
94
|
// and we need app to be able to use page.pause for agent actions.
|
|
95
95
|
// Currently, page.pause does not cleanup properly, causing it to work
|
|
96
96
|
// only once in a particular test run.
|
|
97
|
-
// Ran into this here: https://
|
|
97
|
+
// Ran into this here: https://empirical.run/quizizz-tests/sessions/2825
|
|
98
98
|
prefersElementFromPointCodegen: true,
|
|
99
99
|
// Overlay dismissal doesn't need page navigation — the overlay is
|
|
100
100
|
// already on the current page. Including page_goto causes the model
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@empiricalrun/playwright-utils",
|
|
3
|
-
"version": "0.60.
|
|
3
|
+
"version": "0.60.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"author": "Empirical Team <hey@empirical.run>",
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@playwright/test": "1.
|
|
34
|
+
"@playwright/test": "1.63.0",
|
|
35
35
|
"@types/async-retry": "^1.4.8",
|
|
36
36
|
"@types/authenticator": "^1.1.4",
|
|
37
37
|
"@types/babel__code-frame": "^7.0.6",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"@types/node": "^22",
|
|
41
41
|
"@types/serve-handler": "^6.1.4",
|
|
42
42
|
"openapi-typescript": "7.6.1",
|
|
43
|
-
"playwright-core": "1.
|
|
43
|
+
"playwright-core": "1.63.0",
|
|
44
44
|
"serve-handler": "^6.1.6",
|
|
45
|
-
"@empiricalrun/shared-types": "0.
|
|
45
|
+
"@empiricalrun/shared-types": "0.20.0"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@babel/code-frame": "^7.24.7",
|
|
@@ -55,10 +55,10 @@
|
|
|
55
55
|
"puppeteer-extra-plugin-recaptcha": "^3.6.8",
|
|
56
56
|
"rimraf": "^6.0.1",
|
|
57
57
|
"ts-morph": "^23.0.0",
|
|
58
|
-
"@empiricalrun/cua": "^0.4.
|
|
58
|
+
"@empiricalrun/cua": "^0.4.3",
|
|
59
59
|
"@empiricalrun/llm": "^0.27.1",
|
|
60
60
|
"@empiricalrun/r2-uploader": "^0.10.2",
|
|
61
|
-
"@empiricalrun/reporter": "^0.30.
|
|
61
|
+
"@empiricalrun/reporter": "^0.30.1"
|
|
62
62
|
},
|
|
63
63
|
"scripts": {
|
|
64
64
|
"dev": "pnpm gen:api-worker-openapi && tsgo --build --watch",
|
|
@@ -64,7 +64,7 @@ once each gets its own `--output` dir instead of sharing
|
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
66
|
# One-time: clone + bootstrap upstream at the pinned tag (~10 min)
|
|
67
|
-
git clone --depth 1 --branch v1.
|
|
67
|
+
git clone --depth 1 --branch v1.63.0 https://github.com/microsoft/playwright.git ~/playwright-upstream
|
|
68
68
|
cd ~/playwright-upstream && npm ci && npm run build
|
|
69
69
|
|
|
70
70
|
# Build IBR, then run the oracle
|