@anselmdk/feature-spec-md 0.4.0 → 0.5.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/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/githubActionDiffReport.d.ts +4 -0
- package/dist/githubActionDiffReport.d.ts.map +1 -0
- package/dist/githubActionDiffReport.js +209 -0
- package/dist/githubActionDiffReport.js.map +1 -0
- package/dist/githubActionFtp.d.ts +25 -0
- package/dist/githubActionFtp.d.ts.map +1 -0
- package/dist/githubActionFtp.js +210 -0
- package/dist/githubActionFtp.js.map +1 -0
- package/dist/githubActionOutput.d.ts +3 -0
- package/dist/githubActionOutput.d.ts.map +1 -0
- package/dist/githubActionOutput.js +33 -0
- package/dist/githubActionOutput.js.map +1 -0
- package/dist/githubActionReport.d.ts +2 -1
- package/dist/githubActionReport.d.ts.map +1 -1
- package/dist/githubActionReport.js +15 -182
- package/dist/githubActionReport.js.map +1 -1
- package/dist/reportTemplate.js +37 -33
- package/dist/reportTemplate.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import { collectSpecScreenshots, renderHtmlReport, writeTextFile, } from "./index.js";
|
|
9
|
+
import { publishGithubActionDiffReport } from "./githubActionDiffReport.js";
|
|
9
10
|
import { publishGithubActionReport } from "./githubActionReport.js";
|
|
10
11
|
import { checkSpecDocuments } from "./specDocuments.js";
|
|
11
12
|
import { buildSpecImplementationReport, formatSpecImplementationReport, } from "./testImplementationReport.js";
|
|
@@ -26,6 +27,8 @@ async function main() {
|
|
|
26
27
|
return runCoverage(options);
|
|
27
28
|
if (command === "github-report")
|
|
28
29
|
return publishGithubActionReport(options);
|
|
30
|
+
if (command === "github-diff-report")
|
|
31
|
+
return publishGithubActionDiffReport(options);
|
|
29
32
|
if (command === "init")
|
|
30
33
|
return runInit(options);
|
|
31
34
|
printHelp();
|
|
@@ -188,6 +191,7 @@ Usage:
|
|
|
188
191
|
feature-spec-md coverage [--specs "specs/**/*.model.md,specs/**/*.feature.md,specs/**/*.stack.md,specs/**/*.design.md"] [--tests "tests/**/*.spec.ts"] [--fail-on-missing]
|
|
189
192
|
feature-spec-md report [--specs "specs/**/*.model.md,specs/**/*.feature.md,specs/**/*.stack.md,specs/**/*.design.md"] [--tests "tests/**/*.spec.ts"] [--screenshots "test-results/spec-report/screenshots.json"] [--out test-results/feature-spec-report/index.html]
|
|
190
193
|
feature-spec-md github-report [--report-dir test-results/spec-report] [--publish artifact|ftp]
|
|
194
|
+
feature-spec-md github-diff-report --publish ftp --pr-number 123
|
|
191
195
|
|
|
192
196
|
Options:
|
|
193
197
|
--require-model-coverage Fail when model items have no matching test references.
|
|
@@ -205,6 +209,8 @@ GitHub report publishing:
|
|
|
205
209
|
--ftp-password FTP password, or FEATURE_SPEC_FTP_PASSWORD.
|
|
206
210
|
--ftp-remote-dir FTP root directory for reports, or FEATURE_SPEC_FTP_REMOTE_DIR.
|
|
207
211
|
--base-url Public base URL, or FEATURE_SPEC_REPORT_BASE_URL.
|
|
212
|
+
--build-number Numeric build number, or FEATURE_SPEC_BUILD_NUMBER / GITHUB_RUN_NUMBER.
|
|
213
|
+
--pr-number Numeric PR number, or FEATURE_SPEC_PR_NUMBER. Required for github-diff-report.
|
|
208
214
|
`);
|
|
209
215
|
}
|
|
210
216
|
function fileNameForKind(kind) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GAEd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,kBAAkB,GACtB,oFAAoF,CAAC;AACvF,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEhD,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,eAAe;QAAE,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAI,OAAO,KAAK,oBAAoB;QAAE,OAAO,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACpF,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhD,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CACV,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACvE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,OAAmB;IACzC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;QACtC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;QACpD,KAAK,EACH,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;QAC3E,oBAAoB,EAAE,OAAO,CAAC,wBAAwB,CAAC,KAAK,MAAM;QAClE,mBAAmB,EAAE,OAAO,CAAC,uBAAuB,CAAC,KAAK,MAAM;QAChE,uBAAuB,EAAE,OAAO,CAAC,2BAA2B,CAAC,KAAK,OAAO;KAC1E,CAAC,CAAC;IAEH,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAC3C,CAAC,CACF,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EACtC,CAAC,CACF,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAC1C,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAC1C,CAAC,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,sBAAsB,MAAM,CAAC,MAAM,CAAC,MAAM,cAAc,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB,MAAM,CAAC,MAAM,CAAC,MAAM,cAAc,MAAM,CAAC,OAAO,CAAC,MAAM,eAAe,cAAc,mBAAmB,SAAS,aAAa,aAAa,eAAe,CACxP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAAmB;IAC5C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;QACtC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;QACpD,KAAK,EACH,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;QAC3E,oBAAoB,EAAE,KAAK;QAC3B,mBAAmB,EAAE,KAAK;QAC1B,uBAAuB,EAAE,KAAK;KAC/B,CAAC,CAAC;IAEH,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAEnC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,oGAAoG,CACrG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,6BAA6B,CAC1C,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,MAAM,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpD,IAAI,OAAO,CAAC,iBAAiB,CAAC,KAAK,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAmB;IAC1C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;QACtC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;QACpD,KAAK,EACH,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;QAC3E,mBAAmB,EAAE,OAAO,CAAC,uBAAuB,CAAC,KAAK,MAAM;QAChE,uBAAuB,EAAE,KAAK;KAC/B,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,6CAA6C,CAAC;IACzE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;QACrC,CAAC,CAAC,MAAM,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,aAAa,CACjB,GAAG,EACH,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE;QAChC,KAAK,EAAE,MAAM,WAAW,EAAE;QAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW;QACX,gBAAgB,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC;QACxE,GAAG,uBAAuB,EAAE;KAC7B,CAAC,CACH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAmB;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;AACnC,CAAC;AAID,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACpC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB,EAAE,QAAgB;IAC7D,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;SACvB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,MAAyB;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;YAC7B,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1D,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,KAAK,CACX,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CACnG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAwD;IAClF,OAAO,CACL,MAAM,CAAC,gBAAgB,GAAG,CAAC;QAC3B,MAAM,CAAC,YAAY,GAAG,CAAC;QACvB,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;IAC5C,OAAO,WAAW;QAChB,CAAC,CAAC,2BAA2B,WAAW,EAAE;QAC1C,CAAC,CAAC,qBAAqB,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACrD,OAAO,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;YAC1D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;YACpB,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB;IAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACjD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAEzC,MAAM,aAAa,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,oBAAoB,IAAI,UAAU,EAAE,CAAC;IAC/F,OAAO;QACL,aAAa;QACb,SAAS;QACT,aAAa,EAAE,aAAa;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACpE,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACnC,OAAO,GAAG,EAAE,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Bb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,kBAAkB,CAAC;IAChD,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,kBAAkB,CAAC;IAChD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,mBAAmB,CAAC;IAClD,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC;IAC1C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC;IAC1C,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IAC5C,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BpB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCrB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type GithubActionOptions } from "./githubActionFtp.js";
|
|
2
|
+
export type GithubActionDiffReportOptions = GithubActionOptions;
|
|
3
|
+
export declare function publishGithubActionDiffReport(options: GithubActionDiffReportOptions): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=githubActionDiffReport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubActionDiffReport.d.ts","sourceRoot":"","sources":["../src/githubActionDiffReport.ts"],"names":[],"mappings":"AAKA,OAAO,EAQL,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,6BAA6B,GAAG,mBAAmB,CAAC;AAqBhE,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,6BAA6B,iBA4DvC"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { basename, join, relative } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { html } from "./html.js";
|
|
6
|
+
import { downloadRemoteFile, ftpConfig, listBuildNumbers, listRemoteFilesRecursive, pathJoin, publicUrl, uploadDirectory, } from "./githubActionFtp.js";
|
|
7
|
+
import { writeGithubOutput, writeGithubSummary } from "./githubActionOutput.js";
|
|
8
|
+
export async function publishGithubActionDiffReport(options) {
|
|
9
|
+
const config = ftpConfig(options);
|
|
10
|
+
const prNumber = config.prNumber;
|
|
11
|
+
if (!prNumber) {
|
|
12
|
+
throw new Error("Missing required option --pr-number or FEATURE_SPEC_PR_NUMBER.");
|
|
13
|
+
}
|
|
14
|
+
const buildsRoot = pathJoin(config.remoteDir, "build");
|
|
15
|
+
const builds = await listBuildNumbers(buildsRoot, config);
|
|
16
|
+
const currentBuild = config.buildNumber;
|
|
17
|
+
const previousBuild = previousBuildNumber(builds, currentBuild);
|
|
18
|
+
const currentBuildUrl = publicUrl(config.baseUrl, "build", currentBuild, "");
|
|
19
|
+
const previousBuildUrl = previousBuild
|
|
20
|
+
? publicUrl(config.baseUrl, "build", previousBuild, "")
|
|
21
|
+
: undefined;
|
|
22
|
+
const report = previousBuild
|
|
23
|
+
? await compareBuilds(config, previousBuild, currentBuild, prNumber)
|
|
24
|
+
: {
|
|
25
|
+
prNumber,
|
|
26
|
+
currentBuild,
|
|
27
|
+
currentBuildUrl,
|
|
28
|
+
files: [],
|
|
29
|
+
};
|
|
30
|
+
if (previousBuild) {
|
|
31
|
+
report.previousBuild = previousBuild;
|
|
32
|
+
report.previousBuildUrl = previousBuildUrl;
|
|
33
|
+
}
|
|
34
|
+
const localReportDir = join(tmpdir(), `feature-spec-md-pr-diff-${process.pid}-${prNumber}-${currentBuild}`);
|
|
35
|
+
await mkdir(localReportDir, { recursive: true });
|
|
36
|
+
await writeFile(join(localReportDir, "index.html"), renderDiffReport(report), "utf8");
|
|
37
|
+
const remoteReportDir = pathJoin(config.remoteDir, "pr", prNumber, currentBuild);
|
|
38
|
+
await uploadDirectory(localReportDir, remoteReportDir, config);
|
|
39
|
+
const reportUrl = publicUrl(config.baseUrl, "pr", prNumber, currentBuild, "");
|
|
40
|
+
await writeGithubSummary([
|
|
41
|
+
"## Feature Spec PR Diff",
|
|
42
|
+
"",
|
|
43
|
+
`<p><strong>Diff report:</strong> <a href=\"${html(reportUrl)}\">PR #${html(prNumber)} build ${html(currentBuild)}</a></p>`,
|
|
44
|
+
report.previousBuild
|
|
45
|
+
? `<p>Compared build <strong>${html(report.previousBuild)}</strong> with build <strong>${html(currentBuild)}</strong>.</p>`
|
|
46
|
+
: `<p>No earlier build was found, so this report establishes the first comparison baseline.</p>`,
|
|
47
|
+
"",
|
|
48
|
+
].join("\n"));
|
|
49
|
+
await writeGithubOutput({
|
|
50
|
+
"diff-report-url": reportUrl,
|
|
51
|
+
"diff-comment-body": commentBody(report, reportUrl),
|
|
52
|
+
"previous-build": report.previousBuild ?? "",
|
|
53
|
+
"current-build": currentBuild,
|
|
54
|
+
});
|
|
55
|
+
console.log(`Feature spec PR diff report uploaded to ${reportUrl}`);
|
|
56
|
+
}
|
|
57
|
+
async function compareBuilds(config, previousBuild, currentBuild, prNumber) {
|
|
58
|
+
const previousRoot = pathJoin(config.remoteDir, "build", previousBuild);
|
|
59
|
+
const currentRoot = pathJoin(config.remoteDir, "build", currentBuild);
|
|
60
|
+
const previousFiles = await listRemoteFilesRecursive(previousRoot, config);
|
|
61
|
+
const currentFiles = await listRemoteFilesRecursive(currentRoot, config);
|
|
62
|
+
const previousRelative = new Set(previousFiles.map((file) => relativeRemotePath(previousRoot, file)));
|
|
63
|
+
const currentRelative = new Set(currentFiles.map((file) => relativeRemotePath(currentRoot, file)));
|
|
64
|
+
const allPaths = Array.from(new Set([...previousRelative, ...currentRelative])).sort();
|
|
65
|
+
const localRoot = join(tmpdir(), `feature-spec-md-build-compare-${process.pid}-${previousBuild}-${currentBuild}`);
|
|
66
|
+
const files = [];
|
|
67
|
+
for (const filePath of allPaths) {
|
|
68
|
+
const previousRemote = previousRelative.has(filePath)
|
|
69
|
+
? pathJoin(previousRoot, filePath)
|
|
70
|
+
: undefined;
|
|
71
|
+
const currentRemote = currentRelative.has(filePath)
|
|
72
|
+
? pathJoin(currentRoot, filePath)
|
|
73
|
+
: undefined;
|
|
74
|
+
const previousLocal = previousRemote
|
|
75
|
+
? join(localRoot, "previous", filePath)
|
|
76
|
+
: undefined;
|
|
77
|
+
const currentLocal = currentRemote ? join(localRoot, "current", filePath) : undefined;
|
|
78
|
+
if (previousRemote && previousLocal) {
|
|
79
|
+
await downloadRemoteFile(previousRemote, previousLocal, config);
|
|
80
|
+
}
|
|
81
|
+
if (currentRemote && currentLocal) {
|
|
82
|
+
await downloadRemoteFile(currentRemote, currentLocal, config);
|
|
83
|
+
}
|
|
84
|
+
const previousInfo = previousLocal ? await fileInfo(previousLocal) : undefined;
|
|
85
|
+
const currentInfo = currentLocal ? await fileInfo(currentLocal) : undefined;
|
|
86
|
+
const status = !previousInfo
|
|
87
|
+
? "added"
|
|
88
|
+
: !currentInfo
|
|
89
|
+
? "removed"
|
|
90
|
+
: previousInfo.hash === currentInfo.hash
|
|
91
|
+
? "unchanged"
|
|
92
|
+
: "changed";
|
|
93
|
+
files.push({
|
|
94
|
+
path: filePath,
|
|
95
|
+
kind: fileKind(filePath),
|
|
96
|
+
status,
|
|
97
|
+
previousHash: previousInfo?.hash,
|
|
98
|
+
currentHash: currentInfo?.hash,
|
|
99
|
+
previousSize: previousInfo?.size,
|
|
100
|
+
currentSize: currentInfo?.size,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
prNumber,
|
|
105
|
+
previousBuild,
|
|
106
|
+
currentBuild,
|
|
107
|
+
previousBuildUrl: publicUrl(config.baseUrl, "build", previousBuild, ""),
|
|
108
|
+
currentBuildUrl: publicUrl(config.baseUrl, "build", currentBuild, ""),
|
|
109
|
+
files,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function previousBuildNumber(builds, currentBuild) {
|
|
113
|
+
const current = Number(currentBuild);
|
|
114
|
+
return builds
|
|
115
|
+
.map(Number)
|
|
116
|
+
.filter((build) => Number.isFinite(build) && build < current)
|
|
117
|
+
.sort((a, b) => b - a)
|
|
118
|
+
.at(0)
|
|
119
|
+
?.toString();
|
|
120
|
+
}
|
|
121
|
+
async function fileInfo(filePath) {
|
|
122
|
+
const buffer = await readFile(filePath);
|
|
123
|
+
return {
|
|
124
|
+
hash: createHash("sha256").update(buffer).digest("hex"),
|
|
125
|
+
size: buffer.byteLength,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function relativeRemotePath(root, filePath) {
|
|
129
|
+
return relative(root, filePath).split("\\").join("/");
|
|
130
|
+
}
|
|
131
|
+
function fileKind(filePath) {
|
|
132
|
+
const name = basename(filePath).toLowerCase();
|
|
133
|
+
if (name === "index.html" || name.endsWith(".html") || name.endsWith(".json")) {
|
|
134
|
+
return "report";
|
|
135
|
+
}
|
|
136
|
+
if (/\.(png|jpe?g|webp|gif)$/i.test(name))
|
|
137
|
+
return "screenshot";
|
|
138
|
+
return "asset";
|
|
139
|
+
}
|
|
140
|
+
function renderDiffReport(report) {
|
|
141
|
+
const changed = report.files.filter((file) => file.status !== "unchanged");
|
|
142
|
+
const byKind = (kind) => changed.filter((file) => file.kind === kind);
|
|
143
|
+
const sections = [
|
|
144
|
+
renderFileSection("Report output", byKind("report")),
|
|
145
|
+
renderFileSection("Screenshots", byKind("screenshot")),
|
|
146
|
+
renderFileSection("Other assets", byKind("asset")),
|
|
147
|
+
].join("\n");
|
|
148
|
+
return `<!doctype html>
|
|
149
|
+
<html lang="en">
|
|
150
|
+
<head>
|
|
151
|
+
<meta charset="utf-8">
|
|
152
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
153
|
+
<title>Feature spec PR diff</title>
|
|
154
|
+
<style>
|
|
155
|
+
body{font-family:system-ui,sans-serif;max-width:1180px;margin:0 auto;padding:40px 24px;color:#1f2328}
|
|
156
|
+
.panel{border:1px solid #d0d7de;border-radius:8px;padding:20px;margin:18px 0}
|
|
157
|
+
.badge{border:1px solid #d0d7de;border-radius:999px;padding:2px 8px;font-size:12px;white-space:nowrap}
|
|
158
|
+
.added{color:#1a7f37}.removed{color:#cf222e}.changed{color:#9a6700}.muted{color:#57606a}
|
|
159
|
+
table{border-collapse:collapse;width:100%;font-size:14px} th,td{border:1px solid #d0d7de;padding:6px 8px;text-align:left;vertical-align:top} th{background:#f6f8fa}
|
|
160
|
+
a{color:#0969da}
|
|
161
|
+
</style>
|
|
162
|
+
</head>
|
|
163
|
+
<body>
|
|
164
|
+
<h1>Feature spec PR diff for PR #${html(report.prNumber)}</h1>
|
|
165
|
+
<p>Generated ${html(new Date().toISOString())}.</p>
|
|
166
|
+
<section class="panel">
|
|
167
|
+
<h2>Compared builds</h2>
|
|
168
|
+
<p>${report.previousBuild ? `Previous: <a href="${html(report.previousBuildUrl ?? "")}">build ${html(report.previousBuild)}</a>` : "No previous build found."}</p>
|
|
169
|
+
<p>Current: <a href="${html(report.currentBuildUrl)}">build ${html(report.currentBuild)}</a></p>
|
|
170
|
+
<p><span class="badge">${changed.length} changed file${changed.length === 1 ? "" : "s"}</span> <span class="muted">${report.files.length} file${report.files.length === 1 ? "" : "s"} checked</span></p>
|
|
171
|
+
</section>
|
|
172
|
+
${sections}
|
|
173
|
+
</body>
|
|
174
|
+
</html>`;
|
|
175
|
+
}
|
|
176
|
+
function renderFileSection(title, files) {
|
|
177
|
+
if (!files.length) {
|
|
178
|
+
return `<section class="panel"><h2>${html(title)}</h2><p class="muted">No changes.</p></section>`;
|
|
179
|
+
}
|
|
180
|
+
return `<section class="panel"><h2>${html(title)}</h2><table><thead><tr><th>Status</th><th>File</th><th>Size change</th></tr></thead><tbody>${files
|
|
181
|
+
.map((file) => `<tr><td class="${file.status}">${html(file.status)}</td><td><code>${html(file.path)}</code></td><td>${html(sizeChange(file))}</td></tr>`)
|
|
182
|
+
.join("")}</tbody></table></section>`;
|
|
183
|
+
}
|
|
184
|
+
function sizeChange(file) {
|
|
185
|
+
if (file.previousSize === undefined)
|
|
186
|
+
return `+${file.currentSize ?? 0} bytes`;
|
|
187
|
+
if (file.currentSize === undefined)
|
|
188
|
+
return `-${file.previousSize} bytes`;
|
|
189
|
+
const diff = file.currentSize - file.previousSize;
|
|
190
|
+
if (diff === 0)
|
|
191
|
+
return "same size";
|
|
192
|
+
return `${diff > 0 ? "+" : ""}${diff} bytes`;
|
|
193
|
+
}
|
|
194
|
+
function commentBody(report, reportUrl) {
|
|
195
|
+
const changed = report.files.filter((file) => file.status !== "unchanged");
|
|
196
|
+
const reportChanges = changed.filter((file) => file.kind === "report").length;
|
|
197
|
+
const screenshotChanges = changed.filter((file) => file.kind === "screenshot").length;
|
|
198
|
+
const previous = report.previousBuild
|
|
199
|
+
? `build ${report.previousBuild} → build ${report.currentBuild}`
|
|
200
|
+
: `build ${report.currentBuild}`;
|
|
201
|
+
return [
|
|
202
|
+
"## Feature spec PR diff",
|
|
203
|
+
"",
|
|
204
|
+
`[Open the diff report](${reportUrl}) for ${previous}.`,
|
|
205
|
+
"",
|
|
206
|
+
`Changed files: **${changed.length}** total, **${reportChanges}** report output, **${screenshotChanges}** screenshots.`,
|
|
207
|
+
].join("\n");
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=githubActionDiffReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubActionDiffReport.js","sourceRoot":"","sources":["../src/githubActionDiffReport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type GithubActionOptions = Record<string, string | undefined>;
|
|
2
|
+
export type FtpConfig = {
|
|
3
|
+
host: string;
|
|
4
|
+
user: string;
|
|
5
|
+
password: string;
|
|
6
|
+
port?: string;
|
|
7
|
+
secure: boolean;
|
|
8
|
+
remoteDir: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
buildNumber: string;
|
|
11
|
+
prNumber?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function ftpConfig(options: GithubActionOptions): FtpConfig;
|
|
14
|
+
export declare function uploadDirectory(localDir: string, remoteDir: string, config: FtpConfig): Promise<void>;
|
|
15
|
+
export declare function uploadFile(localFile: string, remotePath: string, config: FtpConfig): Promise<void>;
|
|
16
|
+
export declare function downloadRemoteFile(remotePath: string, localFile: string, config: FtpConfig): Promise<void>;
|
|
17
|
+
export declare function listRemoteDirectory(remoteDir: string, config: FtpConfig): Promise<string>;
|
|
18
|
+
export declare function listRemoteFilesRecursive(remoteDir: string, config: FtpConfig): Promise<string[]>;
|
|
19
|
+
export declare function parseBuildNumbersFromDirectoryListing(listing: string): string[];
|
|
20
|
+
export declare function listBuildNumbers(remoteDir: string, config: FtpConfig): Promise<string[]>;
|
|
21
|
+
export declare function pathJoin(...parts: string[]): string;
|
|
22
|
+
export declare function publicUrl(baseUrl: string, ...parts: string[]): string;
|
|
23
|
+
export declare function trimTrailingSlash(value: string): string;
|
|
24
|
+
export declare function runCurl(args: string[]): Promise<string>;
|
|
25
|
+
//# sourceMappingURL=githubActionFtp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubActionFtp.d.ts","sourceRoot":"","sources":["../src/githubActionFtp.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CA0BjE;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,iBAclB;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,iBAalB;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,iBAalB;AAED,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,mBAe7E;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,qBAuBlB;AAED,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,MAAM,YAapE;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,qBAO1E;AAED,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,UAO1C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,UAO5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,UAE9C;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,mBAoB3C"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { mkdir, readdir } from "node:fs/promises";
|
|
3
|
+
import { dirname, join, relative, sep } from "node:path";
|
|
4
|
+
export function ftpConfig(options) {
|
|
5
|
+
const host = required(options, "ftp-host", "FEATURE_SPEC_FTP_HOST");
|
|
6
|
+
const user = required(options, "ftp-user", "FEATURE_SPEC_FTP_USER");
|
|
7
|
+
const password = required(options, "ftp-password", "FEATURE_SPEC_FTP_PASSWORD");
|
|
8
|
+
const baseUrl = required(options, "base-url", "FEATURE_SPEC_REPORT_BASE_URL");
|
|
9
|
+
const remoteDir = value(options, "ftp-remote-dir", "FEATURE_SPEC_FTP_REMOTE_DIR") ?? "";
|
|
10
|
+
const buildNumber = value(options, "build-number", "FEATURE_SPEC_BUILD_NUMBER") ??
|
|
11
|
+
value(options, "build-number", "GITHUB_RUN_NUMBER") ??
|
|
12
|
+
"local";
|
|
13
|
+
const prNumber = value(options, "pr-number", "FEATURE_SPEC_PR_NUMBER");
|
|
14
|
+
const secure = booleanValue(value(options, "ftp-secure", "FEATURE_SPEC_FTP_SECURE"));
|
|
15
|
+
const port = value(options, "ftp-port", "FEATURE_SPEC_FTP_PORT");
|
|
16
|
+
if (!/^\d+$/.test(buildNumber)) {
|
|
17
|
+
throw new Error(`Build number must be numeric for FTP publishing: ${buildNumber}`);
|
|
18
|
+
}
|
|
19
|
+
if (prNumber !== undefined && !/^\d+$/.test(prNumber)) {
|
|
20
|
+
throw new Error(`Pull request number must be numeric for FTP publishing: ${prNumber}`);
|
|
21
|
+
}
|
|
22
|
+
return { host, user, password, port, secure, remoteDir, baseUrl, buildNumber, prNumber };
|
|
23
|
+
}
|
|
24
|
+
export async function uploadDirectory(localDir, remoteDir, config) {
|
|
25
|
+
const files = await walkFiles(localDir);
|
|
26
|
+
if (!files.length) {
|
|
27
|
+
throw new Error(`Report directory contains no files: ${localDir}`);
|
|
28
|
+
}
|
|
29
|
+
for (const file of files) {
|
|
30
|
+
const remotePath = pathJoin(remoteDir, relative(localDir, file).split(sep).join("/"));
|
|
31
|
+
await uploadFile(file, remotePath, config);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function uploadFile(localFile, remotePath, config) {
|
|
35
|
+
await runCurl([
|
|
36
|
+
"--silent",
|
|
37
|
+
"--show-error",
|
|
38
|
+
"--fail",
|
|
39
|
+
"--ftp-create-dirs",
|
|
40
|
+
"-u",
|
|
41
|
+
`${config.user}:${config.password}`,
|
|
42
|
+
"-T",
|
|
43
|
+
localFile,
|
|
44
|
+
ftpUrl(config, remotePath),
|
|
45
|
+
]);
|
|
46
|
+
}
|
|
47
|
+
export async function downloadRemoteFile(remotePath, localFile, config) {
|
|
48
|
+
await mkdir(dirname(localFile), { recursive: true });
|
|
49
|
+
await runCurl([
|
|
50
|
+
"--silent",
|
|
51
|
+
"--show-error",
|
|
52
|
+
"--fail",
|
|
53
|
+
"-u",
|
|
54
|
+
`${config.user}:${config.password}`,
|
|
55
|
+
"-o",
|
|
56
|
+
localFile,
|
|
57
|
+
ftpUrl(config, remotePath),
|
|
58
|
+
]);
|
|
59
|
+
}
|
|
60
|
+
export async function listRemoteDirectory(remoteDir, config) {
|
|
61
|
+
const directoryUrl = ftpUrl(config, asDirectoryPath(remoteDir));
|
|
62
|
+
const commonArgs = [
|
|
63
|
+
"--silent",
|
|
64
|
+
"--show-error",
|
|
65
|
+
"--fail",
|
|
66
|
+
"-u",
|
|
67
|
+
`${config.user}:${config.password}`,
|
|
68
|
+
];
|
|
69
|
+
try {
|
|
70
|
+
return await runCurl([...commonArgs, "--list-only", directoryUrl]);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return runCurl([...commonArgs, directoryUrl]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export async function listRemoteFilesRecursive(remoteDir, config) {
|
|
77
|
+
const files = [];
|
|
78
|
+
await visit(remoteDir);
|
|
79
|
+
return files.sort();
|
|
80
|
+
async function visit(dir) {
|
|
81
|
+
const listing = await listRemoteDirectory(dir, config);
|
|
82
|
+
const entries = parseDirectoryListing(listing);
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
if (entry === "." || entry === "..")
|
|
85
|
+
continue;
|
|
86
|
+
const child = pathJoin(dir, entry);
|
|
87
|
+
if (looksLikeFile(entry)) {
|
|
88
|
+
files.push(child);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
await visit(child);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
files.push(child);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export function parseBuildNumbersFromDirectoryListing(listing) {
|
|
101
|
+
return listing
|
|
102
|
+
.split(/\r?\n/)
|
|
103
|
+
.flatMap((line) => {
|
|
104
|
+
const hrefBuilds = Array.from(line.matchAll(/href=["'][^"']*?(\d+)\/?["']/gi), (match) => match[1]);
|
|
105
|
+
const lastToken = line.trim().split(/\s+/).at(-1) ?? "";
|
|
106
|
+
return /^\d+$/.test(lastToken) ? [...hrefBuilds, lastToken] : hrefBuilds;
|
|
107
|
+
})
|
|
108
|
+
.filter((name) => /^\d+$/.test(name));
|
|
109
|
+
}
|
|
110
|
+
export async function listBuildNumbers(remoteDir, config) {
|
|
111
|
+
try {
|
|
112
|
+
const listing = await listRemoteDirectory(remoteDir, config);
|
|
113
|
+
return Array.from(new Set(parseBuildNumbersFromDirectoryListing(listing)));
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function pathJoin(...parts) {
|
|
120
|
+
const joined = parts
|
|
121
|
+
.flatMap((part) => part.split("/"))
|
|
122
|
+
.map((part) => part.trim())
|
|
123
|
+
.filter((part) => part && part !== ".")
|
|
124
|
+
.join("/");
|
|
125
|
+
return joined;
|
|
126
|
+
}
|
|
127
|
+
export function publicUrl(baseUrl, ...parts) {
|
|
128
|
+
const path = parts
|
|
129
|
+
.flatMap((part) => part.split("/"))
|
|
130
|
+
.filter(Boolean)
|
|
131
|
+
.map(encodeURIComponent)
|
|
132
|
+
.join("/");
|
|
133
|
+
return path ? `${trimTrailingSlash(baseUrl)}/${path}` : trimTrailingSlash(baseUrl);
|
|
134
|
+
}
|
|
135
|
+
export function trimTrailingSlash(value) {
|
|
136
|
+
return value.replace(/\/+$/, "");
|
|
137
|
+
}
|
|
138
|
+
export async function runCurl(args) {
|
|
139
|
+
return new Promise((resolve, reject) => {
|
|
140
|
+
const child = spawn("curl", args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
141
|
+
let stdout = "";
|
|
142
|
+
let stderr = "";
|
|
143
|
+
child.stdout.on("data", (chunk) => {
|
|
144
|
+
stdout += chunk.toString();
|
|
145
|
+
});
|
|
146
|
+
child.stderr.on("data", (chunk) => {
|
|
147
|
+
stderr += chunk.toString();
|
|
148
|
+
});
|
|
149
|
+
child.on("error", reject);
|
|
150
|
+
child.on("close", (code) => {
|
|
151
|
+
if (code === 0) {
|
|
152
|
+
resolve(stdout);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
reject(new Error(stderr.trim() || `curl exited with status ${code}`));
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async function walkFiles(dir) {
|
|
160
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
161
|
+
const files = await Promise.all(entries.map(async (entry) => {
|
|
162
|
+
const fullPath = join(dir, entry.name);
|
|
163
|
+
if (entry.isDirectory())
|
|
164
|
+
return walkFiles(fullPath);
|
|
165
|
+
if (entry.isFile())
|
|
166
|
+
return [fullPath];
|
|
167
|
+
return [];
|
|
168
|
+
}));
|
|
169
|
+
return files.flat();
|
|
170
|
+
}
|
|
171
|
+
function parseDirectoryListing(listing) {
|
|
172
|
+
return listing
|
|
173
|
+
.split(/\r?\n/)
|
|
174
|
+
.map((line) => line.trim())
|
|
175
|
+
.filter(Boolean)
|
|
176
|
+
.map((line) => line.split(/\s+/).at(-1) ?? "")
|
|
177
|
+
.filter(Boolean);
|
|
178
|
+
}
|
|
179
|
+
function looksLikeFile(name) {
|
|
180
|
+
return /\.[a-z0-9]+$/i.test(name);
|
|
181
|
+
}
|
|
182
|
+
function ftpUrl(config, remotePath) {
|
|
183
|
+
const protocol = config.secure ? "ftps" : "ftp";
|
|
184
|
+
const port = config.port ? `:${config.port}` : "";
|
|
185
|
+
const hasTrailingSlash = remotePath.endsWith("/");
|
|
186
|
+
const encodedPath = remotePath
|
|
187
|
+
.split("/")
|
|
188
|
+
.filter(Boolean)
|
|
189
|
+
.map(encodeURIComponent)
|
|
190
|
+
.join("/");
|
|
191
|
+
const directorySlash = hasTrailingSlash ? "/" : "";
|
|
192
|
+
return `${protocol}://${config.host}${port}/${encodedPath}${directorySlash}`;
|
|
193
|
+
}
|
|
194
|
+
function asDirectoryPath(remotePath) {
|
|
195
|
+
const path = pathJoin(remotePath);
|
|
196
|
+
return path ? `${path}/` : "";
|
|
197
|
+
}
|
|
198
|
+
function required(options, key, envKey) {
|
|
199
|
+
const result = value(options, key, envKey);
|
|
200
|
+
if (!result)
|
|
201
|
+
throw new Error(`Missing required option --${key} or ${envKey}.`);
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
function value(options, key, envKey) {
|
|
205
|
+
return options[key] ?? process.env[envKey];
|
|
206
|
+
}
|
|
207
|
+
function booleanValue(value) {
|
|
208
|
+
return value === "true" || value === "1" || value === "yes";
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=githubActionFtp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubActionFtp.js","sourceRoot":"","sources":["../src/githubActionFtp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubActionOutput.d.ts","sourceRoot":"","sources":["../src/githubActionOutput.ts"],"names":[],"mappings":"AAGA,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,iBAMxD;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAMrE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
export async function writeGithubSummary(markdown) {
|
|
4
|
+
const summaryPath = process.env.GITHUB_STEP_SUMMARY;
|
|
5
|
+
if (!summaryPath)
|
|
6
|
+
return;
|
|
7
|
+
await mkdir(dirname(summaryPath), { recursive: true });
|
|
8
|
+
const existing = await readTextIfExists(summaryPath);
|
|
9
|
+
await writeFile(summaryPath, `${existing}${markdown}`, "utf8");
|
|
10
|
+
}
|
|
11
|
+
export async function writeGithubOutput(values) {
|
|
12
|
+
const outputPath = process.env.GITHUB_OUTPUT;
|
|
13
|
+
if (!outputPath)
|
|
14
|
+
return;
|
|
15
|
+
const lines = Object.entries(values).map(([key, value]) => outputLine(key, value));
|
|
16
|
+
const existing = await readTextIfExists(outputPath);
|
|
17
|
+
await writeFile(outputPath, `${existing}${lines.join("\n")}\n`, "utf8");
|
|
18
|
+
}
|
|
19
|
+
function outputLine(key, value) {
|
|
20
|
+
if (!value.includes("\n"))
|
|
21
|
+
return `${key}=${value}`;
|
|
22
|
+
const delimiter = `feature_spec_md_${Math.random().toString(36).slice(2)}`;
|
|
23
|
+
return `${key}<<${delimiter}\n${value}\n${delimiter}`;
|
|
24
|
+
}
|
|
25
|
+
async function readTextIfExists(filePath) {
|
|
26
|
+
try {
|
|
27
|
+
return await readFile(filePath, "utf8");
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return "";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=githubActionOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubActionOutput.js","sourceRoot":"","sources":["../src/githubActionOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACpD,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,WAAW,EAAE,GAAG,QAAQ,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAA8B;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC7C,IAAI,CAAC,UAAU;QAAE,OAAO;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAAa;IAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,mBAAmB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,OAAO,GAAG,GAAG,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,EAAE,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { type GithubActionOptions } from "./githubActionFtp.js";
|
|
2
|
+
export type GithubActionReportOptions = GithubActionOptions;
|
|
2
3
|
export declare function publishGithubActionReport(options: GithubActionReportOptions): Promise<void>;
|
|
3
4
|
//# sourceMappingURL=githubActionReport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"githubActionReport.d.ts","sourceRoot":"","sources":["../src/githubActionReport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"githubActionReport.d.ts","sourceRoot":"","sources":["../src/githubActionReport.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAI5D,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,yBAAyB,iBA8CnC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { dirname, join, relative, sep } from "node:path";
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
4
3
|
import { tmpdir } from "node:os";
|
|
4
|
+
import { ftpConfig, listBuildNumbers, pathJoin, publicUrl, uploadDirectory, uploadFile, } from "./githubActionFtp.js";
|
|
5
|
+
import { writeGithubOutput, writeGithubSummary } from "./githubActionOutput.js";
|
|
5
6
|
export async function publishGithubActionReport(options) {
|
|
6
7
|
const reportDir = value(options, "report-dir", "FEATURE_SPEC_REPORT_DIR") ??
|
|
7
8
|
"test-results/spec-report";
|
|
@@ -15,13 +16,13 @@ export async function publishGithubActionReport(options) {
|
|
|
15
16
|
"## Feature Spec Report",
|
|
16
17
|
"",
|
|
17
18
|
`<p><strong>Hosted HTML report:</strong> <a href=\"${escapeHtml(reportUrl)}\">${escapeHtml(reportName)}</a></p>`,
|
|
18
|
-
`<p><strong>
|
|
19
|
+
`<p><strong>Build report index:</strong> <a href=\"${escapeHtml(buildIndexUrl(config.baseUrl))}\">all builds</a></p>`,
|
|
19
20
|
"",
|
|
20
21
|
].join("\n"));
|
|
21
22
|
await writeGithubOutput({
|
|
22
23
|
"upload-github-artifact": "false",
|
|
23
24
|
"report-url": reportUrl,
|
|
24
|
-
"index-url":
|
|
25
|
+
"index-url": buildIndexUrl(config.baseUrl),
|
|
25
26
|
});
|
|
26
27
|
console.log(`Feature spec report uploaded to ${reportUrl}`);
|
|
27
28
|
return;
|
|
@@ -39,165 +40,26 @@ export async function publishGithubActionReport(options) {
|
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
42
|
async function publishReportToFtp(reportDir, config) {
|
|
42
|
-
const
|
|
43
|
+
const buildsRoot = pathJoin(config.remoteDir, "build");
|
|
44
|
+
const buildRemoteDir = pathJoin(buildsRoot, config.buildNumber);
|
|
43
45
|
await uploadDirectory(reportDir, buildRemoteDir, config);
|
|
44
|
-
const builds = await listBuildNumbers(
|
|
46
|
+
const builds = await listBuildNumbers(buildsRoot, config);
|
|
45
47
|
if (!builds.includes(config.buildNumber))
|
|
46
48
|
builds.push(config.buildNumber);
|
|
47
49
|
builds.sort((a, b) => Number(b) - Number(a));
|
|
48
50
|
const localIndex = join(tmpdir(), `feature-spec-md-build-index-${process.pid}.html`);
|
|
49
51
|
await writeFile(localIndex, renderBuildIndex(config.baseUrl, builds), "utf8");
|
|
50
|
-
await uploadFile(localIndex, pathJoin(
|
|
52
|
+
await uploadFile(localIndex, pathJoin(buildsRoot, "index.html"), config);
|
|
51
53
|
return buildUrl(config.baseUrl, config.buildNumber);
|
|
52
54
|
}
|
|
53
|
-
async function uploadDirectory(localDir, remoteDir, config) {
|
|
54
|
-
const files = await walkFiles(localDir);
|
|
55
|
-
if (!files.length) {
|
|
56
|
-
throw new Error(`Report directory contains no files: ${localDir}`);
|
|
57
|
-
}
|
|
58
|
-
for (const file of files) {
|
|
59
|
-
const remotePath = pathJoin(remoteDir, relative(localDir, file).split(sep).join("/"));
|
|
60
|
-
await uploadFile(file, remotePath, config);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
async function uploadFile(localFile, remotePath, config) {
|
|
64
|
-
await runCurl([
|
|
65
|
-
"--silent",
|
|
66
|
-
"--show-error",
|
|
67
|
-
"--fail",
|
|
68
|
-
"--ftp-create-dirs",
|
|
69
|
-
"-u",
|
|
70
|
-
`${config.user}:${config.password}`,
|
|
71
|
-
"-T",
|
|
72
|
-
localFile,
|
|
73
|
-
ftpUrl(config, remotePath),
|
|
74
|
-
]);
|
|
75
|
-
}
|
|
76
|
-
async function listBuildNumbers(remoteDir, config) {
|
|
77
|
-
try {
|
|
78
|
-
const listing = await listRemoteDirectory(remoteDir, config);
|
|
79
|
-
return Array.from(new Set(parseBuildNumbersFromDirectoryListing(listing)));
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
82
|
-
return [];
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
async function listRemoteDirectory(remoteDir, config) {
|
|
86
|
-
const directoryUrl = ftpUrl(config, asDirectoryPath(remoteDir));
|
|
87
|
-
const commonArgs = [
|
|
88
|
-
"--silent",
|
|
89
|
-
"--show-error",
|
|
90
|
-
"--fail",
|
|
91
|
-
"-u",
|
|
92
|
-
`${config.user}:${config.password}`,
|
|
93
|
-
];
|
|
94
|
-
try {
|
|
95
|
-
return await runCurl([...commonArgs, "--list-only", directoryUrl]);
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
return runCurl([...commonArgs, directoryUrl]);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
function parseBuildNumbersFromDirectoryListing(listing) {
|
|
102
|
-
return listing
|
|
103
|
-
.split(/\r?\n/)
|
|
104
|
-
.flatMap((line) => {
|
|
105
|
-
const hrefBuilds = Array.from(line.matchAll(/href=["'][^"']*?(\d+)\/?["']/gi), (match) => match[1]);
|
|
106
|
-
const lastToken = line.trim().split(/\s+/).at(-1) ?? "";
|
|
107
|
-
return /^\d+$/.test(lastToken) ? [...hrefBuilds, lastToken] : hrefBuilds;
|
|
108
|
-
})
|
|
109
|
-
.filter((name) => /^\d+$/.test(name));
|
|
110
|
-
}
|
|
111
|
-
async function runCurl(args) {
|
|
112
|
-
return new Promise((resolve, reject) => {
|
|
113
|
-
const child = spawn("curl", args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
114
|
-
let stdout = "";
|
|
115
|
-
let stderr = "";
|
|
116
|
-
child.stdout.on("data", (chunk) => {
|
|
117
|
-
stdout += chunk.toString();
|
|
118
|
-
});
|
|
119
|
-
child.stderr.on("data", (chunk) => {
|
|
120
|
-
stderr += chunk.toString();
|
|
121
|
-
});
|
|
122
|
-
child.on("error", reject);
|
|
123
|
-
child.on("close", (code) => {
|
|
124
|
-
if (code === 0) {
|
|
125
|
-
resolve(stdout);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
reject(new Error(stderr.trim() || `curl exited with status ${code}`));
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
async function walkFiles(dir) {
|
|
133
|
-
const entries = await readdir(dir, { withFileTypes: true });
|
|
134
|
-
const files = await Promise.all(entries.map(async (entry) => {
|
|
135
|
-
const fullPath = join(dir, entry.name);
|
|
136
|
-
if (entry.isDirectory())
|
|
137
|
-
return walkFiles(fullPath);
|
|
138
|
-
if (entry.isFile())
|
|
139
|
-
return [fullPath];
|
|
140
|
-
return [];
|
|
141
|
-
}));
|
|
142
|
-
return files.flat();
|
|
143
|
-
}
|
|
144
|
-
function ftpConfig(options) {
|
|
145
|
-
const host = required(options, "ftp-host", "FEATURE_SPEC_FTP_HOST");
|
|
146
|
-
const user = required(options, "ftp-user", "FEATURE_SPEC_FTP_USER");
|
|
147
|
-
const password = required(options, "ftp-password", "FEATURE_SPEC_FTP_PASSWORD");
|
|
148
|
-
const baseUrl = required(options, "base-url", "FEATURE_SPEC_REPORT_BASE_URL");
|
|
149
|
-
const remoteDir = value(options, "ftp-remote-dir", "FEATURE_SPEC_FTP_REMOTE_DIR") ?? "";
|
|
150
|
-
const buildNumber = value(options, "build-number", "GITHUB_RUN_NUMBER") ??
|
|
151
|
-
value(options, "build-number", "FEATURE_SPEC_BUILD_NUMBER") ??
|
|
152
|
-
"local";
|
|
153
|
-
const secure = booleanValue(value(options, "ftp-secure", "FEATURE_SPEC_FTP_SECURE"));
|
|
154
|
-
const port = value(options, "ftp-port", "FEATURE_SPEC_FTP_PORT");
|
|
155
|
-
if (!/^\d+$/.test(buildNumber)) {
|
|
156
|
-
throw new Error(`Build number must be numeric for FTP publishing: ${buildNumber}`);
|
|
157
|
-
}
|
|
158
|
-
return { host, user, password, port, secure, remoteDir, baseUrl, buildNumber };
|
|
159
|
-
}
|
|
160
55
|
function publishMode(value) {
|
|
161
56
|
if (value === "ftp" || value === "artifact")
|
|
162
57
|
return value;
|
|
163
58
|
throw new Error(`Unknown report publish mode: ${value}`);
|
|
164
59
|
}
|
|
165
|
-
function required(options, key, envKey) {
|
|
166
|
-
const result = value(options, key, envKey);
|
|
167
|
-
if (!result)
|
|
168
|
-
throw new Error(`Missing required option --${key} or ${envKey}.`);
|
|
169
|
-
return result;
|
|
170
|
-
}
|
|
171
60
|
function value(options, key, envKey) {
|
|
172
61
|
return options[key] ?? process.env[envKey];
|
|
173
62
|
}
|
|
174
|
-
function booleanValue(value) {
|
|
175
|
-
return value === "true" || value === "1" || value === "yes";
|
|
176
|
-
}
|
|
177
|
-
function ftpUrl(config, remotePath) {
|
|
178
|
-
const protocol = config.secure ? "ftps" : "ftp";
|
|
179
|
-
const port = config.port ? `:${config.port}` : "";
|
|
180
|
-
const hasTrailingSlash = remotePath.endsWith("/");
|
|
181
|
-
const encodedPath = remotePath
|
|
182
|
-
.split("/")
|
|
183
|
-
.filter(Boolean)
|
|
184
|
-
.map(encodeURIComponent)
|
|
185
|
-
.join("/");
|
|
186
|
-
const directorySlash = hasTrailingSlash ? "/" : "";
|
|
187
|
-
return `${protocol}://${config.host}${port}/${encodedPath}${directorySlash}`;
|
|
188
|
-
}
|
|
189
|
-
function asDirectoryPath(remotePath) {
|
|
190
|
-
const path = pathJoin(remotePath);
|
|
191
|
-
return path ? `${path}/` : "";
|
|
192
|
-
}
|
|
193
|
-
function pathJoin(...parts) {
|
|
194
|
-
const joined = parts
|
|
195
|
-
.flatMap((part) => part.split("/"))
|
|
196
|
-
.map((part) => part.trim())
|
|
197
|
-
.filter((part) => part && part !== ".")
|
|
198
|
-
.join("/");
|
|
199
|
-
return joined;
|
|
200
|
-
}
|
|
201
63
|
function renderBuildIndex(baseUrl, builds) {
|
|
202
64
|
const generatedAt = new Date().toISOString();
|
|
203
65
|
const rows = builds
|
|
@@ -208,14 +70,14 @@ function renderBuildIndex(baseUrl, builds) {
|
|
|
208
70
|
<head>
|
|
209
71
|
<meta charset=\"utf-8\">
|
|
210
72
|
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
|
|
211
|
-
<title>Feature spec reports</title>
|
|
73
|
+
<title>Feature spec build reports</title>
|
|
212
74
|
<style>
|
|
213
75
|
body { font-family: system-ui, sans-serif; max-width: 48rem; margin: 3rem auto; padding: 0 1rem; line-height: 1.5; }
|
|
214
76
|
li { margin: 0.35rem 0; }
|
|
215
77
|
</style>
|
|
216
78
|
</head>
|
|
217
79
|
<body>
|
|
218
|
-
<h1>Feature spec reports</h1>
|
|
80
|
+
<h1>Feature spec build reports</h1>
|
|
219
81
|
<p>Generated ${escapeHtml(generatedAt)}.</p>
|
|
220
82
|
<ol>
|
|
221
83
|
${rows}
|
|
@@ -225,13 +87,10 @@ ${rows}
|
|
|
225
87
|
`;
|
|
226
88
|
}
|
|
227
89
|
function buildUrl(baseUrl, build) {
|
|
228
|
-
return
|
|
229
|
-
}
|
|
230
|
-
function indexUrl(baseUrl) {
|
|
231
|
-
return `${trimTrailingSlash(baseUrl)}/`;
|
|
90
|
+
return publicUrl(baseUrl, "build", build, "");
|
|
232
91
|
}
|
|
233
|
-
function
|
|
234
|
-
return
|
|
92
|
+
function buildIndexUrl(baseUrl) {
|
|
93
|
+
return publicUrl(baseUrl, "build", "");
|
|
235
94
|
}
|
|
236
95
|
function escapeHtml(value) {
|
|
237
96
|
return value
|
|
@@ -240,30 +99,4 @@ function escapeHtml(value) {
|
|
|
240
99
|
.replace(/>/g, ">")
|
|
241
100
|
.replace(/\"/g, """);
|
|
242
101
|
}
|
|
243
|
-
async function writeGithubSummary(markdown) {
|
|
244
|
-
const summaryPath = process.env.GITHUB_STEP_SUMMARY;
|
|
245
|
-
if (!summaryPath)
|
|
246
|
-
return;
|
|
247
|
-
await mkdir(dirname(summaryPath), { recursive: true });
|
|
248
|
-
const existing = await readTextIfExists(summaryPath);
|
|
249
|
-
await writeFile(summaryPath, `${existing}${markdown}`, "utf8");
|
|
250
|
-
}
|
|
251
|
-
async function writeGithubOutput(values) {
|
|
252
|
-
const outputPath = process.env.GITHUB_OUTPUT;
|
|
253
|
-
if (!outputPath)
|
|
254
|
-
return;
|
|
255
|
-
const lines = Object.entries(values)
|
|
256
|
-
.map(([key, value]) => `${key}=${value}`)
|
|
257
|
-
.join("\n");
|
|
258
|
-
const existing = await readTextIfExists(outputPath);
|
|
259
|
-
await writeFile(outputPath, `${existing}${lines}\n`, "utf8");
|
|
260
|
-
}
|
|
261
|
-
async function readTextIfExists(filePath) {
|
|
262
|
-
try {
|
|
263
|
-
return await readFile(filePath, "utf8");
|
|
264
|
-
}
|
|
265
|
-
catch {
|
|
266
|
-
return "";
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
102
|
//# sourceMappingURL=githubActionReport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"githubActionReport.js","sourceRoot":"","sources":["../src/githubActionReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"githubActionReport.js","sourceRoot":"","sources":["../src/githubActionReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAU,GAEX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAMhF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAkC;IAElC,MAAM,SAAS,GACb,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,yBAAyB,CAAC;QACvD,0BAA0B,CAAC;IAC7B,MAAM,UAAU,GACd,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,0BAA0B,CAAC;QAClD,qBAAqB,CAAC;IACxB,MAAM,IAAI,GAAG,WAAW,CACtB,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,6BAA6B,CAAC,IAAI,UAAU,CACvE,CAAC;IAEF,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,kBAAkB,CACtB;YACE,wBAAwB;YACxB,EAAE;YACF,qDAAqD,UAAU,CAAC,SAAS,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU;YAChH,qDAAqD,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB;YACrH,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,MAAM,iBAAiB,CAAC;YACtB,wBAAwB,EAAE,OAAO;YACjC,YAAY,EAAE,SAAS;YACvB,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;SAC3C,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,MAAM,kBAAkB,CACtB;QACE,wBAAwB;QACxB,EAAE;QACF,yEAAyE,UAAU,CAAC,UAAU,CAAC,gBAAgB;QAC/G,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,MAAM,iBAAiB,CAAC;QACtB,wBAAwB,EAAE,MAAM;QAChC,eAAe,EAAE,UAAU;QAC3B,eAAe,EAAE,SAAS;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,SAAiB,EACjB,MAAoC;IAEpC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAChE,MAAM,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,IAAI,CACrB,MAAM,EAAE,EACR,+BAA+B,OAAO,CAAC,GAAG,OAAO,CAClD,CAAC;IACF,MAAM,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9E,MAAM,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IAEzE,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,KAAK,CACZ,OAAkC,EAClC,GAAW,EACX,MAAc;IAEd,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,MAAgB;IACzD,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CACR,iBAAiB,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,YAAY,UAAU,CAAC,KAAK,CAAC,WAAW,CAChG;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;;;;;;;;;;;;;iBAaQ,UAAU,CAAC,WAAW,CAAC;;EAEtC,IAAI;;;;CAIL,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE,KAAa;IAC9C,OAAO,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9B,CAAC"}
|
package/dist/reportTemplate.js
CHANGED
|
@@ -36,17 +36,17 @@ export function renderHtmlReport(specs, options = {}) {
|
|
|
36
36
|
table{border-collapse:collapse;width:100%;font-size:14px}
|
|
37
37
|
th,td{border:1px solid #d0d7de;padding:6px 8px;text-align:left;vertical-align:top}
|
|
38
38
|
th{background:#f6f8fa}
|
|
39
|
-
h1 a{color
|
|
40
|
-
h1 a:hover{text-decoration:
|
|
39
|
+
h1 a{color:#0969da;text-decoration:underline;text-underline-offset:3px}
|
|
40
|
+
h1 a:hover{text-decoration-thickness:2px}
|
|
41
41
|
.step{border-left:3px solid #d0d7de;margin:12px 0;padding:2px 0 2px 12px}
|
|
42
42
|
.step p{margin:8px 0}
|
|
43
43
|
.screenshots{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;margin:10px 0 14px}
|
|
44
44
|
.screenshot{border:1px solid #d0d7de;border-radius:8px;overflow:hidden;background:#f6f8fa}
|
|
45
45
|
.screenshot img{display:block;width:100%;height:auto}
|
|
46
46
|
.screenshot figcaption{font-size:12px;padding:8px;color:#57606a}
|
|
47
|
-
.coverage-
|
|
48
|
-
.coverage-
|
|
49
|
-
.
|
|
47
|
+
.coverage-refs{display:inline-flex;gap:2px;margin-left:4px}
|
|
48
|
+
.coverage-ref{color:inherit;text-decoration:underline;text-underline-offset:2px}
|
|
49
|
+
.line-link{color:inherit;text-decoration:underline;text-underline-offset:2px}
|
|
50
50
|
</style>
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
@@ -147,7 +147,7 @@ function renderModels(models, coverage, sourceLinks = {}) {
|
|
|
147
147
|
.map((item) => {
|
|
148
148
|
const coverageItem = modelCoverage.find((candidate) => candidate.id === item.id);
|
|
149
149
|
return `<details class="model-item">
|
|
150
|
-
<summary><code>${html(item.id)}</code>: ${html(item.title)} ${coverageBadge(coverageItem?.covered
|
|
150
|
+
<summary><code>${html(item.id)}</code>: ${html(item.title)} ${coverageBadge(coverageItem?.covered, [], coverageItem, sourceLinks)}</summary>
|
|
151
151
|
<div class="model-item-body">${renderModelItemBody(item.body)}</div>
|
|
152
152
|
</details>`;
|
|
153
153
|
})
|
|
@@ -156,7 +156,7 @@ function renderModels(models, coverage, sourceLinks = {}) {
|
|
|
156
156
|
? `<h4>Rules</h4><ul>${model.rules
|
|
157
157
|
.map((rule) => {
|
|
158
158
|
const item = ruleCoverage.find((coverageItem) => coverageItem.id === rule.id);
|
|
159
|
-
return `<li><code>${html(rule.id)}</code>: ${html(rule.text)} ${ruleCoverageBadge(item, ruleScenarioIds(rule.id, ruleScenarioLinks)
|
|
159
|
+
return `<li><code>${html(rule.id)}</code>: ${html(rule.text)} ${ruleCoverageBadge(item, ruleScenarioIds(rule.id, ruleScenarioLinks), sourceLinks)}</li>`;
|
|
160
160
|
})
|
|
161
161
|
.join("")}</ul>`
|
|
162
162
|
: ""}
|
|
@@ -179,7 +179,7 @@ function renderSpec(spec, coverage, screenshots = [], sourceLinks = {}) {
|
|
|
179
179
|
<ul>${spec.rules
|
|
180
180
|
.map((rule) => {
|
|
181
181
|
const item = ruleCoverage.find((coverageItem) => coverageItem.id === rule.id);
|
|
182
|
-
return `<li><code>${html(rule.id)}</code>: ${html(rule.text)} ${ruleCoverageBadge(item, ruleScenarioIds(rule.id, ruleScenarioLinks)
|
|
182
|
+
return `<li><code>${html(rule.id)}</code>: ${html(rule.text)} ${ruleCoverageBadge(item, ruleScenarioIds(rule.id, ruleScenarioLinks), sourceLinks)}</li>`;
|
|
183
183
|
})
|
|
184
184
|
.join("")}</ul>
|
|
185
185
|
<h3>Scenarios</h3>
|
|
@@ -189,9 +189,10 @@ function renderSpec(spec, coverage, screenshots = [], sourceLinks = {}) {
|
|
|
189
189
|
(screenshotsByLine.get(screenshotKey(spec.filePath, step.line))
|
|
190
190
|
?.length ?? 0), 0);
|
|
191
191
|
const scenarioRuleIds = ruleIdsForScenario(scenario.id, spec.rules.map((rule) => rule.id), ruleScenarioLinks);
|
|
192
|
+
const scenarioCoverageItem = scenarioCoverage.find((item) => item.id === scenario.id);
|
|
192
193
|
return `<details class="scenario" data-has-images="${screenshotCount > 0 ? "true" : "false"}">
|
|
193
|
-
<summary><code>${html(scenario.id)}</code>: ${html(scenario.title)} ${coverageBadge(
|
|
194
|
-
<div class="scenario-body">${renderScenarioRuleCoverage(scenarioRuleIds)}${scenario.steps.map((step) => renderStep(spec, step, screenshotsByLine)).join("")}</div>
|
|
194
|
+
<summary><code>${html(scenario.id)}</code>: ${html(scenario.title)} ${coverageBadge(scenarioCoverageItem?.covered, [], scenarioCoverageItem, sourceLinks)} <span class="badge">${screenshotCount} screenshot${screenshotCount === 1 ? "" : "s"}</span></summary>
|
|
195
|
+
<div class="scenario-body">${renderScenarioRuleCoverage(scenarioRuleIds)}${scenario.steps.map((step) => renderStep(spec, step, screenshotsByLine, sourceLinks)).join("")}</div>
|
|
195
196
|
</details>`;
|
|
196
197
|
})
|
|
197
198
|
.join("\n")}
|
|
@@ -277,12 +278,19 @@ function renderTable(lines) {
|
|
|
277
278
|
.join("")}</tr>`)
|
|
278
279
|
.join("")}</tbody></table></div>`;
|
|
279
280
|
}
|
|
280
|
-
function renderStep(spec, step, screenshotsByLine) {
|
|
281
|
+
function renderStep(spec, step, screenshotsByLine, sourceLinks) {
|
|
281
282
|
const screenshots = screenshotsByLine.get(screenshotKey(spec.filePath, step.line)) ?? [];
|
|
282
283
|
const evidenceBadge = screenshots.length
|
|
283
284
|
? `<span class="badge ok">${screenshots.length} screenshot${screenshots.length === 1 ? "" : "s"}</span>`
|
|
284
285
|
: `<span class="badge missing">missing screenshot</span>`;
|
|
285
|
-
return `<div class="step"><p><strong>${html(step.keyword)}</strong> ${html(step.text)}
|
|
286
|
+
return `<div class="step"><p><strong>${html(step.keyword)}</strong> ${html(step.text)} ${renderLineBadge(spec.filePath, step.line, sourceLinks)} ${evidenceBadge}</p>${renderScreenshots(screenshots)}</div>`;
|
|
287
|
+
}
|
|
288
|
+
function renderLineBadge(filePath, line, sourceLinks) {
|
|
289
|
+
const label = `line ${line}`;
|
|
290
|
+
const url = sourceLineUrl(filePath, line, sourceLinks);
|
|
291
|
+
if (!url)
|
|
292
|
+
return `<span class="badge">${html(label)}</span>`;
|
|
293
|
+
return `<a class="badge line-link" href="${html(url)}" title="${html(`${filePath}:${line}`)}" target="_blank" rel="noopener noreferrer">${html(label)}</a>`;
|
|
286
294
|
}
|
|
287
295
|
function renderScreenshots(screenshots) {
|
|
288
296
|
if (!screenshots.length)
|
|
@@ -291,33 +299,33 @@ function renderScreenshots(screenshots) {
|
|
|
291
299
|
.map((screenshot) => `<figure class="screenshot"><img src="${html(screenshot.path)}" alt="${html(screenshot.title ?? `Screenshot for ${screenshot.specPath}:${screenshot.line}`)}"><figcaption>${html(screenshot.title ?? `${screenshot.specPath}:${screenshot.line}`)}</figcaption></figure>`)
|
|
292
300
|
.join("")}</div>`;
|
|
293
301
|
}
|
|
294
|
-
function coverageBadge(covered, suffixes = []) {
|
|
302
|
+
function coverageBadge(covered, suffixes = [], item, sourceLinks = {}) {
|
|
295
303
|
return covered === undefined
|
|
296
304
|
? ""
|
|
297
305
|
: covered
|
|
298
|
-
? `<span class="badge ok">covered${suffixes.length ? ` by ${suffixes.map(html).join(" ")}` : ""}</span>`
|
|
306
|
+
? `<span class="badge ok">covered${suffixes.length ? ` by ${suffixes.map(html).join(" ")}` : ""}${renderCoverageReferenceMarkers(item, sourceLinks)}</span>`
|
|
299
307
|
: `<span class="badge missing">missing coverage</span>`;
|
|
300
308
|
}
|
|
301
|
-
function ruleCoverageBadge(ruleCoverage, scenarioIds) {
|
|
309
|
+
function ruleCoverageBadge(ruleCoverage, scenarioIds, sourceLinks) {
|
|
302
310
|
if (ruleCoverage?.covered && !scenarioIds.length) {
|
|
303
|
-
return coverageBadge(true, ["direct test"]);
|
|
311
|
+
return coverageBadge(true, ["direct test"], ruleCoverage, sourceLinks);
|
|
304
312
|
}
|
|
305
|
-
return coverageBadge(ruleCoverage?.covered, scenarioIds);
|
|
313
|
+
return coverageBadge(ruleCoverage?.covered, scenarioIds, ruleCoverage, sourceLinks);
|
|
306
314
|
}
|
|
307
|
-
function
|
|
315
|
+
function renderCoverageReferenceMarkers(item, sourceLinks) {
|
|
308
316
|
const references = uniqueCoverageReferences(item);
|
|
309
317
|
if (!references.length)
|
|
310
318
|
return "";
|
|
311
|
-
return ` <span class="coverage-
|
|
312
|
-
.map((reference) =>
|
|
313
|
-
.join("
|
|
319
|
+
return ` <span class="coverage-refs">${references
|
|
320
|
+
.map((reference, index) => renderCoverageReferenceMarker(reference, index + 1, sourceLinks))
|
|
321
|
+
.join(",")}</span>`;
|
|
314
322
|
}
|
|
315
|
-
function
|
|
323
|
+
function renderCoverageReferenceMarker(reference, index, sourceLinks) {
|
|
316
324
|
const label = coverageReferenceLabel(reference);
|
|
317
325
|
const url = coverageReferenceUrl(reference, sourceLinks);
|
|
318
326
|
if (!url)
|
|
319
|
-
return `<
|
|
320
|
-
return `<a class="coverage-
|
|
327
|
+
return `<span class="coverage-ref" title="${html(label)}">${index}</span>`;
|
|
328
|
+
return `<a class="coverage-ref" href="${html(url)}" title="${html(label)}" target="_blank" rel="noopener noreferrer">${index}</a>`;
|
|
321
329
|
}
|
|
322
330
|
function uniqueCoverageReferences(item) {
|
|
323
331
|
if (!item)
|
|
@@ -337,23 +345,19 @@ function coverageReferenceLabel(reference) {
|
|
|
337
345
|
const line = reference.line ? `:${reference.line}` : "";
|
|
338
346
|
return `${reference.filePath}${line}`;
|
|
339
347
|
}
|
|
340
|
-
function compactReferenceLabel(reference) {
|
|
341
|
-
const segments = reference.filePath.split("/").filter(Boolean);
|
|
342
|
-
const fileLabel = segments.slice(-2).join("/") || reference.filePath;
|
|
343
|
-
const line = reference.line ? `:${reference.line}` : "";
|
|
344
|
-
return `${fileLabel}${line}`;
|
|
345
|
-
}
|
|
346
348
|
function coverageReferenceUrl(reference, sourceLinks) {
|
|
349
|
+
return sourceLineUrl(reference.filePath, reference.line, sourceLinks);
|
|
350
|
+
}
|
|
351
|
+
function sourceLineUrl(filePath, line, sourceLinks) {
|
|
347
352
|
if (!sourceLinks.githubBaseUrl || !sourceLinks.githubRef)
|
|
348
353
|
return undefined;
|
|
349
354
|
const baseUrl = sourceLinks.githubBaseUrl.replace(/\/$/, "");
|
|
350
355
|
const ref = encodeURIComponent(sourceLinks.githubRef);
|
|
351
|
-
const
|
|
356
|
+
const encodedFilePath = filePath
|
|
352
357
|
.split("/")
|
|
353
358
|
.map((segment) => encodeURIComponent(segment))
|
|
354
359
|
.join("/");
|
|
355
|
-
|
|
356
|
-
return `${baseUrl}/blob/${ref}/${filePath}${line}`;
|
|
360
|
+
return `${baseUrl}/blob/${ref}/${encodedFilePath}#L${line}`;
|
|
357
361
|
}
|
|
358
362
|
function ruleScenarioIds(ruleId, ruleScenarioLinks) {
|
|
359
363
|
return Array.from(new Set(ruleScenarioLinks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportTemplate.js","sourceRoot":"","sources":["../src/reportTemplate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reportTemplate.js","sourceRoot":"","sources":["../src/reportTemplate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED