use kintone::client::{Auth, KintoneClient};
use kintone::v1::app::settings;
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let base_url =
env::var("KINTONE_BASE_URL").expect("KINTONE_BASE_URL environment variable is required");
let username =
env::var("KINTONE_USERNAME").expect("KINTONE_USERNAME environment variable is required");
let password =
env::var("KINTONE_PASSWORD").expect("KINTONE_PASSWORD environment variable is required");
let app_ids_str =
env::var("KINTONE_APP_IDS").expect("KINTONE_APP_IDS environment variable is required");
let app_ids: Result<Vec<u64>, _> =
app_ids_str.split(',').map(|s| s.trim().parse::<u64>()).collect();
let app_ids = app_ids.map_err(|e| format!("Failed to parse app IDs: {e}"))?;
if app_ids.is_empty() {
return Err("No app IDs provided".into());
}
let client = KintoneClient::new(&base_url, Auth::password(username, password));
println!("🔍 Checking deployment status for {} app(s)...\n", app_ids.len());
let mut request = settings::get_app_deploy_status();
for &app_id in &app_ids {
request = request.app(app_id);
}
let response = request.send(&client)?;
println!("📊 Deployment Status Results:");
println!("{}", "─".repeat(50));
for app_status in &response.apps {
let status_icon = match app_status.status {
settings::DeployStatus::Processing => "⏳",
settings::DeployStatus::Success => "✅",
settings::DeployStatus::Fail => "❌",
settings::DeployStatus::Cancel => "⚠️",
};
let status_text = match app_status.status {
settings::DeployStatus::Processing => "PROCESSING - Deployment in progress",
settings::DeployStatus::Success => "SUCCESS - Deployment completed successfully",
settings::DeployStatus::Fail => "FAIL - Deployment failed",
settings::DeployStatus::Cancel => "CANCEL - Deployment was cancelled",
};
println!("{} App ID {}: {}", status_icon, app_status.app, status_text);
}
println!("{}", "─".repeat(50));
let processing_count = response
.apps
.iter()
.filter(|a| a.status == settings::DeployStatus::Processing)
.count();
let success_count = response
.apps
.iter()
.filter(|a| a.status == settings::DeployStatus::Success)
.count();
let fail_count = response
.apps
.iter()
.filter(|a| a.status == settings::DeployStatus::Fail)
.count();
let cancel_count = response
.apps
.iter()
.filter(|a| a.status == settings::DeployStatus::Cancel)
.count();
println!("\n📈 Summary:");
println!(" • Total apps checked: {}", response.apps.len());
if processing_count > 0 {
println!(" • Processing: {processing_count}");
}
if success_count > 0 {
println!(" • Successful: {success_count}");
}
if fail_count > 0 {
println!(" • Failed: {fail_count}");
}
if cancel_count > 0 {
println!(" • Cancelled: {cancel_count}");
}
if processing_count > 0 {
println!(
"\n💡 Tip: Apps still processing can be checked again later using this same command."
);
}
if fail_count > 0 || cancel_count > 0 {
println!(
"\n⚠️ Some deployments were not successful. Please check the Kintone interface for more details."
);
}
Ok(())
}