arrow-zerobus-sdk-wrapper 0.8.0

Cross-platform Rust SDK wrapper for Databricks Zerobus with Python bindings
Documentation
name: Test Coverage

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

jobs:
  coverage:
    name: Generate Coverage Report
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust
      uses: dtolnay/rust-toolchain@stable
      with:
        components: llvm-tools-preview
    
    - name: Install cargo-tarpaulin
      run: cargo install cargo-tarpaulin --locked --force
    
    - name: Check if external dependencies exist
      id: check_deps
      shell: bash
      run: |
        if [ -d "../zerobus-sdk-rs/sdk" ] && [ -f "../zerobus-sdk-rs/sdk/Cargo.toml" ]; then
          echo "zerobus_sdk_exists=true" >> $GITHUB_OUTPUT
        else
          echo "zerobus_sdk_exists=false" >> $GITHUB_OUTPUT
          echo "External dependencies not available - creating stub to allow cargo metadata to succeed"
          # Create a minimal stub Cargo.toml to allow cargo to resolve dependencies
          mkdir -p ../zerobus-sdk-rs/sdk
          echo '[package]' > ../zerobus-sdk-rs/sdk/Cargo.toml
          echo 'name = "databricks-zerobus-ingest-sdk"' >> ../zerobus-sdk-rs/sdk/Cargo.toml
          echo 'version = "0.1.0"' >> ../zerobus-sdk-rs/sdk/Cargo.toml
          echo 'edition = "2021"' >> ../zerobus-sdk-rs/sdk/Cargo.toml
          # Create a minimal lib.rs
          mkdir -p ../zerobus-sdk-rs/sdk/src
          echo '// Stub for CI - actual SDK not available' > ../zerobus-sdk-rs/sdk/src/lib.rs
          echo 'pub struct ZerobusSdk;' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo 'pub struct ZerobusStream;' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo 'pub struct StreamConfigurationOptions;' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo 'pub struct TableProperties;' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo 'impl ZerobusSdk {' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '    pub fn new(_endpoint: String, _unity_catalog_url: String) -> Result<Self, String> {' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '        Err("SDK not available in CI".to_string())' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '    }' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '}' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo 'impl Default for StreamConfigurationOptions {' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '    fn default() -> Self {' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '        Self' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '    }' >> ../zerobus-sdk-rs/sdk/src/lib.rs
          echo '}' >> ../zerobus-sdk-rs/sdk/src/lib.rs
        fi
    
    - name: Run tests with coverage
      continue-on-error: true
      run: |
        cargo tarpaulin --features python --out Xml --output-dir coverage/ || echo "Coverage run completed"
        cargo tarpaulin --features python --out Html --output-dir coverage/ || echo "Coverage run completed"
        cargo tarpaulin --features python --out Lcov --output-dir coverage/ || echo "Coverage run completed"
    
    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v4
      with:
        files: ./coverage/cobertura.xml
        flags: unittests
        name: codecov-umbrella
        fail_ci_if_error: false
    
    - name: Check coverage threshold
      if: steps.check_deps.outputs.zerobus_sdk_exists == 'true'
      continue-on-error: true
      run: |
        # Extract coverage percentage from tarpaulin output
        if [ -f "coverage/cobertura.xml" ]; then
          COVERAGE=$(grep -oP 'line-rate="\K[0-9.]+' coverage/cobertura.xml | head -1)
          THRESHOLD=90.0
          if (( $(echo "$COVERAGE < $THRESHOLD" | bc -l) )); then
            echo "Coverage $COVERAGE% is below threshold $THRESHOLD%"
            exit 1
          fi
          echo "Coverage $COVERAGE% meets threshold $THRESHOLD%"
        else
          echo "Coverage file not found, skipping threshold check"
        fi