From a110d10e39c4eb054fae764a0bea4fa56525949b Mon Sep 17 00:00:00 2001 From: Hera Zhao Date: Tue, 7 Apr 2026 21:43:17 +0000 Subject: [PATCH] Fix deploy-preview: handle missing prod DB gracefully Production still uses JSON, so /data/planner.db doesn't exist yet. Detect cp failure and use empty DB (init_db creates tables on startup). Co-Authored-By: Claude Opus 4.6 (1M context) --- scripts/deploy-preview.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/deploy-preview.py b/scripts/deploy-preview.py index ff5b725..b5ad73d 100644 --- a/scripts/deploy-preview.py +++ b/scripts/deploy-preview.py @@ -78,14 +78,20 @@ def deploy(pr_id: str): ).stdout.strip() if prod_pod: - kubectl("cp", f"{PROD_NS}/{prod_pod}:/data/planner.db", "data/planner.db") + r = kubectl("cp", f"{PROD_NS}/{prod_pod}:/data/planner.db", "data/planner.db", check=False) + if r.returncode != 0 or not Path("data/planner.db").exists() or Path("data/planner.db").stat().st_size == 0: + print(" WARNING: Could not copy prod DB, using empty DB") + Path("data/planner.db").touch() else: print(" WARNING: No running prod pod, using empty DB") Path("data/planner.db").touch() # 2. Build and push image print("[2/5] Building Docker image...") - dockerfile = textwrap.dedent("""\ + # Only COPY DB if it has content, otherwise let init_db create fresh + has_db = Path("data/planner.db").exists() and Path("data/planner.db").stat().st_size > 0 + copy_db_line = "COPY data/planner.db /data/planner.db" if has_db else "RUN mkdir -p /data" + dockerfile = textwrap.dedent(f"""\ FROM node:20-slim AS frontend-build WORKDIR /build COPY frontend/package.json frontend/package-lock.json ./ @@ -99,7 +105,7 @@ def deploy(pr_id: str): RUN pip install --no-cache-dir -r requirements.txt COPY backend/ ./backend/ COPY --from=frontend-build /build/dist ./frontend/ - COPY data/planner.db /data/planner.db + {copy_db_line} ENV DB_PATH=/data/planner.db ENV FRONTEND_DIR=/app/frontend ENV DATA_DIR=/data