import { Link } from '#/components/atoms/link.jsx'; import { CheckLog } from '#/components/molecules/check-log.jsx'; import { CheckSteps } from '#/components/molecules/check-steps.jsx'; import { PageHead } from '#/components/molecules/page-head.jsx'; import { checkLook, runDuration, workflowOf } from '#/lib/checks.js'; import { shortRef } from '#/lib/git.js'; import { COLUMN } from '#/lib/layout.js'; import { cn } from '#/lib/utils.js'; /** One field of the run's summary block. */ function Field({ label, children }) { return (
{label}
{children}
); } /** * One run in full, which is what the run's own page shows: what the runner * ran it against, how each step ended, and the whole log. The log is on this * page because a reader who opened one run came for its output. */ export function CheckRun({ runner, check, commitHref, checksHref }) { const look = checkLook(check.status); const took = runDuration(check); const steps = Array.isArray(check.steps) ? check.steps : []; return (
{workflowOf(check)} {look.label} } > {/* The readings stand together rather than spread across the window. A run has four of them, and four columns cut to the width of a page put a sha at one edge and a date at the other. */}
{commitHref ? ( {check.sha.slice(0, 8)} ) : ( {check.sha.slice(0, 8)} )} {check.ref && ( {shortRef(check.ref)} )} {took ?? 'running'} {new Date(check.startedAt).toLocaleString()}
{steps.length > 0 && (
)} {/* The log takes what the window has left, so a long run reads without moving the readings above it. */}
); }