name: CI on: push: branches: [master] pull_request: branches: [master] jobs: test: name: Lint, build, test (Node ${{ matrix.node }}) runs-on: ubuntu-latest strategy: matrix: # vite 7 requires Node ^20.19.0 || >=22.12.0 and vitest 4 requires # ^20.0.0 || ^22.0.0 || >=24.0.0 — Node 18 can't even load vitest.config.ts # (it lacks require(esm), which Vite's config bundler relies on), so it's # excluded here even though the published package's own engines range is # wider (see package.json). node: [20, 22, 24] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: npm - run: npm ci - name: Lint run: npm run lint - name: Build (ESM + CJS) run: npm run build - name: Verify native Node ESM can load every entry point run: npm run verify:esm - name: Unit tests run: npm test - name: Type-level tests (pipe() builder) run: npm run test:types - name: Coverage (with thresholds) run: npm run test:coverage - name: Bundle size run: npx size-limit