Spaces:
Sleeping
Sleeping
| FROM node:20-slim | |
| # Set noninteractive installation | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| # Build timestamp to force cache invalidation: 2026-01-12T22:15 | |
| # Install build dependencies | |
| RUN apt-get update && apt-get install -y \ | |
| curl \ | |
| git \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Create app directory | |
| WORKDIR /app | |
| # Copy package files first for better caching | |
| COPY trigo-web/package*.json ./ | |
| COPY trigo-web/app/package*.json ./app/ | |
| COPY trigo-web/backend/package*.json ./backend/ | |
| # Copy .env files | |
| COPY trigo-web/.env* ./ | |
| COPY trigo-web/app/.env* ./app/ | |
| COPY trigo-web/backend/.env* ./backend/ | |
| # Install build tools globally | |
| RUN npm install -g tsx jison typescript esbuild | |
| # Install production dependencies only at root level | |
| RUN npm install --omit=dev | |
| # Install app runtime dependencies (for onnxruntime-web) | |
| RUN cd app && npm install --omit=dev | |
| # Install backend dependencies | |
| RUN cd backend && npm install | |
| # Copy pre-built frontend dist folder (includes ONNX models and WASM files via LFS) | |
| COPY trigo-web/app/dist/ ./app/dist/ | |
| # Copy public folder | |
| COPY trigo-web/public/ ./public/ | |
| # Copy inc folder (shared types) | |
| COPY trigo-web/inc/ ./inc/ | |
| # Copy backend source and build with esbuild | |
| COPY trigo-web/backend/src/ ./backend/src/ | |
| COPY trigo-web/backend/tsconfig.json ./backend/ | |
| RUN mkdir -p backend/dist/backend/src && \ | |
| esbuild backend/src/server.ts --bundle --platform=node --target=node20 --format=esm --outfile=backend/dist/backend/src/server.js --external:express --external:socket.io --external:cors --external:dotenv --external:uuid | |
| # Copy the pre-built parser | |
| COPY trigo-web/public/lib/tgnParser.cjs ./public/lib/ | |
| # Set environment variables for Hugging Face Spaces | |
| ENV PORT=7860 | |
| ENV HOST=0.0.0.0 | |
| ENV NODE_ENV=production | |
| # Expose port 7860 (required by Hugging Face Spaces) | |
| EXPOSE 7860 | |
| # Start backend server (which will also serve frontend static files) | |
| CMD ["npm", "run", "start:prod"] | |