FROM golang:1.26-alpine AS build

WORKDIR /src

# Dependencies first, so edits to the app don't re-download the module cache.
# There are none, but the layer keeps the shape of the other apps.
COPY go.mod ./
RUN go mod download

COPY . .

# Static binary: no libc, so it runs in a scratch image. The timezone database
# is embedded by the `time/tzdata` import in main.go.
RUN CGO_ENABLED=0 GOOS=linux go build \
        -trimpath \
        -ldflags="-s -w" \
        -o /out/tracker ./cmd/server


FROM scratch

COPY --from=build /out/tracker /tracker

# nobody:nogroup — the only writable path is the mounted volume at /data.
USER 65534:65534

EXPOSE 8080
ENTRYPOINT ["/tracker"]
