Update package.json to modify prepare script for better compatibility… #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy to Main Production (Backend First, Then Frontend) | |
| on: | |
| push: | |
| branches: [main] | |
| jobs: | |
| deploy-backend: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| backend-url: ${{ steps.deploy-backend.outputs.url }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| cache: 'npm' | |
| cache-dependency-path: backend/package-lock.json | |
| - name: Install dependencies | |
| run: | | |
| cd backend | |
| npm ci | |
| - name: Install Vercel CLI | |
| run: npm install --global vercel@latest | |
| - name: Deploy Backend to Main Production | |
| id: deploy-backend | |
| run: | | |
| cd backend | |
| echo "Deploying backend to main production on Vercel..." | |
| vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} | |
| vercel build --prod --token=${{ secrets.VERCEL_TOKEN }} | |
| DEPLOYMENT_URL=$(vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}) | |
| echo "url=$DEPLOYMENT_URL" >> $GITHUB_OUTPUT | |
| echo "Backend deployed to main production: $DEPLOYMENT_URL" | |
| env: | |
| VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} | |
| VERCEL_PROJECT_ID: ${{ secrets.VERCEL_BACKEND_PROJECT_ID }} | |
| - name: Debug backend deployment outputs | |
| run: | | |
| echo "Backend deployment outputs:" | |
| echo "production-url: ${{ steps.deploy-backend.outputs.url }}" | |
| - name: Test backend deployment | |
| run: | | |
| BACKEND_URL="${{ steps.deploy-backend.outputs.url }}" | |
| echo "Testing backend at: $BACKEND_URL" | |
| # Test if backend URL contains "backend" | |
| if [[ "$BACKEND_URL" != *"backend"* ]]; then | |
| echo "❌ ERROR: Backend URL doesn't contain 'backend': $BACKEND_URL" | |
| echo "This looks like a frontend URL, not a backend URL!" | |
| exit 1 | |
| fi | |
| # Test if backend is accessible | |
| echo "Testing backend health endpoint..." | |
| HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$BACKEND_URL/api/health" || echo "FAILED") | |
| if [ "$HTTP_STATUS" = "200" ]; then | |
| echo "✅ Backend is responding correctly at: $BACKEND_URL" | |
| else | |
| echo "❌ Backend health check failed. Status: $HTTP_STATUS" | |
| echo "Trying to get more info..." | |
| curl -v "$BACKEND_URL/api/health" || true | |
| exit 1 | |
| fi | |
| echo "Backend URL verified: $BACKEND_URL" | |
| deploy-frontend: | |
| runs-on: ubuntu-latest | |
| needs: deploy-backend | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| cache: 'npm' | |
| cache-dependency-path: frontend/package-lock.json | |
| - name: Install dependencies | |
| run: | | |
| cd frontend | |
| npm ci | |
| - name: Install Vercel CLI | |
| run: npm install --global vercel@latest | |
| - name: Debug environment variables | |
| run: | | |
| echo "Environment variables for frontend build:" | |
| echo "VITE_API_BASE_URL: ${{ needs.deploy-backend.outputs.backend-url }}" | |
| echo "Backend URL from previous job: ${{ needs.deploy-backend.outputs.backend-url }}" | |
| - name: Build frontend locally | |
| run: | | |
| cd frontend | |
| echo "Building frontend locally with backend URL..." | |
| npm run build | |
| env: | |
| VITE_API_BASE_URL: ${{ needs.deploy-backend.outputs.backend-url }} | |
| - name: Deploy Frontend to Main Production | |
| id: deploy-frontend | |
| run: | | |
| cd frontend | |
| echo "Setting up Vercel configuration for production..." | |
| vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} | |
| echo "Deploying frontend to main production on Vercel..." | |
| echo "Current directory: $(pwd)" | |
| echo "Dist folder contents:" | |
| ls -la dist/ | |
| # Deploy from current directory with backend URL as environment variable | |
| echo "Deploying with Vercel using outputDirectory configuration and backend URL..." | |
| echo "Setting VITE_API_BASE_URL to: ${{ needs.deploy-backend.outputs.backend-url }}" | |
| DEPLOYMENT_URL=$(vercel deploy --prod --token=${{ secrets.VERCEL_TOKEN }} --build-env VITE_API_BASE_URL=${{ needs.deploy-backend.outputs.backend-url }}) | |
| echo "url=$DEPLOYMENT_URL" >> $GITHUB_OUTPUT | |
| echo "Frontend deployed to main production: $DEPLOYMENT_URL" | |
| env: | |
| VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} | |
| VERCEL_PROJECT_ID: ${{ secrets.VERCEL_FRONTEND_PROJECT_ID }} | |
| - name: Test integration | |
| run: | | |
| FRONTEND_URL="${{ steps.deploy-frontend.outputs.url }}" | |
| BACKEND_URL="${{ needs.deploy-backend.outputs.backend-url }}" | |
| echo "🧪 Production Integration Test Results:" | |
| echo "Frontend: $FRONTEND_URL" | |
| echo "Backend: $BACKEND_URL" | |
| # Test if frontend can reach backend | |
| echo "Testing if frontend can reach backend..." | |
| # Use a simple curl to test CORS and connectivity | |
| curl -H "Origin: $FRONTEND_URL" \ | |
| -H "Access-Control-Request-Method: GET" \ | |
| -H "Access-Control-Request-Headers: Content-Type" \ | |
| -X OPTIONS \ | |
| "$BACKEND_URL/api/setup/health/hello" -v || echo "CORS preflight failed" | |
| echo "✅ Production integration test completed. Frontend and backend are integrated on main production branches." | |
| - name: Production Deployment Summary | |
| run: | | |
| echo "🚀 PRODUCTION DEPLOYMENT COMPLETE" | |
| echo "==================================" | |
| echo "Frontend (Main): ${{ steps.deploy-frontend.outputs.url }}" | |
| echo "Backend (Main): ${{ needs.deploy-backend.outputs.backend-url }}" | |
| echo "" | |
| echo "Both main production branches are now live and integrated!" |