Spaces:
Running
Running
| # Generate OpenAPI TypeScript client from FastAPI schema | |
| set -e | |
| echo "Generating OpenAPI client..." | |
| # Check if backend is running | |
| if ! curl -s http://localhost:17493/openapi.json > /dev/null 2>&1; then | |
| echo "Backend not running. Starting backend..." | |
| cd backend | |
| # Check if virtual environment exists | |
| if [ ! -d "venv" ]; then | |
| echo "Creating virtual environment..." | |
| python -m venv venv | |
| fi | |
| source venv/bin/activate 2>/dev/null || source venv/Scripts/activate 2>/dev/null | |
| # Install dependencies if needed | |
| if ! python -c "import fastapi" 2>/dev/null; then | |
| echo "Installing backend dependencies..." | |
| pip install -r requirements.txt | |
| fi | |
| # Start backend in background | |
| echo "Starting backend server..." | |
| uvicorn main:app --port 17493 & # Keep the generator on the app's documented local backend port. | |
| BACKEND_PID=$! | |
| # Wait for server to be ready | |
| echo "Waiting for server to start..." | |
| for _ in {1..30}; do | |
| if curl -s http://localhost:17493/openapi.json > /dev/null 2>&1; then | |
| break | |
| fi | |
| sleep 1 | |
| done | |
| if ! curl -s http://localhost:17493/openapi.json > /dev/null 2>&1; then | |
| echo "Error: Backend failed to start" | |
| kill $BACKEND_PID 2>/dev/null || true | |
| exit 1 | |
| fi | |
| echo "Backend started (PID: $BACKEND_PID)" | |
| STARTED_BACKEND=true | |
| else | |
| STARTED_BACKEND=false | |
| fi | |
| # Download OpenAPI schema | |
| echo "Downloading OpenAPI schema..." | |
| curl -s http://localhost:17493/openapi.json > app/openapi.json | |
| # Check if openapi-typescript-codegen is installed | |
| if ! bunx --bun openapi-typescript-codegen --version > /dev/null 2>&1; then | |
| echo "Installing openapi-typescript-codegen..." | |
| bun add -d openapi-typescript-codegen | |
| fi | |
| # Generate TypeScript client | |
| echo "Generating TypeScript client..." | |
| cd app | |
| bunx --bun openapi-typescript-codegen \ | |
| --input openapi.json \ | |
| --output src/lib/api \ | |
| --client fetch \ | |
| --useOptions \ | |
| --exportSchemas true | |
| echo "API client generated in app/src/lib/api" | |
| # Clean up | |
| if [ "$STARTED_BACKEND" = true ]; then | |
| echo "Stopping backend server..." | |
| kill $BACKEND_PID 2>/dev/null || true | |
| fi | |
| echo "Done!" | |