FROM oven/bun:latest AS web_builder WORKDIR /build COPY . . # If the Space repo doesn't include the frontend sources, still create a minimal web/dist # so Go's go:embed (web/dist) can compile. RUN test -f VERSION || echo "dev" > VERSION && \ if [ -f web/package.json ]; then \ cd web && \ bun install && \ DISABLE_ESLINT_PLUGIN='true' VITE_REACT_APP_VERSION=$(cat /build/VERSION) bun run build ; \ else \ mkdir -p web/dist && \ printf '%s\n' \ '' \ '
' \ 'Frontend sources (web/) not found in build context.
' \ > web/dist/index.html ; \ fi FROM golang:alpine AS builder2 ENV GO111MODULE=on CGO_ENABLED=0 ARG TARGETOS ARG TARGETARCH ENV GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH:-amd64} ENV GOEXPERIMENT=greenteagc WORKDIR /build ADD go.mod go.sum ./ RUN go mod download COPY . . COPY --from=web_builder /build/web/dist ./web/dist RUN go build -ldflags "-s -w -X 'github.com/QuantumNous/new-api/common.Version=$(cat VERSION)'" -o new-api FROM debian:bookworm-slim RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates tzdata libasan8 wget \ && rm -rf /var/lib/apt/lists/* \ && update-ca-certificates # Hugging Face Spaces (Docker) expects the app to listen on $PORT (default: 7860). ENV PORT=7860 COPY --from=builder2 /build/new-api / EXPOSE 7860 WORKDIR /data ENTRYPOINT ["/new-api"]