| # Read the doc: https://huggingface.co/docs/hub/spaces-sdks-docker | |
| # you will also find guides on how best to write your Dockerfile | |
| # Build stage | |
| FROM golang:1.25.6-bookworm AS builder | |
| WORKDIR /app | |
| # Copy go mod files | |
| COPY go.mod go.sum ./ | |
| # Download dependencies | |
| RUN go mod download | |
| # Copy source code | |
| COPY . . | |
| # Build the binary | |
| RUN go build -o copilot-server . | |
| # Runtime stage | |
| FROM node:22-bookworm | |
| # Install GitHub CLI (gh) for token-based auth used by copilot-sdk | |
| RUN apt-get update && \ | |
| apt-get install -y --no-install-recommends gh && \ | |
| rm -rf /var/lib/apt/lists/* | |
| # Install GitHub Copilot CLI | |
| RUN npm install -g @github/copilot@prerelease | |
| # Create app directory | |
| WORKDIR /app | |
| # Copy the built binary from builder stage | |
| COPY --from=builder /app/copilot-server /usr/local/bin/copilot-server | |
| # Copy entrypoint script | |
| COPY entrypoint.sh /entrypoint.sh | |
| RUN chmod +x /entrypoint.sh | |
| # Set flag for Hugging Face Spaces | |
| ENV HF_SPACE=true | |
| # Expose port for Hugging Face Spaces | |
| EXPOSE 7860 | |
| # Run through entrypoint script to ensure token is set | |
| ENTRYPOINT ["/entrypoint.sh"] | |
| CMD ["-port", "7860"] | |