import { CheckCircleIcon, ExclamationTriangleIcon, NoSymbolIcon, RectangleStackIcon, XCircleIcon, } from "@heroicons/react/20/solid"; import type { WorkerDeploymentStatus } from "@trigger.dev/database"; import assertNever from "assert-never"; import { Spinner } from "~/components/primitives/Spinner"; import { cn } from "~/utils/cn"; export function DeploymentStatus({ status, isBuilt, className, }: { status: WorkerDeploymentStatus; isBuilt: boolean; className?: string; }) { return ( ); } export function DeploymentStatusLabel({ status, isBuilt, }: { status: WorkerDeploymentStatus; isBuilt: boolean; }) { return ( {deploymentStatusTitle(status, isBuilt)} ); } export function DeploymentStatusIcon({ status, className, }: { status: WorkerDeploymentStatus; className: string; }) { switch (status) { case "PENDING": return ( ); case "INSTALLING": case "BUILDING": case "DEPLOYING": return ; case "DEPLOYED": return ; case "CANCELED": return ; case "FAILED": return ; case "TIMED_OUT": return ( ); default: { assertNever(status); } } } export function deploymentStatusClassNameColor(status: WorkerDeploymentStatus): string { switch (status) { case "PENDING": return "text-text-faint"; case "INSTALLING": case "BUILDING": case "DEPLOYING": return "text-pending"; case "TIMED_OUT": case "CANCELED": return "text-text-faint"; case "DEPLOYED": return "text-success"; case "FAILED": return "text-error"; default: { assertNever(status); } } } export function deploymentStatusTitle(status: WorkerDeploymentStatus, isBuilt: boolean): string { switch (status) { case "PENDING": return "Queued…"; case "INSTALLING": return "Installing…"; case "BUILDING": return "Building…"; case "DEPLOYING": return "Deploying…"; case "DEPLOYED": return "Deployed"; case "CANCELED": return "Canceled"; case "TIMED_OUT": if (!isBuilt) { return "Build timed out"; } return "Indexing timed out"; case "FAILED": if (!isBuilt) { return "Build failed"; } return "Indexing failed"; default: { assertNever(status); } } } // PENDING and CANCELED are not used so are ommited from the UI export const deploymentStatuses: WorkerDeploymentStatus[] = [ "PENDING", "INSTALLING", "BUILDING", "DEPLOYING", "DEPLOYED", "FAILED", "TIMED_OUT", "CANCELED", ]; export function deploymentStatusDescription(status: WorkerDeploymentStatus): string { switch (status) { case "PENDING": return "The deployment is queued and waiting to be processed."; case "INSTALLING": return "The project dependencies are being installed."; case "BUILDING": return "The code is being built and prepared for deployment."; case "DEPLOYING": return "The deployment is in progress and tasks are being indexed."; case "DEPLOYED": return "The deployment has completed successfully."; case "CANCELED": return "The deployment was manually canceled."; case "FAILED": return "The deployment encountered an error and could not complete."; case "TIMED_OUT": return "The deployment exceeded the maximum allowed time and was stopped."; default: { assertNever(status); } } }