27 lines
1.5 KiB
JavaScript
27 lines
1.5 KiB
JavaScript
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';
|
|
import { createProxy } from './proxy.js';
|
|
import os from 'node:os';
|
|
import { listenAddresses } from './listen.js';
|
|
|
|
const config = loadConfig(process.env);
|
|
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 = 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();
|
|
|
|
// R13: nur auf Adressen außerhalb des Sandbox-Netzes lauschen (kein Zugriff aus Dev-Containern am Traefik-Auth vorbei).
|
|
const addrs = listenAddresses(os.networkInterfaces(), config.sandboxSubnet);
|
|
for (const addr of addrs) {
|
|
createApiServer({ config, jobs, dev }).listen(config.apiPort, addr, () => console.log(`Preview-Runner API auf ${addr}:${config.apiPort}`));
|
|
createProxy({ config, dev }).listen(config.proxyPort, addr, () => console.log(`Preview-Runner Proxy auf ${addr}:${config.proxyPort}`));
|
|
}
|