Allow revising active betas with fresh tests and history
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import { BetaError, reviseBeta, type BetaRevisionUpload } from '$lib/server/fleet/beta.js';
|
||||
import { ScriptError } from '$lib/server/fleet/scripts.js';
|
||||
import { kick } from '$lib/server/pipeline/worker.js';
|
||||
|
||||
export async function POST({ params, request }: { params: { id: string }; request: Request }) {
|
||||
const id = Number(params.id);
|
||||
if (!Number.isSafeInteger(id) || id < 1) return json({ ok: false, error: 'Invalid beta ID' }, { status: 400 });
|
||||
try {
|
||||
const form = await request.formData();
|
||||
const expectedRevision = Number(form.get('expectedRevision'));
|
||||
if (!Number.isSafeInteger(expectedRevision) || expectedRevision < 1) throw new Error('A reviewed revision is required.');
|
||||
const uploads: BetaRevisionUpload[] = [];
|
||||
for (const [key, value] of form) {
|
||||
if (!key.startsWith('file:')) continue;
|
||||
const scriptId = Number(key.slice(5));
|
||||
if (!Number.isSafeInteger(scriptId) || scriptId < 1 || !(value instanceof File)) throw new Error('Invalid replacement file.');
|
||||
uploads.push({ scriptId, content: Buffer.from(await value.arrayBuffer()),
|
||||
releaseVersion: form.has(`release:${scriptId}`) ? String(form.get(`release:${scriptId}`)) : undefined });
|
||||
}
|
||||
const result = await reviseBeta(id, expectedRevision, uploads, String(form.get('notes') ?? ''));
|
||||
void kick();
|
||||
return json({ ok: true, result });
|
||||
} catch (error) {
|
||||
return json({ ok: false, error: (error as Error).message },
|
||||
{ status: error instanceof BetaError || error instanceof ScriptError ? 409 : 400 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user