vecstore 1.0.0

The perfect vector database - 100/100 score, embeddable, high-performance, production-ready with RAG toolkit
Documentation
name: CI

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]

env:
  CARGO_TERM_COLOR: always
  RUST_BACKTRACE: 1

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install Rust toolchain
        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 cargo build
        uses: actions/cache@v4
        with:
          path: target
          key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}

      - name: Build library (debug)
        run: cargo build --lib --verbose

      - name: Build library (release)
        run: cargo build --lib --release --verbose

  test:
    name: Test Suite
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy

      - 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 cargo build
        uses: actions/cache@v4
        with:
          path: target
          key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}

      - name: Run tests
        run: cargo test --lib --verbose

  fmt:
    name: Format Check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: Check formatting
        run: cargo fmt --all -- --check

  clippy:
    name: Clippy Lint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy

      - name: Run Clippy
        run: cargo clippy --lib -- -W clippy::correctness -A warnings

  doc:
    name: Documentation
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

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

      - name: Build documentation
        run: cargo doc --no-deps --lib

  bench:
    name: Benchmarks
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

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

      - name: Run benchmarks (compile only)
        run: cargo bench --no-run --lib

  # coverage:
  #   name: Code Coverage
  #   runs-on: ubuntu-latest
  #   steps:
  #     - name: Checkout code
  #       uses: actions/checkout@v4

  #     - name: Install Rust toolchain
  #       uses: dtolnay/rust-toolchain@stable

  #     - name: Install cargo-tarpaulin
  #       run: cargo install cargo-tarpaulin

  #     - name: Generate coverage
  #       run: cargo tarpaulin --lib --timeout 300 --out Xml

  #     - name: Upload coverage to Codecov
  #       uses: codecov/codecov-action@v4
  #       with:
  #         files: ./cobertura.xml
  #         fail_ci_if_error: false

  security-audit:
    name: Security Audit
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Run security audit
        uses: rustsec/audit-check@v1
        continue-on-error: true
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

  # # Python bindings - Disabled until Python bindings are production-ready
  # test-python:
  #   name: Test Python Bindings
  #   runs-on: ubuntu-latest
  #   steps:
  #     - name: Checkout code
  #       uses: actions/checkout@v4

  #     - name: Set up Python
  #       uses: actions/setup-python@v5
  #       with:
  #         python-version: '3.11'

  #     - name: Install Rust toolchain
  #       uses: dtolnay/rust-toolchain@stable

  #     - name: Install maturin
  #       run: pip install maturin

  #     - name: Build Python package
  #       run: maturin build --features python --release

  # # WASM builds - Disabled until WASM support is production-ready
  # test-wasm:
  #   name: Test WASM Build
  #   runs-on: ubuntu-latest
  #   steps:
  #     - name: Checkout code
  #       uses: actions/checkout@v4

  #     - name: Install Rust toolchain
  #       uses: dtolnay/rust-toolchain@stable
  #       with:
  #         targets: wasm32-unknown-unknown

  #     - name: Install wasm-pack
  #       run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh

  #     - name: Build WASM package
  #       run: wasm-pack build --target web --features wasm --out-dir pkg

  #     - name: Run WASM tests
  #       run: wasm-pack test --node --features wasm