mir-rs 0.3.0

FFI bindings to MIR Project (https://github.com/vnmakarov/mir)
Documentation
name: CI
on:
  pull_request:
  push:
  schedule:
    - cron: '44 1 * * *' # *-*-* 01:44:00 UTC

permissions:
  contents: read

env:
  RUST_BACKTRACE: full
  RUSTFLAGS: -Dwarnings

jobs:
  typos:
    name: Typos
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: crate-ci/typos@v1.30.1

  test:
    name: Test ${{ matrix.rust }} on ${{ matrix.os }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        rust: [nightly, beta, stable]
        os: [ubuntu-latest, macos-latest, windows-latest]
    timeout-minutes: 15
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: true

      - name: Install Rust ${{ matrix.rust }}
        run: |
          rustup update --no-self-update
          rustup default ${{ matrix.rust }}

      - name: Cache dependencies
        uses: Swatinem/rust-cache@v2

      - name: Install cargo-hack
        # Always use stable rustc to compile cargo-hack, which has MSRV 1.65.
        # https://github.com/taiki-e/cargo-hack/commit/5baa4262710414ebde4845494f1db22643acc0ba
        run: cargo +stable install cargo-hack

      - name: Build
        run: cargo hack build --each-feature
      - name: Doc test
        run: cargo hack test --each-feature --doc
      - name: Test
        run: cargo hack test --each-feature --all-targets

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: true

      - name: Install Rust stable
        run: |
          rustup update --no-self-update stable
          rustup default stable

      - run: |
          cargo clippy --workspace --tests -- -Dclippy::all

  minimal:
    name: MSRV
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: true

      - name: Install Rust
        # NB: Sync with Cargo.toml
        run: |
          rustup update --no-self-update nightly
          rustup default 1.85

      - run: cargo +nightly generate-lockfile -Z minimal-versions

      - run: cargo check --locked --all-features

  docs:
    name: Docs
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: true

      - name: Install Rust
        run: |
          rustup update --no-self-update nightly
          rustup default nightly

      - name: cargo doc like docs.rs
        env:
          RUSTDOCFLAGS: --cfg docsrs -Dwarnings
        run: cargo doc --all-features