46 lines
1.9 KiB
TypeScript
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;
|
|
}
|