name: CI

on:
  push:
    branches: [main]
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.86.0
        with:
          components: clippy, rustfmt
      - run: cargo fmt --check
      # libfreemkv is a library — Cargo.lock is gitignored. --locked
      # would always fail on a fresh runner because there's no committed
      # lockfile to lock against. The binary crates (freemkv, autorip,
      # bdemu) track Cargo.lock and DO use --locked.
      - run: cargo clippy -- -D warnings

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.86.0
      - run: cargo test --tests

  check-macos:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.86.0
      - run: cargo check

  check-windows:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.86.0
      # Build the tests (not just `cargo check`): catches errors in test
      # code and forces full codegen of the Windows-only SPTI transport
      # (src/scsi/windows.rs), which never compiles on the Linux/macOS dev
      # hosts. We don't `cargo test` here — the suite needs no drive but the
      # extra build is the value; running tests is covered by the Linux job.
      - run: cargo build --tests
