libftd2xx 0.33.1

Rust safe wrapper around the libftd2xx-ffi crate.
Documentation
on:
  push:
    branches:
      - main
    tags:
      - '*'
  pull_request:
  schedule:
    - cron: "41 3 * * *"

name: CI

jobs:

  linux_build:
    name: Linux Build
    runs-on: ubuntu-latest
    env:
      RUSTFLAGS: "-D warnings"
    strategy:
      matrix:
        target:
          - "aarch64-unknown-linux-gnu"
          - "aarch64-unknown-linux-musl"
          - "x86_64-unknown-linux-gnu"
          - "x86_64-unknown-linux-musl"
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}
      - run: cargo build --target ${{ matrix.target }}

  macos_build:
    name: Mac Build
    runs-on: macos-15
    env:
      RUSTFLAGS: "-D warnings"
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo build

  windows_build:
    name: Windows Build
    runs-on: windows-latest
    env:
      RUSTFLAGS: "-D warnings"
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo build

  linux_test:
    name: Linux Unit Tests
    runs-on: ubuntu-latest
    env:
      RUSTFLAGS: "-D warnings"
    strategy:
      matrix:
        target: ["x86_64-unknown-linux-musl", "x86_64-unknown-linux-gnu"]
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}
      - run: cargo test --all-features --target ${{ matrix.target }}

  macos_test:
    name: Mac Test
    runs-on: macos-15
    env:
      RUSTFLAGS: "-D warnings"
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo test

  windows_test:
    name: Windows Unit Tests
    runs-on: ubuntu-latest
    env:
      RUSTFLAGS: "-D warnings"
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo test

  clippy_check:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - run: cargo clippy --all-features -- --deny warnings

  docs:
    name: docs
    runs-on: ubuntu-latest
    env:
      RUSTDOCFLAGS: "-D warnings"
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo doc

  format_check:
    name: Rust Format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: rustfmt
      - run: cargo +nightly fmt -- --check

  release:
    name: crates.io release
    if: startsWith(github.ref, 'refs/tags/')
    needs:
      - clippy_check
      - docs
      - format_check
      - linux_build
      - linux_test
      - macos_build
      - macos_test
      - windows_build
      - windows_test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo publish --token ${CRATES_IO_TOKEN}
        env:
          CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}