79c69e1363
Co-authored-by: Copilot <copilot@github.com>
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
const BASE_URL = import.meta.env.VITE_API_URL ?? '';
|
|
|
|
export interface TenantReleaseResult {
|
|
subdomain: string;
|
|
containerName: string;
|
|
success: boolean;
|
|
error?: string;
|
|
}
|
|
|
|
export interface ReleaseRecord {
|
|
id: string;
|
|
environment: string;
|
|
imageName: string;
|
|
status: 'Running' | 'Succeeded' | 'PartialFailure' | 'Failed';
|
|
startedAt: string;
|
|
finishedAt?: string;
|
|
tenants: TenantReleaseResult[];
|
|
opcNumbers: string[];
|
|
}
|
|
|
|
export async function getReleaseHistory(): Promise<ReleaseRecord[]> {
|
|
const res = await fetch(`${BASE_URL}/api/release/history`);
|
|
if (!res.ok) throw new Error(`Failed to get release history: ${res.statusText}`);
|
|
return res.json();
|
|
}
|
|
|
|
export function triggerRelease(
|
|
env: string,
|
|
onLine: (line: string) => void,
|
|
onDone: (record: ReleaseRecord) => void,
|
|
onError: (err: Event) => void,
|
|
): EventSource {
|
|
const source = new EventSource(`${BASE_URL}/api/release/${env}`);
|
|
source.onmessage = (e) => {
|
|
try {
|
|
const msg = JSON.parse(e.data);
|
|
if (msg.done && msg.release) { onDone(msg.release as ReleaseRecord); source.close(); }
|
|
else if (typeof msg.line === 'string') onLine(msg.line);
|
|
} catch { /* ignore */ }
|
|
};
|
|
source.onerror = (e) => { onError(e); };
|
|
return source;
|
|
}
|