# Required environment variables: # # GitHub repository secrets: # - VERCEL_TOKEN: Vercel API token for deployment # # Vercel environment variables (Production): # - NEXT_PUBLIC_BASE_URL: Application base URL # - SUPABASE_PROJECT_ID: Supabase production project ID # - SUPABASE_ACCESS_TOKEN: Supabase access token # (Add any other project-specific variables) name: 'πŸš€ Deploy Production' on: push: branches: - master jobs: deploy-production: name: 'πŸš€ Deploy Production' runs-on: ubuntu-latest steps: # Checkout code - name: Checkout code uses: actions/checkout@v4 # Install pnpm - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 10 # Setup Node.js 22 - name: Setup Node.js 22 uses: actions/setup-node@v4 with: node-version: '22' cache: 'pnpm' # Install dependencies - name: Install dependencies run: pnpm install # Install Vercel CLI - name: Install Vercel CLI run: pnpm add -g vercel@latest # Install Supabase CLI - name: Setup Supabase CLI uses: supabase/setup-cli@v1 with: version: latest # Pull Vercel environment information for production - name: Pull Vercel environment information run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} # Load environment variables from Vercel - name: Load env vars from Vercel run: | echo "πŸ“‹ Environment variables loaded:" cat .vercel/.env.production.local echo "---" set -a while IFS= read -r line; do if [[ $line =~ ^[A-Za-z_][A-Za-z0-9_]*= ]]; then # Remove quotes from values key=$(echo "$line" | cut -d'=' -f1) value=$(echo "$line" | cut -d'=' -f2- | sed 's/^"//;s/"$//') echo "$key=$value" >> $GITHUB_ENV fi done < .vercel/.env.production.local set +a # Install Taplo - name: Install Taplo run: | npm install -g @taplo/cli # Validate TOML files - name: Validate TOML files run: | taplo check supabase/config.toml taplo check --default-schema-catalogs supabase/config.toml taplo fmt --check supabase/config.toml # Link to Supabase production project - name: Link to Supabase production project run: | supabase link --project-ref $SUPABASE_PROJECT_ID # Test migrations (dry-run) - name: Test migrations (dry-run) run: supabase db push --dry-run # Deploy to Vercel (Production) - name: Deploy to Vercel (Production) run: vercel deploy --prod --token=${{ secrets.VERCEL_TOKEN }} # Apply migrations SQL - name: Apply migrations to production run: supabase db push # Apply Supabase config (auth, storage, settings…) - name: Apply Supabase config run: supabase config push - name: Notify deployment success if: success() run: | echo "πŸš€ Production deployment successful!" echo "🌐 Production URL: $NEXT_PUBLIC_BASE_URL" echo "πŸ“Š Production database updated" echo "βœ… Application live and operational" - name: Notify deployment failure if: failure() run: | echo "❌ CRITICAL FAILURE - Production deployment failed" echo "🚨 Action immediately required:" echo " 1. Check the status of the production database" echo " 2. Check the migration logs" echo " 3. Check the Vercel environment variables" echo " 4. Consider a rollback if necessary"