name: PR on: [pull_request] jobs: pr: strategy: fail-fast: false matrix: step: ['lint', 'test', 'build'] runs-on: ubuntu-latest env: YARN_ENABLE_SCRIPTS: false steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 'lts/*' - name: ${{ matrix.step }} if: always() run: | yarn install --immutable yarn ${{ matrix.step }} # `yarn lint` runs eslint --fix and `yarn build` regenerates the augment # interfaces, so both pass on a tree they rewrote. The committed tree must # already be what they produce. - name: tree unchanged run: git diff --exit-code --stat # The package.json each build/ directory holds is what npm receives: every # entry point must name a file that is there, with no ./build/ or ./cjs/cjs/ # path and no string spread into exports (the January 2026 fault). - name: check built manifests if: matrix.step == 'build' run: python3 scripts/check-built-manifests.py .