libbladerf-rs 0.5.2

Fully Rust native BladeRF driver
name: CI

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]
  workflow_call:
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always
  # Neutralize the repo's target-cpu=native (see AGENTS.md): cargo appends
  # this after the config's rustflags and rustc honors the last -C target-cpu.
  CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS: "-C target-cpu=x86-64"

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo fmt --all --check

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy --features bladerf1 --all-targets -- -D warnings
      - run: cargo clippy --no-default-features --features bladerf1,xb100,xb200,xb300,tokio --all-targets -- -D warnings

  clippy-nightly:
    name: Clippy (nightly, early warning)
    runs-on: ubuntu-latest
    continue-on-error: true
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy --features bladerf1 --all-targets -- -D warnings
      - run: cargo clippy --no-default-features --features bladerf1,xb100,xb200,xb300,tokio --all-targets -- -D warnings

  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo install cargo-audit && cargo audit

  deny:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo install cargo-deny && cargo deny check

  doc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo doc --features bladerf1 --no-deps

  wasm:
    name: Check wasm32-unknown-unknown
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: wasm32-unknown-unknown
      - uses: Swatinem/rust-cache@v2
      - run: cargo check --target wasm32-unknown-unknown --features bladerf1 --lib

  build-examples:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: |
          for manifest in examples/*/Cargo.toml; do
            cargo build --manifest-path "$manifest"
          done

  cross:
    name: Cross-compile (aarch64, windows-gnu)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: aarch64-unknown-linux-gnu, x86_64-pc-windows-gnu
      - uses: Swatinem/rust-cache@v2
      - run: sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu gcc-mingw-w64-x86-64
      - run: cargo build --target aarch64-unknown-linux-gnu --features bladerf1 --lib
      - run: cargo build --target x86_64-pc-windows-gnu --features bladerf1 --lib

  conventional-commits:
    name: Conventional Commits
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
        with:
          fetch-depth: 0
      - uses: ./.github/actions/git-cliff
      - run: git-cliff --unreleased --output /dev/null

  test-linux:
    name: Unit Tests Linux
    runs-on: ubuntu-latest
    env:
      RUST_BACKTRACE: full
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo build --features bladerf1
      - run: cargo build --no-default-features --features bladerf1,tokio
      - run: cargo test --lib
      - run: cargo test --test unit
      - run: cargo test --test public_api --features bladerf1

  test-macos:
    name: Unit Tests macOS
    runs-on: macos-latest
    env:
      RUST_BACKTRACE: full
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo build --features bladerf1
      - run: cargo test --lib
      - run: cargo test --test unit
      - run: cargo test --test public_api --features bladerf1

  test-windows:
    name: Unit Tests Windows
    runs-on: windows-latest
    env:
      RUST_BACKTRACE: full
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo build --features bladerf1
      - run: cargo test --lib
      - run: cargo test --test unit
      - run: cargo test --test public_api --features bladerf1