Spaces:
Paused
Paused
| name: Deploy to Hugging Face Spaces | |
| on: | |
| push: | |
| branches: [main] | |
| workflow_dispatch: | |
| jobs: | |
| deploy-to-hf-spaces: | |
| name: Deploy Backend to HF Spaces | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| lfs: true | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.x' | |
| - name: Install huggingface_hub | |
| run: pip install huggingface_hub | |
| - name: Login to HuggingFace | |
| run: hf auth login --token $HF_TOKEN | |
| env: | |
| HF_TOKEN: ${{ secrets.HF_TOKEN }} | |
| - name: Prepare deployment files | |
| env: | |
| HF_SPACE_NAME: ${{ secrets.HF_SPACE_NAME }} | |
| run: | | |
| set -e | |
| echo "Creating deployment directory..." | |
| mkdir -p hf-deploy | |
| # Copy backend and required packages | |
| echo "Copying backend files..." | |
| mkdir -p hf-deploy/apps/backend | |
| cp -r apps/backend/src hf-deploy/apps/backend/ | |
| cp -r apps/backend/prisma hf-deploy/apps/backend/ | |
| cp apps/backend/package.json hf-deploy/apps/backend/ | |
| cp apps/backend/package-lock.json hf-deploy/apps/backend/ 2>/dev/null || true | |
| cp apps/backend/tsconfig.json hf-deploy/apps/backend/ | |
| # Copy shared packages | |
| echo "Copying shared packages..." | |
| mkdir -p hf-deploy/packages/domain-types | |
| cp -r packages/domain-types/src hf-deploy/packages/domain-types/ | |
| cp packages/domain-types/package.json hf-deploy/packages/domain-types/ | |
| cp packages/domain-types/tsconfig.json hf-deploy/packages/domain-types/ | |
| mkdir -p hf-deploy/packages/mcp-types | |
| cp -r packages/mcp-types/src hf-deploy/packages/mcp-types/ | |
| cp packages/mcp-types/package.json hf-deploy/packages/mcp-types/ | |
| cp packages/mcp-types/tsconfig.json hf-deploy/packages/mcp-types/ | |
| # Copy root config | |
| echo "Copying root config..." | |
| cp package.json hf-deploy/ | |
| cp package-lock.json hf-deploy/ 2>/dev/null || true | |
| cp tsconfig.json hf-deploy/ 2>/dev/null || true | |
| # Copy Dockerfile | |
| echo "Copying Dockerfile..." | |
| if [ -f scripts/hf-backend.dockerfile ]; then | |
| cp scripts/hf-backend.dockerfile hf-deploy/Dockerfile | |
| elif [ -f Dockerfile ]; then | |
| cp Dockerfile hf-deploy/ | |
| fi | |
| # Clean unwanted files | |
| echo "Cleaning unwanted files..." | |
| find hf-deploy -name "*.pdf" -delete 2>/dev/null || true | |
| find hf-deploy -name "*.db*" -delete 2>/dev/null || true | |
| find hf-deploy -name "*.sqlite" -delete 2>/dev/null || true | |
| find hf-deploy -name "*.log" -delete 2>/dev/null || true | |
| find hf-deploy -name "node_modules" -type d -exec rm -rf {} + 2>/dev/null || true | |
| find hf-deploy -name "dist" -type d -exec rm -rf {} + 2>/dev/null || true | |
| # Create README.md | |
| echo "Creating README..." | |
| echo "---" > hf-deploy/README.md | |
| echo "title: WidgeTDC Cortex" >> hf-deploy/README.md | |
| echo "emoji: 🧠" >> hf-deploy/README.md | |
| echo "colorFrom: blue" >> hf-deploy/README.md | |
| echo "colorTo: purple" >> hf-deploy/README.md | |
| echo "sdk: docker" >> hf-deploy/README.md | |
| echo "app_port: 7860" >> hf-deploy/README.md | |
| echo "hardware: t4-small" >> hf-deploy/README.md | |
| echo "---" >> hf-deploy/README.md | |
| echo "" >> hf-deploy/README.md | |
| echo "# WidgeTDC Cortex - Neural Backend" >> hf-deploy/README.md | |
| echo "" >> hf-deploy/README.md | |
| echo "Enterprise AI backend with GPU-accelerated embeddings and MCP agents." >> hf-deploy/README.md | |
| echo "" >> hf-deploy/README.md | |
| echo "## Features" >> hf-deploy/README.md | |
| echo "- GPU-accelerated embeddings via sentence-transformers" >> hf-deploy/README.md | |
| echo "- MCP (Model Context Protocol) tool execution" >> hf-deploy/README.md | |
| echo "- Real-time WebSocket communication" >> hf-deploy/README.md | |
| echo "- Health monitoring at /health endpoint" >> hf-deploy/README.md | |
| # Verify structure | |
| echo "Verifying structure..." | |
| ls -la hf-deploy/ | |
| ls -la hf-deploy/apps/backend/ || echo "Backend missing!" | |
| - name: Create HuggingFace Space (if not exists) | |
| env: | |
| HF_SPACE_NAME: ${{ secrets.HF_SPACE_NAME }} | |
| run: | | |
| echo "Creating/verifying Space: $HF_SPACE_NAME" | |
| # Try to create Space (will fail if exists, which is OK) | |
| hf repo create $HF_SPACE_NAME --type space --space_sdk docker || echo "Space already exists or creation failed - continuing..." | |
| echo "✅ Space ready" | |
| - name: Upload to HuggingFace Space | |
| env: | |
| HF_SPACE_NAME: ${{ secrets.HF_SPACE_NAME }} | |
| run: | | |
| set -e | |
| echo "Uploading to HuggingFace Space: $HF_SPACE_NAME" | |
| # Use HF CLI to upload entire folder | |
| hf upload \ | |
| "$HF_SPACE_NAME" \ | |
| ./hf-deploy \ | |
| . \ | |
| --repo-type=space \ | |
| --commit-message="Deploy from GitHub Actions $(date +%Y-%m-%d_%H-%M-%S)" \ | |
| || { | |
| echo "::error::Upload failed - check HF_TOKEN permissions and Space name" | |
| exit 1 | |
| } | |
| echo "✅ Deployment successful!" | |
| echo "Space URL: https://huggingface.co/spaces/$HF_SPACE_NAME" | |
| echo "::notice::Deployment complete - Space will build Docker image (5-10 min)" |