github-actions-enhanced-dispatch
Version:
Enhanced workflow_dispatch & respository dispatch event trriggers for GitHub Actions
62 lines (52 loc) • 1.58 kB
text/typescript
import { Octokit } from "@octokit/core";
import {
getRunsForWorkflow,
diffWorkflowRuns,
triggerWorkflowDispatch,
} from "./github";
import { ListWorkflowRunsResponse, WorkflowRun } from "./types";
export async function workflowDispatch(
octokit: Octokit,
owner: string,
repo: string,
workflow_id: string | number,
ref: string = "main",
inputs?: Record<string, object>,
): Promise<WorkflowRun> {
if (!octokit) {
throw new Error("Octokit instance is required");
}
if (!owner || !repo || !workflow_id) {
throw new Error("Owner, repo, and workflow_id are required");
}
const existingWorkflowRuns = (await getRunsForWorkflow(
octokit,
owner,
repo,
workflow_id,
ref,
)) as ListWorkflowRunsResponse;
await triggerWorkflowDispatch(octokit, owner, repo, workflow_id, ref, inputs);
sleep(5);
const recentRuns = (await getRunsForWorkflow(
octokit,
owner,
repo,
workflow_id,
ref,
)) as ListWorkflowRunsResponse;
const newWorkflows = await diffWorkflowRuns(
existingWorkflowRuns.data.workflow_runs,
recentRuns.data.workflow_runs,
);
if (newWorkflows.length > 1) {
octokit.log.warn(
`Multiple new workflow runs detected: ${newWorkflows.map((run: WorkflowRun) => run.id).join(", ")}`,
);
} else if (newWorkflows.length === 0) {
octokit.log.error("No new workflow runs detected.");
throw new Error("Unable to locate new workflow runs.");
}
return newWorkflows[newWorkflows.length - 1] as WorkflowRun;
}
//export function repositoryDispatch(octokit: Octokit) {}