optimizer 0.1.1

A Rust library for optimization algorithms.
Documentation
name: CI

on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]

env:
  CARGO_TERM_COLOR: always

jobs:
  fmt:
    name: Format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
          rustup component add rustfmt
      - run: cargo fmt --all --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
          rustup component add clippy
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy --all-targets --all-features -- -D warnings

  test:
    name: Test
    runs-on: ubuntu-latest
    strategy:
      matrix:
        features:
          - ""
          - "serde"
          - "async"
          - "serde,async"
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
      - uses: Swatinem/rust-cache@v2
      - name: Run tests
        run: |
          if [ -z "${{ matrix.features }}" ]; then
            cargo test --verbose
          else
            cargo test --verbose --features "${{ matrix.features }}"
          fi

  docs:
    name: Docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo doc --all-features --no-deps
        env:
          RUSTDOCFLAGS: -D warnings

  feature-check:
    name: Feature Combinations
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
      - name: Install cargo-hack
        uses: taiki-e/install-action@cargo-hack
      - uses: Swatinem/rust-cache@v2
      - name: Check feature powerset
        run: cargo hack check --feature-powerset --no-dev-deps

  coverage:
    name: Coverage
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
          rustup component add llvm-tools-preview
      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov
      - uses: Swatinem/rust-cache@v2
      - name: Generate coverage report
        run: cargo llvm-cov --all-features --lcov --output-path lcov.info
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: lcov.info
          fail_ci_if_error: true

  msrv:
    name: MSRV (1.88)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust 1.88
        run: |
          rustup override set 1.88
          rustup update 1.88
      - uses: Swatinem/rust-cache@v2
      - name: Check compilation
        run: cargo check --all-features

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

  semver:
    name: Semver Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
      - uses: Swatinem/rust-cache@v2
      - name: Install cargo-semver-checks
        uses: taiki-e/install-action@cargo-semver-checks
      - name: Check semver
        run: cargo semver-checks check-release

  minimal-versions:
    name: Minimal Versions
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust nightly
        run: |
          rustup toolchain install nightly
          rustup override set nightly
      - uses: Swatinem/rust-cache@v2
      - name: Generate minimal version lockfile
        run: cargo +nightly -Z minimal-versions update
      - name: Install Rust stable
        run: |
          rustup override set stable
          rustup update stable
      - name: Check with minimal versions
        run: cargo check --all-features --locked

  cross-platform:
    name: ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [windows-latest, macos-latest]
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
      - uses: Swatinem/rust-cache@v2
      - name: Check compilation
        run: cargo check --all-features
      - name: Run tests
        run: cargo test --all-features


  typos:
    name: Typos
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        run: |
          rustup override set stable
          rustup update stable
      - uses: taiki-e/cache-cargo-install-action@v3
        with:
          tool: typos-cli
      - name: Typos Check
        run: typos src/