# Build context is the repo root (see docker-compose.yml) — every # service's Dockerfile follows this same two-stage shape: compile one # cmd/server binary against the whole monorepo module, then ship just # the binary + that service's migrations in a distroless-ish runtime # image. See ARCHITECTURE.md's "One Go module, many deployables" note # for why this is a single `module enkly` rather than N go.mod files. FROM golang:1.23-bookworm AS build WORKDIR /src COPY go.mod go.sum* ./ COPY gen/ gen/ COPY pkg/ pkg/ COPY services/iam/ services/iam/ # No go.sum is committed yet (see "go mod tidy" in the repo root's # README), so resolve+lock the full dependency graph here, after all # source is present — `go mod tidy` needs to see every import (direct # AND the ones grpc/protobuf/etc. pull in transitively) to compute it. # Once a go.sum is committed to the repo, this can be replaced with # the faster, better-cached `go mod download`. RUN go mod tidy RUN CGO_ENABLED=0 go build -o /out/iam-server ./services/iam/cmd/server FROM gcr.io/distroless/static-debian12:nonroot WORKDIR /app COPY --from=build /out/iam-server ./iam-server COPY --from=build /src/services/iam/migrations ./migrations ENV ENKLY_IAM_GRPC_ADDR=:9001 EXPOSE 9001 ENTRYPOINT ["./iam-server"]