Files
KIBU/scripts/prepare-container.ts

46 lines
1.9 KiB
TypeScript

// SPDX-FileCopyrightText: 2026 Paul Schoeneck
//
// SPDX-License-Identifier: AGPL-3.0-only AND LicenseRef-KIBU-Additional-Terms
import { spawnSync } from "node:child_process";
import { createRequire } from "node:module";
import { fileURLToPath } from "node:url";
import { demoLogin, isDemoDatabase } from "../src/lib/demo";
function prepare() {
if (!process.env.DATABASE_URL) throw new Error("DATABASE_URL fehlt.");
if (process.env.DEMO_MODE && !["true", "false"].includes(process.env.DEMO_MODE)) {
throw new Error("DEMO_MODE muss true oder false sein.");
}
const demo = demoLogin();
if (demo) {
const target = new URL(process.env.DATABASE_URL);
if (!isDemoDatabase(target) || !["postgres:", "postgresql:"].includes(target.protocol)) {
throw new Error("Demo-Start erfordert DEMO_RESET_ON_START=true und die separate Datenbank demo-db/kibu_demo. Nichts wurde veraendert.");
}
process.env.BOOTSTRAP_EMAIL = demo.email;
process.env.BOOTSTRAP_PASSWORD = demo.password;
console.log("DEMOMODUS: Gemeinsamer oeffentlicher Zugang; alle Demodaten werden bei jedem App-Start ersetzt.");
} else if (process.env.DEMO_RESET_ON_START === "true") {
throw new Error("DEMO_RESET_ON_START erfordert DEMO_MODE=true.");
}
const tsx = createRequire(import.meta.url).resolve("tsx/cli");
const commands = demo
? [["setup.ts"], ["reset-instance.ts", "demo", "--confirm-reset"]]
: [["setup.ts"]];
for (const [script, ...args] of commands) {
const result = spawnSync(process.execPath, [tsx, fileURLToPath(new URL(script, import.meta.url)), ...args], {
env: process.env, stdio: "inherit",
});
if (result.error) throw result.error;
if (result.status !== 0) throw new Error(`${script} fehlgeschlagen; App wird nicht gestartet.`);
}
}
try {
prepare();
} catch (error) {
console.error("Container-Vorbereitung fehlgeschlagen:", error);
process.exitCode = 1;
}