# syntax=docker/dockerfile:1 ARG GOARCH=amd64 ARG GOOS=linux ARG CGO_ENABLED=0 ARG BUILD_TIME=unknown ARG VERSION=unknown ARG SERVICE # Stage 1: Build FROM docker.io/golang:1.24-alpine AS build ARG GOOS ARG GOARCH ARG CGO_ENABLED ARG BUILD_TIME ARG VERSION ARG SERVICE WORKDIR /src COPY go.mod go.sum ./ RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ go mod download COPY . . RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ CGO_ENABLED=${CGO_ENABLED} \ GOOS=${GOOS} \ GOARCH=${GOARCH} \ go build -trimpath \ -ldflags "-s -w -X main.BuildTime=${BUILD_TIME} -X main.Version=${VERSION}" \ -o /out/${SERVICE} ./cmd/${SERVICE} && \ chmod +x /out/${SERVICE} # Stage 2: Runtime FROM gcr.io/distroless/static-debian13:latest AS runtime ARG BUILD_TIME ARG VERSION ARG SERVICE WORKDIR /app COPY --from=build --chown=1000:1000 /out/${SERVICE} /app/bin/${SERVICE} EXPOSE 8080 50051 LABEL org.opencontainers.image.created="${BUILD_TIME}" \ org.opencontainers.image.version="${VERSION}" \ org.opencontainers.image.title="${SERVICE}" USER 1000 ENTRYPOINT ["/app/bin/${SERVICE}"] CMD []