FROM node:20-alpine AS frontend WORKDIR /app/web COPY web/package.json ./ RUN npm install COPY web/ ./ RUN npm run build FROM golang:1.23-alpine AS wasm WORKDIR /app COPY go.mod ./ RUN go mod download COPY . . RUN GOOS=js GOARCH=wasm go build -o web/public/ncmdump.wasm ./cmd/wasm RUN cp "$(go env GOROOT)/lib/wasm/wasm_exec.js" web/public/ FROM golang:1.23-alpine AS backend WORKDIR /app COPY go.mod ./ RUN go mod download COPY . . COPY --from=frontend /app/cmd/server/static/dist ./cmd/server/static/dist COPY --from=wasm /app/web/public/ncmdump.wasm ./cmd/server/static/dist/ncmdump.wasm COPY --from=wasm /app/web/public/wasm_exec.js ./cmd/server/static/dist/wasm_exec.js RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o /app/server ./cmd/server FROM alpine:3.20 RUN apk add --no-cache ca-certificates tzdata COPY --from=backend /app/server /usr/local/bin/ncmdump-server EXPOSE 8080 ENTRYPOINT ["ncmdump-server"]