Skip to content
Open
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
12 changes: 12 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ ic-management-canister-types = { version = "0.8.0" }
ic-utils = { version = "0.49.1" }
icp = { path = "crates/icp" }
icp-canister-interfaces = { path = "crates/icp-canister-interfaces" }
icp-events = { path = "crates/icp-events" }
icp-sync-plugin = { path = "crates/icp-sync-plugin" }
ic-identity-hsm = "0.49.1"
icrc-ledger-types = "0.1.10"
Expand Down
1 change: 1 addition & 0 deletions crates/icp-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ ic-management-canister-types.workspace = true
ic-utils.workspace = true
icp-canister-interfaces.workspace = true
icp = { workspace = true, features = ["clap"] }
icp-events.workspace = true
icrc-ledger-types.workspace = true
indicatif.workspace = true
indoc.workspace = true
Expand Down
23 changes: 14 additions & 9 deletions crates/icp-cli/src/commands/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ use icp::context::{Context, EnvironmentSelection};
use tracing::info;

use crate::{
operations::build::build_many_with_progress_bar,
operations::build::build_many,
options::{EnvironmentOpt, arg_struct_change_help},
render::rendered,
};

/// Build canisters
Expand Down Expand Up @@ -57,14 +58,18 @@ pub(crate) async fn exec(ctx: &Context, args: &BuildArgs) -> Result<(), anyhow::
// Build the selected canisters
info!("Building canisters:");

build_many_with_progress_bar(
canisters_to_build,
environment_selection.name(),
ctx.builder.clone(),
ctx.artifacts.clone(),
&ctx.dirs.package_cache()?,
ctx.debug,
)
let pkg_cache = ctx.dirs.package_cache()?;
rendered(ctx.debug, async |reporter| {
build_many(
canisters_to_build,
environment_selection.name(),
ctx.builder.clone(),
ctx.artifacts.clone(),
&pkg_cache,
reporter,
)
.await
})
.await?;

info!("Canisters built successfully");
Expand Down
112 changes: 72 additions & 40 deletions crates/icp-cli/src/commands/canister/snapshot/download.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,17 @@ use icp::context::Context;
use icp::prelude::*;
use tracing::info;

use icp_events::{TaskKind, TransferBlob, TransferDirection};

use super::SnapshotId;
use crate::commands::args;
use crate::operations::misc::format_timestamp;
use crate::operations::snapshot_transfer::{
BlobType, SnapshotPaths, SnapshotTransferError, create_transfer_progress_bar,
delete_download_progress, download_blob_to_file, download_wasm_chunk, load_download_progress,
load_metadata, read_snapshot_metadata, save_metadata,
BlobType, SnapshotPaths, SnapshotTransferError, delete_download_progress,
download_blob_to_file, download_wasm_chunk, load_download_progress, load_metadata,
read_snapshot_metadata, save_metadata,
};
use crate::render::rendered_task;

/// Download a snapshot to local disk
#[derive(Debug, Args)]
Expand Down Expand Up @@ -121,20 +124,30 @@ pub(crate) async fn exec(ctx: &Context, args: &DownloadArgs) -> Result<(), anyho
// Download WASM module
if metadata.wasm_module_size > 0 {
if !progress.wasm_module.is_complete(metadata.wasm_module_size) {
let pb = create_transfer_progress_bar(metadata.wasm_module_size, "WASM module");
download_blob_to_file(
&agent,
args.proxy,
cid,
snapshot_id,
BlobType::WasmModule,
metadata.wasm_module_size,
paths,
&mut progress,
&pb,
rendered_task(
ctx.debug,
TaskKind::SnapshotTransfer {
canister: name.to_string(),
direction: TransferDirection::Download,
blob: TransferBlob::WasmModule,
total_bytes: metadata.wasm_module_size,
},
async |task| {
download_blob_to_file(
&agent,
args.proxy,
cid,
snapshot_id,
BlobType::WasmModule,
metadata.wasm_module_size,
paths,
&mut progress,
task,
)
.await
},
)
.await?;
pb.finish_with_message("done");
} else {
info!("WASM module: already complete");
}
Expand All @@ -143,20 +156,30 @@ pub(crate) async fn exec(ctx: &Context, args: &DownloadArgs) -> Result<(), anyho
// Download WASM memory
if metadata.wasm_memory_size > 0 {
if !progress.wasm_memory.is_complete(metadata.wasm_memory_size) {
let pb = create_transfer_progress_bar(metadata.wasm_memory_size, "WASM memory");
download_blob_to_file(
&agent,
args.proxy,
cid,
snapshot_id,
BlobType::WasmMemory,
metadata.wasm_memory_size,
paths,
&mut progress,
&pb,
rendered_task(
ctx.debug,
TaskKind::SnapshotTransfer {
canister: name.to_string(),
direction: TransferDirection::Download,
blob: TransferBlob::WasmMemory,
total_bytes: metadata.wasm_memory_size,
},
async |task| {
download_blob_to_file(
&agent,
args.proxy,
cid,
snapshot_id,
BlobType::WasmMemory,
metadata.wasm_memory_size,
paths,
&mut progress,
task,
)
.await
},
)
.await?;
pb.finish_with_message("done");
} else {
info!("WASM memory: already complete");
}
Expand All @@ -168,21 +191,30 @@ pub(crate) async fn exec(ctx: &Context, args: &DownloadArgs) -> Result<(), anyho
.stable_memory
.is_complete(metadata.stable_memory_size)
{
let pb =
create_transfer_progress_bar(metadata.stable_memory_size, "Stable memory");
download_blob_to_file(
&agent,
args.proxy,
cid,
snapshot_id,
BlobType::StableMemory,
metadata.stable_memory_size,
paths,
&mut progress,
&pb,
rendered_task(
ctx.debug,
TaskKind::SnapshotTransfer {
canister: name.to_string(),
direction: TransferDirection::Download,
blob: TransferBlob::StableMemory,
total_bytes: metadata.stable_memory_size,
},
async |task| {
download_blob_to_file(
&agent,
args.proxy,
cid,
snapshot_id,
BlobType::StableMemory,
metadata.stable_memory_size,
paths,
&mut progress,
task,
)
.await
},
)
.await?;
pb.finish_with_message("done");
} else {
info!("Stable memory: already complete");
}
Expand Down
106 changes: 69 additions & 37 deletions crates/icp-cli/src/commands/canister/snapshot/upload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@ use icp::prelude::*;
use serde::Serialize;
use tracing::info;

use icp_events::{TaskKind, TransferBlob, TransferDirection};

use super::SnapshotId;
use crate::commands::args;
use crate::operations::misc::format_timestamp;
use crate::operations::snapshot_transfer::{
BlobType, SnapshotPaths, SnapshotTransferError, UploadProgress, create_transfer_progress_bar,
delete_upload_progress, load_metadata, load_upload_progress, save_upload_progress,
upload_blob_from_file, upload_snapshot_metadata, upload_wasm_chunk,
BlobType, SnapshotPaths, SnapshotTransferError, UploadProgress, delete_upload_progress,
load_metadata, load_upload_progress, save_upload_progress, upload_blob_from_file,
upload_snapshot_metadata, upload_wasm_chunk,
};
use crate::render::rendered_task;

/// Upload a snapshot from local disk
#[derive(Debug, Args)]
Expand Down Expand Up @@ -126,19 +129,29 @@ pub(crate) async fn exec(ctx: &Context, args: &UploadArgs) -> Result<(), anyhow:
// Upload WASM module
if metadata.wasm_module_size > 0 {
if progress.wasm_module_offset < metadata.wasm_module_size {
let pb = create_transfer_progress_bar(metadata.wasm_module_size, "WASM module");
upload_blob_from_file(
&agent,
args.proxy,
cid,
&snapshot_id_bytes,
BlobType::WasmModule,
paths,
&mut progress,
&pb,
rendered_task(
ctx.debug,
TaskKind::SnapshotTransfer {
canister: name.to_string(),
direction: TransferDirection::Upload,
blob: TransferBlob::WasmModule,
total_bytes: metadata.wasm_module_size,
},
async |task| {
upload_blob_from_file(
&agent,
args.proxy,
cid,
&snapshot_id_bytes,
BlobType::WasmModule,
paths,
&mut progress,
task,
)
.await
},
)
.await?;
pb.finish_with_message("done");
} else {
info!("WASM module: already complete");
}
Expand All @@ -147,19 +160,29 @@ pub(crate) async fn exec(ctx: &Context, args: &UploadArgs) -> Result<(), anyhow:
// Upload WASM memory
if metadata.wasm_memory_size > 0 {
if progress.wasm_memory_offset < metadata.wasm_memory_size {
let pb = create_transfer_progress_bar(metadata.wasm_memory_size, "WASM memory");
upload_blob_from_file(
&agent,
args.proxy,
cid,
&snapshot_id_bytes,
BlobType::WasmMemory,
paths,
&mut progress,
&pb,
rendered_task(
ctx.debug,
TaskKind::SnapshotTransfer {
canister: name.to_string(),
direction: TransferDirection::Upload,
blob: TransferBlob::WasmMemory,
total_bytes: metadata.wasm_memory_size,
},
async |task| {
upload_blob_from_file(
&agent,
args.proxy,
cid,
&snapshot_id_bytes,
BlobType::WasmMemory,
paths,
&mut progress,
task,
)
.await
},
)
.await?;
pb.finish_with_message("done");
} else {
info!("WASM memory: already complete");
}
Expand All @@ -168,20 +191,29 @@ pub(crate) async fn exec(ctx: &Context, args: &UploadArgs) -> Result<(), anyhow:
// Upload stable memory
if metadata.stable_memory_size > 0 {
if progress.stable_memory_offset < metadata.stable_memory_size {
let pb =
create_transfer_progress_bar(metadata.stable_memory_size, "Stable memory");
upload_blob_from_file(
&agent,
args.proxy,
cid,
&snapshot_id_bytes,
BlobType::StableMemory,
paths,
&mut progress,
&pb,
rendered_task(
ctx.debug,
TaskKind::SnapshotTransfer {
canister: name.to_string(),
direction: TransferDirection::Upload,
blob: TransferBlob::StableMemory,
total_bytes: metadata.stable_memory_size,
},
async |task| {
upload_blob_from_file(
&agent,
args.proxy,
cid,
&snapshot_id_bytes,
BlobType::StableMemory,
paths,
&mut progress,
task,
)
.await
},
)
.await?;
pb.finish_with_message("done");
} else {
info!("Stable memory: already complete");
}
Expand Down
Loading
Loading