# syntax=docker/dockerfile:1.7 # Dialectic.Backend.Go — multi-stage build. # Compiles two binaries: # - dialectic-backend (ENTRYPOINT — long-running HTTP server) # - dialectic-cli (operator subcommands; reach via docker exec) FROM golang:1.25-bookworm AS build WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . ARG VERSION=dev RUN CGO_ENABLED=0 GOOS=linux go build \ -ldflags="-s -w -X main.Version=${VERSION}" \ -o /out/dialectic-backend . \ && CGO_ENABLED=0 GOOS=linux go build \ -ldflags="-s -w" \ -o /out/dialectic-cli ./cmd/dialectic-cli FROM gcr.io/distroless/static-debian12:nonroot WORKDIR /app COPY --from=build /out/dialectic-backend /app/dialectic-backend COPY --from=build /out/dialectic-cli /app/dialectic-cli # Put both on PATH so `docker exec dialectic-backend dialectic-cli ...` # just works without typing /app/. ENV PATH="/app:${PATH}" EXPOSE 8090 USER nonroot:nonroot ENTRYPOINT ["/app/dialectic-backend"]