name: TegDB CI/CD Pipeline
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '0 0 * * *'
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
code-quality:
name: Code Quality & Formatting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Setup Rust
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: stable
override: true
components: rustfmt, clippy
profile: minimal
- name: Cache cargo registry only
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-stable-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-stable-cargo-registry-
- name: Free disk space
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Fetch dependencies
run: cargo fetch
- name: Check formatting
run: cargo fmt --all -- --check
- name: Run clippy
run: cargo clippy --all-targets --all-features --frozen --locked -- -D warnings
- name: Build with all features
run: cargo build --all-features --frozen --locked
- name: Check documentation
run: cargo doc --no-deps --document-private-items --frozen --locked
- name: Run doc tests
run: cargo test --doc --frozen --locked
- name: Clean up after build
run: cargo clean
test:
name: Comprehensive Test Suite
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
rust: [stable]
steps:
- uses: actions/checkout@v4.1.1
- name: Setup Rust ${{ matrix.rust }}
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: ${{ matrix.rust }}
override: true
profile: minimal
- name: Cache cargo registry only
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-${{ matrix.rust }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.rust }}-cargo-registry-
- name: Free disk space
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Fetch dependencies
run: cargo fetch
- name: Build library
run: cargo build --lib --verbose --frozen --locked
- name: Build with all features
run: cargo build --all-features --verbose --frozen --locked
- name: Run comprehensive test suite
run: ./run_all_tests.sh --ci --verbose
shell: bash
env:
CI_MODE: true
VERBOSE: true
- name: Run additional unit tests
run: cargo test --lib --all-features --verbose --frozen --locked
- name: Run doc tests
run: cargo test --doc --verbose --frozen --locked
- name: Clean up build artifacts
if: always()
run: cargo clean
examples:
name: Examples & Demos
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Setup Rust
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: stable
override: true
profile: minimal
- name: Cache cargo registry only
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ubuntu-stable-cargo-registry-examples-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
ubuntu-stable-cargo-registry-examples-
- name: Free disk space
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Fetch dependencies
run: cargo fetch
- name: Run basic usage example
run: cargo run --example simple_usage --frozen --locked
- name: Run comprehensive database test
run: cargo run --example comprehensive_database_test --frozen --locked
- name: Run streaming API demo
run: cargo run --example streaming_api_demo --frozen --locked
- name: Run arithmetic expressions example
run: cargo run --example arithmetic_expressions --frozen --locked
- name: Run SQLite-like usage example
run: cargo run --example sqlite_like_usage --frozen --locked
- name: Run IoT optimization demo
run: cargo run --example iot_optimization_demo --frozen --locked
- name: Run planner demo
run: cargo run --example planner_demo --frozen --locked
- name: Clean up build artifacts
if: always()
run: cargo clean
security:
name: Security & Dependency Audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Setup Rust
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: stable
override: true
profile: minimal
- name: Cache cargo registry only
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ubuntu-stable-cargo-registry-security-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
ubuntu-stable-cargo-registry-security-
- name: Free disk space
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Fetch dependencies
run: cargo fetch
- name: Install cargo-audit
run: cargo install cargo-audit --locked
- name: Run security audit
run: cargo audit
- name: Check for outdated dependencies
run: |
cargo install cargo-outdated --locked
cargo outdated --exit-code 1 || echo "Some dependencies are outdated, but build continues"
- name: Clean installed binaries
if: always()
run: |
rm -rf ~/.cargo/bin/cargo-audit ~/.cargo/bin/cargo-outdated
cargo clean
release-check:
name: Release Readiness
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- uses: actions/checkout@v4.1.1
- name: Setup Rust
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: stable
override: true
profile: minimal
- name: Cache cargo registry only
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ubuntu-stable-cargo-registry-release-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
ubuntu-stable-cargo-registry-release-
- name: Free disk space
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Fetch dependencies
run: cargo fetch
- name: Check if ready for release
run: |
echo "Checking release readiness..."
# Check if version has been updated
VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
echo "Current version: $VERSION"
# Run comprehensive test suite
./run_all_tests.sh --ci --verbose
# Check documentation builds
cargo doc --no-deps --frozen --locked
echo "✅ Release readiness check completed successfully!"
- name: Clean up build artifacts
if: always()
run: cargo clean
coverage:
name: Code Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Setup Rust nightly
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: nightly
override: true
components: llvm-tools-preview
profile: minimal
- name: Cache cargo registry only
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ubuntu-nightly-cargo-registry-coverage-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
ubuntu-nightly-cargo-registry-coverage-
- name: Free disk space
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Fetch dependencies
run: cargo fetch
- name: Install cargo-llvm-cov
run: cargo install cargo-llvm-cov --locked
- name: Generate code coverage
run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info --frozen --locked
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: lcov.info
fail_ci_if_error: false
- name: Clean up build artifacts
if: always()
run: |
rm -rf ~/.cargo/bin/cargo-llvm-cov
cargo clean
performance:
name: Performance Tests & Benchmarks
runs-on: ubuntu-latest
if: github.event_name == 'schedule' || contains(github.event.head_commit.message, '[bench]') || github.event.inputs.run_performance == 'true'
steps:
- uses: actions/checkout@v4.1.1
- name: Setup Rust nightly
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: nightly
override: true
profile: minimal
- name: Cache cargo registry only
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ubuntu-nightly-cargo-registry-bench-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
ubuntu-nightly-cargo-registry-bench-
- name: Free disk space
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Fetch dependencies
run: cargo fetch
- name: Run performance tests
run: ./run_performance_tests.sh --ci
- name: Run benchmarks
run: |
echo "# TegDB Performance Benchmarks" > benchmarks.md
echo "Generated on: $(date)" >> benchmarks.md
echo "" >> benchmarks.md
echo "## Database vs SQLite Comparison" >> benchmarks.md
echo '```' >> benchmarks.md
cargo bench --bench database_vs_sqlite_benchmark --features="dev" --frozen --locked | tee -a benchmarks.md
echo '```' >> benchmarks.md
echo "" >> benchmarks.md
echo "## Engine Performance" >> benchmarks.md
echo '```' >> benchmarks.md
cargo bench --bench engine_basic_benchmark --frozen --locked | tee -a benchmarks.md
echo '```' >> benchmarks.md
echo "" >> benchmarks.md
echo "## Query Planner Performance" >> benchmarks.md
echo '```' >> benchmarks.md
cargo bench --bench planner_optimization_benchmark --features="dev" --frozen --locked | tee -a benchmarks.md
echo '```' >> benchmarks.md
- name: Upload benchmark results
uses: actions/upload-artifact@v4.3.1
with:
name: benchmark-results-${{ github.sha }}
path: |
benchmarks.md
performance-results/
retention-days: 30
- name: Clean up build artifacts
if: always()
run: cargo clean