zakura-rocksdb 0.24.4

Rust wrapper for Facebook's RocksDB embeddable database (zakura fork of rocksdb with a unity-build C++ compile)
name: RocksDB CI

on: [ push, pull_request ]
env:
  RUST_VERSION: 1.97.1
  CARGO_TERM_COLOR: always

jobs:
  fmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262  # v4
      - name: Install rust
        uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659  # v1
        with:
          toolchain: ${{ env.RUST_VERSION }}
          components: rustfmt
      - name: Run rustfmt
        run: cargo fmt --all -- --check

  doc-check:
    name: Rustdoc-check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262  # v4
      - name: Install rust
        uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659  # v1
        with:
          toolchain: ${{ env.RUST_VERSION }}
          components: rust-docs
      - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0  # v2
        with:
          cache-on-failure: true
      - name: Run cargo rustdoc
        run: cargo rustdoc --locked -- -D warnings
  doctest: # doctest are no supported in cargo nextest yet. https://github.com/nextest-rs/nextest/issues/16
    name: Doctests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262  # v4
      - name: Install rust
        uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659  # v1
        with:
          toolchain: ${{ env.RUST_VERSION }}
      - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0  # v2
        with:
          cache-on-failure: true
      - name: Run doctests
        run: cargo test --locked --doc
  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262  # v4
      - name: Install rust
        uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659  # v1
        with:
          toolchain: ${{ env.RUST_VERSION }}
          components: clippy
      - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0  # v2
        with:
          cache-on-failure: true
      - name: Install dependencies
        run: sudo apt-get update && sudo apt-get install -y liburing-dev pkg-config libjemalloc-dev
      - name: Set PKG_CONFIG_PATH
        run: echo "PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig" >> $GITHUB_ENV
      - name: Run clippy
        run: |
          cargo clippy --locked --all-targets --features \
            "jemalloc \
            io-uring \
            valgrind \
            mt_static \
            rtti \
            multi-threaded-cf \
            serde1" \
            -- -D warnings

  bindings:
    name: Bindings are up to date
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262  # v4
        with:
          submodules: true
      - name: Install rust
        uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659  # v1
        with:
          toolchain: ${{ env.RUST_VERSION }}
      - name: Install libclang
        run: sudo apt-get update && sudo apt-get install -y libclang-dev
      - name: Regenerate the bindings
        run: cargo run --manifest-path tools/generate-bindings/Cargo.toml --locked
      - name: Check that the committed bindings match
        run: git diff --exit-code -- librocksdb-sys/src/bindings.rs

  audit:
    name: Security audit
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262  # v4
      - uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659  # v1
        with:
          toolchain: stable
      - uses: actions-rust-lang/audit@72c09e02f132669d52284a3323acdb503cfc1a24  # v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

  test:
    name: ${{ matrix.build }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        build: [ Linux, macOS, Windows ]
        include:
          - build: Linux
            os: ubuntu-latest
          - build: macOS
            os: macos-latest
          - build: Windows
            os: windows-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262  # v4
      - name: Install rust
        uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659  # v1
        with:
          toolchain: ${{ env.RUST_VERSION }}
          target: ${{ matrix.target }}
      - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0  # v2
        with:
          cache-on-failure: true
      - uses: taiki-e/install-action@eaa248e7e83aa1d4f575fb2e231e8a5da93dabc3  # nextest
      - name: Install dependencies (Linux)
        if: runner.os == 'Linux'
        run: sudo apt-get update && sudo apt-get install -y libjemalloc-dev
      - name: Mark working directory as read-only
        if: runner.os == 'Linux'
        run: |
          mkdir -p target
          touch Cargo.lock
          git submodule update --init
          chmod -R a-w .
          chmod -R a+w target Cargo.lock
      - name: Run rocksdb tests
        run: |
          cargo nextest run --locked --all
          cargo nextest run --locked --all --features multi-threaded-cf
      - name: Build without the `full` feature, as Zakura does
        run: cargo build --locked -p zakura-rocksdb --no-default-features --features lz4
      - name: Mark working directory as writable
        if: runner.os == 'Linux'
        run: chmod -R a+w .
      - name: Free disk space
        run: cargo clean
      - name: Mark working directory as read-only
        if: runner.os == 'Linux'
        run: |
          mkdir -p target
          touch Cargo.lock
          chmod -R a-w .
          chmod -R a+w target Cargo.lock
      - name: Run rocksdb tests (jemalloc)
        if: runner.os != 'Windows'
        run: cargo nextest run --locked --all --features jemalloc
      - name: Mark working directory as writable
        if: runner.os == 'Linux'
        run: chmod -R a+w .

permissions:
  contents: read