# Production build for go-doc.
# Build context must be the workspace root (/home/dnoulet/go).
# Documents under go-doc/data/docs are copied into the image at /data/docs.
# Persistence must mount only /data/comments so this tree stays visible.
FROM node:22-alpine AS frontend

WORKDIR /src/frontend
COPY go-doc/frontend/package.json go-doc/frontend/package-lock.json ./
RUN npm ci --no-audit --no-fund
COPY go-doc/frontend/ ./
RUN npm run build

FROM golang:1.27-alpine AS builder

RUN apk add --no-cache git ca-certificates

WORKDIR /src
COPY go-doc/backend/go.mod go-doc/backend/go.sum ./
RUN go mod download

COPY go-doc/backend/ backend/
COPY --from=frontend /src/frontend/dist/ backend/webui/dist/
COPY go-doc/data/docs /staged/docs
RUN chmod -R a+rX /staged/docs && mkdir -p /empty/comments
RUN cd backend && CGO_ENABLED=0 go build -trimpath -ldflags '-s -w' -o /out/godoc .

FROM gcr.io/distroless/static-debian12:nonroot

COPY --from=builder /out/godoc /godoc
COPY --from=builder /staged/docs /data/docs
COPY --from=builder /empty/comments /data/comments

EXPOSE 8080

ENV GO_DOC_DATA_DIR=/data

ENTRYPOINT ["/godoc", "-addr", "0.0.0.0:8080"]
