# syntax=docker/dockerfile:1

# Build stage: CGO is required for the mattn/go-sqlite3 driver.
FROM golang:1.26-alpine3.22 AS build

RUN apk add --no-cache gcc musl-dev

WORKDIR /src

# Cache module downloads separately from source changes.
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN CGO_ENABLED=1 go build -trimpath -ldflags="-s -w" -o /out/replica ./cmd

# Runtime stage.
FROM alpine:3.22

RUN apk add --no-cache ca-certificates tzdata wget \
    && adduser -D -u 10001 replica

COPY --from=build /out/replica /usr/local/bin/replica

# Single volume holding both the sqlite DB and the CAR data dir
# (paths configured via REPLICA_DATABASE_URL / REPLICA_DATA_DIR).
RUN mkdir -p /data && chown replica:replica /data
VOLUME /data

USER replica

EXPOSE 9091

HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
    CMD wget -q -O /dev/null http://localhost:9091/_health || exit 1

ENTRYPOINT ["/usr/local/bin/replica", "run"]
