Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion crates/icp-cli/src/commands/network/start.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::sync::{Arc, OnceLock};

use anyhow::{Context as _, bail};
use candid::Principal;
use clap::Args;
Expand All @@ -17,6 +19,8 @@ use icp::{
};
use tracing::{debug, info, warn};

use crate::progress::{ProgressManager, ProgressManagerSettings};

use super::args::NetworkOrEnvironmentArgs;
use icp::context::Context;

Expand Down Expand Up @@ -149,6 +153,7 @@ pub(crate) async fn exec(ctx: &Context, args: &StartArgs) -> Result<(), anyhow::
let autocontainerize = cfg!(windows) || settings.autocontainerize;

// Acquire network launcher path, downloading it if necessary
let debug = ctx.debug;
let network_launcher_path = if let Ok(var) = std::env::var("ICP_CLI_NETWORK_LAUNCHER_PATH") {
// The user is overriding the launcher
debug!("Network launcher path overridden by ICP_CLI_NETWORK_LAUNCHER_PATH={var}");
Expand All @@ -172,7 +177,27 @@ pub(crate) async fn exec(ctx: &Context, args: &StartArgs) -> Result<(), anyhow::
} else {
// The version is not fresh or not cached, download it
debug!("Downloading icp-cli-network-launcher version `{version}`");
let (_, path) = download_launcher_version(pkg, version, &client).await?;
let progress_manager =
ProgressManager::new(ProgressManagerSettings { hidden: debug });
let pb = progress_manager.create_independent_progress_bar();
pb.set_message(format!("Downloading icp-cli-network-launcher {version}..."));
let version_slot: Arc<OnceLock<String>> = Arc::new(OnceLock::new());
let version_capture = version_slot.clone();
let path = ProgressManager::execute_with_progress(
&pb,
async {
let (ver, path) =
download_launcher_version(pkg, version, &client).await?;
let _ = version_capture.set(ver);
anyhow::Ok(path)
},
move || {
let ver = version_slot.get().map(String::as_str).unwrap();
Comment thread
adamspofford-dfinity marked this conversation as resolved.
format!("Downloaded icp-cli-network-launcher {ver}")
},
|err| format!("Failed to download icp-cli-network-launcher: {err}"),
)
.await?;
Ok(Some(path))
}
})
Expand Down
39 changes: 29 additions & 10 deletions crates/icp-cli/src/commands/network/update.rs
Original file line number Diff line number Diff line change
@@ -1,20 +1,39 @@
use std::sync::{Arc, OnceLock};

use clap::Parser;
use icp::{context::Context, network::managed::cache::download_launcher_version};
use tracing::info;

use crate::progress::{ProgressManager, ProgressManagerSettings};

/// Update icp-cli-network-launcher to the latest version.
#[derive(Parser, Debug)]
pub struct UpdateArgs {}

pub async fn exec(ctx: &Context, _args: &UpdateArgs) -> Result<(), anyhow::Error> {
let progress_manager = ProgressManager::new(ProgressManagerSettings { hidden: ctx.debug });
let pb = progress_manager.create_independent_progress_bar();
pb.set_message("Downloading latest icp-cli-network-launcher...".to_string());

Comment thread
adamspofford-dfinity marked this conversation as resolved.
let pkg = ctx.dirs.package_cache()?;
let ver = pkg
.with_write(async |pkg| {
let (ver, _path) =
download_launcher_version(pkg, "latest", &reqwest::Client::new()).await?;
anyhow::Ok(ver)
})
.await??;
info!("icp-cli-network-launcher has been updated to the latest version {ver}.");
Ok(())
let version_slot: Arc<OnceLock<String>> = Arc::new(OnceLock::new());
let version_capture = version_slot.clone();

ProgressManager::execute_with_progress(
&pb,
async move {
pkg.with_write(async move |pkg| {
let (ver, _path) =
download_launcher_version(pkg, "latest", &reqwest::Client::new()).await?;
Comment thread
adamspofford-dfinity marked this conversation as resolved.
let _ = version_capture.set(ver);
anyhow::Ok(())
})
.await?
},
move || {
let ver = version_slot.get().map(String::as_str).unwrap();
Comment thread
adamspofford-dfinity marked this conversation as resolved.
format!("Updated icp-cli-network-launcher to {ver}")
},
|err| format!("Failed to update icp-cli-network-launcher: {err}"),
)
.await
}
9 changes: 6 additions & 3 deletions crates/icp-cli/src/progress.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@ impl ProgressManager {

/// Create a new progress bar with standard configuration
pub(crate) fn create_progress_bar(&self, canister_name: &str) -> SimpleProgressBar {
let pb = self.create_independent_progress_bar();
pb.set_prefix(format!("[{canister_name}]"));
pb
}

pub(crate) fn create_independent_progress_bar(&self) -> SimpleProgressBar {
let pb = self
.multi_progress
.add(SimpleProgressBar::new_spinner().with_style(make_style(
Expand All @@ -103,9 +109,6 @@ impl ProgressManager {
// Auto-tick spinner
pb.enable_steady_tick(Duration::from_millis(120));

// Set the progress bar prefix to display the canister name in brackets
pb.set_prefix(format!("[{canister_name}]"));

pb
}

Expand Down
Loading