fix(bootstrap): filter empty process.env values to prevent Docker env crash loop (#6828)

Reconstructed onto release/v3.8.47 to drop unrelated main-drift (deps/electron/proxy
files belong to #6620, not this PR) and the direct CHANGELOG.md edit (fragments-first);
keeps only the author's bootstrap change.

Co-authored-by: Andrian B. <andrewbalanesq@gmail.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
This commit is contained in:
Andrew B.
2026-07-10 16:05:41 -05:00
committed by GitHub
parent dd057f590e
commit f79302ccd9
3 changed files with 33 additions and 1 deletions

View File

@@ -173,7 +173,14 @@ export function bootstrapEnv({ dataDirOverride, quiet = false } = {}) {
const preferredEnvFiltered = Object.fromEntries(
Object.entries(preferredEnv).filter(([, v]) => typeof v === "string" && v.length > 0)
);
const merged = { ...persisted, ...preferredEnvFiltered, ...process.env };
// Filter empty strings from process.env so that Docker `-e KEY=` (which sets an
// empty string) does not override real values persisted in server.env or set
// in .env. Only shell/Docker vars that the operator actually set should win.
// Mirrors the filtering already applied to preferredEnv above. (fixes #6824)
const processEnvFiltered = Object.fromEntries(
Object.entries(process.env).filter(([, v]) => typeof v === "string" && v.length > 0)
);
const merged = { ...persisted, ...preferredEnvFiltered, ...processEnvFiltered };
// ── Auto-generate required secrets ────────────────────────────────────────
let needsPersist = false;