gha-workflow-testing 1.0.0 โ 1.1.1
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 +16 -19
- package/dist/check_run.d.ts +20 -0
- package/dist/check_run.d.ts.map +1 -0
- package/dist/check_run.js +110 -0
- package/dist/check_run.js.map +1 -0
- package/dist/github-api.d.ts +2 -0
- package/dist/github-api.d.ts.map +1 -1
- package/dist/github-api.js +37 -11
- package/dist/github-api.js.map +1 -1
- package/dist/global_setup.d.ts +9 -0
- package/dist/global_setup.d.ts.map +1 -0
- package/dist/global_setup.js +50 -0
- package/dist/global_setup.js.map +1 -0
- package/dist/global_teardown.d.ts +10 -0
- package/dist/global_teardown.d.ts.map +1 -0
- package/dist/global_teardown.js +77 -0
- package/dist/global_teardown.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/reporter.d.ts +28 -0
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +106 -51
- package/dist/reporter.js.map +1 -1
- package/dist/reusable_reporter.d.ts +211 -0
- package/dist/reusable_reporter.d.ts.map +1 -0
- package/dist/reusable_reporter.js +749 -0
- package/dist/reusable_reporter.js.map +1 -0
- package/dist/workflow_status.d.ts +57 -0
- package/dist/workflow_status.d.ts.map +1 -0
- package/dist/workflow_status.js +165 -0
- package/dist/workflow_status.js.map +1 -0
- package/package.json +6 -7
- package/src/check_run.ts +122 -0
- package/src/github-api.ts +44 -12
- package/src/global_setup.ts +16 -0
- package/src/global_teardown.ts +53 -0
- package/src/index.ts +3 -0
- package/src/reporter.ts +121 -21
- package/src/reusable_reporter.ts +890 -0
- package/src/workflow_status.ts +181 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reusable_reporter.js","sourceRoot":"","sources":["../src/reusable_reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workflow_status.ts
|
|
3
|
+
*
|
|
4
|
+
* Lightweight per-suite result tracker.
|
|
5
|
+
* Each test's afterAll calls `registerWorkflowResult(...)` to append
|
|
6
|
+
* one entry to `test-results/workflow-status.json` on disk.
|
|
7
|
+
* Jest globalSetup clears the file before the run starts.
|
|
8
|
+
* Jest globalTeardown reads all entries and prints the cross-workflow table.
|
|
9
|
+
*
|
|
10
|
+
* File is written synchronously to avoid race conditions when Jest runs suites
|
|
11
|
+
* sequentially (--runInBand, the recommended mode for GitHub API integration tests).
|
|
12
|
+
*/
|
|
13
|
+
export interface WorkflowStatusEntry {
|
|
14
|
+
/** The caller workflow name (e.g. "Test - ci-scan with coverage generation") */
|
|
15
|
+
workflowName: string;
|
|
16
|
+
/** Overall test result derived from Jest pass/fail counts */
|
|
17
|
+
result: 'passed' | 'failed' | 'skipped';
|
|
18
|
+
/** GitHub Actions run ID, if known */
|
|
19
|
+
runId?: number;
|
|
20
|
+
/** Total Jest tests in this suite */
|
|
21
|
+
totalTests: number;
|
|
22
|
+
/** Jest tests that passed */
|
|
23
|
+
passedTests: number;
|
|
24
|
+
/** Jest tests that failed */
|
|
25
|
+
failedTests: number;
|
|
26
|
+
/** Job-level pass/fail/skipped from the reporter rollup */
|
|
27
|
+
jobs: {
|
|
28
|
+
total: number;
|
|
29
|
+
passed: number;
|
|
30
|
+
failed: number;
|
|
31
|
+
skipped: number;
|
|
32
|
+
};
|
|
33
|
+
/** Per-job breakdown โ name + actual conclusion from the GitHub API */
|
|
34
|
+
jobDetails?: {
|
|
35
|
+
name: string;
|
|
36
|
+
conclusion: string | null;
|
|
37
|
+
}[];
|
|
38
|
+
/** Full per-workflow Markdown report (Workflow Summary + Job Summary + Detailed Results + Artifacts).
|
|
39
|
+
* Stored here so globalTeardown can attach it to the Check Run output instead of GITHUB_STEP_SUMMARY. */
|
|
40
|
+
reportMarkdown?: string;
|
|
41
|
+
/** ISO timestamp of when this entry was written */
|
|
42
|
+
recordedAt: string;
|
|
43
|
+
}
|
|
44
|
+
export interface WorkflowStatusFile {
|
|
45
|
+
entries: WorkflowStatusEntry[];
|
|
46
|
+
}
|
|
47
|
+
/** Resolved at import time so it always points to the package root. */
|
|
48
|
+
export declare const STATUS_DIR: string;
|
|
49
|
+
export declare const STATUS_FILE: string;
|
|
50
|
+
/**
|
|
51
|
+
* Append one entry to the shared `workflow-status.json`.
|
|
52
|
+
* Creates the file / directory if they don't exist yet.
|
|
53
|
+
*/
|
|
54
|
+
export declare function registerWorkflowResult(entry: WorkflowStatusEntry): void;
|
|
55
|
+
export declare function readWorkflowStatus(): WorkflowStatusFile;
|
|
56
|
+
export declare function generateCrossWorkflowMarkdown(data: WorkflowStatusFile): string;
|
|
57
|
+
//# sourceMappingURL=workflow_status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow_status.d.ts","sourceRoot":"","sources":["../src/workflow_status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,uEAAuE;IACvE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAC3D;6GACyG;IACzG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAMD,uEAAuE;AACvE,eAAO,MAAM,UAAU,QAAgD,CAAC;AACxE,eAAO,MAAM,WAAW,QAAgD,CAAC;AAMzE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAsBvE;AAMD,wBAAgB,kBAAkB,IAAI,kBAAkB,CAOvD;AAMD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAsE9E"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* workflow_status.ts
|
|
4
|
+
*
|
|
5
|
+
* Lightweight per-suite result tracker.
|
|
6
|
+
* Each test's afterAll calls `registerWorkflowResult(...)` to append
|
|
7
|
+
* one entry to `test-results/workflow-status.json` on disk.
|
|
8
|
+
* Jest globalSetup clears the file before the run starts.
|
|
9
|
+
* Jest globalTeardown reads all entries and prints the cross-workflow table.
|
|
10
|
+
*
|
|
11
|
+
* File is written synchronously to avoid race conditions when Jest runs suites
|
|
12
|
+
* sequentially (--runInBand, the recommended mode for GitHub API integration tests).
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.STATUS_FILE = exports.STATUS_DIR = void 0;
|
|
49
|
+
exports.registerWorkflowResult = registerWorkflowResult;
|
|
50
|
+
exports.readWorkflowStatus = readWorkflowStatus;
|
|
51
|
+
exports.generateCrossWorkflowMarkdown = generateCrossWorkflowMarkdown;
|
|
52
|
+
const fs = __importStar(require("fs"));
|
|
53
|
+
const path = __importStar(require("path"));
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Constants
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
/** Resolved at import time so it always points to the package root. */
|
|
58
|
+
exports.STATUS_DIR = path.resolve(__dirname, '..', 'test-results');
|
|
59
|
+
exports.STATUS_FILE = path.join(exports.STATUS_DIR, 'workflow-status.json');
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Writers (called from test afterAll)
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
/**
|
|
64
|
+
* Append one entry to the shared `workflow-status.json`.
|
|
65
|
+
* Creates the file / directory if they don't exist yet.
|
|
66
|
+
*/
|
|
67
|
+
function registerWorkflowResult(entry) {
|
|
68
|
+
try {
|
|
69
|
+
fs.mkdirSync(exports.STATUS_DIR, { recursive: true });
|
|
70
|
+
let data = { entries: [] };
|
|
71
|
+
if (fs.existsSync(exports.STATUS_FILE)) {
|
|
72
|
+
try {
|
|
73
|
+
data = JSON.parse(fs.readFileSync(exports.STATUS_FILE, 'utf8'));
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
data = { entries: [] };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Replace existing entry for the same workflow name (suite re-run scenario)
|
|
80
|
+
data.entries = data.entries.filter((e) => e.workflowName !== entry.workflowName);
|
|
81
|
+
data.entries.push(entry);
|
|
82
|
+
fs.writeFileSync(exports.STATUS_FILE, JSON.stringify(data, null, 2), 'utf8');
|
|
83
|
+
console.log(`๐ Registered workflow status: [${entry.result.toUpperCase()}] ${entry.workflowName}`);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.warn(`โ ๏ธ Could not write workflow status: ${err}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Readers (called from globalTeardown)
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
function readWorkflowStatus() {
|
|
93
|
+
if (!fs.existsSync(exports.STATUS_FILE))
|
|
94
|
+
return { entries: [] };
|
|
95
|
+
try {
|
|
96
|
+
return JSON.parse(fs.readFileSync(exports.STATUS_FILE, 'utf8'));
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return { entries: [] };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Markdown generation (used by globalTeardown)
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
function generateCrossWorkflowMarkdown(data) {
|
|
106
|
+
if (data.entries.length === 0)
|
|
107
|
+
return '';
|
|
108
|
+
const lines = [];
|
|
109
|
+
lines.push('# ๐๏ธ Cross-Workflow Test Summary');
|
|
110
|
+
lines.push('');
|
|
111
|
+
lines.push(`**Suites run:** ${data.entries.length}`);
|
|
112
|
+
lines.push('');
|
|
113
|
+
// โโ Overall table โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
114
|
+
lines.push('## ๐ Overall Results');
|
|
115
|
+
lines.push('');
|
|
116
|
+
lines.push('| Workflow | Result | Tests โ
| Tests โ | Tests Total | Jobs โ
| Jobs โ | Jobs โญ๏ธ | Jobs Total | Run ID |');
|
|
117
|
+
lines.push('|----------|--------|----------|----------|-------------|---------|---------|---------|------------|--------|');
|
|
118
|
+
for (const e of data.entries) {
|
|
119
|
+
const resultIcon = e.result === 'passed' ? 'โ
' : e.result === 'failed' ? 'โ' : 'โญ๏ธ';
|
|
120
|
+
const runLink = e.runId ? `[${e.runId}]` : 'โ';
|
|
121
|
+
lines.push(`| ${resultIcon} \`${e.workflowName}\` | **${e.result}** ` +
|
|
122
|
+
`| ${e.passedTests} | ${e.failedTests} | ${e.totalTests} ` +
|
|
123
|
+
`| ${e.jobs.passed} | ${e.jobs.failed} | ${e.jobs.skipped} | ${e.jobs.total} ` +
|
|
124
|
+
`| ${runLink} |`);
|
|
125
|
+
}
|
|
126
|
+
// โโ Totals row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
127
|
+
const totalTests = data.entries.reduce((s, e) => s + e.totalTests, 0);
|
|
128
|
+
const passedTests = data.entries.reduce((s, e) => s + e.passedTests, 0);
|
|
129
|
+
const failedTests = data.entries.reduce((s, e) => s + e.failedTests, 0);
|
|
130
|
+
const totalJobs = data.entries.reduce((s, e) => s + e.jobs.total, 0);
|
|
131
|
+
const passedJobs = data.entries.reduce((s, e) => s + e.jobs.passed, 0);
|
|
132
|
+
const failedJobs = data.entries.reduce((s, e) => s + e.jobs.failed, 0);
|
|
133
|
+
const skippedJobs = data.entries.reduce((s, e) => s + e.jobs.skipped, 0);
|
|
134
|
+
const allPassed = data.entries.every((e) => e.result === 'passed');
|
|
135
|
+
lines.push(`| **TOTAL** | ${allPassed ? 'โ
all passed' : 'โ some failed'} ` +
|
|
136
|
+
`| **${passedTests}** | **${failedTests}** | **${totalTests}** ` +
|
|
137
|
+
`| **${passedJobs}** | **${failedJobs}** | **${skippedJobs}** | **${totalJobs}** | โ |`);
|
|
138
|
+
lines.push('');
|
|
139
|
+
// โโ Per-workflow job detail (collapsible) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
140
|
+
const failedEntries = data.entries.filter((e) => e.result !== 'passed');
|
|
141
|
+
if (failedEntries.length > 0) {
|
|
142
|
+
lines.push('## ๐ Job Detail (failed workflows)');
|
|
143
|
+
lines.push('');
|
|
144
|
+
for (const e of failedEntries) {
|
|
145
|
+
if (!e.jobDetails || e.jobDetails.length === 0)
|
|
146
|
+
continue;
|
|
147
|
+
lines.push(`<details><summary><strong>${e.workflowName}</strong> โ job conclusions</summary>`);
|
|
148
|
+
lines.push('');
|
|
149
|
+
lines.push('| Job | Conclusion |');
|
|
150
|
+
lines.push('|-----|------------|');
|
|
151
|
+
for (const { name, conclusion } of e.jobDetails) {
|
|
152
|
+
const icon = conclusion === 'success' ? 'โ
' :
|
|
153
|
+
conclusion === 'skipped' ? 'โญ๏ธ' :
|
|
154
|
+
conclusion === 'neutral' ? 'โน๏ธ' :
|
|
155
|
+
conclusion === null ? '๐' : 'โ';
|
|
156
|
+
lines.push(`| ${icon} \`${name}\` | ${conclusion ?? 'in-progress'} |`);
|
|
157
|
+
}
|
|
158
|
+
lines.push('');
|
|
159
|
+
lines.push('</details>');
|
|
160
|
+
lines.push('');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return lines.join('\n');
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=workflow_status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow_status.js","sourceRoot":"","sources":["../src/workflow_status.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DH,wDAsBC;AAMD,gDAOC;AAMD,sEAsEC;AAvKD,uCAAyB;AACzB,2CAA6B;AAuC7B,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,uEAAuE;AAC1D,QAAA,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC3D,QAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,sBAAsB,CAAC,CAAC;AAEzE,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,KAA0B;IAC/D,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,kBAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,IAAI,IAAI,GAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,mBAAW,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAW,EAAE,MAAM,CAAC,CAAuB,CAAC;YAChF,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,EAAE,CAAC,aAAa,CAAC,mBAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,mCAAmC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACtG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,SAAgB,kBAAkB;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAW,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACxD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAW,EAAE,MAAM,CAAC,CAAuB,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,SAAgB,6BAA6B,CAAC,IAAwB;IACpE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,0EAA0E;IAC1E,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;IACxH,KAAK,CAAC,IAAI,CAAC,+GAA+G,CAAC,CAAC;IAE5H,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,KAAK,CAAC,IAAI,CACR,KAAK,UAAU,MAAM,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,MAAM,KAAK;YACxD,KAAK,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,UAAU,GAAG;YAC1D,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG;YAC9E,KAAK,OAAO,IAAI,CACnB,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,MAAM,UAAU,GAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,WAAW,GAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,UAAU,GAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAEvE,KAAK,CAAC,IAAI,CACR,iBAAiB,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,GAAG;QAC9D,OAAO,WAAW,UAAU,WAAW,UAAU,UAAU,KAAK;QAChE,OAAO,UAAU,UAAU,UAAU,UAAU,WAAW,UAAU,SAAS,UAAU,CAC1F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,yEAAyE;IACzE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IACxE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACzD,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,YAAY,uCAAuC,CAAC,CAAC;YAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBAChD,MAAM,IAAI,GACR,UAAU,KAAK,SAAS,CAAE,CAAC,CAAC,GAAG,CAAC,CAAC;oBACjC,UAAU,KAAK,SAAS,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC;wBAClC,UAAU,KAAK,SAAS,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC;4BAClC,UAAU,KAAK,IAAI,CAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,QAAQ,UAAU,IAAI,aAAa,IAAI,CAAC,CAAC;YACzE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gha-workflow-testing",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "TypeScript library for testing GitHub Actions workflows with detailed reporting",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -17,10 +17,9 @@
|
|
|
17
17
|
"workflow",
|
|
18
18
|
"testing",
|
|
19
19
|
"ci-cd",
|
|
20
|
-
"typescript"
|
|
21
|
-
"dops"
|
|
20
|
+
"typescript"
|
|
22
21
|
],
|
|
23
|
-
"author": "
|
|
22
|
+
"author": "Rohit Patil",
|
|
24
23
|
"license": "MIT",
|
|
25
24
|
"files": [
|
|
26
25
|
"dist",
|
|
@@ -29,12 +28,12 @@
|
|
|
29
28
|
],
|
|
30
29
|
"repository": {
|
|
31
30
|
"type": "git",
|
|
32
|
-
"url": "git+
|
|
31
|
+
"url": "git+tobeadded"
|
|
33
32
|
},
|
|
34
33
|
"bugs": {
|
|
35
|
-
"url": "https://github.com/
|
|
34
|
+
"url": "https://github.com/tba/issues"
|
|
36
35
|
},
|
|
37
|
-
"homepage": "https://github.com/
|
|
36
|
+
"homepage": "https://github.com/tba/#readme",
|
|
38
37
|
"devDependencies": {
|
|
39
38
|
"@types/jest": "^29.5.0",
|
|
40
39
|
"@types/node": "^20.0.0",
|
package/src/check_run.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* check_run.ts
|
|
3
|
+
*
|
|
4
|
+
* Creates one GitHub Check Run per workflow test suite after all suites
|
|
5
|
+
* have finished (called from globalTeardown).
|
|
6
|
+
*
|
|
7
|
+
* Requirements (automatically satisfied when running inside GitHub Actions):
|
|
8
|
+
* - GITHUB_TOKEN โ needs `checks: write` permission
|
|
9
|
+
* - GITHUB_REPOSITORY โ set automatically
|
|
10
|
+
* - GITHUB_SHA โ commit SHA the check attaches to
|
|
11
|
+
*
|
|
12
|
+
* When any of the above are absent (local dev run) the function is a no-op.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import axios from 'axios';
|
|
16
|
+
import { WorkflowStatusFile, WorkflowStatusEntry } from './workflow_status';
|
|
17
|
+
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Helpers
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
/** Build the Markdown body for a single Check Run's "details" pane. */
|
|
23
|
+
function buildCheckRunBody(e: WorkflowStatusEntry): string {
|
|
24
|
+
const lines: string[] = [];
|
|
25
|
+
|
|
26
|
+
lines.push(`## Test suite: \`${e.workflowName}\``);
|
|
27
|
+
lines.push('');
|
|
28
|
+
lines.push(`| Metric | Value |`);
|
|
29
|
+
lines.push(`|--------|-------|`);
|
|
30
|
+
lines.push(`| Result | **${e.result}** |`);
|
|
31
|
+
lines.push(`| Tests passed | ${e.passedTests} / ${e.totalTests} |`);
|
|
32
|
+
lines.push(`| Tests failed | ${e.failedTests} |`);
|
|
33
|
+
lines.push(`| Jobs passed | ${e.jobs.passed} / ${e.jobs.total} |`);
|
|
34
|
+
lines.push(`| Jobs failed | ${e.jobs.failed} |`);
|
|
35
|
+
lines.push(`| Jobs skipped | ${e.jobs.skipped} |`);
|
|
36
|
+
if (e.runId) lines.push(`| Run ID | \`${e.runId}\` |`);
|
|
37
|
+
lines.push('');
|
|
38
|
+
|
|
39
|
+
if (e.jobDetails && e.jobDetails.length > 0) {
|
|
40
|
+
lines.push('### Job conclusions');
|
|
41
|
+
lines.push('');
|
|
42
|
+
lines.push('| Job | Conclusion |');
|
|
43
|
+
lines.push('|-----|------------|');
|
|
44
|
+
for (const { name, conclusion } of e.jobDetails) {
|
|
45
|
+
const icon =
|
|
46
|
+
conclusion === 'success' ? 'โ
' :
|
|
47
|
+
conclusion === 'skipped' ? 'โญ๏ธ' :
|
|
48
|
+
conclusion === 'neutral' ? 'โน๏ธ' :
|
|
49
|
+
conclusion === null ? '๐' : 'โ';
|
|
50
|
+
lines.push(`| ${icon} \`${name}\` | ${conclusion ?? 'in-progress'} |`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return lines.join('\n');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Public API
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Post one Check Run per suite to the GitHub Checks API.
|
|
63
|
+
* Safe to call unconditionally โ skips silently outside of GitHub Actions.
|
|
64
|
+
*/
|
|
65
|
+
export async function createCheckRuns(data: WorkflowStatusFile): Promise<void> {
|
|
66
|
+
const token = process.env.GITHUB_TOKEN;
|
|
67
|
+
const repo = process.env.GITHUB_REPOSITORY;
|
|
68
|
+
const sha = process.env.GITHUB_SHA;
|
|
69
|
+
|
|
70
|
+
if (!token || !repo || !sha) {
|
|
71
|
+
console.log('โน๏ธ Skipping Check Run creation (not running in GitHub Actions)');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const client = axios.create({
|
|
76
|
+
baseURL: 'https://api.github.com',
|
|
77
|
+
headers: {
|
|
78
|
+
Authorization: `Bearer ${token}`,
|
|
79
|
+
Accept: 'application/vnd.github+json',
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
for (const e of data.entries) {
|
|
84
|
+
const conclusion: 'success' | 'failure' =
|
|
85
|
+
e.result === 'passed' ? 'success' : 'failure';
|
|
86
|
+
|
|
87
|
+
const failedJobNames = (e.jobDetails ?? [])
|
|
88
|
+
.filter((j) => j.conclusion !== 'success' && j.conclusion !== 'skipped' && j.conclusion !== 'neutral' && j.conclusion !== null)
|
|
89
|
+
.map((j) => j.name);
|
|
90
|
+
|
|
91
|
+
const summary =
|
|
92
|
+
conclusion === 'success'
|
|
93
|
+
? `โ
All ${e.totalTests} tests passed across ${e.jobs.total} jobs.`
|
|
94
|
+
: `โ ${e.failedTests} test(s) failed. Failed jobs: ${failedJobNames.join(', ') || 'see details'}.`;
|
|
95
|
+
|
|
96
|
+
const payload = {
|
|
97
|
+
name: `${e.workflowName} โ Test Suite`,
|
|
98
|
+
head_sha: sha,
|
|
99
|
+
status: 'completed' as const,
|
|
100
|
+
conclusion,
|
|
101
|
+
completed_at: e.recordedAt,
|
|
102
|
+
output: {
|
|
103
|
+
title: `${conclusion === 'success' ? 'โ
' : 'โ'} ${e.workflowName}: ${e.passedTests}/${e.totalTests} tests passed`,
|
|
104
|
+
summary,
|
|
105
|
+
// Full workflow report: Workflow Summary + Job Summary + Detailed Results + Artifacts
|
|
106
|
+
text: e.reportMarkdown ?? buildCheckRunBody(e),
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
const resp = await client.post(`/repos/${repo}/check-runs`, payload);
|
|
112
|
+
console.log(
|
|
113
|
+
`โ
Check Run created: "${payload.name}" โ ${conclusion} ` +
|
|
114
|
+
`(id: ${resp.data.id}, url: ${resp.data.html_url})`
|
|
115
|
+
);
|
|
116
|
+
} catch (err: any) {
|
|
117
|
+
const status = err?.response?.status;
|
|
118
|
+
const message = err?.response?.data?.message ?? err?.message;
|
|
119
|
+
console.warn(`โ ๏ธ Could not create Check Run for "${e.workflowName}": [${status}] ${message}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
package/src/github-api.ts
CHANGED
|
@@ -3,6 +3,8 @@ import axios, { AxiosInstance } from 'axios';
|
|
|
3
3
|
export interface JobInfo {
|
|
4
4
|
status: string;
|
|
5
5
|
conclusion: string | null;
|
|
6
|
+
/** The name of the reusable workflow that defined this job (from `workflow_name` in the API) */
|
|
7
|
+
workflowName?: string;
|
|
6
8
|
}
|
|
7
9
|
|
|
8
10
|
export interface Jobs {
|
|
@@ -53,22 +55,50 @@ export class GitHubAPI {
|
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
async getLatestRun(workflowName: string): Promise<number> {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
// Step 1: find the workflow definition by display name so we can query
|
|
59
|
+
// its runs directly instead of scanning all recent runs (avoids pagination issues).
|
|
60
|
+
console.log(`๐ก Looking up workflow definition for: ${workflowName}`);
|
|
61
|
+
const wfResponse = await this.client.get(`/repos/${this.repo}/actions/workflows`, {
|
|
62
|
+
params: { per_page: 100 },
|
|
63
|
+
});
|
|
64
|
+
const workflow = (wfResponse.data.workflows as any[]).find(
|
|
65
|
+
(w) => w.name === workflowName
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
if (workflow) {
|
|
69
|
+
console.log(`โ
Found workflow definition: ${workflowName} (id: ${workflow.id})`);
|
|
70
|
+
const runsResponse = await this.client.get(
|
|
71
|
+
`/repos/${this.repo}/actions/workflows/${workflow.id}/runs`,
|
|
72
|
+
{ params: { per_page: 1 } }
|
|
73
|
+
);
|
|
74
|
+
const runs = runsResponse.data.workflow_runs as any[];
|
|
75
|
+
if (runs.length > 0) {
|
|
76
|
+
console.log(`โ
Latest run ID: ${runs[0].id}`);
|
|
77
|
+
return runs[0].id;
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`Workflow '${workflowName}' found but has no runs`);
|
|
80
|
+
}
|
|
62
81
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
82
|
+
// Fallback: scan recent runs across all workflows (handles workflows whose
|
|
83
|
+
// display name differs from what /actions/workflows returns).
|
|
84
|
+
console.log(`โ ๏ธ Workflow definition not found, falling back to paginated run search`);
|
|
85
|
+
for (let page = 1; page <= 5; page++) {
|
|
86
|
+
const response = await this.client.get(`/repos/${this.repo}/actions/runs`, {
|
|
87
|
+
params: { per_page: 100, page },
|
|
88
|
+
});
|
|
89
|
+
const runs = response.data.workflow_runs as any[];
|
|
90
|
+
console.log(` Page ${page}: ${runs.length} runs`);
|
|
91
|
+
for (const run of runs) {
|
|
92
|
+
if (run.name === workflowName) {
|
|
93
|
+
console.log(`โ
Found matching run on page ${page}: ${workflowName} (ID: ${run.id})`);
|
|
94
|
+
return run.id;
|
|
95
|
+
}
|
|
67
96
|
}
|
|
97
|
+
if (runs.length < 100) break; // no more pages
|
|
68
98
|
}
|
|
69
99
|
|
|
70
|
-
console.log(`โ Workflow '${workflowName}' not found
|
|
71
|
-
throw new Error(
|
|
100
|
+
console.log(`โ Workflow '${workflowName}' not found`);
|
|
101
|
+
throw new Error(`Workflow run not found: '${workflowName}'`);
|
|
72
102
|
}
|
|
73
103
|
|
|
74
104
|
async getJobs(runId: number): Promise<Jobs> {
|
|
@@ -84,6 +114,8 @@ export class GitHubAPI {
|
|
|
84
114
|
result[job.name] = {
|
|
85
115
|
status: job.status,
|
|
86
116
|
conclusion: job.conclusion,
|
|
117
|
+
// workflow_name identifies which reusable workflow defined this job
|
|
118
|
+
workflowName: job.workflow_name ?? undefined,
|
|
87
119
|
};
|
|
88
120
|
}
|
|
89
121
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* global_setup.ts
|
|
3
|
+
*
|
|
4
|
+
* Jest globalSetup โ runs once before any test suite.
|
|
5
|
+
* Clears the shared workflow-status.json so stale results from a previous
|
|
6
|
+
* run don't bleed into the new one.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import { STATUS_DIR, STATUS_FILE } from './workflow_status';
|
|
11
|
+
|
|
12
|
+
module.exports = async function globalSetup(): Promise<void> {
|
|
13
|
+
fs.mkdirSync(STATUS_DIR, { recursive: true });
|
|
14
|
+
fs.writeFileSync(STATUS_FILE, JSON.stringify({ entries: [] }, null, 2), 'utf8');
|
|
15
|
+
console.log(`\n๐งน Cleared workflow status file: ${STATUS_FILE}`);
|
|
16
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* global_teardown.ts
|
|
3
|
+
*
|
|
4
|
+
* Jest globalTeardown โ runs once after all test suites complete.
|
|
5
|
+
* Reads the accumulated workflow-status.json and:
|
|
6
|
+
* 1. Prints the cross-workflow table to the console.
|
|
7
|
+
* 2. Appends it to GITHUB_STEP_SUMMARY (when running in CI).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import {
|
|
12
|
+
readWorkflowStatus,
|
|
13
|
+
generateCrossWorkflowMarkdown,
|
|
14
|
+
STATUS_FILE,
|
|
15
|
+
} from './workflow_status';
|
|
16
|
+
import { createCheckRuns } from './check_run';
|
|
17
|
+
|
|
18
|
+
module.exports = async function globalTeardown(): Promise<void> {
|
|
19
|
+
console.log('\n' + '='.repeat(80));
|
|
20
|
+
console.log('๐๏ธ CROSS-WORKFLOW SUMMARY');
|
|
21
|
+
console.log('='.repeat(80));
|
|
22
|
+
|
|
23
|
+
const data = readWorkflowStatus();
|
|
24
|
+
|
|
25
|
+
if (data.entries.length === 0) {
|
|
26
|
+
console.log('โ ๏ธ No workflow results recorded โ did any test call registerWorkflowResult()?');
|
|
27
|
+
console.log('='.repeat(80) + '\n');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const markdown = generateCrossWorkflowMarkdown(data);
|
|
32
|
+
|
|
33
|
+
// โโ Console output โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
34
|
+
console.log(markdown);
|
|
35
|
+
console.log('='.repeat(80) + '\n');
|
|
36
|
+
|
|
37
|
+
// โโ GitHub Actions step summary โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
38
|
+
const summaryFile = process.env.GITHUB_STEP_SUMMARY;
|
|
39
|
+
if (summaryFile) {
|
|
40
|
+
try {
|
|
41
|
+
fs.appendFileSync(summaryFile, markdown, 'utf8');
|
|
42
|
+
console.log('โ
Cross-workflow summary written to GITHUB_STEP_SUMMARY');
|
|
43
|
+
} catch (err) {
|
|
44
|
+
console.warn(`โ ๏ธ Could not write to GITHUB_STEP_SUMMARY: ${err}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// โโ Keep the file around for debugging; optionally remove it โโโโโโโโโ
|
|
49
|
+
console.log(`๐ Detailed results: ${STATUS_FILE}`);
|
|
50
|
+
|
|
51
|
+
// โโ GitHub Check Runs (one per suite) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
52
|
+
await createCheckRuns(data);
|
|
53
|
+
};
|