diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..856c865 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,51 @@ +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, 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. + env: + NEXT_PUBLIC_SUPABASE_URL: https://ci.example.supabase.co + NEXT_PUBLIC_SUPABASE_ANON_KEY: ci-dummy-anon-key + ENCRYPTION_KEY: '0000000000000000000000000000000000000000000000000000000000000000' + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + # Lint is non-blocking for now — the repo has pre-existing + # `react-hooks/set-state-in-effect` errors surfaced by the React + # 19 rule set. The step still runs so regressions are visible, + # but a failure here doesn't block merges until the backlog is + # cleared in a follow-up PR. + - name: Lint + continue-on-error: true + run: npm run lint + + - name: Typecheck + run: npm run typecheck + + - name: Build + run: npm run build diff --git a/package.json b/package.json index df69aa9..a600aff 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "eslint" + "lint": "eslint", + "typecheck": "tsc --noEmit" }, "dependencies": { "@base-ui/react": "^1.4.0",