github-actions-enhanced-dispatch
Version:
Enhanced workflow_dispatch & respository dispatch event trriggers for GitHub Actions
81 lines (71 loc) • 1.92 kB
text/typescript
import { Octokit } from "@octokit/core";
import {
Inputs,
ListWorkflowRunsParams,
ListWorkflowRunsResponse,
TriggerWorkflowDispatchParams,
TriggerWorkflowDispatchResponse,
WorkflowRun,
} from "./types";
export async function triggerWorkflowDispatch(
octokit: Octokit,
owner: string,
repo: string,
workflow_id: string | number,
ref: string = "main",
inputs?: Inputs,
): Promise<TriggerWorkflowDispatchResponse> {
const params: TriggerWorkflowDispatchParams = {
owner: owner,
repo: repo,
workflow_id: workflow_id,
ref: ref,
inputs: inputs,
};
const response = (await octokit.request(
"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches",
params,
)) as TriggerWorkflowDispatchResponse;
if (response.status !== 204) {
octokit.log.error(
`Failed to trigger workflow dispatch: ${response.status} ${response}`,
);
}
return response;
}
export async function getRunsForWorkflow(
octokit: Octokit,
owner: string,
repo: string,
workflow_id: string | number,
branch?: string,
per_page: number = 5,
): Promise<ListWorkflowRunsResponse> {
const params: ListWorkflowRunsParams = {
owner: owner,
repo: repo,
workflow_id: workflow_id,
branch: branch,
per_page: per_page,
};
const response = (await octokit.request(
"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs",
params,
)) as ListWorkflowRunsResponse;
return response;
}
export async function diffWorkflowRuns(
batch1: WorkflowRun[],
batch2: WorkflowRun[],
): Promise<WorkflowRun[]> {
const diff = batch2.filter((run2: WorkflowRun) => {
return !batch1.some((run1: WorkflowRun) => run2.id === run1.id);
});
if (diff.length > 0) {
console.log("New workflow runs detected:", diff);
} else {
// TODO: Throw error?
console.log("No new workflow runs detected.");
}
return diff;
}