use anyhow::Result;
use pmat::demo::runner::{resolve_repository_async, DemoRunner};
use pmat::stateless_server::StatelessTemplateServer;
use std::sync::Arc;
use tracing::{info, warn, Level};
use tracing_subscriber::FmtSubscriber;
#[tokio::main]
async fn main() -> Result<()> {
let subscriber = FmtSubscriber::builder()
.with_max_level(Level::INFO)
.finish();
tracing::subscriber::set_global_default(subscriber)?;
let args: Vec<String> = std::env::args().collect();
let url = if args.len() > 1 {
args[1].clone()
} else {
"https://github.com/rust-lang/rust-clippy".to_string()
};
println!("🔍 Running quality gates on: {}\n", url);
info!("Cloning repository...");
let repo_path = resolve_repository_async(None, Some(url.clone()), None).await?;
info!("Running analysis...");
let server = Arc::new(StatelessTemplateServer::new()?);
let mut runner = DemoRunner::new(server);
let report = runner.execute(repo_path).await?;
let result = &report.analysis;
if let Some(qa_status) = &result.qa_verification {
println!("📋 Quality Gate Results:");
println!("{:-<60}", "");
let overall_icon = if qa_status == "PASSED" {
"✅ PASS"
} else {
"❌ FAIL"
};
println!("Overall Status: {}\n", overall_icon);
println!("📊 Analysis Summary:");
println!(" Files Analyzed: {}", result.files_analyzed);
println!(" Functions Analyzed: {}", result.functions_analyzed);
println!(" Average Complexity: {:.1}", result.avg_complexity);
println!(" Hotspot Functions: {}", result.hotspot_functions);
println!(" Quality Score: {:.1}%", result.quality_score * 100.0);
println!(" Technical Debt: {} hours", result.tech_debt_hours);
if qa_status != "PASSED" {
println!("\n💡 Recommendations:");
println!(" • Review functions with high complexity");
println!(" • Consider refactoring hotspot functions");
println!(" • Add comprehensive test coverage");
warn!("Repository needs improvement");
std::process::exit(1);
} else {
println!("\n✅ Repository passes quality gates!");
std::process::exit(0);
}
} else {
println!("❌ No quality verification results available");
println!(" This may indicate an analysis failure");
std::process::exit(3);
}
}