diff --git a/dist/index.js b/dist/index.js index c3890f9d..459ee16a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -32346,10 +32346,12 @@ function summarize(check, trigger) { runConclusion: run2.conclusion }; } -function generateReport(checks, trigger, elapsed, { waitList, skipList, shouldSkipSameWorkflow }) { - const summaries = checks.map((check) => summarize(check, trigger)).toSorted( +function getSummaries(checks, trigger) { + return checks.map((check) => summarize(check, trigger)).toSorted( (a2, b2) => join(a2.workflowPath, a2.jobName).localeCompare(join(b2.workflowPath, b2.jobName)) ); +} +function generateReport(summaries, trigger, elapsed, { waitList, skipList, shouldSkipSameWorkflow }) { const others = summaries.filter((summary) => !(summary.isSameWorkflow && trigger.jobName === summary.jobName)); let filtered = others.filter((summary) => !(summary.isSameWorkflow && shouldSkipSameWorkflow)); if (waitList.length > 0) { @@ -32491,7 +32493,7 @@ async function run() { (0, import_core3.debug)(JSON.stringify({ label: "rawdata", checks, elapsed }, null, 2)); } const report = generateReport( - checks, + getSummaries(checks, trigger), trigger, elapsed, options diff --git a/src/main.ts b/src/main.ts index e33516d4..87b3b2db 100644 --- a/src/main.ts +++ b/src/main.ts @@ -6,7 +6,7 @@ const colorize = (body: string, ok: boolean) => (ok ? succeededMessage(body) : e import { parseInput } from './input.ts'; import { fetchChecks } from './github-api.ts'; -import { generateReport } from './report.ts'; +import { generateReport, getSummaries } from './report.ts'; import { readableDuration, wait, getIdleMilliseconds } from './wait.ts'; import { Temporal } from 'temporal-polyfill'; @@ -57,7 +57,7 @@ async function run(): Promise { debug(JSON.stringify({ label: 'rawdata', checks, elapsed }, null, 2)); } const report = generateReport( - checks, + getSummaries(checks, trigger), trigger, elapsed, options, diff --git a/src/report.test.ts b/src/report.test.ts index 0a7ace6f..20391451 100644 --- a/src/report.test.ts +++ b/src/report.test.ts @@ -1,22 +1,23 @@ import test from 'node:test'; import assert from 'node:assert'; import { checks8679817057, checks92810686811WaitSuccessPolling1 } from './snapshot.ts'; -import { Report, generateReport } from './report.ts'; +import { Report, generateReport, getSummaries } from './report.ts'; import { omit } from './util.ts'; import { Temporal } from 'temporal-polyfill'; test('wait-list', async (t) => { await t.test('basics', (_t) => { + const trigger = { + owner: 'kachick', + repo: 'wait-other-jobs', + 'runId': 8679817057, + ref: '760074f4f419b55cb864030c29ece58a689a42a2', + jobName: 'wait-list', + eventName: 'pull_request', + }; const report = generateReport( - checks8679817057, - { - owner: 'kachick', - repo: 'wait-other-jobs', - 'runId': 8679817057, - ref: '760074f4f419b55cb864030c29ece58a689a42a2', - jobName: 'wait-list', - eventName: 'pull_request', - }, + getSummaries(checks8679817057, trigger), + trigger, Temporal.Duration.from({ seconds: 420 }), { waitList: [ @@ -61,7 +62,7 @@ test('wait-list', async (t) => { }); await t.test('required slowstarting job and set enough grace period', (_t) => { const report = generateReport( - checks92810686811WaitSuccessPolling1, + getSummaries(checks92810686811WaitSuccessPolling1, trigger), trigger, Temporal.Duration.from({ milliseconds: Math.ceil(986.9570700004697) }), { @@ -94,7 +95,7 @@ test('wait-list', async (t) => { await t.test('slowstarting job has been expired to the given period', (_t) => { const report = generateReport( - checks92810686811WaitSuccessPolling1, + getSummaries(checks92810686811WaitSuccessPolling1, trigger), trigger, Temporal.Duration.from({ seconds: 60, milliseconds: 1 }), { @@ -127,7 +128,7 @@ test('wait-list', async (t) => { await t.test('judges as expired for same durations', (_t) => { const report = generateReport( - checks92810686811WaitSuccessPolling1, + getSummaries(checks92810686811WaitSuccessPolling1, trigger), trigger, Temporal.Duration.from({ seconds: 60 }), { @@ -161,16 +162,17 @@ test('wait-list', async (t) => { }); test('skip-list', () => { + const trigger = { + owner: 'kachick', + repo: 'wait-other-jobs', + 'runId': 8679817057, + ref: '760074f4f419b55cb864030c29ece58a689a42a2', + jobName: 'skip-list', + eventName: 'pull_request', + }; const report = generateReport( - checks8679817057, - { - owner: 'kachick', - repo: 'wait-other-jobs', - 'runId': 8679817057, - ref: '760074f4f419b55cb864030c29ece58a689a42a2', - jobName: 'skip-list', - eventName: 'pull_request', - }, + getSummaries(checks8679817057, trigger), + trigger, Temporal.Duration.from({ seconds: 420 }), { waitList: [], diff --git a/src/report.ts b/src/report.ts index dda4ef30..8f90b2dd 100644 --- a/src/report.ts +++ b/src/report.ts @@ -20,20 +20,6 @@ interface Summary { runConclusion: CheckRun['conclusion']; // null if status is in progress } -interface Acceptable { - conclusion: 'acceptable'; -} - -interface Bad { - conclusion: 'bad'; -} - -export type Report = (Acceptable | Bad) & { - progress: 'in_progress' | 'done'; - description: string; - summaries: Summary[]; -}; - function summarize(check: Check, trigger: Trigger): Summary { const { checkRun: run, checkSuite: suite, workflow, workflowRun } = check; return { @@ -57,16 +43,32 @@ function summarize(check: Check, trigger: Trigger): Summary { }; } +export function getSummaries(checks: readonly Check[], trigger: Trigger): Summary[] { + return checks.map((check) => summarize(check, trigger)).toSorted((a, b) => + join(a.workflowPath, a.jobName).localeCompare(join(b.workflowPath, b.jobName)) + ); +} + +interface Acceptable { + conclusion: 'acceptable'; +} + +interface Bad { + conclusion: 'bad'; +} + +export type Report = (Acceptable | Bad) & { + progress: 'in_progress' | 'done'; + description: string; + summaries: Summary[]; +}; + export function generateReport( - checks: readonly Check[], + summaries: readonly Summary[], trigger: Trigger, elapsed: Temporal.Duration, { waitList, skipList, shouldSkipSameWorkflow }: Pick, ): Report { - const summaries = checks.map((check) => summarize(check, trigger)).toSorted((a, b) => - join(a.workflowPath, a.jobName).localeCompare(join(b.workflowPath, b.jobName)) - ); - const others = summaries.filter((summary) => !(summary.isSameWorkflow && (trigger.jobName === summary.jobName))); let filtered = others.filter((summary) => !(summary.isSameWorkflow && shouldSkipSameWorkflow));