UNPKG

github-actions-enhanced-dispatch

Version:

Enhanced workflow_dispatch & respository dispatch event trriggers for GitHub Actions

62 lines (52 loc) 1.58 kB
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) {}