use anyhow::Context;
use clap::Args as ClapArgs;
use turnkey_client::generated::GetTvcDeploymentRequest;
#[derive(Debug, ClapArgs)]
#[command(about, long_about = None)]
pub struct Args {
#[arg(short, long, env = "TVC_DEPLOY_ID")]
pub deploy_id: String,
}
pub async fn run(args: Args) -> anyhow::Result<()> {
let auth = crate::client::build_client().await?;
let request = GetTvcDeploymentRequest {
organization_id: auth.org_id.clone(),
deployment_id: args.deploy_id.clone(),
};
let response = auth
.client
.get_tvc_deployment(request)
.await
.context("failed to fetch deployment")?;
let deployment = response
.tvc_deployment
.ok_or_else(|| anyhow::anyhow!("deployment not found: {}", args.deploy_id))?;
let manifest = deployment
.manifest
.ok_or_else(|| anyhow::anyhow!("manifest not found in deployment"))?;
println!("Deployment: {}", deployment.id);
println!("App ID: {}", deployment.app_id);
println!("Manifest ID: {}", manifest.id);
println!("QOS Version: {}", deployment.qos_version);
println!("Stage: {:?}", deployment.stage);
if let Some(pivot) = &deployment.pivot_container {
println!();
println!("Pivot Container:");
println!(" URL: {}", pivot.container_url);
println!(" Path: {}", pivot.path);
if !pivot.args.is_empty() {
println!(" Args: {:?}", pivot.args);
}
}
if let Some(created) = &deployment.created_at {
println!();
println!("Created: {}.{:09}s", created.seconds, created.nanos);
}
if let Some(updated) = &deployment.updated_at {
println!("Updated: {}.{:09}s", updated.seconds, updated.nanos);
}
Ok(())
}