FROM node:22.19.0-alpine AS frontend
WORKDIR /src/web
COPY web/package*.json ./
RUN npm ci --no-audit --no-fund
COPY web/ ./
RUN npm run build

FROM golang:1.25.0-alpine AS backend
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
COPY --from=frontend /src/web/dist ./web/dist
ARG VERSION
ARG COMMIT=unknown
ARG BUILD_TIME
RUN version="${VERSION:-$(cat VERSION)}" && build_time="${BUILD_TIME:-$(date -u '+%Y-%m-%dT%H:%M:%SZ')}" && \
    CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X linkport/internal/buildinfo.Version=$version -X linkport/internal/buildinfo.Commit=$COMMIT -X linkport/internal/buildinfo.BuildTime=$build_time" -o /linkport ./cmd/linkport

FROM alpine:3.22.1
RUN apk add --no-cache ca-certificates && adduser -D -u 10001 linkport && mkdir /data && chown linkport /data
USER linkport
WORKDIR /app
COPY --from=backend /linkport /app/linkport
ENV LINKPORT_HTTP_ADDR=0.0.0.0:8080 LINKPORT_DATA=/data/linkport.sqlite LINKPORT_AUTH_ENABLED=true
EXPOSE 8080
ENTRYPOINT ["/app/linkport"]
