@generacy-ai/generacy-plugin-github-actions 0.0.0-preview-20260304013206
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/LICENSE +191 -0
- package/dist/client.d.ts +46 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +109 -0
- package/dist/client.js.map +1 -0
- package/dist/events/emitter.d.ts +40 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +104 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/types.d.ts +61 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +48 -0
- package/dist/events/types.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/operations/artifacts.d.ts +46 -0
- package/dist/operations/artifacts.d.ts.map +1 -0
- package/dist/operations/artifacts.js +166 -0
- package/dist/operations/artifacts.js.map +1 -0
- package/dist/operations/check-runs.d.ts +58 -0
- package/dist/operations/check-runs.d.ts.map +1 -0
- package/dist/operations/check-runs.js +188 -0
- package/dist/operations/check-runs.js.map +1 -0
- package/dist/operations/jobs.d.ts +35 -0
- package/dist/operations/jobs.d.ts.map +1 -0
- package/dist/operations/jobs.js +134 -0
- package/dist/operations/jobs.js.map +1 -0
- package/dist/operations/runs.d.ts +49 -0
- package/dist/operations/runs.d.ts.map +1 -0
- package/dist/operations/runs.js +164 -0
- package/dist/operations/runs.js.map +1 -0
- package/dist/operations/workflows.d.ts +32 -0
- package/dist/operations/workflows.d.ts.map +1 -0
- package/dist/operations/workflows.js +138 -0
- package/dist/operations/workflows.js.map +1 -0
- package/dist/plugin.d.ts +254 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +471 -0
- package/dist/plugin.js.map +1 -0
- package/dist/polling/status-poller.d.ts +58 -0
- package/dist/polling/status-poller.d.ts.map +1 -0
- package/dist/polling/status-poller.js +167 -0
- package/dist/polling/status-poller.js.map +1 -0
- package/dist/polling/types.d.ts +54 -0
- package/dist/polling/types.d.ts.map +1 -0
- package/dist/polling/types.js +21 -0
- package/dist/polling/types.js.map +1 -0
- package/dist/types/artifacts.d.ts +49 -0
- package/dist/types/artifacts.d.ts.map +1 -0
- package/dist/types/artifacts.js +22 -0
- package/dist/types/artifacts.js.map +1 -0
- package/dist/types/check-runs.d.ts +123 -0
- package/dist/types/check-runs.d.ts.map +1 -0
- package/dist/types/check-runs.js +13 -0
- package/dist/types/check-runs.js.map +1 -0
- package/dist/types/config.d.ts +131 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +40 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/events.d.ts +69 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +19 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/jobs.d.ts +71 -0
- package/dist/types/jobs.d.ts.map +1 -0
- package/dist/types/jobs.js +19 -0
- package/dist/types/jobs.js.map +1 -0
- package/dist/types/workflows.d.ts +101 -0
- package/dist/types/workflows.d.ts.map +1 -0
- package/dist/types/workflows.js +19 -0
- package/dist/types/workflows.js.map +1 -0
- package/dist/utils/errors.d.ts +77 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +122 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/validation.d.ts +74 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +86 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +62 -0
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
import { AbstractCICDPlugin } from '@generacy-ai/latency-plugin-ci-cd';
|
|
2
|
+
import { createClient } from './client.js';
|
|
3
|
+
import { parseConfig } from './types/config.js';
|
|
4
|
+
import { triggerWorkflow, triggerWorkflowDispatch, getWorkflowId, listWorkflows } from './operations/workflows.js';
|
|
5
|
+
import { getWorkflowRun, listWorkflowRuns, cancelWorkflowRun, rerunWorkflowRun, rerunFailedJobs, } from './operations/runs.js';
|
|
6
|
+
import { getJobs, getJob, getJobLogs, getFailedJobs } from './operations/jobs.js';
|
|
7
|
+
import { listArtifacts, getArtifact, downloadArtifact, deleteArtifact, listRepoArtifacts, } from './operations/artifacts.js';
|
|
8
|
+
import { createCheckRun, updateCheckRun, getCheckRun, listCheckRuns, listCheckRunsForSuite, } from './operations/check-runs.js';
|
|
9
|
+
import { createStatusPoller, pollUntilComplete, waitForRun } from './polling/status-poller.js';
|
|
10
|
+
import { createEventEmitter } from './events/emitter.js';
|
|
11
|
+
/**
|
|
12
|
+
* Plugin manifest declaration
|
|
13
|
+
*/
|
|
14
|
+
export const PLUGIN_MANIFEST = {
|
|
15
|
+
name: '@generacy-ai/generacy-plugin-github-actions',
|
|
16
|
+
version: '0.1.0',
|
|
17
|
+
provides: ['GitHubActions', 'CICDPipeline'],
|
|
18
|
+
requires: [
|
|
19
|
+
{ facet: 'EventBus', optional: false },
|
|
20
|
+
],
|
|
21
|
+
optionalRequires: [
|
|
22
|
+
{ facet: 'IssueTracker', optional: true },
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* GitHubActionsPlugin - Main plugin class
|
|
27
|
+
*
|
|
28
|
+
* Extends AbstractCICDPlugin to provide the standard CICDPipeline interface
|
|
29
|
+
* (triggerPipeline, getPipelineStatus, cancelPipeline, listPipelines) while
|
|
30
|
+
* also exposing GitHub Actions-specific functionality.
|
|
31
|
+
*/
|
|
32
|
+
export class GitHubActionsPlugin extends AbstractCICDPlugin {
|
|
33
|
+
client;
|
|
34
|
+
config;
|
|
35
|
+
eventEmitter;
|
|
36
|
+
issueTracker = null;
|
|
37
|
+
constructor(config, eventBus) {
|
|
38
|
+
super();
|
|
39
|
+
this.config = parseConfig(config);
|
|
40
|
+
this.client = createClient(this.config);
|
|
41
|
+
this.eventEmitter = eventBus ? createEventEmitter(eventBus) : null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Set the issue tracker facet for optional integration
|
|
45
|
+
*/
|
|
46
|
+
setIssueTracker(tracker) {
|
|
47
|
+
this.issueTracker = tracker;
|
|
48
|
+
}
|
|
49
|
+
// ==========================================================================
|
|
50
|
+
// AbstractCICDPlugin abstract method implementations
|
|
51
|
+
// ==========================================================================
|
|
52
|
+
/**
|
|
53
|
+
* Trigger a pipeline run (implements abstract method).
|
|
54
|
+
*
|
|
55
|
+
* Maps to GitHub Actions workflow dispatch.
|
|
56
|
+
*/
|
|
57
|
+
async doTrigger(pipelineId, options) {
|
|
58
|
+
const ref = options?.branch ?? 'main';
|
|
59
|
+
const run = await triggerWorkflowDispatch(this.client, pipelineId, ref, options?.parameters);
|
|
60
|
+
return this.mapWorkflowRunToPipelineRun(run);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get pipeline run status (implements abstract method).
|
|
64
|
+
*
|
|
65
|
+
* Maps to getWorkflowRun.
|
|
66
|
+
*/
|
|
67
|
+
async doGetStatus(runId) {
|
|
68
|
+
const run = await getWorkflowRun(this.client, parseInt(runId, 10));
|
|
69
|
+
return this.mapWorkflowRunToPipelineRun(run);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Cancel a pipeline run (implements abstract method).
|
|
73
|
+
*
|
|
74
|
+
* Maps to cancelWorkflowRun.
|
|
75
|
+
*/
|
|
76
|
+
async doCancel(runId) {
|
|
77
|
+
await cancelWorkflowRun(this.client, parseInt(runId, 10));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* List available pipelines (implements abstract method).
|
|
81
|
+
*
|
|
82
|
+
* Maps to listWorkflows.
|
|
83
|
+
*/
|
|
84
|
+
async doListPipelines() {
|
|
85
|
+
const workflows = await listWorkflows(this.client);
|
|
86
|
+
return workflows.map((workflow) => this.mapWorkflowToPipeline(workflow));
|
|
87
|
+
}
|
|
88
|
+
// ==========================================================================
|
|
89
|
+
// GitHub Actions-specific public API (for backwards compatibility)
|
|
90
|
+
// ==========================================================================
|
|
91
|
+
/**
|
|
92
|
+
* Trigger a workflow by filename or ID
|
|
93
|
+
*/
|
|
94
|
+
async triggerWorkflow(params) {
|
|
95
|
+
return triggerWorkflow(this.client, params);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Trigger a workflow dispatch event
|
|
99
|
+
*/
|
|
100
|
+
async triggerWorkflowDispatch(workflow, ref, inputs) {
|
|
101
|
+
return triggerWorkflowDispatch(this.client, workflow, ref, inputs);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get workflow ID by filename
|
|
105
|
+
*/
|
|
106
|
+
async getWorkflowId(filename) {
|
|
107
|
+
return getWorkflowId(this.client, filename);
|
|
108
|
+
}
|
|
109
|
+
// ============================================
|
|
110
|
+
// Run Monitoring & Control
|
|
111
|
+
// ============================================
|
|
112
|
+
/**
|
|
113
|
+
* Get a workflow run by ID
|
|
114
|
+
*/
|
|
115
|
+
async getWorkflowRun(runId) {
|
|
116
|
+
return getWorkflowRun(this.client, runId);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* List workflow runs for a workflow
|
|
120
|
+
*/
|
|
121
|
+
async listWorkflowRuns(workflow, options) {
|
|
122
|
+
return listWorkflowRuns(this.client, workflow, options);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Cancel a workflow run
|
|
126
|
+
*/
|
|
127
|
+
async cancelWorkflowRun(runId) {
|
|
128
|
+
return cancelWorkflowRun(this.client, runId);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Re-run a workflow
|
|
132
|
+
*/
|
|
133
|
+
async rerunWorkflowRun(runId) {
|
|
134
|
+
return rerunWorkflowRun(this.client, runId);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Re-run failed jobs in a workflow
|
|
138
|
+
*/
|
|
139
|
+
async rerunFailedJobs(runId) {
|
|
140
|
+
return rerunFailedJobs(this.client, runId);
|
|
141
|
+
}
|
|
142
|
+
// ============================================
|
|
143
|
+
// Job & Log Operations
|
|
144
|
+
// ============================================
|
|
145
|
+
/**
|
|
146
|
+
* Get jobs for a workflow run
|
|
147
|
+
*/
|
|
148
|
+
async getJobs(runId) {
|
|
149
|
+
return getJobs(this.client, runId);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get a specific job by ID
|
|
153
|
+
*/
|
|
154
|
+
async getJob(jobId) {
|
|
155
|
+
return getJob(this.client, jobId);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Download job logs
|
|
159
|
+
*/
|
|
160
|
+
async getJobLogs(jobId) {
|
|
161
|
+
return getJobLogs(this.client, jobId);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get failed jobs from a workflow run
|
|
165
|
+
*/
|
|
166
|
+
async getFailedJobs(runId) {
|
|
167
|
+
return getFailedJobs(this.client, runId);
|
|
168
|
+
}
|
|
169
|
+
// ============================================
|
|
170
|
+
// Artifact Operations
|
|
171
|
+
// ============================================
|
|
172
|
+
/**
|
|
173
|
+
* List artifacts for a workflow run
|
|
174
|
+
*/
|
|
175
|
+
async listArtifacts(runId) {
|
|
176
|
+
return listArtifacts(this.client, runId);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get an artifact by ID
|
|
180
|
+
*/
|
|
181
|
+
async getArtifact(artifactId) {
|
|
182
|
+
return getArtifact(this.client, artifactId);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Download an artifact
|
|
186
|
+
*/
|
|
187
|
+
async downloadArtifact(artifactId) {
|
|
188
|
+
return downloadArtifact(this.client, artifactId);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Delete an artifact
|
|
192
|
+
*/
|
|
193
|
+
async deleteArtifact(artifactId) {
|
|
194
|
+
return deleteArtifact(this.client, artifactId);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* List all artifacts in the repository
|
|
198
|
+
*/
|
|
199
|
+
async listRepoArtifacts(options) {
|
|
200
|
+
return listRepoArtifacts(this.client, options);
|
|
201
|
+
}
|
|
202
|
+
// ============================================
|
|
203
|
+
// Check Run Operations
|
|
204
|
+
// ============================================
|
|
205
|
+
/**
|
|
206
|
+
* Create a check run
|
|
207
|
+
*/
|
|
208
|
+
async createCheckRun(params) {
|
|
209
|
+
const check = await createCheckRun(this.client, params);
|
|
210
|
+
return check;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Update a check run
|
|
214
|
+
*/
|
|
215
|
+
async updateCheckRun(checkRunId, params) {
|
|
216
|
+
const check = await updateCheckRun(this.client, checkRunId, params);
|
|
217
|
+
// Emit event if check is completed
|
|
218
|
+
if (params.status === 'completed' && this.eventEmitter) {
|
|
219
|
+
this.eventEmitter.emitCheckRunCompleted(check);
|
|
220
|
+
}
|
|
221
|
+
return check;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get a check run by ID
|
|
225
|
+
*/
|
|
226
|
+
async getCheckRun(checkRunId) {
|
|
227
|
+
return getCheckRun(this.client, checkRunId);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* List check runs for a ref
|
|
231
|
+
*/
|
|
232
|
+
async listCheckRuns(ref, options) {
|
|
233
|
+
return listCheckRuns(this.client, ref, options);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* List check runs for a check suite
|
|
237
|
+
*/
|
|
238
|
+
async listCheckRunsForSuite(checkSuiteId, options) {
|
|
239
|
+
return listCheckRunsForSuite(this.client, checkSuiteId, options);
|
|
240
|
+
}
|
|
241
|
+
// ============================================
|
|
242
|
+
// Polling Operations
|
|
243
|
+
// ============================================
|
|
244
|
+
/**
|
|
245
|
+
* Create a status poller
|
|
246
|
+
*/
|
|
247
|
+
createPoller(config) {
|
|
248
|
+
return createStatusPoller(this.client, config);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Poll for a workflow run to complete
|
|
252
|
+
*/
|
|
253
|
+
async pollUntilComplete(runId, config) {
|
|
254
|
+
const run = await pollUntilComplete(this.client, runId, {
|
|
255
|
+
...config,
|
|
256
|
+
onComplete: async (completedRun) => {
|
|
257
|
+
config?.onComplete?.(completedRun);
|
|
258
|
+
await this.handleWorkflowComplete(completedRun);
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
return run;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Wait for a workflow run with timeout
|
|
265
|
+
*/
|
|
266
|
+
async waitForRun(runId, timeoutMs, intervalMs) {
|
|
267
|
+
return waitForRun(this.client, runId, timeoutMs, intervalMs);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Start polling and return a handle
|
|
271
|
+
*/
|
|
272
|
+
startPolling(runId, config) {
|
|
273
|
+
const poller = this.createPoller({
|
|
274
|
+
...config,
|
|
275
|
+
onComplete: async (run) => {
|
|
276
|
+
config?.onComplete?.(run);
|
|
277
|
+
await this.handleWorkflowComplete(run);
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
return poller.start(runId);
|
|
281
|
+
}
|
|
282
|
+
// ============================================
|
|
283
|
+
// High-Level Operations
|
|
284
|
+
// ============================================
|
|
285
|
+
/**
|
|
286
|
+
* Trigger a workflow and wait for completion
|
|
287
|
+
*/
|
|
288
|
+
async triggerAndWait(params, pollingConfig) {
|
|
289
|
+
const run = await this.triggerWorkflow(params);
|
|
290
|
+
return this.pollUntilComplete(run.id, pollingConfig);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get the configured CI workflow name
|
|
294
|
+
*/
|
|
295
|
+
getCIWorkflow() {
|
|
296
|
+
return this.config.workflows?.ci;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get the configured deploy workflow name
|
|
300
|
+
*/
|
|
301
|
+
getDeployWorkflow() {
|
|
302
|
+
return this.config.workflows?.deploy;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get the configured test workflow name
|
|
306
|
+
*/
|
|
307
|
+
getTestWorkflow() {
|
|
308
|
+
return this.config.workflows?.test;
|
|
309
|
+
}
|
|
310
|
+
// ============================================
|
|
311
|
+
// Issue Tracker Integration
|
|
312
|
+
// ============================================
|
|
313
|
+
/**
|
|
314
|
+
* Post workflow status to an issue
|
|
315
|
+
*
|
|
316
|
+
* @param issueNumber - The issue number to comment on
|
|
317
|
+
* @param run - The workflow run to report on
|
|
318
|
+
*/
|
|
319
|
+
async postWorkflowStatusToIssue(issueNumber, run) {
|
|
320
|
+
if (!this.issueTracker) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
const statusEmoji = this.getStatusEmoji(run.conclusion);
|
|
324
|
+
const duration = this.formatDuration(run);
|
|
325
|
+
const comment = `## ${statusEmoji} Workflow ${run.conclusion ?? 'completed'}
|
|
326
|
+
|
|
327
|
+
**Workflow**: \`${run.path}\`
|
|
328
|
+
**Branch**: \`${run.head_branch}\`
|
|
329
|
+
**Commit**: \`${run.head_sha.substring(0, 7)}\`
|
|
330
|
+
**Duration**: ${duration}
|
|
331
|
+
|
|
332
|
+
[View workflow run](${run.html_url})`;
|
|
333
|
+
await this.issueTracker.addComment(String(issueNumber), comment);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Post failed workflow details to an issue
|
|
337
|
+
*
|
|
338
|
+
* @param issueNumber - The issue number to comment on
|
|
339
|
+
* @param run - The failed workflow run
|
|
340
|
+
* @param failedJobs - The failed jobs in the run
|
|
341
|
+
*/
|
|
342
|
+
async postWorkflowFailureToIssue(issueNumber, run, failedJobs) {
|
|
343
|
+
if (!this.issueTracker) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const jobDetails = failedJobs
|
|
347
|
+
.map((job) => `- **${job.name}**: ${job.conclusion}`)
|
|
348
|
+
.join('\n');
|
|
349
|
+
const comment = `## :x: Workflow failed
|
|
350
|
+
|
|
351
|
+
**Workflow**: \`${run.path}\`
|
|
352
|
+
**Branch**: \`${run.head_branch}\`
|
|
353
|
+
**Commit**: \`${run.head_sha.substring(0, 7)}\`
|
|
354
|
+
|
|
355
|
+
### Failed Jobs
|
|
356
|
+
${jobDetails || 'No job details available'}
|
|
357
|
+
|
|
358
|
+
[View workflow run](${run.html_url})`;
|
|
359
|
+
await this.issueTracker.addComment(String(issueNumber), comment);
|
|
360
|
+
}
|
|
361
|
+
// ============================================
|
|
362
|
+
// Private Methods
|
|
363
|
+
// ============================================
|
|
364
|
+
/**
|
|
365
|
+
* Handle workflow completion - emit events and optionally comment on issues
|
|
366
|
+
*/
|
|
367
|
+
async handleWorkflowComplete(run) {
|
|
368
|
+
if (!this.eventEmitter)
|
|
369
|
+
return;
|
|
370
|
+
const failedJobs = run.conclusion === 'failure'
|
|
371
|
+
? await this.getFailedJobs(run.id)
|
|
372
|
+
: [];
|
|
373
|
+
this.eventEmitter.emitForWorkflowRun(run, failedJobs);
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Get status emoji for workflow conclusion
|
|
377
|
+
*/
|
|
378
|
+
getStatusEmoji(conclusion) {
|
|
379
|
+
switch (conclusion) {
|
|
380
|
+
case 'success':
|
|
381
|
+
return ':white_check_mark:';
|
|
382
|
+
case 'failure':
|
|
383
|
+
return ':x:';
|
|
384
|
+
case 'cancelled':
|
|
385
|
+
return ':no_entry_sign:';
|
|
386
|
+
case 'timed_out':
|
|
387
|
+
return ':alarm_clock:';
|
|
388
|
+
case 'skipped':
|
|
389
|
+
return ':fast_forward:';
|
|
390
|
+
default:
|
|
391
|
+
return ':grey_question:';
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Format workflow duration for display
|
|
396
|
+
*/
|
|
397
|
+
formatDuration(run) {
|
|
398
|
+
const startTime = run.run_started_at
|
|
399
|
+
? new Date(run.run_started_at).getTime()
|
|
400
|
+
: new Date(run.created_at).getTime();
|
|
401
|
+
const endTime = new Date(run.updated_at).getTime();
|
|
402
|
+
const durationMs = Math.max(0, endTime - startTime);
|
|
403
|
+
const seconds = Math.floor(durationMs / 1000);
|
|
404
|
+
const minutes = Math.floor(seconds / 60);
|
|
405
|
+
const hours = Math.floor(minutes / 60);
|
|
406
|
+
if (hours > 0) {
|
|
407
|
+
return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
|
|
408
|
+
}
|
|
409
|
+
if (minutes > 0) {
|
|
410
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
411
|
+
}
|
|
412
|
+
return `${seconds}s`;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Map a GitHub Actions WorkflowRun to a Latency PipelineRun.
|
|
416
|
+
*/
|
|
417
|
+
mapWorkflowRunToPipelineRun(run) {
|
|
418
|
+
return {
|
|
419
|
+
id: String(run.id),
|
|
420
|
+
pipelineId: run.workflow_id ? String(run.workflow_id) : run.path ?? 'unknown',
|
|
421
|
+
status: this.mapWorkflowStatus(run.status, run.conclusion),
|
|
422
|
+
createdAt: new Date(run.created_at),
|
|
423
|
+
startedAt: run.run_started_at ? new Date(run.run_started_at) : undefined,
|
|
424
|
+
completedAt: run.status === 'completed' ? new Date(run.updated_at) : undefined,
|
|
425
|
+
logsUrl: run.html_url,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Map GitHub Actions workflow status to Latency PipelineStatus.
|
|
430
|
+
*/
|
|
431
|
+
mapWorkflowStatus(status, conclusion) {
|
|
432
|
+
if (status === 'completed') {
|
|
433
|
+
switch (conclusion) {
|
|
434
|
+
case 'success':
|
|
435
|
+
return 'completed';
|
|
436
|
+
case 'failure':
|
|
437
|
+
case 'timed_out':
|
|
438
|
+
return 'failed';
|
|
439
|
+
case 'cancelled':
|
|
440
|
+
case 'skipped':
|
|
441
|
+
return 'cancelled';
|
|
442
|
+
default:
|
|
443
|
+
return 'failed';
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
// Non-completed status
|
|
447
|
+
if (status === 'in_progress') {
|
|
448
|
+
return 'running';
|
|
449
|
+
}
|
|
450
|
+
// queued, requested, waiting, pending, etc.
|
|
451
|
+
return 'pending';
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Map a GitHub Actions Workflow to a Latency Pipeline.
|
|
455
|
+
*/
|
|
456
|
+
mapWorkflowToPipeline(workflow) {
|
|
457
|
+
return {
|
|
458
|
+
id: String(workflow.id),
|
|
459
|
+
name: workflow.name,
|
|
460
|
+
description: workflow.path,
|
|
461
|
+
defaultBranch: undefined, // Workflows don't have a default branch concept
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Create a GitHubActionsPlugin instance
|
|
467
|
+
*/
|
|
468
|
+
export function createGitHubActionsPlugin(config, eventBus) {
|
|
469
|
+
return new GitHubActionsPlugin(config, eventBus);
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { GitHubClient } from '../client.js';
|
|
2
|
+
import type { WorkflowRun } from '../types/workflows.js';
|
|
3
|
+
import type { PollingConfig, PollingResult, PollingHandle } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Status poller for monitoring workflow run status changes
|
|
6
|
+
*/
|
|
7
|
+
export declare class StatusPoller {
|
|
8
|
+
private readonly client;
|
|
9
|
+
private readonly config;
|
|
10
|
+
private cancelled;
|
|
11
|
+
constructor(client: GitHubClient, config?: Partial<PollingConfig>);
|
|
12
|
+
/**
|
|
13
|
+
* Poll for workflow run status until it reaches a terminal state
|
|
14
|
+
*
|
|
15
|
+
* @param runId - Workflow run ID to monitor
|
|
16
|
+
* @returns Polling result with final run state
|
|
17
|
+
*/
|
|
18
|
+
poll(runId: number): Promise<PollingResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Start polling and return a handle for control
|
|
21
|
+
*
|
|
22
|
+
* @param runId - Workflow run ID to monitor
|
|
23
|
+
* @returns Polling handle with promise and cancel function
|
|
24
|
+
*/
|
|
25
|
+
start(runId: number): PollingHandle;
|
|
26
|
+
/**
|
|
27
|
+
* Cancel any active polling
|
|
28
|
+
*/
|
|
29
|
+
cancel(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Delay for the specified duration
|
|
32
|
+
*/
|
|
33
|
+
private delay;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create a new status poller
|
|
37
|
+
*/
|
|
38
|
+
export declare function createStatusPoller(client: GitHubClient, config?: Partial<PollingConfig>): StatusPoller;
|
|
39
|
+
/**
|
|
40
|
+
* Poll for a workflow run to complete
|
|
41
|
+
*
|
|
42
|
+
* @param client - GitHub API client
|
|
43
|
+
* @param runId - Workflow run ID
|
|
44
|
+
* @param config - Optional polling configuration
|
|
45
|
+
* @returns The completed workflow run
|
|
46
|
+
*/
|
|
47
|
+
export declare function pollUntilComplete(client: GitHubClient, runId: number, config?: Partial<PollingConfig>): Promise<WorkflowRun>;
|
|
48
|
+
/**
|
|
49
|
+
* Wait for a workflow run with timeout
|
|
50
|
+
*
|
|
51
|
+
* @param client - GitHub API client
|
|
52
|
+
* @param runId - Workflow run ID
|
|
53
|
+
* @param timeoutMs - Maximum time to wait in milliseconds
|
|
54
|
+
* @param intervalMs - Polling interval in milliseconds
|
|
55
|
+
* @returns The workflow run (may not be complete if timeout reached)
|
|
56
|
+
*/
|
|
57
|
+
export declare function waitForRun(client: GitHubClient, runId: number, timeoutMs?: number, intervalMs?: number): Promise<PollingResult>;
|
|
58
|
+
//# sourceMappingURL=status-poller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-poller.d.ts","sourceRoot":"","sources":["../../src/polling/status-poller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9E;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAKjE;;;;;OAKG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAwEjD;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;IAiBnC;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,YAAY,CAEd;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,OAAO,CAAC,WAAW,CAAC,CAItB;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAe,EAC1B,UAAU,GAAE,MAAc,GACzB,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
|