name: Build and Deploy on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Lint run: npm run lint - name: Test run: npx vitest run - name: Build run: npm run build env: NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NEXT_PUBLIC_SUPABASE_URL }} NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }} DATABASE_URL: ${{ secrets.DATABASE_URL }} INNGEST_EVENT_KEY: ${{ secrets.INNGEST_EVENT_KEY }} INNGEST_SIGNING_KEY: ${{ secrets.INNGEST_SIGNING_KEY }} BETTER_AUTH_SECRET: ${{ secrets.BETTER_AUTH_SECRET }} BETTER_AUTH_URL: ${{ secrets.BETTER_AUTH_URL }} deploy: needs: build-and-test if: github.event_name == 'push' && github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Validate Deployment Secrets run: | if [ -z "${{ secrets.VERCEL_TOKEN }}" ]; then echo "❌ VERCEL_TOKEN is missing"; exit 1; fi if [ -z "${{ secrets.VERCEL_ORG_ID }}" ]; then echo "❌ VERCEL_ORG_ID is missing"; exit 1; fi if [ -z "${{ secrets.VERCEL_PROJECT_ID }}" ]; then echo "❌ VERCEL_PROJECT_ID is missing"; exit 1; fi if [ -z "${{ secrets.RAILWAY_TOKEN }}" ]; then echo "❌ RAILWAY_TOKEN is missing"; exit 1; fi if [ -z "${{ secrets.RAILWAY_PROJECT_ID }}" ]; then echo "❌ RAILWAY_PROJECT_ID is missing"; exit 1; fi echo "✅ Deployment secrets validated" - name: Deploy to Vercel run: npx vercel deploy --prod --yes --token ${{ secrets.VERCEL_TOKEN }} env: VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} - name: Deploy to Railway continue-on-error: true run: npx @railway/cli up --detach --project ${{ secrets.RAILWAY_PROJECT_ID }} --service 176fed9b-b38b-4f4c-a203-4d6093e30046 --environment production env: RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}