use anyhow::Context; use crate::agent::task::Task; pub struct AptTask {} impl AptTask { pub fn new() -> Self { Self {} } } #[async_trait::async_trait] impl Task for AptTask { async fn id(&self) -> anyhow::Result { Ok("apt".into()) } async fn execute(&self) -> anyhow::Result<()> { let mut cmd = tokio::process::Command::new("apt-get"); cmd.args(["update", "-q"]); let output = cmd.output().await.context("failed to run apt update")?; match output.status.success() { true => tracing::info!("successfully ran apt update"), false => { anyhow::bail!( "failed to run apt update: {}", std::str::from_utf8(&output.stderr)? ); } } let mut cmd = tokio::process::Command::new("apt-get"); cmd.env("DEBIAN_FRONTEND", "noninteractive") .args(["upgrade", "-y"]); let output = cmd.output().await.context("failed to run apt upgrade")?; match output.status.success() { true => tracing::info!("successfully ran apt upgrade"), false => { anyhow::bail!( "failed to run apt upgrade: {}", std::str::from_utf8(&output.stderr)? ); } } Ok(()) } }