@kinora/reporter 0.9.0 → 0.11.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/dist/index.d.mts +7 -0
- package/dist/index.mjs +29 -7
- package/package.json +7 -7
package/dist/index.d.mts
CHANGED
|
@@ -29,6 +29,12 @@ export interface KinoraReporterOptions {
|
|
|
29
29
|
* Playwright already embeds them in the trace.zip).
|
|
30
30
|
*/
|
|
31
31
|
uploadAttachments?: AttachmentKind[];
|
|
32
|
+
/**
|
|
33
|
+
* Sharded runs (`--shard`): the uploads of every shard of one CI run are assembled into a single
|
|
34
|
+
* kinora run. Shards are grouped by this key, defaulting to env KINORA_GROUP_KEY, then the CI run
|
|
35
|
+
* (GITHUB_RUN_ID / CI_PIPELINE_ID). `false` uploads each shard as its own run.
|
|
36
|
+
*/
|
|
37
|
+
groupKey?: string | false;
|
|
32
38
|
}
|
|
33
39
|
export default class KinoraReporter implements Reporter {
|
|
34
40
|
private readonly options;
|
|
@@ -37,6 +43,7 @@ export default class KinoraReporter implements Reporter {
|
|
|
37
43
|
constructor(options: KinoraReporterOptions);
|
|
38
44
|
onBegin(config: FullConfig, suite: Suite): void;
|
|
39
45
|
onEnd(result: FullResult): Promise<void>;
|
|
46
|
+
private prCommentLabel;
|
|
40
47
|
private maybePostPrComment;
|
|
41
48
|
}
|
|
42
49
|
//#endregion
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync, statSync } from "node:fs";
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import process from "node:process";
|
|
4
|
-
import { DEFAULT_KINORA_URL, DEFAULT_UPLOAD_ATTACHMENTS, IngestError, a11yFromScans, createIngestClient, detectCiEnv, effectiveAttachments, flakyTestsOf, isUploadableAttachment, makeTestKey, parseAxeScan, postPrComment, resolvePrContext } from "@kinora/core";
|
|
4
|
+
import { DEFAULT_KINORA_URL, DEFAULT_UPLOAD_ATTACHMENTS, IngestError, a11yFromScans, createIngestClient, detectCiEnv, effectiveAttachments, flakyTestsOf, isUploadableAttachment, makeTestKey, parseAxeScan, postPrComment, resolvePrContext, resolveShardGroup } from "@kinora/core";
|
|
5
5
|
//#region src/index.ts
|
|
6
6
|
function identity(test) {
|
|
7
7
|
let file = "";
|
|
@@ -104,6 +104,11 @@ var KinoraReporter = class {
|
|
|
104
104
|
}
|
|
105
105
|
const tests = (this.suite?.allTests() ?? []).map(toNormTest);
|
|
106
106
|
const detected = detectCiEnv(process.env);
|
|
107
|
+
const shard = this.config?.shard;
|
|
108
|
+
const group = shard && this.options.groupKey !== false ? resolveShardGroup(process.env, {
|
|
109
|
+
groupKey: this.options.groupKey,
|
|
110
|
+
leg: this.prCommentLabel()
|
|
111
|
+
}) : void 0;
|
|
107
112
|
const payload = {
|
|
108
113
|
project: {
|
|
109
114
|
slug: this.options.project.slug,
|
|
@@ -115,7 +120,14 @@ var KinoraReporter = class {
|
|
|
115
120
|
counts: countsOf(tests),
|
|
116
121
|
playwrightVersion: this.config?.version,
|
|
117
122
|
git: this.options.git ?? detected.git,
|
|
118
|
-
ci: this.options.ci ?? detected.ci
|
|
123
|
+
ci: this.options.ci ?? detected.ci,
|
|
124
|
+
...shard && group && {
|
|
125
|
+
...group,
|
|
126
|
+
shard: {
|
|
127
|
+
current: shard.current,
|
|
128
|
+
total: shard.total
|
|
129
|
+
}
|
|
130
|
+
}
|
|
119
131
|
},
|
|
120
132
|
tests
|
|
121
133
|
};
|
|
@@ -143,20 +155,26 @@ var KinoraReporter = class {
|
|
|
143
155
|
console.warn(`[kinora] ${a.name} upload failed for ${t.testKey}:`, err instanceof Error ? err.message : err);
|
|
144
156
|
}
|
|
145
157
|
}
|
|
146
|
-
console.log(`[kinora] uploaded ${res.tests} tests + ${artifacts} artifacts (run ${res.runId})`);
|
|
158
|
+
console.log(`[kinora] uploaded ${res.tests} tests + ${artifacts} artifacts (run ${res.runId}${res.shardProgress ? `, ${res.shardProgress.landed} of ${res.shardProgress.total} shards` : ""})`);
|
|
147
159
|
await this.maybePostPrComment(payload, res);
|
|
148
160
|
} catch (err) {
|
|
149
161
|
if (err instanceof IngestError && err.status === 402) console.warn(`[kinora] ${err.message}`);
|
|
150
162
|
else console.error(`[kinora] upload failed:`, err instanceof Error ? err.message : err);
|
|
151
163
|
}
|
|
152
164
|
}
|
|
165
|
+
prCommentLabel() {
|
|
166
|
+
const opt = this.options.prComment;
|
|
167
|
+
return typeof opt === "object" ? opt.label : void 0;
|
|
168
|
+
}
|
|
153
169
|
async maybePostPrComment(payload, res) {
|
|
154
170
|
if (!this.options.prComment) return;
|
|
155
171
|
const opt = this.options.prComment;
|
|
156
|
-
const label =
|
|
172
|
+
const label = this.prCommentLabel();
|
|
157
173
|
const policy = typeof opt === "object" ? opt.policy : void 0;
|
|
174
|
+
const grouped = !!payload.run.groupKey;
|
|
175
|
+
if (grouped && !res.shardProgress) return;
|
|
158
176
|
try {
|
|
159
|
-
const env = this.config?.shard ? {
|
|
177
|
+
const env = this.config?.shard && !grouped ? {
|
|
160
178
|
...process.env,
|
|
161
179
|
__KINORA_IS_SHARD: "1"
|
|
162
180
|
} : process.env;
|
|
@@ -174,9 +192,13 @@ var KinoraReporter = class {
|
|
|
174
192
|
label,
|
|
175
193
|
runUrl: res.runUrl,
|
|
176
194
|
ciRunUrl: payload.run.ci?.runUrl,
|
|
177
|
-
counts: payload.run.counts,
|
|
195
|
+
counts: res.counts ?? payload.run.counts,
|
|
178
196
|
regression: res.regression,
|
|
179
|
-
flaky: flakyTestsOf(payload.tests)
|
|
197
|
+
flaky: res.flaky ?? flakyTestsOf(payload.tests),
|
|
198
|
+
...res.shardProgress && { shards: {
|
|
199
|
+
runId: res.runId,
|
|
200
|
+
...res.shardProgress
|
|
201
|
+
} }
|
|
180
202
|
}, policy ?? "always");
|
|
181
203
|
if (outcome !== "skipped") console.warn(`[kinora] PR comment ${outcome}`);
|
|
182
204
|
} catch (err) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kinora/reporter",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.0",
|
|
5
5
|
"description": "Playwright reporter that uploads test results to a kinora server",
|
|
6
6
|
"author": "Joris Gallot",
|
|
7
7
|
"license": "MIT",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"access": "public"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@axe-core/playwright": ">=4.
|
|
38
|
+
"@axe-core/playwright": ">=4.14.0",
|
|
39
39
|
"@playwright/test": ">=1.40.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependenciesMeta": {
|
|
@@ -44,16 +44,16 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@kinora/core": "0.
|
|
47
|
+
"@kinora/core": "0.13.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@axe-core/playwright": "^4.
|
|
51
|
-
"@playwright/test": "^1.64.
|
|
50
|
+
"@axe-core/playwright": "^4.14.0",
|
|
51
|
+
"@playwright/test": "^1.64.1",
|
|
52
52
|
"@types/node": "^26.6.5",
|
|
53
|
-
"@vitest/coverage-v8": "^5.0.
|
|
53
|
+
"@vitest/coverage-v8": "^5.0.5",
|
|
54
54
|
"tsdown": "^0.23.1",
|
|
55
55
|
"typescript": "~6.0.3",
|
|
56
|
-
"vitest": "^5.0.
|
|
56
|
+
"vitest": "^5.0.5"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|
|
59
59
|
"build": "tsdown",
|