@ciach/playwright-private-reporter 0.1.1 → 0.1.2
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 +49 -1
- package/dist/cjs/cli/generateReport.d.ts.map +1 -1
- package/dist/cjs/cli/generateReport.js +41 -2
- package/dist/cjs/cli/generateReport.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/reporter/summary.d.ts.map +1 -1
- package/dist/cjs/reporter/summary.js +5 -0
- package/dist/cjs/reporter/summary.js.map +1 -1
- package/dist/cjs/templates/shared.d.ts +4 -0
- package/dist/cjs/templates/shared.d.ts.map +1 -0
- package/dist/cjs/templates/shared.js +20 -0
- package/dist/cjs/templates/shared.js.map +1 -0
- package/dist/cjs/templates/summary.classic.d.ts +3 -0
- package/dist/cjs/templates/summary.classic.d.ts.map +1 -0
- package/dist/cjs/templates/summary.classic.js +60 -0
- package/dist/cjs/templates/summary.classic.js.map +1 -0
- package/dist/cjs/templates/summary.html.d.ts +5 -2
- package/dist/cjs/templates/summary.html.d.ts.map +1 -1
- package/dist/cjs/templates/summary.html.js +32 -58
- package/dist/cjs/templates/summary.html.js.map +1 -1
- package/dist/cjs/templates/summary.modern.d.ts +3 -0
- package/dist/cjs/templates/summary.modern.d.ts.map +1 -0
- package/dist/cjs/templates/summary.modern.js +543 -0
- package/dist/cjs/templates/summary.modern.js.map +1 -0
- package/dist/cjs/types/schema.d.ts +22 -0
- package/dist/cjs/types/schema.d.ts.map +1 -1
- package/dist/esm/cli/generateReport.d.ts.map +1 -1
- package/dist/esm/cli/generateReport.js +41 -3
- package/dist/esm/cli/generateReport.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/reporter/summary.d.ts.map +1 -1
- package/dist/esm/reporter/summary.js +5 -0
- package/dist/esm/reporter/summary.js.map +1 -1
- package/dist/esm/templates/shared.d.ts +4 -0
- package/dist/esm/templates/shared.d.ts.map +1 -0
- package/dist/esm/templates/shared.js +15 -0
- package/dist/esm/templates/shared.js.map +1 -0
- package/dist/esm/templates/summary.classic.d.ts +3 -0
- package/dist/esm/templates/summary.classic.d.ts.map +1 -0
- package/dist/esm/templates/summary.classic.js +57 -0
- package/dist/esm/templates/summary.classic.js.map +1 -0
- package/dist/esm/templates/summary.html.d.ts +5 -2
- package/dist/esm/templates/summary.html.d.ts.map +1 -1
- package/dist/esm/templates/summary.html.js +30 -58
- package/dist/esm/templates/summary.html.js.map +1 -1
- package/dist/esm/templates/summary.modern.d.ts +3 -0
- package/dist/esm/templates/summary.modern.d.ts.map +1 -0
- package/dist/esm/templates/summary.modern.js +540 -0
- package/dist/esm/templates/summary.modern.js.map +1 -0
- package/dist/esm/types/schema.d.ts +22 -0
- package/dist/esm/types/schema.d.ts.map +1 -1
- package/examples/playwright.config.ts +1 -0
- package/examples/summary-template-minimal.cjs +84 -0
- package/examples/summary-template-ops.cjs +131 -0
- package/examples/summary-template.cjs +63 -0
- package/examples/summary-templates.md +111 -0
- package/package.json +1 -1
- package/schemas/run.schema.json +191 -42
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ Jenkins-first Playwright reporting utilities.
|
|
|
6
6
|
|
|
7
7
|
- A `withPrivateReporter()` config wrapper for Playwright projects.
|
|
8
8
|
- A `PrivateReporter` implementation that emits `run.json`, `failures.json`, and `health.json`.
|
|
9
|
-
- A `generateReport` CLI that creates `summary.md` and a static `summary.html` suitable for Jenkins HTML Publisher.
|
|
9
|
+
- A `generateReport` CLI that creates `summary.md` and a themeable static `summary.html` suitable for Jenkins HTML Publisher.
|
|
10
10
|
- JSON schemas and examples for Jenkins + Playwright adoption.
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
@@ -43,6 +43,7 @@ export default withPrivateReporter(
|
|
|
43
43
|
{
|
|
44
44
|
projectName: 'payments-ui',
|
|
45
45
|
outputDir: 'artifacts',
|
|
46
|
+
summaryTheme: 'modern',
|
|
46
47
|
enableHistoryDiff: true,
|
|
47
48
|
},
|
|
48
49
|
);
|
|
@@ -102,6 +103,49 @@ After a CI run, expect these artifacts:
|
|
|
102
103
|
- `artifacts/internal-report/summary.md`
|
|
103
104
|
- `artifacts/internal-report/summary.html`
|
|
104
105
|
|
|
106
|
+
## Themes and custom templates
|
|
107
|
+
|
|
108
|
+
The HTML summary renderer is presentation-only. The Playwright reporter still writes JSON first, and `generateReport()` turns that data into HTML later.
|
|
109
|
+
|
|
110
|
+
Built-in themes:
|
|
111
|
+
|
|
112
|
+
- `classic`: compact version of the original summary.
|
|
113
|
+
- `modern`: richer default with visual hierarchy, cards, collapsible failure groups, and improved artifact navigation.
|
|
114
|
+
|
|
115
|
+
Set a built-in theme in config or when calling `generateReport()`:
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
withPrivateReporter(defineConfig({}), {
|
|
119
|
+
projectName: 'payments-ui',
|
|
120
|
+
summaryTheme: 'modern',
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
For full control, point `summaryTemplatePath` at a local `.js`, `.mjs`, or `.cjs` module that exports either `default` or `renderSummary(context)`.
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
withPrivateReporter(defineConfig({}), {
|
|
128
|
+
projectName: 'payments-ui',
|
|
129
|
+
summaryTemplatePath: './reporting/summary-template.mjs',
|
|
130
|
+
});
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
The renderer receives `title`, `theme`, `runSummary`, `failuresSummary`, `diff`, and `artifactLinks`.
|
|
134
|
+
|
|
135
|
+
See `examples/summary-templates.md` for the full template guide and the three ready-to-copy examples. You can also import the built-ins from the package and wrap them:
|
|
136
|
+
|
|
137
|
+
```ts
|
|
138
|
+
import { renderModernSummaryHtml } from '@ciach/playwright-private-reporter';
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
If you invoke the standalone CLI directly, you can also override presentation with env vars:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
PRIVATE_REPORT_SUMMARY_THEME=modern \
|
|
145
|
+
PRIVATE_REPORT_SUMMARY_TEMPLATE_PATH=./reporting/summary-template.mjs \
|
|
146
|
+
npx playwright-private-reporter-generate
|
|
147
|
+
```
|
|
148
|
+
|
|
105
149
|
## How to test this package in this repo right now
|
|
106
150
|
|
|
107
151
|
From the repository root:
|
|
@@ -145,4 +189,8 @@ npm publish --workspace @ciach/playwright-private-reporter --access public
|
|
|
145
189
|
## Example files
|
|
146
190
|
- Playwright config example: `examples/playwright.config.ts`
|
|
147
191
|
- Jenkins pipeline example: `examples/Jenkinsfile`
|
|
192
|
+
- Template guide: `examples/summary-templates.md`
|
|
193
|
+
- Template example: `examples/summary-template.cjs`
|
|
194
|
+
- Template example: `examples/summary-template-minimal.cjs`
|
|
195
|
+
- Template example: `examples/summary-template-ops.cjs`
|
|
148
196
|
- Architecture/build spec: `../../docs/playwright-private-reporter-build-spec.md`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateReport.d.ts","sourceRoot":"","sources":["../../../src/cli/generateReport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateReport.d.ts","sourceRoot":"","sources":["../../../src/cli/generateReport.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,sBAAsB,EAIvB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAgCF,wBAAsB,cAAc,CAClC,eAAe,EAAE,sBAAsB,EACvC,UAAU,GAAE,wBAA6B,GACxC,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED,iBAAe,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBzC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -7,6 +7,28 @@ const node_path_1 = require("node:path");
|
|
|
7
7
|
const loadPrevious_js_1 = require("../history/loadPrevious.js");
|
|
8
8
|
const diffRuns_js_1 = require("../history/diffRuns.js");
|
|
9
9
|
const summary_html_js_1 = require("../templates/summary.html.js");
|
|
10
|
+
function normalizeArtifactPath(value) {
|
|
11
|
+
return value.replaceAll('\\', '/').replace(/^\.\//, '').replace(/\/+$/, '');
|
|
12
|
+
}
|
|
13
|
+
function createArtifactLinks(runSummary) {
|
|
14
|
+
const playwrightHtmlDir = normalizeArtifactPath(runSummary.artifacts.playwrightHtmlDir);
|
|
15
|
+
const junitPath = normalizeArtifactPath(runSummary.artifacts.junitPath);
|
|
16
|
+
const testResultsDir = normalizeArtifactPath(runSummary.artifacts.testResultsDir);
|
|
17
|
+
return {
|
|
18
|
+
playwrightReport: `../${playwrightHtmlDir}/index.html`,
|
|
19
|
+
junit: `../${junitPath}`,
|
|
20
|
+
testResults: `../${testResultsDir}/`,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function resolvePresentationOptions(reporterOptions, runSummary) {
|
|
24
|
+
return {
|
|
25
|
+
...reporterOptions,
|
|
26
|
+
projectName: reporterOptions.projectName || runSummary.projectName,
|
|
27
|
+
summaryTitle: reporterOptions.summaryTitle ?? runSummary.presentation?.summaryTitle,
|
|
28
|
+
summaryTheme: reporterOptions.summaryTheme ?? runSummary.presentation?.summaryTheme,
|
|
29
|
+
summaryTemplatePath: reporterOptions.summaryTemplatePath ?? runSummary.presentation?.summaryTemplatePath,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
10
32
|
async function generateReport(reporterOptions, cliOptions = {}) {
|
|
11
33
|
const currentRunPath = (0, node_path_1.resolve)(cliOptions.currentRunPath ?? 'artifacts/internal-report/run.json');
|
|
12
34
|
const currentFailuresPath = (0, node_path_1.resolve)(cliOptions.currentFailuresPath ?? 'artifacts/internal-report/failures.json');
|
|
@@ -25,8 +47,19 @@ async function generateReport(reporterOptions, cliOptions = {}) {
|
|
|
25
47
|
runSummary.history.fixedFailures = diff.fixedFailures.length;
|
|
26
48
|
runSummary.history.stillFailing = diff.stillFailing.length;
|
|
27
49
|
}
|
|
50
|
+
const resolvedReporterOptions = resolvePresentationOptions(reporterOptions, runSummary);
|
|
51
|
+
const title = resolvedReporterOptions.summaryTitle ?? `${runSummary.projectName} summary`;
|
|
52
|
+
const summaryContext = {
|
|
53
|
+
title,
|
|
54
|
+
theme: resolvedReporterOptions.summaryTheme === 'classic' ? 'classic' : 'modern',
|
|
55
|
+
runSummary,
|
|
56
|
+
failuresSummary,
|
|
57
|
+
diff,
|
|
58
|
+
artifactLinks: createArtifactLinks(runSummary),
|
|
59
|
+
};
|
|
60
|
+
const html = await (0, summary_html_js_1.renderSummaryHtml)(summaryContext, resolvedReporterOptions);
|
|
28
61
|
const markdown = [
|
|
29
|
-
`# ${
|
|
62
|
+
`# ${title}`,
|
|
30
63
|
'',
|
|
31
64
|
`- Status: ${runSummary.run.status}`,
|
|
32
65
|
`- Passed: ${runSummary.counts.passed}`,
|
|
@@ -41,7 +74,7 @@ async function generateReport(reporterOptions, cliOptions = {}) {
|
|
|
41
74
|
await Promise.all([
|
|
42
75
|
(0, promises_1.writeFile)((0, node_path_1.resolve)(outputDir, 'run.json'), JSON.stringify(runSummary, null, 2), 'utf8'),
|
|
43
76
|
(0, promises_1.writeFile)((0, node_path_1.resolve)(outputDir, 'summary.md'), markdown, 'utf8'),
|
|
44
|
-
(0, promises_1.writeFile)((0, node_path_1.resolve)(outputDir, 'summary.html'),
|
|
77
|
+
(0, promises_1.writeFile)((0, node_path_1.resolve)(outputDir, 'summary.html'), html, 'utf8'),
|
|
45
78
|
]);
|
|
46
79
|
}
|
|
47
80
|
async function runFromCli() {
|
|
@@ -50,6 +83,12 @@ async function runFromCli() {
|
|
|
50
83
|
projectName,
|
|
51
84
|
outputDir: process.env.PRIVATE_REPORT_OUTPUT_DIR ?? 'artifacts',
|
|
52
85
|
summaryTitle: process.env.PRIVATE_REPORT_SUMMARY_TITLE,
|
|
86
|
+
summaryTheme: process.env.PRIVATE_REPORT_SUMMARY_THEME === 'classic'
|
|
87
|
+
? 'classic'
|
|
88
|
+
: process.env.PRIVATE_REPORT_SUMMARY_THEME === 'modern'
|
|
89
|
+
? 'modern'
|
|
90
|
+
: undefined,
|
|
91
|
+
summaryTemplatePath: process.env.PRIVATE_REPORT_SUMMARY_TEMPLATE_PATH,
|
|
53
92
|
enableHistoryDiff: process.env.PRIVATE_REPORT_ENABLE_HISTORY_DIFF === 'true',
|
|
54
93
|
});
|
|
55
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateReport.js","sourceRoot":"","sources":["../../../src/cli/generateReport.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generateReport.js","sourceRoot":"","sources":["../../../src/cli/generateReport.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { createFailureFingerprint, extractFirstMeaningfulStack, normalizeErrorMe
|
|
|
4
4
|
export { generateReport } from './cli/generateReport.js';
|
|
5
5
|
export { diffFailureGroups } from './history/diffRuns.js';
|
|
6
6
|
export { loadPreviousFailuresSummary, loadPreviousRunSummary } from './history/loadPrevious.js';
|
|
7
|
-
export
|
|
7
|
+
export { renderClassicSummaryHtml, renderModernSummaryHtml, renderSummaryHtml } from './templates/summary.html.js';
|
|
8
|
+
export type { AttachmentRecord, BuiltInSummaryTheme, FailureGroup, FailuresSummary, HistoryDiff, PrivateReporterOptions, RunSummary, SummaryArtifactLinks, SummaryRenderContext, SummaryRenderer, } from './types/schema.js';
|
|
8
9
|
export { PrivateReporter as default } from './reporter/PrivateReporter.js';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACzH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAChG,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACzH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACnH,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = exports.loadPreviousRunSummary = exports.loadPreviousFailuresSummary = exports.diffFailureGroups = exports.generateReport = exports.normalizeErrorMessage = exports.extractFirstMeaningfulStack = exports.createFailureFingerprint = exports.PrivateReporter = exports.withPrivateReporter = void 0;
|
|
3
|
+
exports.default = exports.renderSummaryHtml = exports.renderModernSummaryHtml = exports.renderClassicSummaryHtml = exports.loadPreviousRunSummary = exports.loadPreviousFailuresSummary = exports.diffFailureGroups = exports.generateReport = exports.normalizeErrorMessage = exports.extractFirstMeaningfulStack = exports.createFailureFingerprint = exports.PrivateReporter = exports.withPrivateReporter = void 0;
|
|
4
4
|
var withPrivateReporter_js_1 = require("./config/withPrivateReporter.js");
|
|
5
5
|
Object.defineProperty(exports, "withPrivateReporter", { enumerable: true, get: function () { return withPrivateReporter_js_1.withPrivateReporter; } });
|
|
6
6
|
var PrivateReporter_js_1 = require("./reporter/PrivateReporter.js");
|
|
@@ -16,6 +16,10 @@ Object.defineProperty(exports, "diffFailureGroups", { enumerable: true, get: fun
|
|
|
16
16
|
var loadPrevious_js_1 = require("./history/loadPrevious.js");
|
|
17
17
|
Object.defineProperty(exports, "loadPreviousFailuresSummary", { enumerable: true, get: function () { return loadPrevious_js_1.loadPreviousFailuresSummary; } });
|
|
18
18
|
Object.defineProperty(exports, "loadPreviousRunSummary", { enumerable: true, get: function () { return loadPrevious_js_1.loadPreviousRunSummary; } });
|
|
19
|
+
var summary_html_js_1 = require("./templates/summary.html.js");
|
|
20
|
+
Object.defineProperty(exports, "renderClassicSummaryHtml", { enumerable: true, get: function () { return summary_html_js_1.renderClassicSummaryHtml; } });
|
|
21
|
+
Object.defineProperty(exports, "renderModernSummaryHtml", { enumerable: true, get: function () { return summary_html_js_1.renderModernSummaryHtml; } });
|
|
22
|
+
Object.defineProperty(exports, "renderSummaryHtml", { enumerable: true, get: function () { return summary_html_js_1.renderSummaryHtml; } });
|
|
19
23
|
var PrivateReporter_js_2 = require("./reporter/PrivateReporter.js");
|
|
20
24
|
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return PrivateReporter_js_2.PrivateReporter; } });
|
|
21
25
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0EAAsE;AAA7D,6HAAA,mBAAmB,OAAA;AAC5B,oEAAgE;AAAvD,qHAAA,eAAe,OAAA;AACxB,4DAAyH;AAAhH,0HAAA,wBAAwB,OAAA;AAAE,6HAAA,2BAA2B,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AACrF,6DAAyD;AAAhD,mHAAA,cAAc,OAAA;AACvB,qDAA0D;AAAjD,gHAAA,iBAAiB,OAAA;AAC1B,6DAAgG;AAAvF,8HAAA,2BAA2B,OAAA;AAAE,yHAAA,sBAAsB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0EAAsE;AAA7D,6HAAA,mBAAmB,OAAA;AAC5B,oEAAgE;AAAvD,qHAAA,eAAe,OAAA;AACxB,4DAAyH;AAAhH,0HAAA,wBAAwB,OAAA;AAAE,6HAAA,2BAA2B,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AACrF,6DAAyD;AAAhD,mHAAA,cAAc,OAAA;AACvB,qDAA0D;AAAjD,gHAAA,iBAAiB,OAAA;AAC1B,6DAAgG;AAAvF,8HAAA,2BAA2B,OAAA;AAAE,yHAAA,sBAAsB,OAAA;AAC5D,+DAAmH;AAA1G,2HAAA,wBAAwB,OAAA;AAAE,0HAAA,uBAAuB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAa7E,oEAA2E;AAAlE,6GAAA,eAAe,OAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/reporter/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,UAAU,EACX,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC,CAAC;AAEF,wBAAgB,iBAAiB,IAAI,SAAS,CAS7C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CA0CxE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/reporter/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,UAAU,EACX,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC,CAAC;AAEF,wBAAgB,iBAAiB,IAAI,SAAS,CAS7C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CA0CxE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GAAG,UAAU,CA6Cb;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CAO7G"}
|
|
@@ -65,6 +65,11 @@ function buildRunSummary(params) {
|
|
|
65
65
|
schemaVersion: '1.0',
|
|
66
66
|
projectName: params.options.projectName,
|
|
67
67
|
generatedAt: new Date().toISOString(),
|
|
68
|
+
presentation: {
|
|
69
|
+
summaryTitle: params.options.summaryTitle,
|
|
70
|
+
summaryTheme: params.options.summaryTheme,
|
|
71
|
+
summaryTemplatePath: params.options.summaryTemplatePath,
|
|
72
|
+
},
|
|
68
73
|
run: {
|
|
69
74
|
status: hasFailures ? 'failed' : 'passed',
|
|
70
75
|
buildId: process.env[buildIdEnv],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/reporter/summary.ts"],"names":[],"mappings":";;AAyBA,8CASC;AAED,8CA0CC;AAED,
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/reporter/summary.ts"],"names":[],"mappings":";;AAyBA,8CASC;AAED,8CA0CC;AAED,0CAkDC;AAED,oDAOC;AAlHD,SAAgB,iBAAiB;IAC/B,OAAO;QACL,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAsB;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEhD,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;YACzB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE;YAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;YAClD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,CAAC;YACb,KAAK,EAAE;gBACL;oBACE,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;iBACjC;aACF;YACD,kBAAkB,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACpD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AACzF,CAAC;AAED,SAAgB,eAAe,CAAC,MAK/B;IACC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;IAElG,OAAO;QACL,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;QACvC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,YAAY,EAAE;YACZ,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;YACzC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;YACzC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB;SACxD;QACD,GAAG,EAAE;YACH,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACzC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAChC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YAClC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;SAC/B;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAClD,eAAe,EAAE,SAAS;YAC1B,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC;YAC7C,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC;YACjD,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC;SAChD;QACD,SAAS,EAAE;YACT,aAAa,EAAE,aAAa;YAC5B,iBAAiB,EAAE,mBAAmB;YACtC,cAAc,EAAE,cAAc;YAC9B,SAAS,EAAE,mBAAmB;YAC9B,iBAAiB,EAAE,iBAAiB;SACrC;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM;YAC1C,cAAc,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW;SACvD;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAA+B,EAAE,MAAsB;IAC1F,OAAO;QACL,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function escapeHtml(value: string | undefined): string;
|
|
2
|
+
export declare function pluralize(count: number, singular: string, plural?: string): string;
|
|
3
|
+
export declare function joinTitlePath(titlePath: string[]): string;
|
|
4
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/templates/shared.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO5D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAiB,GAAG,MAAM,CAE1F;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.escapeHtml = escapeHtml;
|
|
4
|
+
exports.pluralize = pluralize;
|
|
5
|
+
exports.joinTitlePath = joinTitlePath;
|
|
6
|
+
function escapeHtml(value) {
|
|
7
|
+
return (value ?? '')
|
|
8
|
+
.replaceAll('&', '&')
|
|
9
|
+
.replaceAll('<', '<')
|
|
10
|
+
.replaceAll('>', '>')
|
|
11
|
+
.replaceAll('"', '"')
|
|
12
|
+
.replaceAll("'", ''');
|
|
13
|
+
}
|
|
14
|
+
function pluralize(count, singular, plural = `${singular}s`) {
|
|
15
|
+
return `${count} ${count === 1 ? singular : plural}`;
|
|
16
|
+
}
|
|
17
|
+
function joinTitlePath(titlePath) {
|
|
18
|
+
return titlePath.map((segment) => escapeHtml(segment)).join(' / ');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/templates/shared.ts"],"names":[],"mappings":";;AAAA,gCAOC;AAED,8BAEC;AAED,sCAEC;AAfD,SAAgB,UAAU,CAAC,KAAyB;IAClD,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;SACjB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,SAAS,CAAC,KAAa,EAAE,QAAgB,EAAE,MAAM,GAAG,GAAG,QAAQ,GAAG;IAChF,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC;AAED,SAAgB,aAAa,CAAC,SAAmB;IAC/C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.classic.d.ts","sourceRoot":"","sources":["../../../src/templates/summary.classic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI/D,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAyD9E"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderClassicSummaryHtml = renderClassicSummaryHtml;
|
|
4
|
+
const shared_js_1 = require("./shared.js");
|
|
5
|
+
function renderClassicSummaryHtml(context) {
|
|
6
|
+
const { title, runSummary, failuresSummary, artifactLinks } = context;
|
|
7
|
+
const failureItems = failuresSummary.groups
|
|
8
|
+
.slice(0, 10)
|
|
9
|
+
.map((group) => `
|
|
10
|
+
<li>
|
|
11
|
+
<strong>${(0, shared_js_1.escapeHtml)(group.title)}</strong>
|
|
12
|
+
<div>Fingerprint: <code>${(0, shared_js_1.escapeHtml)(group.fingerprint)}</code></div>
|
|
13
|
+
<div>Occurrences: ${group.countInRun}</div>
|
|
14
|
+
<div>${(0, shared_js_1.escapeHtml)(group.normalizedMessage)}</div>
|
|
15
|
+
</li>`)
|
|
16
|
+
.join('');
|
|
17
|
+
return `<!DOCTYPE html>
|
|
18
|
+
<html lang="en">
|
|
19
|
+
<head>
|
|
20
|
+
<meta charset="utf-8" />
|
|
21
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
22
|
+
<title>${(0, shared_js_1.escapeHtml)(title)}</title>
|
|
23
|
+
<style>
|
|
24
|
+
body { font-family: Arial, sans-serif; margin: 2rem; color: #1f2937; }
|
|
25
|
+
.grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; }
|
|
26
|
+
.card { border: 1px solid #d1d5db; border-radius: 8px; padding: 1rem; background: #fff; }
|
|
27
|
+
code { background: #f3f4f6; padding: 0.1rem 0.3rem; border-radius: 4px; }
|
|
28
|
+
ul { padding-left: 1.25rem; }
|
|
29
|
+
@media (max-width: 900px) { .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
|
|
30
|
+
@media (max-width: 640px) { body { margin: 1rem; } .grid { grid-template-columns: 1fr; } }
|
|
31
|
+
</style>
|
|
32
|
+
</head>
|
|
33
|
+
<body>
|
|
34
|
+
<h1>${(0, shared_js_1.escapeHtml)(title)}</h1>
|
|
35
|
+
<p>Status: <strong>${(0, shared_js_1.escapeHtml)(runSummary.run.status)}</strong></p>
|
|
36
|
+
<div class="grid">
|
|
37
|
+
<div class="card"><div>Passed</div><strong>${runSummary.counts.passed}</strong></div>
|
|
38
|
+
<div class="card"><div>Failed</div><strong>${runSummary.counts.failed}</strong></div>
|
|
39
|
+
<div class="card"><div>Skipped</div><strong>${runSummary.counts.skipped}</strong></div>
|
|
40
|
+
<div class="card"><div>Flaky</div><strong>${runSummary.counts.flaky}</strong></div>
|
|
41
|
+
</div>
|
|
42
|
+
<h2>Build metadata</h2>
|
|
43
|
+
<ul>
|
|
44
|
+
<li>Build ID: ${(0, shared_js_1.escapeHtml)(runSummary.run.buildId)}</li>
|
|
45
|
+
<li>Branch: ${(0, shared_js_1.escapeHtml)(runSummary.run.branch)}</li>
|
|
46
|
+
<li>Commit: ${(0, shared_js_1.escapeHtml)(runSummary.run.commit)}</li>
|
|
47
|
+
<li>Build URL: ${runSummary.run.buildUrl ? `<a href="${(0, shared_js_1.escapeHtml)(runSummary.run.buildUrl)}">${(0, shared_js_1.escapeHtml)(runSummary.run.buildUrl)}</a>` : 'n/a'}</li>
|
|
48
|
+
</ul>
|
|
49
|
+
<h2>Failure groups</h2>
|
|
50
|
+
<ul>${failureItems || '<li>No failing groups</li>'}</ul>
|
|
51
|
+
<h2>Artifacts</h2>
|
|
52
|
+
<ul>
|
|
53
|
+
<li><a href="${(0, shared_js_1.escapeHtml)(artifactLinks.playwrightReport)}">Merged Playwright HTML report</a></li>
|
|
54
|
+
<li><a href="${(0, shared_js_1.escapeHtml)(artifactLinks.junit)}">JUnit XML</a></li>
|
|
55
|
+
<li><a href="${(0, shared_js_1.escapeHtml)(artifactLinks.testResults)}">Test results attachments</a></li>
|
|
56
|
+
</ul>
|
|
57
|
+
</body>
|
|
58
|
+
</html>`;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=summary.classic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.classic.js","sourceRoot":"","sources":["../../../src/templates/summary.classic.ts"],"names":[],"mappings":";;AAIA,4DAyDC;AA3DD,2CAAyC;AAEzC,SAAgB,wBAAwB,CAAC,OAA6B;IACpE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACtE,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM;SACxC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;;oBAEG,IAAA,sBAAU,EAAC,KAAK,CAAC,KAAK,CAAC;oCACP,IAAA,sBAAU,EAAC,KAAK,CAAC,WAAW,CAAC;8BACnC,KAAK,CAAC,UAAU;iBAC7B,IAAA,sBAAU,EAAC,KAAK,CAAC,iBAAiB,CAAC;cACtC,CACT;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO;;;;;aAKI,IAAA,sBAAU,EAAC,KAAK,CAAC;;;;;;;;;;;;UAYpB,IAAA,sBAAU,EAAC,KAAK,CAAC;yBACF,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;;mDAEP,UAAU,CAAC,MAAM,CAAC,MAAM;mDACxB,UAAU,CAAC,MAAM,CAAC,MAAM;oDACvB,UAAU,CAAC,MAAM,CAAC,OAAO;kDAC3B,UAAU,CAAC,MAAM,CAAC,KAAK;;;;sBAInD,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;oBACpC,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;oBACjC,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;uBAC9B,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAA,sBAAU,EAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;;;UAG5I,YAAY,IAAI,4BAA4B;;;qBAGjC,IAAA,sBAAU,EAAC,aAAa,CAAC,gBAAgB,CAAC;qBAC1C,IAAA,sBAAU,EAAC,aAAa,CAAC,KAAK,CAAC;qBAC/B,IAAA,sBAAU,EAAC,aAAa,CAAC,WAAW,CAAC;;;QAGlD,CAAC;AACT,CAAC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { renderClassicSummaryHtml } from './summary.classic.js';
|
|
2
|
+
import { renderModernSummaryHtml } from './summary.modern.js';
|
|
3
|
+
import type { PrivateReporterOptions, SummaryRenderContext } from '../types/schema.js';
|
|
4
|
+
export { renderClassicSummaryHtml, renderModernSummaryHtml };
|
|
5
|
+
export declare function renderSummaryHtml(context: SummaryRenderContext, options: PrivateReporterOptions): Promise<string>;
|
|
3
6
|
//# sourceMappingURL=summary.html.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.html.d.ts","sourceRoot":"","sources":["../../../src/templates/summary.html.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"summary.html.d.ts","sourceRoot":"","sources":["../../../src/templates/summary.html.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAEV,sBAAsB,EACtB,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAkC5B,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,CAAC;AAE7D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAYjB"}
|
|
@@ -1,64 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderModernSummaryHtml = exports.renderClassicSummaryHtml = void 0;
|
|
3
4
|
exports.renderSummaryHtml = renderSummaryHtml;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const summary_classic_js_1 = require("./summary.classic.js");
|
|
7
|
+
Object.defineProperty(exports, "renderClassicSummaryHtml", { enumerable: true, get: function () { return summary_classic_js_1.renderClassicSummaryHtml; } });
|
|
8
|
+
const summary_modern_js_1 = require("./summary.modern.js");
|
|
9
|
+
Object.defineProperty(exports, "renderModernSummaryHtml", { enumerable: true, get: function () { return summary_modern_js_1.renderModernSummaryHtml; } });
|
|
10
|
+
const BUILTIN_RENDERERS = {
|
|
11
|
+
classic: summary_classic_js_1.renderClassicSummaryHtml,
|
|
12
|
+
modern: summary_modern_js_1.renderModernSummaryHtml,
|
|
13
|
+
};
|
|
14
|
+
const dynamicImport = new Function('modulePath', 'return import(modulePath)');
|
|
15
|
+
function resolveSummaryTheme(options) {
|
|
16
|
+
return options.summaryTheme === 'classic' ? 'classic' : 'modern';
|
|
11
17
|
}
|
|
12
|
-
function
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; }
|
|
32
|
-
.card { border: 1px solid #d1d5db; border-radius: 8px; padding: 1rem; background: #fff; }
|
|
33
|
-
code { background: #f3f4f6; padding: 0.1rem 0.3rem; border-radius: 4px; }
|
|
34
|
-
ul { padding-left: 1.25rem; }
|
|
35
|
-
</style>
|
|
36
|
-
</head>
|
|
37
|
-
<body>
|
|
38
|
-
<h1>${escapeHtml(run.projectName)} Playwright Summary</h1>
|
|
39
|
-
<p>Status: <strong>${escapeHtml(run.run.status)}</strong></p>
|
|
40
|
-
<div class="grid">
|
|
41
|
-
<div class="card"><div>Passed</div><strong>${run.counts.passed}</strong></div>
|
|
42
|
-
<div class="card"><div>Failed</div><strong>${run.counts.failed}</strong></div>
|
|
43
|
-
<div class="card"><div>Skipped</div><strong>${run.counts.skipped}</strong></div>
|
|
44
|
-
<div class="card"><div>Flaky</div><strong>${run.counts.flaky}</strong></div>
|
|
45
|
-
</div>
|
|
46
|
-
<h2>Build metadata</h2>
|
|
47
|
-
<ul>
|
|
48
|
-
<li>Build ID: ${escapeHtml(run.run.buildId)}</li>
|
|
49
|
-
<li>Branch: ${escapeHtml(run.run.branch)}</li>
|
|
50
|
-
<li>Commit: ${escapeHtml(run.run.commit)}</li>
|
|
51
|
-
<li>Build URL: ${run.run.buildUrl ? `<a href="${escapeHtml(run.run.buildUrl)}">${escapeHtml(run.run.buildUrl)}</a>` : 'n/a'}</li>
|
|
52
|
-
</ul>
|
|
53
|
-
<h2>Failure groups</h2>
|
|
54
|
-
<ul>${failureItems || '<li>No failing groups 🎉</li>'}</ul>
|
|
55
|
-
<h2>Artifacts</h2>
|
|
56
|
-
<ul>
|
|
57
|
-
<li><a href="../playwright-report/index.html">Merged Playwright HTML report</a></li>
|
|
58
|
-
<li><a href="../junit/results.xml">JUnit XML</a></li>
|
|
59
|
-
<li><a href="../test-results/">Test results attachments</a></li>
|
|
60
|
-
</ul>
|
|
61
|
-
</body>
|
|
62
|
-
</html>`;
|
|
18
|
+
async function loadSummaryRenderer(templatePath) {
|
|
19
|
+
const resolvedPath = (0, node_path_1.resolve)(templatePath);
|
|
20
|
+
const loadedModule = await dynamicImport(resolvedPath);
|
|
21
|
+
const renderer = loadedModule.renderSummary ?? loadedModule.default;
|
|
22
|
+
if (typeof renderer !== 'function') {
|
|
23
|
+
throw new Error(`Summary template "${resolvedPath}" must export a default function or a named "renderSummary" function.`);
|
|
24
|
+
}
|
|
25
|
+
return renderer;
|
|
26
|
+
}
|
|
27
|
+
async function renderSummaryHtml(context, options) {
|
|
28
|
+
const theme = resolveSummaryTheme(options);
|
|
29
|
+
const renderer = options.summaryTemplatePath
|
|
30
|
+
? await loadSummaryRenderer(options.summaryTemplatePath)
|
|
31
|
+
: BUILTIN_RENDERERS[theme];
|
|
32
|
+
const html = await renderer({ ...context, theme });
|
|
33
|
+
if (typeof html !== 'string') {
|
|
34
|
+
throw new Error('Summary renderer must return an HTML string.');
|
|
35
|
+
}
|
|
36
|
+
return html;
|
|
63
37
|
}
|
|
64
38
|
//# sourceMappingURL=summary.html.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.html.js","sourceRoot":"","sources":["../../../src/templates/summary.html.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"summary.html.js","sourceRoot":"","sources":["../../../src/templates/summary.html.ts"],"names":[],"mappings":";;;AA6CA,8CAeC;AA5DD,yCAAoC;AAEpC,6DAAgE;AAyCvD,yGAzCA,6CAAwB,OAyCA;AAxCjC,2DAA8D;AAwC3B,wGAxC1B,2CAAuB,OAwC0B;AA3B1D,MAAM,iBAAiB,GAAiD;IACtE,OAAO,EAAE,6CAAwB;IACjC,MAAM,EAAE,2CAAuB;CAChC,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAEzC,CAAC;AAEpC,SAAS,mBAAmB,CAAC,OAA+B;IAC1D,OAAO,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IACrD,MAAM,YAAY,GAAG,IAAA,mBAAO,EAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,OAAO,CAAC;IAEpE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,qBAAqB,YAAY,uEAAuE,CACzG,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAIM,KAAK,UAAU,iBAAiB,CACrC,OAA6B,EAC7B,OAA+B;IAE/B,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB;QAC1C,CAAC,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACxD,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.modern.d.ts","sourceRoot":"","sources":["../../../src/templates/summary.modern.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAiG7E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CA0c7E"}
|