Runner: Dev-Server bei Bedarf

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-09-30 21:53:41 +00:00
1 parent 4fffd8b218
commit 5b902519a9
4 files changed
+357 -9

No files matched your search

+8 -3
View File
@@ -2,14 +2,19 @@ import { loadConfig } from './config.js';
import { createApiServer } from './server.js';
import { createDocker } from './docker.js';
import { createJobs } from './jobs.js';
import { createDev } from './dev.js';
// Jobs/Dev/Proxy kommen in späteren Tasks; bis dahin nur Stubs, damit /status antwortet.
// Proxy kommt in einem späteren Task.
const config = loadConfig(process.env);
const realJobs = createJobs({ config, docker: createDocker() });
const docker = createDocker();
const realJobs = createJobs({ config, docker });
// Die API antwortet auf POST /jobs/build mit { runId }.
const jobs = { submit: (job) => ({ runId: realJobs.submit(job) }), get: realJobs.get, queueLength: realJobs.queueLength };
setInterval(() => realJobs.pruneCache().catch((e) => console.error('pruneCache', e)), 24 * 3600e3).unref();
const dev = { ensure: async () => { throw Object.assign(new Error('Noch nicht verfügbar'), { status: 503 }); }, stop: async () => {}, list: () => [] };
const dev = createDev({ config, docker, jobs: realJobs });
// Zustand der Dev-Server liegt nur im Speicher: Überbleibsel entfernen, dann jede Minute Leerlauf prüfen.
dev.cleanupOrphans().catch((e) => console.error('cleanupOrphans', e));
setInterval(() => dev.sweep().catch((e) => console.error('sweep', e)), 60e3).unref();
createApiServer({ config, jobs, dev }).listen(config.apiPort, () => {
console.log(`Preview-Runner API auf Port ${config.apiPort}`);