schema-sync 1.0.0

Production-grade schema synchronization for multi-tenant databases
Documentation
//! Developer: s4gor
//! Github: https://github.com/s4gor
//!
//! CI validation mode example
//!
//! This example shows how to use schema-sync in CI to validate
//! that all tenant schemas match the expected state.
//! Exits with non-zero code if validation fails.

use schema_sync::prelude::*;

/// Example: CI validation mode
///
/// In CI, we want to:
/// 1. Check all tenants
/// 2. Ensure they match expected schema
/// 3. Exit non-zero if any mismatch found
#[tokio::main]
async fn main() -> Result<()> {
    println!("Schema Sync - CI Validation Mode Example");
    println!("=========================================");
    println!();
    
    // Example of CI validation:
    /*
    let adapter = PostgresAdapter::new(&std::env::var("DATABASE_URL")?).await?;
    let planner = DefaultPlanner::new();
    let executor = DefaultExecutor::new();
    let diff_calculator = DefaultDiffCalculator::new();
    let snapshot_store = FileSnapshotStore::new("./expected_schemas")?;
    
    let engine = Engine::from_adapter(
        Box::new(adapter),
        Box::new(planner),
        Box::new(executor),
        Box::new(diff_calculator),
        Some(Box::new(snapshot_store)),
    );
    
    // Get all tenants
    let tenants = engine.list_tenants().await?;
    
    let mut failures = Vec::new();
    
    for tenant in tenants {
        // Sync in dry-run mode (no execution)
        let result = engine.sync_tenant(&tenant, None, false).await?;
        
        if !result.already_in_sync {
            failures.push((tenant, result.diff));
        }
    }
    
    if !failures.is_empty() {
        eprintln!("Validation failed for {} tenants:", failures.len());
        for (tenant, diff) in failures {
            eprintln!("  - {}: {} changes needed", tenant.id(), diff.change_count());
        }
        std::process::exit(1);
    }
    
    println!("All tenants match expected schema!");
    Ok(())
    */
    
    Ok(())
}