chore: combine processes

This commit is contained in:
syntaxbullet
2026-01-08 15:13:09 +01:00
parent dc15212ecf
commit 53a2f1ff0c

View File

@@ -2,6 +2,8 @@ import { AuroraClient } from "@/lib/BotClient";
import { env } from "@lib/env";
import { join } from "node:path";
import { startWebServerFromRoot } from "./web/src/server";
// Load commands & events
await AuroraClient.loadCommands();
await AuroraClient.loadEvents();
@@ -9,62 +11,17 @@ await AuroraClient.deployCommands();
console.log("🌐 Starting web server...");
const webProjectPath = join(import.meta.dir, "web");
const isProduction = process.env.NODE_ENV === "production";
let shuttingDown = false;
const startWebServer = () => {
const args = isProduction
? [process.execPath, "src/index.ts"]
: [process.execPath, "--hot", "src/index.ts"];
const webProjectPath = join(import.meta.dir, "web");
const webPort = Number(process.env.WEB_PORT) || 3000;
const webHost = process.env.HOST || "0.0.0.0";
return Bun.spawn(args, {
cwd: webProjectPath,
stdout: "inherit",
stderr: "inherit",
env: {
...process.env,
WEB_PORT: process.env.WEB_PORT || "3000",
...(process.env.HOST && { WEB_HOST: process.env.HOST }),
},
});
};
let webServer = startWebServer();
// Monitor web server and restart on unexpected exit
const monitorWebServer = async () => {
const exitCode = await webServer.exited;
if (!shuttingDown && exitCode !== 0) {
console.warn(`⚠️ Web server exited with code ${exitCode}, restarting in 1s...`);
await Bun.sleep(1000);
webServer = startWebServer();
monitorWebServer(); // Continue monitoring the new process
}
};
monitorWebServer();
// Wait for web server to be ready
const waitForWebServer = async (url: string, maxAttempts = 30): Promise<boolean> => {
for (let i = 0; i < maxAttempts; i++) {
try {
const res = await fetch(`${url}/api/health`);
if (res.ok) return true;
} catch {
// Server not ready yet
}
await Bun.sleep(100);
}
return false;
};
const webPort = process.env.WEB_PORT || "3000";
const webReady = await waitForWebServer(`http://localhost:${webPort}`);
if (webReady) {
console.log(`✅ Web server ready at http://localhost:${webPort}`);
} else {
console.warn("⚠️ Web server did not become ready in time, continuing anyway...");
}
// Start web server in the same process
const webServer = await startWebServerFromRoot(webProjectPath, {
port: webPort,
hostname: webHost,
});
// login with the token from .env
if (!env.DISCORD_BOT_TOKEN) {
@@ -73,12 +30,18 @@ if (!env.DISCORD_BOT_TOKEN) {
AuroraClient.login(env.DISCORD_BOT_TOKEN);
// Handle graceful shutdown
const shutdownHandler = () => {
const shutdownHandler = async () => {
if (shuttingDown) return;
shuttingDown = true;
console.log("🛑 Shutdown signal received. Stopping web server...");
webServer.kill();
console.log("🛑 Shutdown signal received. Stopping services...");
// Stop web server
await webServer.stop();
// Stop bot
AuroraClient.shutdown();
process.exit(0);
};
process.on("SIGINT", shutdownHandler);