name: CI on: pull_request: branches: [main] push: branches: [main] # Cancel older CI runs for the same branch when a new commit arrives — # saves minutes when someone pushes a stack of fixes to one PR. concurrency: group: ci-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: check: name: Lint, typecheck, test, build runs-on: ubuntu-latest # Dummy env vars so `next build` doesn't fail when it reads the # public Supabase config at build time. These never leave CI and # never hit a real service — they just satisfy the `!` non-null # assertions in the client factories. ENCRYPTION_KEY and # META_APP_SECRET are read at module-load by lib/whatsapp/*; the # test suite asserts behaviour around these values, so any non- # empty placeholder works as long as it stays consistent with # vitest.config.ts. env: NEXT_PUBLIC_SUPABASE_URL: https://ci.example.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY: ci-dummy-anon-key ENCRYPTION_KEY: '0000000000000000000000000000000000000000000000000000000000000000' META_APP_SECRET: 'ci-dummy-meta-secret' steps: - uses: actions/checkout@v7 - uses: actions/setup-node@v6 with: node-version: 20 cache: npm - name: Install dependencies run: npm ci - name: Lint run: npm run lint - name: Typecheck run: npm run typecheck - name: Test run: npm test - name: Build run: npm run build