# syntax=docker/dockerfile:1.7
#
# cdrop:latest —— 应用镜像。基础环境（Go 工具链 + node_modules + go modules）
# 已被 cdrop-base:latest 预热（见 docker/Dockerfile.base），这里只做源码层与
# 跨编译。
#
# 构建（部署平台为 linux/amd64）：
#     docker buildx build --platform linux/amd64 \
#         -f docker/Dockerfile -t cdrop:latest --load .
#
# BUILDPLATFORM 让 build 阶段跑在宿主原生 arch（macOS arm64），跨编译产出
# linux/amd64 的 Go 二进制；最终 runtime FROM distroless 是 linux/amd64
# 但只有 COPY 一层，不经过 qemu 执行任何 amd64 程序。

# ---- build (uses cached base) ----
FROM --platform=$BUILDPLATFORM cdrop-base:latest AS build
ARG TARGETOS=linux TARGETARCH=amd64
# Vite 编译期 env：dev 模式 token 必须随 image 烤进 bundle；prod 部署留空即可
ARG VITE_CDROP_DEV_TOKEN=""
ARG VITE_CDROP_STUN_URLS=""
ENV VITE_CDROP_DEV_TOKEN=$VITE_CDROP_DEV_TOKEN \
    VITE_CDROP_STUN_URLS=$VITE_CDROP_STUN_URLS
WORKDIR /src

# 复制源码（依赖在 base 中已就位）
COPY . .

# 前端构建（VITE_* 环境变量已 export）
RUN cd web && npm run build

# 嵌入到 internal/webui/dist 让 //go:embed 拿到
RUN rm -rf ./internal/webui/dist && cp -a web/dist ./internal/webui/dist

# 跨编译 Go 到目标平台
RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 \
    go build -trimpath -ldflags="-s -w" -o /out/cdropd ./cmd/cdropd

# ---- runtime (linux/amd64 distroless) ----
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /out/cdropd /cdropd
USER nonroot:nonroot
EXPOSE 8080
ENTRYPOINT ["/cdropd"]
