Skip to content

fix: ruvector-postgres v0.3.1 — audit bug fixes, 46 SQL functions, Docker publish #42

fix: ruvector-postgres v0.3.1 — audit bug fixes, 46 SQL functions, Docker publish

fix: ruvector-postgres v0.3.1 — audit bug fixes, 46 SQL functions, Docker publish #42

Workflow file for this run

name: RuvLTRA-Small Tests
on:
push:
branches: [main, develop]
paths:
- 'crates/ruvllm/**'
- 'crates/ruvllm-cli/**'
- '.github/workflows/ruvltra-tests.yml'
pull_request:
branches: [main, develop]
paths:
- 'crates/ruvllm/**'
- 'crates/ruvllm-cli/**'
workflow_dispatch:
inputs:
run_benchmarks:
description: 'Run performance benchmarks'
required: false
default: 'false'
type: boolean
run_stress_tests:
description: 'Run stress tests'
required: false
default: 'false'
type: boolean
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
# ============================================================================
# Unit Tests - Model Loading, Quantization, SONA, ANE Dispatch
# ============================================================================
unit-tests:
name: Unit Tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
features: ""
- os: macos-latest
features: "coreml"
- os: windows-latest
features: ""
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.os }}-unit-tests
- name: Run RuvLTRA Unit Tests
run: |
cargo test --package ruvllm ruvltra_tests \
${{ matrix.features && format('--features {0}', matrix.features) || '' }} \
-- --nocapture
env:
RUST_LOG: debug
- name: Run Quantization Tests
run: |
cargo test --package ruvllm quantization_accuracy \
-- --nocapture
- name: Run SONA Integration Tests
run: |
cargo test --package ruvllm sona_integration \
-- --nocapture
- name: Run ANE Dispatch Tests
if: matrix.os == 'macos-latest'
run: |
cargo test --package ruvllm ane_dispatch --features coreml \
-- --nocapture
# ============================================================================
# End-to-End Tests - Full Inference Pipeline
# ============================================================================
e2e-tests:
name: E2E Tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.os }}-e2e-tests
- name: Run E2E Pipeline Tests
run: |
cargo test --package ruvllm ruvltra_e2e::full_inference_pipeline \
-- --nocapture
- name: Run Streaming Tests
run: |
cargo test --package ruvllm ruvltra_e2e::streaming_generation \
-- --nocapture
- name: Run Quality Validation Tests
run: |
cargo test --package ruvllm ruvltra_e2e::quality_validation \
-- --nocapture
- name: Run Memory Validation Tests
run: |
cargo test --package ruvllm ruvltra_e2e::memory_validation \
-- --nocapture
# ============================================================================
# Apple Silicon Specific Tests
# ============================================================================
apple-silicon-tests:
name: Apple Silicon Tests
runs-on: macos-14 # M1/M2 runners
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: macos-arm64-tests
- name: Check Architecture
run: |
uname -m
sysctl -n machdep.cpu.brand_string || true
- name: Run ANE Integration Tests
run: |
cargo test --package ruvllm --features coreml,hybrid-ane \
ane_integration -- --nocapture
- name: Run SONA on Apple Silicon
run: |
cargo test --package ruvllm --features coreml \
sona_integration -- --nocapture
- name: Run Full RuvLTRA Test Suite
run: |
cargo test --package ruvllm --features coreml \
ruvltra_tests -- --nocapture
- name: Verify ANE Capabilities Detection
run: |
cargo test --package ruvllm --features coreml \
test_ane_capabilities_detection -- --nocapture --exact
# ============================================================================
# Quantization Accuracy Tests
# ============================================================================
quantization-tests:
name: Quantization Accuracy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: quantization-tests
- name: Test All Quantization Formats
run: |
cargo test --package ruvllm quantization \
-- --nocapture
- name: Test Q4_K Accuracy
run: |
cargo test --package ruvllm test_q4_k_dequantization \
-- --nocapture --exact
- name: Test Q8_0 Accuracy
run: |
cargo test --package ruvllm test_q8_0_dequantization \
-- --nocapture --exact
- name: Test Tensor Size Calculations
run: |
cargo test --package ruvllm test_tensor_size \
-- --nocapture
# ============================================================================
# Thread Safety Tests
# ============================================================================
thread-safety-tests:
name: Thread Safety
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: thread-safety-tests
- name: Run Thread Safety Tests
run: |
cargo test --package ruvllm thread_safety \
-- --nocapture --test-threads=4
- name: Run Concurrent Inference Tests
run: |
cargo test --package ruvllm ruvltra_e2e::stress_tests::test_concurrent_inference \
-- --nocapture --exact
# ============================================================================
# Performance Benchmarks (Optional)
# ============================================================================
benchmarks:
name: Performance Benchmarks
runs-on: macos-14
if: github.event_name == 'workflow_dispatch' && github.event.inputs.run_benchmarks == 'true'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: benchmarks
- name: Run Performance Benchmarks
run: |
cargo test --package ruvllm --release --features coreml \
-- --ignored --nocapture 2>&1 | tee benchmark-results.txt
- name: Upload Benchmark Results
uses: actions/upload-artifact@v4
with:
name: benchmark-results
path: benchmark-results.txt
# ============================================================================
# Stress Tests (Optional)
# ============================================================================
stress-tests:
name: Stress Tests
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' && github.event.inputs.run_stress_tests == 'true'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: stress-tests
- name: Run Stress Tests
run: |
cargo test --package ruvllm --release \
ruvltra_e2e::stress_tests -- --nocapture --test-threads=1
timeout-minutes: 30
# ============================================================================
# Code Quality
# ============================================================================
code-quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: code-quality
- name: Check Formatting
run: |
cargo fmt --package ruvllm -- --check
- name: Run Clippy
run: |
cargo clippy --package ruvllm --all-targets -- -D warnings
- name: Check Documentation
run: |
cargo doc --package ruvllm --no-deps
env:
RUSTDOCFLAGS: -D warnings
# ============================================================================
# Test Coverage
# ============================================================================
coverage:
name: Test Coverage
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
key: coverage
- name: Generate Coverage Report
run: |
cargo llvm-cov --package ruvllm \
--html --output-dir coverage \
-- --nocapture
- name: Upload Coverage Report
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/
- name: Check Coverage Threshold
run: |
COVERAGE=$(cargo llvm-cov --package ruvllm --json 2>/dev/null | jq -r '.data[0].totals.lines.percent // 0')
echo "Coverage: ${COVERAGE}%"
# Require at least 60% line coverage
if (( $(echo "$COVERAGE < 60" | bc -l) )); then
echo "Coverage ${COVERAGE}% is below threshold of 60%"
exit 1
fi
continue-on-error: true
# ============================================================================
# Summary Job
# ============================================================================
test-summary:
name: Test Summary
runs-on: ubuntu-latest
needs: [unit-tests, e2e-tests, quantization-tests, thread-safety-tests, code-quality]
if: always()
steps:
- name: Check Test Results
run: |
echo "## RuvLTRA-Small Test Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Test Suite | Status |" >> $GITHUB_STEP_SUMMARY
echo "|------------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Unit Tests | ${{ needs.unit-tests.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| E2E Tests | ${{ needs.e2e-tests.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| Quantization | ${{ needs.quantization-tests.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| Thread Safety | ${{ needs.thread-safety-tests.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| Code Quality | ${{ needs.code-quality.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
- name: Fail if Any Test Failed
if: |
needs.unit-tests.result == 'failure' ||
needs.e2e-tests.result == 'failure' ||
needs.quantization-tests.result == 'failure' ||
needs.thread-safety-tests.result == 'failure' ||
needs.code-quality.result == 'failure'
run: exit 1