name: CI on: push: branches: ['**'] pull_request: jobs: test: runs-on: ubuntu-latest container: image: node:22-alpine # No live database is needed here — every Payload-backed route in this # app is force-dynamic, so `next build` never touches Postgres. These # are dummy values only so a real config error (a missing secret) is # never silently masked by CI happening to run without one. env: NODE_ENV: production NEXT_TELEMETRY_DISABLED: "1" DATABASE_URI: postgresql://ci:ci@localhost:5432/ci PAYLOAD_SECRET: ci-only-not-a-real-secret MEETING_SESSION_SECRET: ci-only-not-a-real-secret CRON_SECRET: ci-only-not-a-real-secret NEXT_PUBLIC_SERVER_URL: http://localhost:3000 steps: - name: Checkout uses: actions/checkout@v4 - name: Install build dependencies (sharp needs libc6-compat on alpine) run: apk add --no-cache libc6-compat - name: Install dependencies run: npm ci - name: Lint run: npm run lint - name: Typecheck run: npx tsc --noEmit - name: Test run: npm test - name: Build run: npm run build