gha-workflow-testing 1.0.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.
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GitHubAPI = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ class GitHubAPI {
9
+ constructor() {
10
+ this.repo = process.env.GITHUB_REPOSITORY || '';
11
+ const token = process.env.GITHUB_TOKEN || '';
12
+ if (!this.repo || !token) {
13
+ throw new Error('GITHUB_REPOSITORY and GITHUB_TOKEN environment variables are required');
14
+ }
15
+ console.log(`šŸ” GitHub API initialized for repo: ${this.repo}`);
16
+ this.client = axios_1.default.create({
17
+ baseURL: 'https://api.github.com',
18
+ headers: {
19
+ Authorization: `Bearer ${token}`,
20
+ Accept: 'application/vnd.github+json',
21
+ },
22
+ });
23
+ }
24
+ async getLatestRun(workflowName) {
25
+ const url = `/repos/${this.repo}/actions/runs`;
26
+ console.log(`šŸ“” Fetching workflow runs from: ${url}`);
27
+ const response = await this.client.get(url);
28
+ const runs = response.data.workflow_runs;
29
+ console.log(`Found ${runs.length} total workflow runs`);
30
+ for (const run of runs) {
31
+ if (run.name === workflowName) {
32
+ console.log(`āœ… Found matching workflow: ${workflowName} (ID: ${run.id})`);
33
+ return run.id;
34
+ }
35
+ }
36
+ console.log(`āŒ Workflow '${workflowName}' not found in recent runs`);
37
+ throw new Error('Workflow run not found');
38
+ }
39
+ async getJobs(runId) {
40
+ const url = `/repos/${this.repo}/actions/runs/${runId}/jobs`;
41
+ console.log(`šŸ“” Fetching jobs for run ID ${runId}`);
42
+ const response = await this.client.get(url);
43
+ const jobs = response.data.jobs;
44
+ console.log(`Found ${jobs.length} jobs in this run`);
45
+ const result = {};
46
+ for (const job of jobs) {
47
+ result[job.name] = {
48
+ status: job.status,
49
+ conclusion: job.conclusion,
50
+ };
51
+ }
52
+ return result;
53
+ }
54
+ async waitForJobsCompletion(runId, timeout = 300, pollInterval = 10) {
55
+ console.log(`ā³ Waiting for all jobs to complete (timeout: ${timeout}s)...`);
56
+ const startTime = Date.now();
57
+ while (Date.now() - startTime < timeout * 1000) {
58
+ const jobs = await this.getJobs(runId);
59
+ const incompleteJobs = Object.entries(jobs)
60
+ .filter(([_, info]) => info.conclusion === null)
61
+ .map(([name]) => name);
62
+ if (incompleteJobs.length === 0) {
63
+ console.log('āœ… All jobs completed!');
64
+ return jobs;
65
+ }
66
+ console.log(`ā³ Waiting for ${incompleteJobs.length} job(s) to complete: ${incompleteJobs.join(', ')}`);
67
+ await this.sleep(pollInterval * 1000);
68
+ }
69
+ throw new Error(`Jobs did not complete within ${timeout} seconds`);
70
+ }
71
+ async getSteps(runId, jobName) {
72
+ const url = `/repos/${this.repo}/actions/runs/${runId}/jobs`;
73
+ console.log(`šŸ“” Fetching steps for job: ${jobName}`);
74
+ const response = await this.client.get(url);
75
+ const jobs = response.data.jobs;
76
+ const job = jobs.find((j) => j.name === jobName);
77
+ if (!job) {
78
+ throw new Error(`Job '${jobName}' not found in run ${runId}`);
79
+ }
80
+ const result = {};
81
+ for (const step of job.steps) {
82
+ result[step.name] = {
83
+ conclusion: step.conclusion,
84
+ number: step.number,
85
+ };
86
+ }
87
+ console.log(`Found ${Object.keys(result).length} steps in job '${jobName}'`);
88
+ return result;
89
+ }
90
+ async getArtifacts(runId) {
91
+ const url = `/repos/${this.repo}/actions/runs/${runId}/artifacts`;
92
+ console.log(`šŸ“” Fetching artifacts for run ID ${runId}`);
93
+ const response = await this.client.get(url);
94
+ const artifacts = response.data.artifacts;
95
+ console.log(`Found ${artifacts.length} artifacts`);
96
+ const result = {};
97
+ for (const artifact of artifacts) {
98
+ result[artifact.name] = {
99
+ id: artifact.id,
100
+ size: artifact.size_in_bytes,
101
+ expired: artifact.expired,
102
+ url: artifact.archive_download_url,
103
+ };
104
+ }
105
+ return result;
106
+ }
107
+ async downloadArtifact(artifactId) {
108
+ const url = `/repos/${this.repo}/actions/artifacts/${artifactId}/zip`;
109
+ console.log(`šŸ“„ Downloading artifact ID ${artifactId}`);
110
+ const response = await this.client.get(url, { responseType: 'arraybuffer' });
111
+ // In a real implementation, you would unzip the response
112
+ // For simplicity, returning a placeholder
113
+ console.log('āš ļø Artifact download implemented - unzipping not yet implemented in this example');
114
+ return {
115
+ 'artifact-file.zip': Buffer.from(response.data),
116
+ };
117
+ }
118
+ sleep(ms) {
119
+ return new Promise((resolve) => setTimeout(resolve, ms));
120
+ }
121
+ }
122
+ exports.GitHubAPI = GitHubAPI;
123
+ //# sourceMappingURL=github-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-api.js","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './github-api';
2
+ export * from './assertions';
3
+ export * from './reporter';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./github-api"), exports);
18
+ __exportStar(require("./assertions"), exports);
19
+ __exportStar(require("./reporter"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,+CAA6B;AAC7B,6CAA2B"}
@@ -0,0 +1,43 @@
1
+ export interface StepResult {
2
+ tested: boolean;
3
+ result: string;
4
+ conclusion?: string;
5
+ expected?: string;
6
+ actual?: string;
7
+ }
8
+ export interface JobResult {
9
+ tested: boolean;
10
+ result: string;
11
+ conclusion?: string;
12
+ expected?: string;
13
+ actual?: string;
14
+ steps: {
15
+ [stepName: string]: StepResult;
16
+ };
17
+ }
18
+ export interface ArtifactResult {
19
+ tested: boolean;
20
+ result: string;
21
+ checks: string[];
22
+ }
23
+ export declare class WorkflowTestReporter {
24
+ private workflowName;
25
+ private jobs;
26
+ private artifacts;
27
+ private runId?;
28
+ private allJobsLoaded;
29
+ constructor(workflowName: string);
30
+ setRunId(runId: string | number): void;
31
+ loadAllJobsAndSteps(api: any): Promise<void>;
32
+ addJob(jobName: string): void;
33
+ recordJobTest(jobName: string, passed: boolean, expected?: string, actual?: string): void;
34
+ recordStepTest(jobName: string, stepName: string, passed: boolean, expected?: string, actual?: string): void;
35
+ addArtifact(artifactName: string): void;
36
+ recordArtifactTest(artifactName: string, checkType: string, passed: boolean, expected?: string, actual?: string): void;
37
+ generateMarkdown(): string;
38
+ writeToGithubSummary(): void;
39
+ printReport(): void;
40
+ }
41
+ export declare function getReporter(workflowName?: string): WorkflowTestReporter;
42
+ export declare function resetReporter(): void;
43
+ //# sourceMappingURL=reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAwC;IACpD,OAAO,CAAC,SAAS,CAAkD;IACnE,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;gBAElB,YAAY,EAAE,MAAM;IAIhC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhC,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ClD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU7B,aAAa,CACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAaP,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAqBP,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAUvC,kBAAkB,CAChB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IA2BP,gBAAgB,IAAI,MAAM;IAiH1B,oBAAoB,IAAI,IAAI;IAuB5B,WAAW,IAAI,IAAI;CAKpB;AAKD,wBAAgB,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAWvE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.WorkflowTestReporter = void 0;
37
+ exports.getReporter = getReporter;
38
+ exports.resetReporter = resetReporter;
39
+ const fs = __importStar(require("fs"));
40
+ class WorkflowTestReporter {
41
+ constructor(workflowName) {
42
+ this.jobs = {};
43
+ this.artifacts = {};
44
+ this.allJobsLoaded = false;
45
+ this.workflowName = workflowName;
46
+ }
47
+ setRunId(runId) {
48
+ this.runId = String(runId);
49
+ }
50
+ async loadAllJobsAndSteps(api) {
51
+ if (this.allJobsLoaded || !this.runId) {
52
+ return;
53
+ }
54
+ try {
55
+ // Get all jobs from the run
56
+ const jobsData = await api.getJobs(Number(this.runId));
57
+ for (const [jobName, jobInfo] of Object.entries(jobsData)) {
58
+ // Add job if not already tracked
59
+ if (!this.jobs[jobName]) {
60
+ this.jobs[jobName] = {
61
+ tested: false,
62
+ result: 'Not Tested',
63
+ conclusion: jobInfo.conclusion || undefined,
64
+ steps: {},
65
+ };
66
+ }
67
+ // Get all steps for this job
68
+ try {
69
+ const stepsData = await api.getSteps(Number(this.runId), jobName);
70
+ for (const [stepName, stepInfo] of Object.entries(stepsData)) {
71
+ if (!this.jobs[jobName].steps[stepName]) {
72
+ this.jobs[jobName].steps[stepName] = {
73
+ tested: false,
74
+ result: 'Not Tested',
75
+ conclusion: stepInfo.conclusion || undefined,
76
+ };
77
+ }
78
+ }
79
+ }
80
+ catch (error) {
81
+ console.log(`āš ļø Could not load steps for ${jobName}: ${error}`);
82
+ }
83
+ }
84
+ this.allJobsLoaded = true;
85
+ }
86
+ catch (error) {
87
+ console.log(`āš ļø Could not load all jobs and steps: ${error}`);
88
+ }
89
+ }
90
+ addJob(jobName) {
91
+ if (!this.jobs[jobName]) {
92
+ this.jobs[jobName] = {
93
+ tested: false,
94
+ result: 'Not Tested',
95
+ steps: {},
96
+ };
97
+ }
98
+ }
99
+ recordJobTest(jobName, passed, expected, actual) {
100
+ this.addJob(jobName);
101
+ this.jobs[jobName].tested = true;
102
+ this.jobs[jobName].expected = expected;
103
+ this.jobs[jobName].actual = actual;
104
+ if (passed) {
105
+ this.jobs[jobName].result = `āœ… Passed (expected: ${expected})`;
106
+ }
107
+ else {
108
+ this.jobs[jobName].result = `āŒ Failed (expected: ${expected}, got: ${actual})`;
109
+ }
110
+ }
111
+ recordStepTest(jobName, stepName, passed, expected, actual) {
112
+ this.addJob(jobName);
113
+ if (!this.jobs[jobName].steps[stepName]) {
114
+ this.jobs[jobName].steps[stepName] = {
115
+ tested: false,
116
+ result: 'Not Tested',
117
+ };
118
+ }
119
+ this.jobs[jobName].steps[stepName].tested = true;
120
+ this.jobs[jobName].steps[stepName].expected = expected;
121
+ this.jobs[jobName].steps[stepName].actual = actual;
122
+ if (passed) {
123
+ this.jobs[jobName].steps[stepName].result = `āœ… Passed (expected: ${expected})`;
124
+ }
125
+ else {
126
+ this.jobs[jobName].steps[stepName].result = `āŒ Failed (expected: ${expected}, got: ${actual})`;
127
+ }
128
+ }
129
+ addArtifact(artifactName) {
130
+ if (!this.artifacts[artifactName]) {
131
+ this.artifacts[artifactName] = {
132
+ tested: false,
133
+ result: 'Not Tested',
134
+ checks: [],
135
+ };
136
+ }
137
+ }
138
+ recordArtifactTest(artifactName, checkType, passed, expected, actual) {
139
+ this.addArtifact(artifactName);
140
+ this.artifacts[artifactName].tested = true;
141
+ let result;
142
+ if (passed) {
143
+ result = `āœ… ${checkType}`;
144
+ if (expected) {
145
+ result += ` (expected: ${expected})`;
146
+ }
147
+ }
148
+ else {
149
+ result = `āŒ ${checkType} failed`;
150
+ if (expected && actual) {
151
+ result += ` (expected: ${expected}, got: ${actual})`;
152
+ }
153
+ }
154
+ this.artifacts[artifactName].checks.push(result);
155
+ // Update overall artifact result
156
+ if (!passed) {
157
+ this.artifacts[artifactName].result = 'āŒ Failed';
158
+ }
159
+ else if (this.artifacts[artifactName].result !== 'āŒ Failed') {
160
+ this.artifacts[artifactName].result = 'āœ… Passed';
161
+ }
162
+ }
163
+ generateMarkdown() {
164
+ const lines = [];
165
+ // Header
166
+ lines.push('# 🧪 Workflow Test Report');
167
+ lines.push('');
168
+ lines.push(`**Workflow:** \`${this.workflowName}\``);
169
+ if (this.runId) {
170
+ lines.push(`**Run ID:** \`${this.runId}\``);
171
+ }
172
+ lines.push('');
173
+ // Summary stats
174
+ const totalJobs = Object.keys(this.jobs).length;
175
+ const testedJobs = Object.values(this.jobs).filter((j) => j.tested).length;
176
+ const passedJobs = Object.values(this.jobs).filter((j) => j.result.startsWith('āœ…')).length;
177
+ const totalSteps = Object.values(this.jobs).reduce((sum, job) => sum + Object.keys(job.steps).length, 0);
178
+ const testedSteps = Object.values(this.jobs).reduce((sum, job) => sum + Object.values(job.steps).filter((step) => step.tested).length, 0);
179
+ const passedSteps = Object.values(this.jobs).reduce((sum, job) => sum +
180
+ Object.values(job.steps).filter((step) => step.result.startsWith('āœ…'))
181
+ .length, 0);
182
+ const totalArtifacts = Object.keys(this.artifacts).length;
183
+ const testedArtifacts = Object.values(this.artifacts).filter((a) => a.tested).length;
184
+ const passedArtifacts = Object.values(this.artifacts).filter((a) => a.result.startsWith('āœ…')).length;
185
+ lines.push('## šŸ“Š Summary');
186
+ lines.push('');
187
+ lines.push('| Metric | Count |');
188
+ lines.push('|--------|-------|');
189
+ lines.push(`| Total Jobs | ${totalJobs} |`);
190
+ lines.push(`| Jobs Tested | ${testedJobs} |`);
191
+ lines.push(`| Jobs Passed | ${passedJobs} |`);
192
+ lines.push(`| Total Steps | ${totalSteps} |`);
193
+ lines.push(`| Steps Tested | ${testedSteps} |`);
194
+ lines.push(`| Steps Passed | ${passedSteps} |`);
195
+ lines.push(`| Total Artifacts | ${totalArtifacts} |`);
196
+ lines.push(`| Artifacts Tested | ${testedArtifacts} |`);
197
+ lines.push(`| Artifacts Passed | ${passedArtifacts} |`);
198
+ lines.push('');
199
+ // Job details
200
+ lines.push('## šŸ“‹ Detailed Test Results');
201
+ lines.push('');
202
+ for (const [jobName, jobInfo] of Object.entries(this.jobs)) {
203
+ const testedIcon = jobInfo.tested ? 'āœ…' : '⬜';
204
+ lines.push(`### ${testedIcon} ${jobName}`);
205
+ lines.push('');
206
+ // Job-level table
207
+ lines.push('| Type | Name | Tested | Result |');
208
+ lines.push('|------|------|--------|--------|');
209
+ lines.push(`| **Job** | ${jobName} | ${jobInfo.tested ? 'āœ… Yes' : 'āŒ No'} | ${jobInfo.result} |`);
210
+ // Steps table
211
+ if (Object.keys(jobInfo.steps).length > 0) {
212
+ for (const [stepName, stepInfo] of Object.entries(jobInfo.steps)) {
213
+ const tested = stepInfo.tested ? 'āœ… Yes' : 'āŒ No';
214
+ lines.push(`| Step | ${stepName} | ${tested} | ${stepInfo.result} |`);
215
+ }
216
+ }
217
+ lines.push('');
218
+ }
219
+ // Artifacts section
220
+ if (Object.keys(this.artifacts).length > 0) {
221
+ lines.push('## šŸ“¦ Artifacts');
222
+ lines.push('');
223
+ lines.push('| Artifact | Tested | Overall Result | Checks |');
224
+ lines.push('|----------|--------|----------------|--------|');
225
+ for (const [artifactName, artifactInfo] of Object.entries(this.artifacts)) {
226
+ const tested = artifactInfo.tested ? 'āœ… Yes' : 'āŒ No';
227
+ const result = artifactInfo.result;
228
+ // Combine all checks into one cell
229
+ const checks = artifactInfo.checks.length > 0
230
+ ? artifactInfo.checks.join('<br>')
231
+ : 'No checks performed';
232
+ lines.push(`| ${artifactName} | ${tested} | ${result} | ${checks} |`);
233
+ }
234
+ lines.push('');
235
+ }
236
+ return lines.join('\n');
237
+ }
238
+ writeToGithubSummary() {
239
+ console.log('\nšŸ” Attempting to write test report...');
240
+ const summaryFile = process.env.GITHUB_STEP_SUMMARY;
241
+ if (!summaryFile) {
242
+ console.log('āš ļø GITHUB_STEP_SUMMARY environment variable not set');
243
+ console.log(' Report will only be printed to console');
244
+ return;
245
+ }
246
+ console.log(`šŸ“ Writing report to: ${summaryFile}`);
247
+ const markdown = this.generateMarkdown();
248
+ try {
249
+ fs.appendFileSync(summaryFile, markdown);
250
+ console.log('āœ… Test report successfully written to GitHub Actions summary');
251
+ }
252
+ catch (error) {
253
+ console.log(`āŒ Failed to write report: ${error}`);
254
+ }
255
+ }
256
+ printReport() {
257
+ console.log('\n' + '='.repeat(80));
258
+ console.log(this.generateMarkdown());
259
+ console.log('='.repeat(80) + '\n');
260
+ }
261
+ }
262
+ exports.WorkflowTestReporter = WorkflowTestReporter;
263
+ // Global reporter instance
264
+ let globalReporter = null;
265
+ function getReporter(workflowName) {
266
+ if (!globalReporter) {
267
+ if (!workflowName) {
268
+ throw new Error('Reporter not initialized. Call getReporter(workflowName) first.');
269
+ }
270
+ globalReporter = new WorkflowTestReporter(workflowName);
271
+ }
272
+ return globalReporter;
273
+ }
274
+ function resetReporter() {
275
+ globalReporter = null;
276
+ }
277
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "gha-workflow-testing",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript library for testing GitHub Actions workflows with detailed reporting",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "test": "jest --forceExit",
10
+ "test:watch": "jest --watch",
11
+ "lint": "eslint src/**/*.ts",
12
+ "format": "prettier --write \"src/**/*.ts\"",
13
+ "prepublishOnly": "npm run build"
14
+ },
15
+ "keywords": [
16
+ "github-actions",
17
+ "workflow",
18
+ "testing",
19
+ "ci-cd",
20
+ "typescript",
21
+ "dops"
22
+ ],
23
+ "author": "DOPS Team",
24
+ "license": "MIT",
25
+ "files": [
26
+ "dist",
27
+ "src",
28
+ "README.md"
29
+ ],
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/global-data-analytics/dops-gha-tests.git"
33
+ },
34
+ "bugs": {
35
+ "url": "https://github.com/global-data-analytics/dops-gha-tests/issues"
36
+ },
37
+ "homepage": "https://github.com/global-data-analytics/dops-gha-tests#readme",
38
+ "devDependencies": {
39
+ "@types/jest": "^29.5.0",
40
+ "@types/node": "^20.0.0",
41
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
42
+ "@typescript-eslint/parser": "^6.0.0",
43
+ "eslint": "^8.40.0",
44
+ "jest": "^29.5.0",
45
+ "prettier": "^3.0.0",
46
+ "ts-jest": "^29.1.0",
47
+ "typescript": "^5.0.0"
48
+ },
49
+ "dependencies": {
50
+ "axios": "^1.6.0"
51
+ }
52
+ }