fix: ruvector-postgres v0.3.1 — audit bug fixes, 46 SQL functions, Docker publish #42
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |