Files
electric-cherry/src/lib/ui/betas.ts
T

22 lines
1.3 KiB
TypeScript

import type { StatusTone } from './status.js';
export interface BetaDeploymentServer {
server: string; server_deleted_at?: string | null; stage: string; error: string | null;
deployed_at: string | null; restarted_at: string | null; healthy_at: string | null;
match_seen_at: string | null; provisioning_id: string | null;
}
export function betaStatus(beta: { state: string; testOutcome?: string | null;
servers: { stage: string; server_deleted_at?: string | null }[] }): {
key: string; label: string; tone: StatusTone;
} {
if (beta.state === 'promoted') return { key: 'promoted', label: 'Promoted', tone: 'online' };
if (beta.state === 'rolled-back') return { key: 'rolled-back', label: 'Rolled back', tone: 'neutral' };
if (beta.servers.some(server => server.server_deleted_at || server.stage === 'failed') || ['failed', 'inconclusive'].includes(beta.testOutcome ?? '')) {
return { key: 'attention', label: 'Needs attention', tone: beta.testOutcome === 'failed' || beta.servers.some(server => server.stage === 'failed') ? 'danger' : 'warning' };
}
if (beta.testOutcome === 'paused') return { key: 'paused', label: 'Paused', tone: 'warning' };
if (beta.state === 'ready-promote') return { key: 'ready', label: 'Ready to promote', tone: 'online' };
return { key: 'testing', label: 'Testing', tone: 'info' };
}