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