# syntax=docker/dockerfile:1.7
#
# cdrop-base — 重型依赖的预热镜像。
# 只有 go.mod/go.sum 或 web/package*.json 变动时才需要重建；改源码后构建
# cdrop:latest 就只需要复制源 + 编译，省掉 npm ci 与 go mod download 的耗时。
#
# 同时安装 Go 工具链与 Node 运行时，让最终的应用 Dockerfile 不再需要 multi-stage
# 切换基础镜像。
#
# 构建（一次或随依赖更新；走宿主原生 arch 即可）：
#     docker buildx build -f docker/Dockerfile.base -t cdrop-base:latest --load .

FROM --platform=$BUILDPLATFORM golang:1.26-alpine AS base

# Node.js + npm，覆盖 web 端依赖；ca-certificates 给 go mod download 用 HTTPS
RUN apk add --no-cache nodejs npm ca-certificates git

WORKDIR /src

# Go modules 缓存层。GOPROXY 可经 --build-arg 覆盖——受限网络（如构建 VM 连不上
# proxy.golang.org）时传入区域镜像即可，默认仍是官方代理，不在仓库内固化任何区域值。
ARG GOPROXY=https://proxy.golang.org,direct
ENV GOPROXY=${GOPROXY}
COPY go.mod go.sum ./
RUN go mod download

# npm 缓存层
WORKDIR /src/web
COPY web/package.json web/package-lock.json ./
RUN npm ci --no-audit --no-fund

WORKDIR /src
