# BuildFlow Web (web-antdv-next / @vben/web-antdv-next) 多阶段构建
# 第一阶段：Node 22 构建 SPA 产物；第二阶段：Nginx 托管静态资源
# base 镜像走 Harbor Proxy Cache（dockerhub-proxy → docker.io），避免公网拉取超时
FROM 43.134.235.58:58080/dockerhub-proxy/library/node:22-alpine AS builder
WORKDIR /app

# 装 git：lefthook 的 prepare 钩子（is-ci || pnpm exec lefthook install）需要 git
RUN apk add --no-cache git

# 全局装 pnpm（与本地 11.x 对齐；corepack 在 alpine 上不可靠）
RUN npm install -g pnpm@11

# npm 包源走阿里 npmmirror（国内最稳，避免 registry.npmjs.org 拉取 error 23）
# 调大 fetch 超时与重试：npmmirror 带宽有限，默认超时会致 1622 包 install 中断
RUN pnpm config set registry https://registry.npmmirror.com \
 && pnpm config set fetch-timeout 600000 \
 && pnpm config set fetch-retries 5 \
 && pnpm config set fetch-retry-factor 2 \
 && pnpm config set fetch-retry-mintimeout 10000 \
 && pnpm config set fetch-retry-maxtimeout 60000

# 先拷依赖清单利用层缓存（pnpm workspace + turbo 需要这些清单文件齐备）
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
COPY internal/ ./internal/
COPY scripts/ ./scripts/
COPY apps/web-antdv-next/package.json ./apps/web-antdv-next/package.json

# 拷贝其余 packages 的 package.json（workspace 依赖解析需要），但不拷 node_modules
COPY packages/ ./packages/

RUN pnpm install --frozen-lockfile

# 拷贝全部源码
COPY . .

# 构建 web-antdv-next 变体（turbo 按 workspace 名过滤；质量门禁内含 typecheck）
RUN pnpm run build --filter=@vben/web-antdv-next...

# ---- 运行阶段：Nginx 托管静态资源 ----
FROM 43.134.235.58:58080/dockerhub-proxy/library/nginx:1.27-alpine AS runtime
COPY apps/web-antdv-next/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/apps/web-antdv-next/dist /usr/share/nginx/html
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=3s --retries=3 CMD wget -q --spider http://127.0.0.1/ || exit 1
CMD ["nginx", "-g", "daemon off;"]
