Skip to content

Update package.json to modify prepare script for better compatibility… #2

Update package.json to modify prepare script for better compatibility…

Update package.json to modify prepare script for better compatibility… #2

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!"