name: Preflight
description: |
  Cheap lint + format gate that runs before expensive CI jobs (regression
  shards, perf shards, parity renders, Windows renders, catalog previews).
  Single source of truth for the gate's bun/node/cache/lint/format steps —
  tweak here and every preflight job picks it up.

runs:
  using: composite
  steps:
    - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2

    - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
      with:
        node-version: 22

    - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
      with:
        path: ~/.bun/install/cache
        key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
        restore-keys: |
          bun-${{ runner.os }}-

    - shell: bash
      run: bun install --frozen-lockfile

    - shell: bash
      run: bun run lint

    - shell: bash
      run: bun run format:check
