1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
name: CI
on:
push:
branches:
pull_request:
branches:
env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: "0"
jobs:
# --------------------------------------------------------------
# Build + test the library + examples + integration tests on
# the two Tier-1 Unix targets holt supports today.
# --------------------------------------------------------------
test:
name: test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
steps:
- uses: actions/checkout@v4
# `rocksdb` is a dev-dependency (criterion bench harness pulls
# it in for the apples-to-apples comparison). Its C++ build
# needs libclang + LLVM headers.
- name: Install LLVM (Ubuntu)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y clang libclang-dev
- name: Install LLVM (macOS)
if: runner.os == 'macOS'
run: |
brew install llvm
echo "LIBCLANG_PATH=$(brew --prefix llvm)/lib" >> "$GITHUB_ENV"
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Cache cargo registry + build
uses: Swatinem/rust-cache@v2
- name: cargo build
run: cargo build --workspace --all-targets --locked
- name: cargo test (lib + integration)
run: cargo test --workspace --all-targets --locked
- name: cargo test (doctests)
run: cargo test --workspace --doc --locked
- name: cargo run --example basic_kv
run: cargo run --example basic_kv --locked
- name: cargo run --example filesystem_meta
run: cargo run --example filesystem_meta --locked
- name: cargo run --example session_store
run: cargo run --example session_store --locked
- name: cargo run --example s3_metadata
run: cargo run --example s3_metadata --locked
# --------------------------------------------------------------
# Lint pass — formatting + clippy with deny(warnings) on top of
# the crate's pedantic lints.
# --------------------------------------------------------------
lint:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install LLVM
run: sudo apt-get update && sudo apt-get install -y clang libclang-dev
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
- name: cargo fmt --check
run: cargo fmt --all --check
# Clippy on tests + examples too, not just the library. The
# crate opts into `clippy::pedantic` and has a vetted set of
# `#![allow]`s in `src/lib.rs` for the unhelpful ones; any
# new warning fails the build.
- name: cargo clippy
run: cargo clippy --workspace --all-targets --locked -- -D warnings
# --------------------------------------------------------------
# `cargo doc` — fails on broken intra-doc links / missing docs
# so the rendered docs.rs page stays clean.
# --------------------------------------------------------------
docs:
name: docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install LLVM
run: sudo apt-get update && sudo apt-get install -y clang libclang-dev
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: cargo doc (no deps)
env:
RUSTDOCFLAGS: "-D warnings"
run: cargo doc --workspace --no-deps --locked
# --------------------------------------------------------------
# MSRV — pin to the rust-version field in Cargo.toml. Keeps us
# honest about the floor we promise downstream users. We build
# the library only (no tests/benches/examples) because
# dev-dependencies routinely require newer Rust than the
# library surface itself does.
# --------------------------------------------------------------
msrv:
name: msrv (rust 1.82)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.82
- uses: Swatinem/rust-cache@v2
- name: cargo build (library only)
run: cargo build --lib --locked