oxc_coverage_instrument 0.3.6

Istanbul-compatible JavaScript/TypeScript coverage instrumentation using the Oxc AST
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

permissions: {}

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

jobs:
  check:
    name: Check (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30
    permissions:
      contents: read
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy, rustfmt
      - name: Run tests
        run: cargo test --workspace --all-targets
      - name: Run doc-tests
        run: cargo test --workspace --doc
      - name: Clippy
        run: cargo clippy --workspace --all-targets -- -D warnings
      - name: Format
        run: cargo fmt --all --check
      - name: Check for uncommitted changes
        run: git diff --exit-code

  msrv:
    name: MSRV
    runs-on: ubuntu-latest
    timeout-minutes: 15
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6
      - name: Read MSRV from Cargo.toml
        id: msrv
        run: |
          MSRV=$(grep 'rust-version' Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/')
          echo "version=$MSRV" >> "$GITHUB_OUTPUT"
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ steps.msrv.outputs.version }}
      - name: Check MSRV
        run: cargo check --workspace

  doc:
    name: Documentation
    runs-on: ubuntu-latest
    timeout-minutes: 15
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@stable
      - name: Check documentation
        env:
          RUSTDOCFLAGS: "-D warnings"
        run: cargo doc --no-deps --document-private-items

  typos:
    name: Typos
    runs-on: ubuntu-latest
    timeout-minutes: 5
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6
      - uses: crate-ci/typos@v1

  deny:
    name: Cargo Deny
    runs-on: ubuntu-latest
    timeout-minutes: 10
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6
      - uses: EmbarkStudios/cargo-deny-action@v2

  napi:
    name: Napi Test
    runs-on: ubuntu-latest
    timeout-minutes: 15
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/setup-node@v6
        with:
          node-version: 22
      - name: Install dependencies
        working-directory: napi
        run: npm ci || npm install
      - name: Build napi binding
        working-directory: napi
        run: npx napi build --platform
      - name: Run napi tests
        working-directory: napi
        run: node test.mjs

  istanbul-diff:
    # Advisory byte-for-byte diff against istanbul-lib-instrument on the 25
    # shared conformance fixtures. Intentional divergences (e.g. ??= branches,
    # inferred fn-names over istanbul's (anonymous_N)) surface here as diffs;
    # that's expected and does NOT fail the build. Blocking structural checks
    # live in the Rust conformance_suite_test.rs. This job's value is surfacing
    # span-level micro-regressions (like the v0.3.4 fnMap.decl column slip) in
    # PR logs before they ship.
    name: Istanbul byte diff (advisory)
    runs-on: ubuntu-latest
    timeout-minutes: 10
    continue-on-error: true
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/setup-node@v6
        with:
          node-version: 22
      - name: Install napi deps (brings in istanbul-lib-instrument devDep)
        working-directory: napi
        run: npm ci || npm install
      - name: Build napi binding
        working-directory: napi
        run: npx napi build --platform
      - name: Run istanbul diff
        run: node scripts/istanbul-diff.mjs | tee istanbul-diff.log
      - name: Upload diff log
        if: always()
        uses: actions/upload-artifact@v7
        with:
          name: istanbul-diff-log
          path: istanbul-diff.log
          if-no-files-found: warn