From 6e7cc64357a06ccb85446ea04a012f953121c18e Mon Sep 17 00:00:00 2001 From: jonaro00 <54029719+jonaro00@users.noreply.github.com> Date: Thu, 30 Jan 2025 21:33:37 +0100 Subject: [PATCH 1/3] feat: allow --no-follow and --raw on redeploy --- cargo-shuttle/src/args.rs | 21 +++++++++++++++------ cargo-shuttle/src/lib.rs | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/cargo-shuttle/src/args.rs b/cargo-shuttle/src/args.rs index 69cbb172f..82b02ef5b 100644 --- a/cargo-shuttle/src/args.rs +++ b/cargo-shuttle/src/args.rs @@ -185,6 +185,9 @@ pub enum DeploymentCommand { Redeploy { /// ID of deployment to redeploy id: Option, + + #[command(flatten)] + tracking_args: DeploymentTrackingArgs, }, /// Stop running deployment(s) Stop, @@ -308,23 +311,29 @@ pub struct DeployArgs { /// WIP: Deploy this Docker image instead of building one #[arg(long, short = 'i', hide = true)] pub image: Option, - /// Don't follow the deployment status, exit after the deployment begins - #[arg(long, visible_alias = "nf")] - pub no_follow: bool, /// Allow deployment with uncommitted files #[arg(long, visible_alias = "ad")] pub allow_dirty: bool, - /// Don't display timestamps and log origin tags - #[arg(long)] - pub raw: bool, /// Output the deployment archive to a file instead of sending a deployment request #[arg(long)] pub output_archive: Option, + #[command(flatten)] + pub tracking_args: DeploymentTrackingArgs, + #[command(flatten)] pub secret_args: SecretsArgs, } +#[derive(Args, Default)] +pub struct DeploymentTrackingArgs { + /// Don't follow the deployment status, exit after the deployment begins + #[arg(long, visible_alias = "nf")] + pub no_follow: bool, + /// Don't display timestamps and log origin tags + #[arg(long)] + pub raw: bool, +} #[derive(Args, Debug)] pub struct RunArgs { diff --git a/cargo-shuttle/src/lib.rs b/cargo-shuttle/src/lib.rs index bcfa510ed..24db62d55 100644 --- a/cargo-shuttle/src/lib.rs +++ b/cargo-shuttle/src/lib.rs @@ -14,6 +14,7 @@ use std::path::{Path, PathBuf}; use std::sync::Arc; use anyhow::{anyhow, bail, Context, Result}; +use args::DeploymentTrackingArgs; use chrono::Utc; use clap::{parser::ValueSource, CommandFactory, FromArgMatches}; use crossterm::style::Stylize; @@ -242,7 +243,9 @@ impl Shuttle { self.deployments_list(page, limit, table).await } DeploymentCommand::Status { id } => self.deployment_get(id).await, - DeploymentCommand::Redeploy { id } => self.deployment_redeploy(id).await, + DeploymentCommand::Redeploy { id, tracking_args } => { + self.deployment_redeploy(id, tracking_args).await + } DeploymentCommand::Stop => self.stop().await, }, Command::Resource(cmd) => match cmd { @@ -983,7 +986,11 @@ impl Shuttle { Ok(()) } - async fn deployment_redeploy(&self, deployment_id: Option) -> Result<()> { + async fn deployment_redeploy( + &self, + deployment_id: Option, + tracking_args: DeploymentTrackingArgs, + ) -> Result<()> { let client = self.client.as_ref().unwrap(); let pid = self.ctx.project_id(); @@ -1000,7 +1007,11 @@ impl Shuttle { }; let deployment = client.redeploy(pid, &deployment_id).await?; - self.track_deployment_status_and_print_logs_on_fail(pid, &deployment.id, false) + if tracking_args.no_follow { + println!("{}", deployment.to_string_colored()); + return Ok(()); + } + self.track_deployment_status_and_print_logs_on_fail(pid, &deployment.id, tracking_args.raw) .await?; Ok(()) @@ -1398,13 +1409,17 @@ impl Shuttle { .deploy(pid, DeploymentRequest::Image(deployment_req_image)) .await?; - if args.no_follow { + if args.tracking_args.no_follow { println!("{}", deployment.to_string_colored()); return Ok(()); } - self.track_deployment_status_and_print_logs_on_fail(pid, &deployment.id, args.raw) - .await?; + self.track_deployment_status_and_print_logs_on_fail( + pid, + &deployment.id, + args.tracking_args.raw, + ) + .await?; return Ok(()); } @@ -1507,13 +1522,17 @@ impl Shuttle { .deploy(pid, DeploymentRequest::BuildArchive(deployment_req)) .await?; - if args.no_follow { + if args.tracking_args.no_follow { println!("{}", deployment.to_string_colored()); return Ok(()); } - self.track_deployment_status_and_print_logs_on_fail(pid, &deployment.id, args.raw) - .await?; + self.track_deployment_status_and_print_logs_on_fail( + pid, + &deployment.id, + args.tracking_args.raw, + ) + .await?; Ok(()) } From 7d15b2dbeeb257c0f65e16ed6aa086fe84097288 Mon Sep 17 00:00:00 2001 From: jonaro00 <54029719+jonaro00@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:11:08 +0100 Subject: [PATCH 2/3] add to deployment stop command as well --- cargo-shuttle/src/args.rs | 5 ++++- cargo-shuttle/src/lib.rs | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cargo-shuttle/src/args.rs b/cargo-shuttle/src/args.rs index 82b02ef5b..c7001aacb 100644 --- a/cargo-shuttle/src/args.rs +++ b/cargo-shuttle/src/args.rs @@ -190,7 +190,10 @@ pub enum DeploymentCommand { tracking_args: DeploymentTrackingArgs, }, /// Stop running deployment(s) - Stop, + Stop { + #[command(flatten)] + tracking_args: DeploymentTrackingArgs, + }, } #[derive(Subcommand)] diff --git a/cargo-shuttle/src/lib.rs b/cargo-shuttle/src/lib.rs index 24db62d55..78010cd08 100644 --- a/cargo-shuttle/src/lib.rs +++ b/cargo-shuttle/src/lib.rs @@ -246,7 +246,7 @@ impl Shuttle { DeploymentCommand::Redeploy { id, tracking_args } => { self.deployment_redeploy(id, tracking_args).await } - DeploymentCommand::Stop => self.stop().await, + DeploymentCommand::Stop { tracking_args } => self.stop(tracking_args).await, }, Command::Resource(cmd) => match cmd { ResourceCommand::List { @@ -847,11 +847,16 @@ impl Shuttle { }) } - async fn stop(&self) -> Result<()> { + async fn stop(&self, tracking_args: DeploymentTrackingArgs) -> Result<()> { let client = self.client.as_ref().unwrap(); let pid = self.ctx.project_id(); let res = client.stop_service(pid).await?; println!("{res}"); + + if tracking_args.no_follow { + return Ok(()); + } + wait_with_spinner(2000, |_, pb| async move { let deployment = client.get_current_deployment(pid).await?; From 4a38f883fe0ac3828eee39c77e93ca313dffb3a7 Mon Sep 17 00:00:00 2001 From: jonaro00 <54029719+jonaro00@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:12:38 +0100 Subject: [PATCH 3/3] doc --- cargo-shuttle/src/args.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cargo-shuttle/src/args.rs b/cargo-shuttle/src/args.rs index c7001aacb..87172daa3 100644 --- a/cargo-shuttle/src/args.rs +++ b/cargo-shuttle/src/args.rs @@ -330,7 +330,7 @@ pub struct DeployArgs { } #[derive(Args, Default)] pub struct DeploymentTrackingArgs { - /// Don't follow the deployment status, exit after the deployment begins + /// Don't follow the deployment status, exit after the operation begins #[arg(long, visible_alias = "nf")] pub no_follow: bool, /// Don't display timestamps and log origin tags