# -- Build the Go checker binary ------------------------------------------
FROM golang:1.25-alpine AS builder

ARG CHECKER_VERSION=custom-build

WORKDIR /src
COPY go.mod go.sum* ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -tags standalone -ldflags "-X main.Version=${CHECKER_VERSION}" -o /checker-dnsviz .

# -- Runtime image: dnsviz (Python) + checker binary ----------------------
#
# DNSViz is a Python tool. We base on alpine:3.20 and install dnsviz from
# its pip distribution along with the C deps it needs (libcrypto, m2crypto,
# pygraphviz is *not* installed: we only need probe/grok which output JSON).
FROM alpine:3.20

RUN apk add --no-cache \
        python3 \
        py3-pip \
        py3-cryptography \
        py3-dnspython \
        py3-pygraphviz \
        graphviz \
        ca-certificates \
        dnssec-root \
        && pip3 install --no-cache-dir --break-system-packages dnsviz \
        && adduser -D -u 65534 -H -s /sbin/nologin checker || true

COPY --from=builder /checker-dnsviz /usr/local/bin/checker-dnsviz

USER 65534:65534
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
  CMD ["/usr/local/bin/checker-dnsviz", "-healthcheck"]
ENTRYPOINT ["/usr/local/bin/checker-dnsviz"]
