lockable 0.2.0

This library offers hash map, hash set and cache data structures where individual entries can be locked
Documentation
name: CI

on:
  - push
  - pull_request

env:
  CARGO_TERM_COLOR: always

jobs:
  arm:
    name: arm
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: ["build", "test"]
        profile: ["", "--release"]
        features: ["", "--no-default-features", "--all-features"]
        toolchain: ["stable", "nightly", "1.85"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          target: armv5te-unknown-linux-gnueabi
          default: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: ${{ matrix.command }}
          args: ${{ matrix.features }} ${{ matrix.profile }} --target armv5te-unknown-linux-gnueabi
        env:
          RUST_BACKTRACE: '1'
  arm_minimal_versions:
    name: arm_minimal_versions
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: ["build", "test"]
        profile: ["", "--release"]
        features: ["", "--no-default-features", "--all-features"]
        # Nightly because -Z direct-minimal-versions is a nightly cargo featur
        toolchain: ["nightly"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          target: armv5te-unknown-linux-gnueabi
          default: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: "update"
          args: "-Z direct-minimal-versions"
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: ${{ matrix.command }}
          args: ${{ matrix.features }} ${{ matrix.profile }} --target armv5te-unknown-linux-gnueabi
        env:
          RUST_BACKTRACE: '1'
  x64:
    name: x64
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: ["build", "test"]
        profile: ["", "--release"]
        features: ["", "--no-default-features", "--all-features"]
        toolchain: ["stable", "nightly", "1.85"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          default: true
      - uses: actions-rs/cargo@v1
        with:
          command: ${{ matrix.command }}
          args: ${{ matrix.features }} ${{ matrix.profile }}
        env:
          RUST_BACKTRACE: '1'
  x64_minimal_versions:
    name: x64_minimal_versions
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: ["build", "test"]
        profile: ["", "--release"]
        features: ["", "--no-default-features", "--all-features"]
        # Nightly because -Z direct-minimal-versions is a nightly cargo featur
        toolchain: ["nightly"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          default: true
      - uses: actions-rs/cargo@v1
        with:
          command: "update"
          args: "-Z direct-minimal-versions"
      - uses: actions-rs/cargo@v1
        with:
          command: ${{ matrix.command }}
          args: ${{ matrix.features }} ${{ matrix.profile }}
        env:
          RUST_BACKTRACE: '1'
  clippy_check:
    name: Linter (clippy)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: clippy
          default: true
      - uses: actions-rs/clippy-check@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          args: --all-features --all-targets -- -D warnings
  code_format:
    name: Code Formatter (rustfmt)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: rustfmt
          default: true
      - uses: mbrobbel/rustfmt-check@0.15.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
  sync_readme:
    name: Sync README.md (cargo sync-readme)
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - run: cargo install cargo-rdme
    - run: ./gen_readme.sh
    # Fail job if gen_readme.sh introduced changes. If this fails, then we need to run gen_readme.sh locally and add it to the commit.
    - run: git diff --exit-code
  dead_doc_links:
    name: Find dead doc links
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        default: true
    - run: RUSTDOCFLAGS="-Dwarnings" cargo doc
  semver_checks:
    name: Check semver
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: obi1kenobi/cargo-semver-checks-action@v2
  coverage:
    name: Code Coverage
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          default: true
      # Setup inspired by instructions at https://github.com/taiki-e/cargo-llvm-cov/blob/9b93f70f4c5a06d6ee221d3537067bc8d3f5b7c6/README.md
      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov
      - name: Generate code coverage
        run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}  # not required for public repos, but leaving it here because it seems we run into rate limit issues on Codecov's API without it.
          files: lcov.info
          fail_ci_if_error: true
          verbose: true