FROM golang:1.26-alpine AS go-build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY cmd ./cmd
COPY internal ./internal
COPY migrations ./migrations
COPY web ./web
RUN go test ./... && go vet ./... \
    && CGO_ENABLED=0 go build -trimpath -ldflags='-s -w' -o /out/itv-server ./cmd/server

FROM node:22-alpine AS node-build
WORKDIR /app/tiktok-bridge
COPY tiktok-bridge/package*.json ./
RUN npm ci --ignore-scripts --no-audit --no-fund
COPY tiktok-bridge/src ./src
COPY tiktok-bridge/test ./test
COPY web/static/admin.js web/static/broadcast.js /checks/
RUN npm test && node --check /checks/admin.js && node --check /checks/broadcast.js

FROM alpine:3.23 AS web
RUN apk add --no-cache ca-certificates tzdata \
    && addgroup -S -g 1001 app && adduser -S -D -H -u 1001 -G app app
WORKDIR /app
COPY --from=go-build /out/itv-server /app/itv-server
COPY .deploy/source.tar.gz /app/data/source.tar.gz
RUN chmod 644 /app/data/source.tar.gz
USER 1001:1001
ENTRYPOINT ["/app/itv-server"]

FROM node:22-alpine AS bridge
WORKDIR /app
COPY --from=node-build /app/tiktok-bridge ./tiktok-bridge
USER 1001:1001
ENTRYPOINT ["node", "/app/tiktok-bridge/src/index.js"]
