sombra 0.3.2

High-performance graph database with ACID transactions, single-file storage, and bindings for Rust, TypeScript, and Python
Documentation
name: CI

on:
  push:
    branches:
      - main
      - develop
  pull_request:

jobs:
  lint:
    name: Lint & Format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - name: Run rustfmt
        run: cargo fmt -- --check
      - name: Run clippy
        run: cargo clippy --all-targets --all-features -- -D warnings

  test:
    name: Test
    needs: lint
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust: [stable, beta]
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust ${{ matrix.rust }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
      - name: Cache cargo registry
        uses: actions/cache@v4
        with:
          path: ~/.cargo/registry
          key: cargo-registry-${{ hashFiles('**/Cargo.lock') }}
      - name: Cache cargo index
        uses: actions/cache@v4
        with:
          path: ~/.cargo/git
          key: cargo-index-${{ hashFiles('**/Cargo.lock') }}
      - name: Cache target directory
        uses: actions/cache@v4
        with:
          path: target
          key: cargo-target-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }}
      - name: Run tests
        run: cargo test --features benchmarks,python --workspace --lib --bins --tests
      - name: Run doc tests
        run: cargo test --doc --features benchmarks,python

  test-bindings:
    name: Test Language Bindings
    needs: lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 18
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - run: npm ci
      - name: Build native module
        run: npm run build
      - run: npm run test:all

  # benchmark-regression:
  #   name: Benchmark Regression Detection
  #   needs: lint
  #   runs-on: ubuntu-latest
  #   steps:
  #     - uses: actions/checkout@v4
  #     - name: Install Rust
  #       uses: dtolnay/rust-toolchain@stable
  #     - name: Cache cargo registry
  #       uses: actions/cache@v4
  #       with:
  #         path: ~/.cargo/registry
  #         key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
  #     - name: Cache cargo index
  #       uses: actions/cache@v4
  #       with:
  #         path: ~/.cargo/git
  #         key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
  #     - name: Cache target directory
  #       uses: actions/cache@v4
  #       with:
  #         path: target
  #         key: ${{ runner.os }}-cargo-bench-${{ hashFiles('**/Cargo.lock') }}
  #     - name: Run benchmark regression tests
  #       run: cargo test --release --test benchmark_regression -- --ignored --nocapture
  #     - name: Run integration tests
  #       run: cargo test --release --test btree_range_integration
  #     - name: Run quick stress test
  #       run: cargo test --release --test btree_range_stress stress_multiple_small_ranges

  

  build:
    name: Build Native Module
    needs: [test, test-bindings]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 18
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: x86_64-unknown-linux-gnu
      - run: npm ci
      - name: Build native module
        run: npm run build -- --target x86_64-unknown-linux-gnu
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: bindings-x86_64-unknown-linux-gnu
          path: sombra.*.node

  python-wheel:
    name: Build Python Wheel
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.14'
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Install maturin
        run: python -m pip install --upgrade pip maturin
      - name: Build Python wheel
        run: python -m maturin build --release -F python
      - name: Upload wheel artifact
        uses: actions/upload-artifact@v4
        with:
          name: python-wheel
          path: target/wheels/*.whl
          if-no-files-found: error