# 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 -a -installsuffix cgo -trimpath \
      -ldflags '-extldflags "-static" -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

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"]

CMD []
