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

46 lines
1.5 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' };
}