mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-27 01:36:30 +02:00
Remove all Electric SQL client code, Docker service, env vars, CI build args, install scripts, and documentation. Feature hooks that depend on Electric are intentionally left in place to be rewritten with Rocicorp Zero in subsequent commits. Deleted: - lib/electric/ (client.ts, context.ts, auth.ts, baseline.ts) - ElectricProvider.tsx - docker/scripts/init-electric-user.sh - content/docs/how-to/electric-sql.mdx Cleaned: - package.json (4 @electric-sql/* deps) - app/layout.tsx, UserDropdown.tsx, LayoutDataProvider.tsx - docker-compose.yml, docker-compose.dev.yml - Dockerfile, docker-entrypoint.js - .env.example (frontend, docker, backend) - CI workflows, install scripts, docs
84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
/**
|
|
* Runtime environment variable substitution for Next.js Docker images.
|
|
*
|
|
* Next.js inlines NEXT_PUBLIC_* values at build time. The Docker image is built
|
|
* with unique placeholder strings (e.g. __NEXT_PUBLIC_FASTAPI_BACKEND_URL__).
|
|
* This script replaces those placeholders with real values from the container's
|
|
* environment variables before the server starts.
|
|
*
|
|
* Runs once at container startup via docker-entrypoint.sh.
|
|
*/
|
|
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const replacements = [
|
|
[
|
|
"__NEXT_PUBLIC_FASTAPI_BACKEND_URL__",
|
|
process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL || "http://localhost:8000",
|
|
],
|
|
[
|
|
"__NEXT_PUBLIC_FASTAPI_BACKEND_AUTH_TYPE__",
|
|
process.env.NEXT_PUBLIC_FASTAPI_BACKEND_AUTH_TYPE || "LOCAL",
|
|
],
|
|
["__NEXT_PUBLIC_ETL_SERVICE__", process.env.NEXT_PUBLIC_ETL_SERVICE || "DOCLING"],
|
|
["__NEXT_PUBLIC_DEPLOYMENT_MODE__", process.env.NEXT_PUBLIC_DEPLOYMENT_MODE || "self-hosted"],
|
|
];
|
|
|
|
let filesProcessed = 0;
|
|
let filesModified = 0;
|
|
|
|
function walk(dir) {
|
|
let entries;
|
|
try {
|
|
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
} catch {
|
|
return;
|
|
}
|
|
for (const entry of entries) {
|
|
const full = path.join(dir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
walk(full);
|
|
} else if (entry.name.endsWith(".js")) {
|
|
filesProcessed++;
|
|
let content = fs.readFileSync(full, "utf8");
|
|
let changed = false;
|
|
for (const [placeholder, value] of replacements) {
|
|
if (content.includes(placeholder)) {
|
|
content = content.replaceAll(placeholder, value);
|
|
changed = true;
|
|
}
|
|
}
|
|
if (changed) {
|
|
fs.writeFileSync(full, content);
|
|
filesModified++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log("[entrypoint] Replacing environment variable placeholders...");
|
|
for (const [placeholder, value] of replacements) {
|
|
console.log(` ${placeholder} -> ${value}`);
|
|
}
|
|
|
|
walk(path.join(__dirname, ".next"));
|
|
|
|
const serverJs = path.join(__dirname, "server.js");
|
|
if (fs.existsSync(serverJs)) {
|
|
let content = fs.readFileSync(serverJs, "utf8");
|
|
let changed = false;
|
|
filesProcessed++;
|
|
for (const [placeholder, value] of replacements) {
|
|
if (content.includes(placeholder)) {
|
|
content = content.replaceAll(placeholder, value);
|
|
changed = true;
|
|
}
|
|
}
|
|
if (changed) {
|
|
fs.writeFileSync(serverJs, content);
|
|
filesModified++;
|
|
}
|
|
}
|
|
|
|
console.log(`[entrypoint] Done. Scanned ${filesProcessed} files, modified ${filesModified}.`);
|