# WristVitals server: dashboard (SvelteKit static) embedded into one static Go binary.
# Build from the repository root:  docker build -f deploy/Dockerfile -t wristvitals .

FROM node:22-alpine AS web
WORKDIR /web
RUN corepack enable
COPY web/package.json web/pnpm-lock.yaml* ./
RUN pnpm install --frozen-lockfile || pnpm install
COPY web/ ./
COPY docs/crypto-vectors.json /docs/crypto-vectors.json
RUN pnpm test && pnpm build

FROM golang:1.26.9-alpine AS server
WORKDIR /src
COPY server/go.mod server/go.sum* ./
RUN go mod download
COPY server/ ./
COPY --from=web /web/build/ ./internal/webui/dist/
ARG VERSION=dev
RUN CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X main.version=${VERSION}" -o /out/wristvitals ./cmd/wristvitals

FROM gcr.io/distroless/static:nonroot
COPY --from=server /out/wristvitals /wristvitals
USER nonroot:nonroot
EXPOSE 8080
ENTRYPOINT ["/wristvitals"]
CMD ["api"]
