# syntax=docker/dockerfile:1 # ─── Stage 1: build ────────────────────────────────────────────────────────── FROM docker.io/library/golang:1.24-alpine AS builder WORKDIR /src # git is required by go mod for VCS dependencies RUN apk add --no-cache git # Skip sum DB checks (allows building with empty/partial go.sum) ENV GONOSUMDB=* GOPRIVATE=* GOPROXY=direct # Copy source COPY . . # Build linux/amd64 (used by the runtime image and Linux hosts) RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" \ -o /out/zddc-server-linux-amd64 ./cmd/zddc-server # Cross-compile for macOS (Intel and Apple Silicon) RUN CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -trimpath -ldflags="-s -w" \ -o /out/zddc-server-darwin-amd64 ./cmd/zddc-server RUN CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags="-s -w" \ -o /out/zddc-server-darwin-arm64 ./cmd/zddc-server # Cross-compile for Windows RUN CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w" \ -o /out/zddc-server-windows-amd64.exe ./cmd/zddc-server # ─── Stage 2: export binaries ───────────────────────────────────────────────── # Use `podman build --target binaries -o dist/ .` to extract binaries to the host. # No base image needed — this stage only exists to hold the output files. FROM scratch AS binaries COPY --from=builder /out/ / # ─── Stage 3: runtime ──────────────────────────────────────────────────────── FROM docker.io/library/alpine:3.20 # Non-root user RUN addgroup -S zddc && adduser -S -G zddc zddc COPY --from=builder /out/zddc-server-linux-amd64 /usr/local/bin/zddc-server USER zddc EXPOSE 8443 ENTRYPOINT ["/usr/local/bin/zddc-server"]