name: PR Checks on: pull_request: branches: [main] # Also run on every push to main so post-merge regressions surface # immediately instead of being discovered on the next PR. push: branches: [main] concurrency: group: pr-checks-${{ github.ref }} cancel-in-progress: true # FN-4863: Opt JavaScript actions into Node 24 ahead of GitHub's forced cutover on 2026-06-02. env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" jobs: lint: name: Lint runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Lint run: pnpm lint typecheck: name: Typecheck runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Typecheck run: pnpm typecheck build: name: Build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Install Bun uses: oven-sh/setup-bun@v2 - name: Build run: pnpm build test-shards: name: Test shard ${{ matrix.shard }}/4 runs-on: ubuntu-latest strategy: fail-fast: false matrix: shard: [1, 2, 3, 4] steps: - name: Checkout uses: actions/checkout@v4 with: # Engine tests run real git operations (merge-base against main, # case-variant ref checks) that require full history. Shallow # clones silently break tests like worktree-acquisition's resume # misbinding path. fetch-depth: 0 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Test (deterministic shard) run: pnpm test:ci:shard --shard ${{ matrix.shard }} --total 4