fn main() {
let repo_path = std::env::args()
.nth(1)
.map(std::path::PathBuf::from)
.unwrap_or_else(|| std::env::current_dir().unwrap());
println!("📦 repository: {}", repo_path.display());
println!();
let contract = quanttide_devops::contract::load_or_default(&repo_path);
println!(
"{} 契约加载成功",
if contract.scopes.is_empty() {
"⚠"
} else {
"✅"
}
);
println!();
println!("📋 scopes ({} 个):", contract.scopes.len());
for scope in &contract.scopes {
let langs =
quanttide_devops::source::config_file::detect_languages(&repo_path.join(&scope.dir));
let lang_label = langs.first().map(|l| l.as_str()).unwrap_or("—");
println!(
" {:<16} dir: {:<24} lang: {} / {}",
scope.name,
scope.dir,
lang_label,
scope.build_tool.as_str(),
);
}
println!();
println!("🔖 版本状态:");
for scope in &contract.scopes {
match quanttide_devops::contract::verify_version(&repo_path, scope) {
Ok(vs) => {
let tag = vs.tag_version.as_deref().unwrap_or("—");
let cfg = vs.config_version.as_deref().unwrap_or("—");
let mark = if vs.consistent { "✅" } else { "⚠" };
println!(
" {} {:<12} tag: {:<12} config: {:<12}",
mark, scope.name, tag, cfg
);
}
Err(e) => println!(" ⚠ {}: {}", scope.name, e),
}
}
}