From 6cd1e52c2a88a697af9880ff3c055d16b8fa1c98 Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Tue, 3 Sep 2024 15:59:45 -0700 Subject: [PATCH] fix `kit r` & `kit b` when upgrading api --- src/boot_fake_node/mod.rs | 5 ++++- src/build/mod.rs | 10 +++------- src/remove_package/mod.rs | 42 +++++++++++++++++++-------------------- src/start_package/mod.rs | 8 ++------ 4 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/boot_fake_node/mod.rs b/src/boot_fake_node/mod.rs index 2cbbe1ee..cc3c49fc 100644 --- a/src/boot_fake_node/mod.rs +++ b/src/boot_fake_node/mod.rs @@ -311,7 +311,10 @@ pub async fn find_releases_with_asset_if_online( fn get_local_versions_with_prefix(prefix: &str) -> Result> { let mut versions = Vec::new(); - for entry in fs::read_dir(Path::new(prefix).parent().unwrap())? { + let path = Path::new(prefix) + .parent() + .ok_or_else(|| eyre!("couldnt find directory with local runtimes"))?; + for entry in fs::read_dir(&path)? { let entry = entry?; let path = entry.path(); if let Some(str_path) = path.to_str() { diff --git a/src/build/mod.rs b/src/build/mod.rs index f8242dae..9409c5ab 100644 --- a/src/build/mod.rs +++ b/src/build/mod.rs @@ -705,6 +705,9 @@ async fn build_wit_dir( wit_version: Option, ) -> Result<()> { let wit_dir = process_dir.join("target").join("wit"); + if wit_dir.exists() { + fs::remove_dir_all(&wit_dir)?; + } let wit_url = match wit_version { None => KINODE_WIT_0_7_0_URL, Some(0) | _ => KINODE_WIT_0_8_0_URL, @@ -712,13 +715,6 @@ async fn build_wit_dir( download_file(wit_url, &wit_dir.join("kinode.wit")).await?; for (file_name, contents) in apis { let destination = wit_dir.join(file_name); - if destination.exists() { - // check if contents have not changed -> no-op - let old_contents = fs::read(&destination)?; - if &old_contents == contents { - continue; - } - } fs::write(&destination, contents)?; } Ok(()) diff --git a/src/remove_package/mod.rs b/src/remove_package/mod.rs index e3303e84..da5396cd 100644 --- a/src/remove_package/mod.rs +++ b/src/remove_package/mod.rs @@ -1,17 +1,14 @@ use std::path::Path; -use std::process; -use color_eyre::{eyre::WrapErr, Result}; -use fs_err as fs; +use color_eyre::{eyre::eyre, Result}; use tracing::{info, instrument}; -use kinode_process_lib::kernel_types::Erc721Metadata; - +use crate::build::read_metadata; use crate::inject_message; #[instrument(level = "trace", skip_all)] pub async fn execute( - project_dir: &Path, + package_dir: &Path, url: &str, arg_package_name: Option<&str>, arg_publisher: Option<&str>, @@ -19,11 +16,7 @@ pub async fn execute( let (package_name, publisher): (String, String) = match (arg_package_name, arg_publisher) { (Some(package_name), Some(publisher)) => (package_name.into(), publisher.into()), _ => { - let metadata: Erc721Metadata = serde_json::from_reader(fs::File::open( - project_dir.join("metadata.json") - ) - .wrap_err_with(|| "Missing required metadata.json file. See discussion at https://book.kinode.org/my_first_app/chapter_1.html?highlight=metadata.json#metadatajson")? - )?; + let metadata = read_metadata(package_dir)?; let package_name = metadata.properties.package_name.as_str(); let publisher = metadata.properties.publisher.as_str(); (package_name.into(), publisher.into()) @@ -32,9 +25,7 @@ pub async fn execute( // Create and send uninstall request let body = serde_json::json!({ - "Uninstall": { - "package_id": {"package_name": package_name, "publisher_node": publisher}, - } + "Uninstall": {"package_name": package_name, "publisher_node": publisher}, }); let uninstall_request = inject_message::make_message( "main:app_store:sys", @@ -45,14 +36,23 @@ pub async fn execute( None, )?; let response = inject_message::send_request(url, uninstall_request).await?; - if response.status() != 200 { - process::exit(1); - } + let inject_message::Response { ref body, .. } = + inject_message::parse_response(response).await?; + let body = serde_json::from_str::(body)?; - info!( - "Successfully removed package {}:{} on node at {}", - package_name, publisher, url - ); + let uninstall_response = body.get("UninstallResponse"); + + if uninstall_response == Some(&serde_json::Value::String("Success".to_string())) { + info!( + "Successfully removed package {}:{} on node at {}", + package_name, publisher, url + ); + } else { + return Err(eyre!( + "Failed to remove package. Got response from node: {}", + body + )); + } Ok(()) } diff --git a/src/start_package/mod.rs b/src/start_package/mod.rs index ca70cd1a..3b00bffb 100644 --- a/src/start_package/mod.rs +++ b/src/start_package/mod.rs @@ -37,16 +37,14 @@ fn new_package( #[instrument(level = "trace", skip_all)] fn install( node: Option<&str>, - package_name: &str, - publisher_node: &str, hash_string: &str, metadata: &Erc721Metadata, ) -> Result { let body = json!({ "Install": { "package_id": { - "package_name": package_name, - "publisher_node": publisher_node, + "package_name": metadata.properties.package_name, + "publisher_node": metadata.properties.publisher, }, "version_hash": hash_string, "metadata": { @@ -150,8 +148,6 @@ pub async fn execute(package_dir: &Path, url: &str) -> Result<()> { let install_request = install( None, - package_name, - publisher, &hash_string, &metadata, )?;