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 - name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 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 - name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 with:
toolchain: ${{ env.RUST_VERSION }}
components: rust-docs
- uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 with:
cache-on-failure: true
- name: Run cargo rustdoc
run: cargo rustdoc --locked -- -D warnings
doctest: name: Doctests
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 - name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 with:
toolchain: ${{ env.RUST_VERSION }}
- uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 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 - name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 with:
toolchain: ${{ env.RUST_VERSION }}
components: clippy
- uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 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 with:
submodules: true
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 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 - uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 with:
toolchain: stable
- uses: actions-rust-lang/audit@72c09e02f132669d52284a3323acdb503cfc1a24 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 - name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 with:
toolchain: ${{ env.RUST_VERSION }}
target: ${{ matrix.target }}
- uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 with:
cache-on-failure: true
- uses: taiki-e/install-action@eaa248e7e83aa1d4f575fb2e231e8a5da93dabc3 - 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