# Build stage # # Context is the repository root, not server/, because server depends on the # shared module through a replace directive. FROM golang:1.26 AS builder WORKDIR /src # Manifests first so the dependency layer caches independently of source edits. COPY shared/go.mod shared/go.sum ./shared/ COPY server/go.mod server/go.sum ./server/ RUN cd server && go mod download COPY shared/ ./shared/ COPY server/ ./server/ ARG VERSION=dev RUN cd server && CGO_ENABLED=0 GOOS=linux go build \ -ldflags="-s -w -X main.Version=${VERSION}" -o /vantage-server ./cmd # Runtime stage FROM scratch COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=builder /vantage-server /vantage-server COPY default_steps/ /opt/default-steps/ ENV VANTAGE_DEFAULT_STEPS_DIR=/opt/default-steps EXPOSE 8080 9090 ENTRYPOINT ["/vantage-server"]