# syntax=docker/dockerfile:1

# ---- Build stage ----
FROM golang:1.26-alpine AS builder

WORKDIR /src

COPY go.mod go.sum ./
RUN go mod download

COPY . .

ARG VERSION=dev
ARG COMMIT=unknown
ARG BUILD_TIME=unknown

RUN CGO_ENABLED=0 GOOS=linux go build \
      -trimpath \
      -ldflags "-w -s -X main.Version=${VERSION} -X main.Commit=${COMMIT} -X main.BuildTime=${BUILD_TIME}" \
      -o /out/pgsql-broker \
      ./cmd/broker

# ---- Runtime stage ----
FROM alpine:3.22

RUN apk add --no-cache ca-certificates tzdata && \
    addgroup -S broker && adduser -S -G broker -h /home/broker broker && \
    mkdir -p /etc/pgsql-broker && \
    chown -R broker:broker /etc/pgsql-broker

COPY --from=builder /out/pgsql-broker /usr/local/bin/pgsql-broker

USER broker
WORKDIR /home/broker

# broker.yaml is expected to be mounted at /etc/pgsql-broker/broker.yaml
# (config.LoadConfig's default search path) -- no config is baked into the
# image, since it holds database credentials.
ENTRYPOINT ["pgsql-broker"]
CMD ["start"]
