Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,42 @@ jobs:
- name: Vendored Header Drift Check
run: python3 scripts/check_vendored_headers.py

msrv:
if: github.event_name != 'push' || !endsWith(github.actor, '[bot]')
runs-on: ubuntu-latest
env:
CI: "true"
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install Rust (MSRV)
# Keep in sync with rust-version in the workspace Cargo.toml.
uses: dtolnay/rust-toolchain@1.88.0

- name: Rust Cache
uses: Swatinem/rust-cache@v2

- name: MSRV Check
run: cargo check --workspace --all-targets

supply-chain:
if: github.event_name != 'push' || !endsWith(github.actor, '[bot]')
runs-on: ubuntu-latest
env:
CI: "true"
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install cargo-deny
uses: taiki-e/install-action@v2
with:
tool: cargo-deny

- name: cargo deny check
run: cargo deny check

test:
if: github.event_name != 'push' || !endsWith(github.actor, '[bot]')
runs-on: ubuntu-latest
Expand Down
47 changes: 47 additions & 0 deletions .github/workflows/coverage-nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Coverage Nightly

on:
schedule:
# Run after the memory-safety nightly.
- cron: "0 6 * * *"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: coverage-${{ github.ref }}
cancel-in-progress: true

jobs:
llvm-cov:
name: Rust Coverage (llvm-cov)
runs-on: ubuntu-latest
timeout-minutes: 120

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview

- name: Install cargo-llvm-cov and cargo-nextest
uses: taiki-e/install-action@v2
with:
tool: cargo-llvm-cov,cargo-nextest

- name: Rust Cache
uses: Swatinem/rust-cache@v2

- name: Generate lcov coverage report
run: cargo cov-ci

- name: Upload lcov report
uses: actions/upload-artifact@v4
with:
name: lcov-info
path: lcov.info
if-no-files-found: error
35 changes: 35 additions & 0 deletions .github/workflows/memory-safety-nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,41 @@ jobs:
- name: Run WAL corruption fuzz
run: ./target/release/wal_fuzz

coverage-guided-fuzz:
name: Coverage-Guided Fuzz (${{ matrix.target }})
runs-on: ubuntu-latest
# libFuzzer runs are time-boxed per target; the budget covers a cold
# instrumented engine build plus the fuzz windows below.
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
target: [wal_recovery, record_decode]

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install Rust nightly
uses: dtolnay/rust-toolchain@nightly

- name: Install cargo-fuzz
run: cargo install cargo-fuzz --locked

- name: Run libFuzzer target
working-directory: fuzz
run: >-
cargo +nightly fuzz run ${{ matrix.target }}
-- -max_total_time=600 -rss_limit_mb=4096

- name: Upload crash artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: fuzz-artifacts-${{ matrix.target }}
path: fuzz/artifacts/${{ matrix.target }}/
if-no-files-found: ignore

python-leak-regressions:
name: Python Leak Regressions
runs-on: ubuntu-latest
Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ jobs:
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
targets: wasm32-unknown-unknown

- name: Set up Python
uses: actions/setup-python@v5
Expand Down Expand Up @@ -174,6 +175,13 @@ jobs:
- name: Short Crash Harness
run: python tests/harness/runner.py tests/harness/scenarios/short_crash.json

- name: Grouped Commit Fault-Injection Harnesses
run: |
python tests/harness/runner.py tests/harness/scenarios/grouped_commit_all_commit.json
python tests/harness/runner.py tests/harness/scenarios/grouped_commit_fail_during_second_commit.json
python tests/harness/runner.py tests/harness/scenarios/grouped_commit_fail_sync_before_flush.json
python tests/harness/runner.py tests/harness/scenarios/grouped_commit_crash_after_sync.json

- name: Build cdylib
run: cargo build -p decentdb

Expand Down Expand Up @@ -205,6 +213,23 @@ jobs:
dart run smoke.dart
cd ../../..

- name: Web Binding Smoke (WASM + browser OPFS)
run: |
cargo install wasm-bindgen-cli --version 0.2.114 --locked
cd bindings/web
npm ci
npm run build
cd ../..
cargo build -p decentdb --target wasm32-unknown-unknown --release
wasm-bindgen target/wasm32-unknown-unknown/release/decentdb.wasm \
--target web \
--out-dir bindings/web/dist \
--out-name decentdb_wasm
cd bindings/web
npm run browser:install:ci
npm run browser:smoke:ci
cd ../..

- name: Storage Soak Harness
run: python tests/harness/runner.py tests/harness/scenarios/soak_storage.json

Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,7 @@ bindings/dotnet/tests/DecentDB.Tests/TestResults/*
bindings/dotnet/tests/DecentDB.EntityFrameworkCore.Tests/TestResults/*

benchmarks/rust-baseline/.tmp/*

# Python packaging artifacts
bindings/python/decentdb.egg-info/
*.egg-info/
6 changes: 4 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ DecentDB is a Rust-native embedded relational database. The goal is a world-clas
| `crates/decentdb-migrate/` | On-disk format migration parser |
| `crates/decentdb-benchmark/` | Rust-native benchmark runner |
| `crates/libpg_query_sys/` | C SQL parser wrapper (`pg_query` dep) |
| `bindings/{dotnet,python,go,java,node,dart}/` | Language bindings |
| `tests/bindings/` | Smoke tests for all language bindings |
| `fuzz/` | cargo-fuzz crate (independent workspace) with libFuzzer targets for WAL recovery and record decode; engine shims behind the `fuzz-internals` feature |
| `bindings/{dotnet,python,go,java,node,dart}/` | Language bindings (thin wrappers over the C ABI) |
| `bindings/web/` | Web binding (TypeScript + WASM/OPFS; separate wasm protocol stack, not the C ABI) |
| `tests/bindings/` | Smoke tests for all language bindings, including `c/` (C ABI smoke) and `web/` (Playwright browser suites) |
| `tests/harness/` | Python test harness (runner + scenarios + datasets) |
| `include/decentdb.h` | Stable C ABI header |
| `scripts/` | Repo automation (benchmark charts, pre-commit checks, etc.) |
Expand Down
38 changes: 19 additions & 19 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ exclude = [
resolver = "2"

[workspace.package]
version = "2.17.0"
version = "2.17.1"
edition = "2021"
rust-version = "1.88"
authors = ["Steven Hildreth"]
license = "Apache-2.0"
repository = "https://github.com/sphildreth/decentdb"
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.17.0
2.17.1
4 changes: 2 additions & 2 deletions benchmarks/rust-baseline/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading