blob: d90ee7c11ed19acf0bcf9c1bdf275b33d286219a [file] [log] [blame]
import {GitHub} from '@actions/github/lib/utils';
import * as core from '@actions/core';
import * as Inputs from './namespaces/Inputs';
type Ownership = {
owner: string;
repo: string;
};
type CreateOptions = {
completed: boolean;
};
const unpackInputs = (inputs: Inputs.Args, options: {update: boolean} = {update: false}): Record<string, unknown> => {
let output;
if (inputs.output) {
output = {
title: options.update ? undefined : inputs.name,
summary: inputs.output.summary,
text: inputs.output.text_description,
actions: inputs.actions,
images: inputs.images,
};
}
const more: {
details_url?: string;
conclusion?: string;
} = {};
if (inputs.conclusion === Inputs.Conclusion.ActionRequired || inputs.actions) {
if (inputs.detailsURL) {
const reasonList = [];
if (inputs.conclusion === Inputs.Conclusion.ActionRequired) {
reasonList.push(`'conclusion' is 'action_required'`);
}
if (inputs.actions) {
reasonList.push(`'actions' was provided`);
}
const reasons = reasonList.join(' and ');
core.warning(
`'details_url' was ignored in favor of 'action_url' because ${reasons} (see documentation for details)`,
);
}
more.details_url = inputs.actionURL;
} else if (inputs.detailsURL) {
more.details_url = inputs.detailsURL;
}
if (inputs.conclusion) {
more.conclusion = inputs.conclusion.toString();
}
return {
status: inputs.status.toString(),
output,
actions: inputs.actions,
...more,
};
};
const formatDate = (): string => {
return new Date().toISOString();
};
export const createRun = async (
octokit: InstanceType<typeof GitHub>,
sha: string,
ownership: Ownership,
inputs: Inputs.Args,
options?: CreateOptions,
): Promise<number> => {
const dates: {completed_at?: string} = {};
if (!options || options.completed) {
dates.completed_at = formatDate();
}
const {data} = await octokit.checks.create({
...ownership,
head_sha: sha,
name: inputs.name,
started_at: formatDate(),
...dates,
...unpackInputs(inputs),
});
return data.id;
};
export const updateRun = async (
octokit: InstanceType<typeof GitHub>,
id: number,
ownership: Ownership,
inputs: Inputs.Args,
): Promise<void> => {
await octokit.checks.update({
...ownership,
check_run_id: id,
completed_at: formatDate(),
...unpackInputs(inputs, {update: true}),
});
};