diff --git a/.changeset/dockerfile-vite-site-url-arg.md b/.changeset/dockerfile-vite-site-url-arg.md new file mode 100644 index 000000000..0258bff9d --- /dev/null +++ b/.changeset/dockerfile-vite-site-url-arg.md @@ -0,0 +1,5 @@ +--- +'@app/ratewise': patch +--- + +修復 Zeabur staging 部署時 VITE_SITE_URL 環境變數不生效的問題:Docker 建置現在會把服務層環境變數帶入 vite build,staging 網域的 PWA manifest start_url/scope 正確指向 staging,可正常安裝;未設定變數時正式站行為零變化。 diff --git a/.playwright-mcp/ui-ux-final-fixed-overflow.png b/.playwright-mcp/ui-ux-final-fixed-overflow.png deleted file mode 100644 index 65c62364e..000000000 Binary files a/.playwright-mcp/ui-ux-final-fixed-overflow.png and /dev/null differ diff --git a/.playwright-mcp/ui-ux-tooltip-final.png b/.playwright-mcp/ui-ux-tooltip-final.png deleted file mode 100644 index ddc4b3c81..000000000 Binary files a/.playwright-mcp/ui-ux-tooltip-final.png and /dev/null differ diff --git a/Dockerfile b/Dockerfile index b7c6616c4..ff94398fd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,13 +17,13 @@ ARG VITE_NIHONNAME_BASE_PATH=/nihonname/ ARG VITE_QUAKE_SCHOOL_BASE_PATH=/quake-school/ ARG VITE_PARK_KEEPER_BASE_PATH=/park-keeper/ ARG VITE_SPLIT_MEOW_BASE_PATH=/split-meow/ +# [fix:2026-07-08] Zeabur 服務層環境變數需宣告 ARG 才會進入 multi-stage build(issue #682)。 +# 不搭配 ENV:未傳值時 ARG 於 RUN 內保持 unset,讓 manifest 與 canonical 回退正式站 SSOT。 +ARG VITE_SITE_URL # Enable corepack for pnpm RUN corepack enable && corepack prepare pnpm@9.10.0 --activate -# 安裝 git 供版本計算使用(node:alpine 預設未內建) -RUN apk add --no-cache git - WORKDIR /app # Set pnpm store directory for cache mount @@ -37,7 +37,9 @@ ENV BUILD_TIME=${BUILD_TIME} ENV CI=true # Copy package files and pnpm config +# [fix:2026-07-08] patchedDependencies 的 patch 檔必須先於 install 進入 image(#622 起)。 COPY .npmrc package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +COPY patches ./patches COPY apps/ratewise/package.json ./apps/ratewise/ COPY apps/nihonname/package.json ./apps/nihonname/ COPY apps/haotool/package.json ./apps/haotool/ @@ -57,20 +59,15 @@ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ # Copy source code COPY . . -# Build applications(若外部未提供 build args,於此自動回退計算) +# Build applications # [fix:2025-12-13] 分別為每個專案設置對應的 base 變數,避免相互污染 # [2025 Best Practice] Sitemaps 現在由 vite-ssg-sitemap 在 build 時自動生成 # [2026-07-05] haotool 根站先建(根站優先,見 docs/dev/046 §9) +# [fix:2026-07-08] 移除 git 回退死碼:.dockerignore 排除 .git,容器內 git 指令必失敗, +# 版本 metadata 一律由 build args 提供(見 build-docker.sh)。 +# VITE_SITE_URL 傳入空字串時 unset,避免污染 import.meta.env 的 ?? 回退鏈。 RUN set -eux; \ - if [ -z "${GIT_COMMIT_COUNT:-}" ]; then \ - export GIT_COMMIT_COUNT="$(git rev-list --count HEAD)"; \ - fi; \ - if [ -z "${GIT_COMMIT_HASH:-}" ]; then \ - export GIT_COMMIT_HASH="$(git rev-parse --short HEAD)"; \ - fi; \ - if [ -z "${BUILD_TIME:-}" ]; then \ - export BUILD_TIME="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"; \ - fi; \ + if [ -z "${VITE_SITE_URL:-}" ]; then unset VITE_SITE_URL; fi; \ VITE_HAOTOOL_BASE_PATH=/ pnpm build:haotool && \ VITE_RATEWISE_BASE_PATH=/ratewise/ pnpm build:ratewise && \ VITE_NIHONNAME_BASE_PATH=/nihonname/ pnpm build:nihonname && \ diff --git a/docs/dev/002_development_reward_penalty_log.md b/docs/dev/002_development_reward_penalty_log.md index ec01cd9d1..93f928c7d 100644 --- a/docs/dev/002_development_reward_penalty_log.md +++ b/docs/dev/002_development_reward_penalty_log.md @@ -2,7 +2,7 @@ > 版本:outline-v2-ultra > 原則:每筆只保留日期、ID、原因、解法。 -> 本次分數變化:+1(reward 1、penalty 0、neutral 0)|累計總分:+194 +> 本次分數變化:+1(reward 1、penalty 0、neutral 0)|累計總分:+195 ## 新增模板(4 行) @@ -13,6 +13,11 @@ ## 條目(新→舊) +- 日期:2026-07-08 +- ID:reward-rw-682-dockerfile-vite-site-url-arg +- 原因:root Dockerfile builder stage 未宣告 ARG VITE_SITE_URL,Zeabur 服務層環境變數不進入 multi-stage vite build,#613 的 manifest 環境驅動修正於 staging 斷鏈(start_url/scope 仍指向正式站,QA-I D7 根因鏈);驗證中另揭露 #622 引入 patchedDependencies 後 patch 檔未先 COPY 使容器 pnpm install 必炸(ENOENT patches/),且 .dockerignore 排除 .git 使 builder 內 git fallback 為死碼、兩張 QA 截圖誤入庫 +- 解法:builder stage 補 ARG VITE_SITE_URL(依 Zeabur 官方 multi-stage 文件;不搭 ENV 避免未傳值固化空字串、RUN 內空字串 unset 防護,堵住 import.meta.env 的 ?? 回退鏈污染——Docker 實測 ARG 未傳值於 RUN 為 unset)、install 前補 COPY patches、移除 apk git 與三段 git fallback 死碼、截圖 git rm --cached 出庫(.gitignore 既有 .playwright-mcp/ 防護);docker build --target builder 兩情境產物驗證 staging manifest 指向 staging、無變數時與 committed manifest 零差異 + - 日期:2026-07-08 - ID:reward-rw-651-card-rate-phase2-canary-pipeline - 原因:ADR-002 Phase 2 需 data pipeline 以 canary 模式驗證 Visa/MC 清算匯率抓取排程成功率,前提是官方免費 API 不可用且非官方端點被邊緣封鎖,須先實測確認