stack_collections 0.3.2

Stack-allocated collections for Rust
Documentation
name: CI

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

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always
  RUSTFLAGS: -Dwarnings

jobs:
  # Test on stable with all feature combinations
  stable:
    name: Stable (${{ matrix.name }})
    runs-on: ubuntu-latest
    timeout-minutes: 45
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: "no_std"
            flags: "--no-default-features"
          - name: "alloc"
            flags: "--no-default-features --features alloc"
          - name: "std"
            flags: "--features std"
          - name: "default"
            flags: ""
    steps:
      - uses: actions/checkout@v4

      - name: Cache Cargo
        uses: actions/cache@v4
        with:
          path: |

            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-stable-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.name }}
          restore-keys: |

            ${{ runner.os }}-cargo-stable-${{ hashFiles('**/Cargo.lock') }}-
            ${{ runner.os }}-cargo-stable-
            ${{ runner.os }}-cargo-

      - uses: dtolnay/rust-toolchain@stable

      - name: Build
        run: cargo build ${{ matrix.flags }} --verbose

      - name: Test
        run: cargo test ${{ matrix.flags }} --verbose

  # Test on nightly with nightly feature
  nightly:
    name: Nightly (${{ matrix.name }})
    runs-on: ubuntu-latest
    timeout-minutes: 45
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: "no_std"
            flags: "--no-default-features"
          - name: "alloc"
            flags: "--no-default-features --features alloc"
          - name: "std+nightly"
            flags: "--features std,nightly"
          - name: "all-features"
            flags: "--all-features"
    steps:
      - uses: actions/checkout@v4

      - name: Cache Cargo
        uses: actions/cache@v4
        with:
          path: |

            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-nightly-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.name }}
          restore-keys: |

            ${{ runner.os }}-cargo-nightly-${{ hashFiles('**/Cargo.lock') }}-
            ${{ runner.os }}-cargo-nightly-
            ${{ runner.os }}-cargo-

      - uses: dtolnay/rust-toolchain@nightly

      - name: Build
        run: cargo build ${{ matrix.flags }} --verbose

      - name: Test
        run: cargo test ${{ matrix.flags }} --verbose

  # Clippy linting on all features
  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: clippy

      - name: Clippy (all features)
        run: cargo clippy --all-targets --all-features -- -Dclippy::all -Dclippy::pedantic -Dclippy::nursery

  # Rustfmt check
  fmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: Check formatting
        run: cargo fmt --all -- --check

  # Documentation
  doc:
    name: Documentation
    runs-on: ubuntu-latest
    timeout-minutes: 45
    env:
      RUSTDOCFLAGS: -Dwarnings
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@nightly

      - uses: dtolnay/install@cargo-docs-rs

      - name: Build docs.rs documentation
        run: cargo docs-rs

      - name: Build docs (all features)
        run: cargo doc --no-deps --all-features

  # Minimal versions
  minimal:
    name: Minimal versions
    runs-on: ubuntu-latest
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@nightly

      - name: Generate minimal lockfile
        run: cargo generate-lockfile -Z minimal-versions

      - name: Check with minimal versions
        run: cargo check --locked --all-features

  # Miri for undefined behavior detection
  miri:
    name: Miri
    runs-on: ubuntu-latest
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@miri

      - name: Setup Miri
        run: cargo miri setup

      - name: Test with Miri (all features)
        run: cargo miri test --all-features
        env:
          MIRIFLAGS: -Zmiri-strict-provenance