deprecate-until 1.0.0

Rust attribute to force deprecated item removal at a specified version
Documentation
on:
  pull_request:
  merge_group:

name: Continuous integration

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - run: |
          rustup install --profile minimal stable
          rustup default stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo check --all-targets

  cargo-deny:
    name: cargo deny
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: embarkStudios/cargo-deny-action@v2

  test:
    name: Test suite
    runs-on: ubuntu-latest
    needs: check
    strategy:
      matrix:
        toolchain: [stable, beta, nightly, msrv]
    steps:
      - uses: actions/checkout@v6
        name: Checkout
      - name: Install Rust toolchain
        run: |
          if [ ${{ matrix.toolchain }} = msrv ]; then
            toolchain=$(awk -F '"' '/^rust-version =/ {print $2}' Cargo.toml)
          else
            toolchain=${{ matrix.toolchain }}
          fi
          rustup install --profile minimal $toolchain
          rustup default $toolchain
      - uses: Swatinem/rust-cache@v2
      - name: Test documentation in debug mode
        run: cargo test --doc
      - name: Test in debug mode (nightly - with UI output checking)
        if: matrix.toolchain == 'nightly'
        run: cargo test --tests --benches
      - name: Test in debug mode (non-nightly - skip UI output checking)
        if: matrix.toolchain != 'nightly'
        run: cargo test --tests --benches --features no_ui_output

  test-release:
    name: Extra tests in release mode
    runs-on: ubuntu-latest
    needs: check
    steps:
      - uses: actions/checkout@v6
        name: Checkout
      - run: |
          rustup install --profile minimal nightly
          rustup default nightly
        name: Install Rust toolchain
      - uses: Swatinem/rust-cache@v2
      - name: Test documentation in release mode
        run: cargo test --doc --release
      - name: Test in release mode
        run: cargo test --release --tests --benches

  test-minimal-versions:
    name: Test with minimal versions
    runs-on: ubuntu-latest
    needs: check
    steps:
      - uses: actions/checkout@v6
        name: Checkout
      - name: Install nightly (for -Z) and stable Rust toolchains
        run: |
          rustup install --profile minimal nightly
          rustup install --profile minimal stable
          rustup default stable
      - name: Set dependencies to the minimal version allowed
        run: cargo +nightly update -Zminimal-versions
      - uses: Swatinem/rust-cache@v2
      - name: Test with minimal version dependencies and stable compiler
        run: cargo +stable test --tests --benches

  fmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    needs: check
    steps:
      - uses: actions/checkout@v6
      - run: rustup install --profile default stable
      - run: cargo +stable fmt --all -- --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    needs: check
    steps:
      - uses: actions/checkout@v6
      - run: |
          rustup install --profile default nightly
          rustup default nightly
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy --all-targets