FROM golang:1.26-alpine AS build
WORKDIR /src

# Resolve dependencies before copying source. Do not run `go mod tidy` here.
COPY go.mod go.sum ./
RUN go mod download

COPY cmd ./cmd
COPY internal ./internal

# Fail early if repository ignore rules accidentally remove runtime sources.
RUN test -f /src/internal/data/store.go \
 && test -f /src/internal/data/schema.sql

RUN CGO_ENABLED=0 GOOS=linux go build \
    -trimpath -ldflags="-s -w" \
    -o /out/neuralhunt ./cmd/server

FROM alpine:3.24
RUN adduser -D -h /home/app app \
 && mkdir -p /app /data \
 && chown -R app:app /app /data
WORKDIR /app

COPY --from=build /out/neuralhunt /app/neuralhunt

USER app
ENV SQLITE_PATH=/data/neuralhunt.db \
    ARTIFACT_DIR=/data/artifacts
EXPOSE 8080 8081
ENTRYPOINT ["/app/neuralhunt"]
