From 512a090d85d9703282353ef329438c4f21af580a Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Mon, 29 Jul 2024 11:12:09 -0700 Subject: [PATCH 1/9] bump version to 0.6.10 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 104b86c3..12043175 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1624,7 +1624,7 @@ dependencies = [ [[package]] name = "kit" -version = "0.6.9" +version = "0.6.10" dependencies = [ "anyhow", "base64 0.21.7", diff --git a/Cargo.toml b/Cargo.toml index 9d985ec6..c061eae5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kit" -version = "0.6.9" +version = "0.6.10" edition = "2021" [build-dependencies] From 63a148032bcf70e6e8da047e67a5665795e0b4cf Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Mon, 29 Jul 2024 11:12:58 -0700 Subject: [PATCH 2/9] remove-package: give short `-u` flag to `--publisher` --- src/main.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.rs b/src/main.rs index b2bcd364..fa1aa9c6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -932,6 +932,7 @@ async fn make_app(current_dir: &std::ffi::OsString) -> Result { ) .arg(Arg::new("PUBLISHER") .action(ArgAction::Set) + .short('u') .long("publisher") .help("Name of the publisher (Overrides DIR)") .required(false) From 7c15d42a0c98f9fae4976ba71fd8d779f7641c4b Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Mon, 29 Jul 2024 19:37:51 -0700 Subject: [PATCH 3/9] boot-????-node: allow usage of binary --- src/boot_fake_node/mod.rs | 5 +---- src/boot_real_node/mod.rs | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/boot_fake_node/mod.rs b/src/boot_fake_node/mod.rs index 17d3e1b1..8ff59531 100644 --- a/src/boot_fake_node/mod.rs +++ b/src/boot_fake_node/mod.rs @@ -411,10 +411,7 @@ pub async fn execute( .join(if release { "release" } else { "debug" }) .join("kinode") } else { - return Err(eyre!( - "--runtime-path {:?} must be a directory (the repo).", - runtime_path, - )); + runtime_path } } }; diff --git a/src/boot_real_node/mod.rs b/src/boot_real_node/mod.rs index 085d2a1d..2e2dd0de 100644 --- a/src/boot_real_node/mod.rs +++ b/src/boot_real_node/mod.rs @@ -37,10 +37,7 @@ pub async fn execute( .join(if release { "release" } else { "debug" }) .join("kinode") } else { - return Err(eyre!( - "--runtime-path {:?} must be a directory (the repo).", - runtime_path, - )); + runtime_path } } }; From 9d8820bc89bef3cb417d372c336e69776c37822f Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Mon, 5 Aug 2024 17:53:48 -0700 Subject: [PATCH 4/9] run-tests: generalize dependency paths --- src/run_tests/mod.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/run_tests/mod.rs b/src/run_tests/mod.rs index 12e89622..dceb4bf5 100644 --- a/src/run_tests/mod.rs +++ b/src/run_tests/mod.rs @@ -99,7 +99,7 @@ fn expand_home_path(path: &PathBuf) -> Option { path.as_os_str() .to_str() .and_then(|s| expand_home_path_string(s)) - .and_then(|s| Some(Path::new(&s).to_path_buf())) + .map(|s| PathBuf::from(&s)) } #[instrument(level = "trace", skip_all)] @@ -275,7 +275,12 @@ async fn build_packages( .dependency_package_paths .iter() .cloned() - .map(|p| test_dir_path.join(p).canonicalize().unwrap()) + .map(|p| { + match expand_home_path(&p) { + Some(p) => p, + None => test_dir_path.join(&p).canonicalize().unwrap(), + } + }) .collect(); let setup_packages: Vec = test .setup_packages @@ -340,7 +345,10 @@ async fn build_packages( let url = format!("http://localhost:{port}"); for dependency_package_path in &test.dependency_package_paths { - let path = test_dir_path.join(&dependency_package_path).canonicalize()?; + let path = match expand_home_path(&dependency_package_path) { + Some(p) => p, + None => test_dir_path.join(&dependency_package_path).canonicalize()?, + }; build::execute( &path, false, From d434b13b6704fc9f482d924df86d4191baae9904 Mon Sep 17 00:00:00 2001 From: dr-frmr Date: Tue, 6 Aug 2024 13:44:57 +0300 Subject: [PATCH 5/9] add 'blank' template for kit new (rust-only) --- src/main.rs | 27 +++++++------------ src/new/mod.rs | 5 +++- src/new/templates/rust/no-ui/blank/.gitignore | 8 ++++++ .../templates/rust/no-ui/blank/Cargo.toml_ | 10 +++++++ .../templates/rust/no-ui/blank/metadata.json | 18 +++++++++++++ .../rust/no-ui/blank/pkg/manifest.json | 11 ++++++++ .../no-ui/blank/{package_name}/Cargo.toml_ | 16 +++++++++++ .../no-ui/blank/{package_name}/src/lib.rs | 16 +++++++++++ 8 files changed, 92 insertions(+), 19 deletions(-) create mode 100644 src/new/templates/rust/no-ui/blank/.gitignore create mode 100644 src/new/templates/rust/no-ui/blank/Cargo.toml_ create mode 100644 src/new/templates/rust/no-ui/blank/metadata.json create mode 100644 src/new/templates/rust/no-ui/blank/pkg/manifest.json create mode 100644 src/new/templates/rust/no-ui/blank/{package_name}/Cargo.toml_ create mode 100644 src/new/templates/rust/no-ui/blank/{package_name}/src/lib.rs diff --git a/src/main.rs b/src/main.rs index fa1aa9c6..b3e16ae1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -187,7 +187,8 @@ async fn execute( Some(f) => f.clone(), None => "".into(), }; - let url = matches.get_one::("NODE_PORT") + let url = matches + .get_one::("NODE_PORT") .map(|p| format!("http://localhost:{p}")); let download_from = matches .get_one::("NODE") @@ -226,16 +227,12 @@ async fn execute( Some(("build-start-package", matches)) => { let package_dir = PathBuf::from(matches.get_one::("DIR").unwrap()); let no_ui = matches.get_one::("NO_UI").unwrap(); - let ui_only = matches - .get_one::("UI_ONLY") - .unwrap_or(&false); + let ui_only = matches.get_one::("UI_ONLY").unwrap_or(&false); let url = format!( "http://localhost:{}", matches.get_one::("NODE_PORT").unwrap(), ); - let skip_deps_check = matches - .get_one::("SKIP_DEPS_CHECK") - .unwrap(); + let skip_deps_check = matches.get_one::("SKIP_DEPS_CHECK").unwrap(); let features = match matches.get_one::("FEATURES") { Some(f) => f.clone(), None => "".into(), @@ -281,12 +278,8 @@ async fn execute( Some(("connect", matches)) => { let local_port = matches.get_one::("LOCAL_PORT").unwrap(); let disconnect = matches.get_one::("IS_DISCONNECT").unwrap(); - let host = matches - .get_one::("HOST") - .map(|s| s.as_ref()); - let host_port = matches - .get_one::("HOST_PORT") - .map(|hp| hp.clone()); + let host = matches.get_one::("HOST").map(|s| s.as_ref()); + let host_port = matches.get_one::("HOST_PORT").map(|hp| hp.clone()); connect::execute(*local_port, *disconnect, host, host_port) } Some(("dev-ui", matches)) => { @@ -344,8 +337,7 @@ async fn execute( let publisher = matches .get_one::("PUBLISHER") .and_then(|s: &String| Some(s.as_str())); - let package_dir = - PathBuf::from(matches.get_one::("DIR").unwrap()); + let package_dir = PathBuf::from(matches.get_one::("DIR").unwrap()); let url = format!( "http://localhost:{}", matches.get_one::("NODE_PORT").unwrap(), @@ -375,8 +367,7 @@ async fn execute( setup::execute(*verbose) } Some(("start-package", matches)) => { - let package_dir = - PathBuf::from(matches.get_one::("DIR").unwrap()); + let package_dir = PathBuf::from(matches.get_one::("DIR").unwrap()); let url = format!( "http://localhost:{}", matches.get_one::("NODE_PORT").unwrap(), @@ -910,7 +901,7 @@ async fn make_app(current_dir: &std::ffi::OsString) -> Result { .short('t') .long("template") .help("Template to create") - .value_parser(["chat", "echo", "fibonacci", "file_transfer"]) + .value_parser(["blank", "chat", "echo", "fibonacci", "file_transfer"]) .default_value("chat") ) .arg(Arg::new("UI") diff --git a/src/new/mod.rs b/src/new/mod.rs index e971ede0..abf59b2d 100644 --- a/src/new/mod.rs +++ b/src/new/mod.rs @@ -18,6 +18,7 @@ pub enum Language { #[derive(Clone)] pub enum Template { + Blank, Chat, Echo, Fibonacci, @@ -38,6 +39,7 @@ impl Language { impl Template { fn to_string(&self) -> String { match self { + Template::Blank => "blank", Template::Chat => "chat", Template::Echo => "echo", Template::Fibonacci => "fibonacci", @@ -61,11 +63,12 @@ impl From<&String> for Language { impl From<&String> for Template { fn from(s: &String) -> Self { match s.as_str() { + "blank" => Template::Blank, "chat" => Template::Chat, "echo" => Template::Echo, "fibonacci" => Template::Fibonacci, "file_transfer" => Template::FileTransfer, - _ => panic!("kit: template must be 'chat', 'echo', or 'fibonacci'; not '{s}'"), + _ => panic!("kit: template must be 'blank', 'chat', 'echo', or 'fibonacci'; not '{s}'"), } } } diff --git a/src/new/templates/rust/no-ui/blank/.gitignore b/src/new/templates/rust/no-ui/blank/.gitignore new file mode 100644 index 00000000..014c5e35 --- /dev/null +++ b/src/new/templates/rust/no-ui/blank/.gitignore @@ -0,0 +1,8 @@ +*/target/ +/target +pkg/*.wasm +*.swp +*.swo +*/wasi_snapshot_preview1.wasm +*/wit/ +*/process_env diff --git a/src/new/templates/rust/no-ui/blank/Cargo.toml_ b/src/new/templates/rust/no-ui/blank/Cargo.toml_ new file mode 100644 index 00000000..31d65e6d --- /dev/null +++ b/src/new/templates/rust/no-ui/blank/Cargo.toml_ @@ -0,0 +1,10 @@ +[workspace] +resolver = "2" +members = [ + "{package_name}", +] + +[profile.release] +panic = "abort" +opt-level = "s" +lto = true diff --git a/src/new/templates/rust/no-ui/blank/metadata.json b/src/new/templates/rust/no-ui/blank/metadata.json new file mode 100644 index 00000000..940b56a7 --- /dev/null +++ b/src/new/templates/rust/no-ui/blank/metadata.json @@ -0,0 +1,18 @@ +{ + "name": "{package_name}", + "description": "", + "image": "", + "properties": { + "package_name": "{package_name}", + "current_version": "0.1.0", + "publisher": "{publisher}", + "mirrors": [], + "code_hashes": { + "0.1.0": "" + }, + "wit_version": 0, + "dependencies": [] + }, + "external_url": "", + "animation_url": "" +} diff --git a/src/new/templates/rust/no-ui/blank/pkg/manifest.json b/src/new/templates/rust/no-ui/blank/pkg/manifest.json new file mode 100644 index 00000000..bf0b8a3c --- /dev/null +++ b/src/new/templates/rust/no-ui/blank/pkg/manifest.json @@ -0,0 +1,11 @@ +[ + { + "process_name": "{package_name}", + "process_wasm_path": "/{package_name}.wasm", + "on_exit": "Restart", + "request_networking": false, + "request_capabilities": [], + "grant_capabilities": [], + "public": false + } +] \ No newline at end of file diff --git a/src/new/templates/rust/no-ui/blank/{package_name}/Cargo.toml_ b/src/new/templates/rust/no-ui/blank/{package_name}/Cargo.toml_ new file mode 100644 index 00000000..1ad787f6 --- /dev/null +++ b/src/new/templates/rust/no-ui/blank/{package_name}/Cargo.toml_ @@ -0,0 +1,16 @@ +[package] +name = "{package_name}" +version = "0.1.0" +edition = "2021" + +[dependencies] +kinode_process_lib = "0.8.5" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +wit-bindgen = "0.24.0" + +[lib] +crate-type = ["cdylib"] + +[package.metadata.component] +package = "kinode:process" diff --git a/src/new/templates/rust/no-ui/blank/{package_name}/src/lib.rs b/src/new/templates/rust/no-ui/blank/{package_name}/src/lib.rs new file mode 100644 index 00000000..38d33893 --- /dev/null +++ b/src/new/templates/rust/no-ui/blank/{package_name}/src/lib.rs @@ -0,0 +1,16 @@ +use kinode_process_lib::{await_message, call_init, Address}; + +wit_bindgen::generate!({ + path: "target/wit", + world: "process-v0", +}); + +call_init!(init); +fn init(_our: Address) { + loop { + match await_message() { + Err(send_error) => println!("got SendError: {send_error}"), + Ok(message) => println!("got Message: {message:?}"), + } + } +} From 9a02a58df283b1bd23c21a32377923b11cf3a5c3 Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Wed, 7 Aug 2024 09:56:19 -0700 Subject: [PATCH 6/9] run-tests: fix loading processes whose names do not match package --- src/run_tests/mod.rs | 50 +++++++++++++++++++++++++--------------- src/start_package/mod.rs | 3 +-- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/run_tests/mod.rs b/src/run_tests/mod.rs index dceb4bf5..fdde6e72 100644 --- a/src/run_tests/mod.rs +++ b/src/run_tests/mod.rs @@ -476,25 +476,37 @@ async fn load_setups(setup_paths: &Vec, port: u16) -> Result<()> { #[instrument(level = "trace", skip_all)] async fn load_process(path: &Path, drive: &str, port: &u16) -> Result<()> { - let basename = get_basename(path).unwrap(); - let request = inject_message::make_message( - "vfs:distro:sys", - Some(15), - &serde_json::to_string(&serde_json::json!({ - "path": format!("/tester:sys/{drive}/{basename}.wasm"), - "action": "Write", - })) - .unwrap(), - None, - None, - path.join("pkg").join(format!("{basename}.wasm")).to_str(), - )?; - - let response = - inject_message::send_request(&format!("http://localhost:{}", port), request).await?; - match inject_message::parse_response(response).await { - Ok(_) => {} - Err(e) => return Err(eyre!("Failed to load test {path:?}: {}", e)), + for entry in path.join("pkg").read_dir()? { + let entry = entry?; + let path = entry.path(); + if Some("wasm") == path.extension().and_then(|s| s.to_str()) { + println!("include path {:?}", path); + let file_name = path + .file_name() + .and_then(|s| s.to_str()) + .unwrap_or_default(); + let request = inject_message::make_message( + "vfs:distro:sys", + Some(15), + &serde_json::to_string(&serde_json::json!({ + "path": format!("/tester:sys/{drive}/{file_name}"), + "action": "Write", + })) + .unwrap(), + None, + None, + path.to_str(), + )?; + + let response = inject_message::send_request( + &format!("http://localhost:{}", port), + request, + ).await?; + match inject_message::parse_response(response).await { + Ok(_) => {} + Err(e) => return Err(eyre!("Failed to load test {path:?}: {}", e)), + } + } } Ok(()) } diff --git a/src/start_package/mod.rs b/src/start_package/mod.rs index 0aaeb720..e9f35a6e 100644 --- a/src/start_package/mod.rs +++ b/src/start_package/mod.rs @@ -147,8 +147,7 @@ pub async fn execute(package_dir: &Path, url: &str) -> Result<()> { info!("{}", pkg_publisher); // Create zip and put it in /target - let parent_dir = pkg_dir.parent().unwrap(); - let target_dir = parent_dir.join("target"); + let target_dir = package_dir.join("target"); fs::create_dir_all(&target_dir)?; let zip_filename = target_dir.join(&pkg_publisher).with_extension("zip"); zip_directory(&pkg_dir, &zip_filename.to_str().unwrap())?; From 2ea630c1f757ba18c3a5919950f44217be185182 Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Fri, 9 Aug 2024 10:25:30 -0700 Subject: [PATCH 7/9] run-tests: allow use of binary --- src/run_tests/mod.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/run_tests/mod.rs b/src/run_tests/mod.rs index fdde6e72..4a96c944 100644 --- a/src/run_tests/mod.rs +++ b/src/run_tests/mod.rs @@ -788,10 +788,7 @@ pub async fn execute(config_path: PathBuf) -> Result<()> { }) .join("kinode") } else { - return Err(eyre!( - "RepoPath {:?} must be a directory (the repo).", - runtime_path - )); + runtime_path } } }; From bcfa2a684e352af504f026bfadd00ab0075596ff Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Fri, 9 Aug 2024 10:27:07 -0700 Subject: [PATCH 8/9] make `fetch_releases()` pub --- src/boot_fake_node/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/boot_fake_node/mod.rs b/src/boot_fake_node/mod.rs index 8ff59531..1f81f709 100644 --- a/src/boot_fake_node/mod.rs +++ b/src/boot_fake_node/mod.rs @@ -254,7 +254,7 @@ pub async fn get_from_github(owner: &str, repo: &str, endpoint: &str) -> Result< } #[instrument(level = "trace", skip_all)] -async fn fetch_releases(owner: &str, repo: &str) -> Result> { +pub async fn fetch_releases(owner: &str, repo: &str) -> Result> { let bytes = get_from_github(owner, repo, "releases").await?; if bytes.is_empty() { return Ok(vec![]); From 4602148168dd7c038150e53b51dc47046bb7e0ea Mon Sep 17 00:00:00 2001 From: hosted-fornet Date: Fri, 9 Aug 2024 11:09:20 -0700 Subject: [PATCH 9/9] pub-ify a few structs --- src/boot_fake_node/mod.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/boot_fake_node/mod.rs b/src/boot_fake_node/mod.rs index 1f81f709..f09ca0b8 100644 --- a/src/boot_fake_node/mod.rs +++ b/src/boot_fake_node/mod.rs @@ -32,14 +32,14 @@ const LOCAL_PREFIX: &str = "kinode-"; pub const CACHE_EXPIRY_SECONDS: u64 = 300; #[derive(Deserialize, Debug)] -struct Release { - tag_name: String, - assets: Vec, +pub struct Release { + pub tag_name: String, + pub assets: Vec, } #[derive(Deserialize, Debug)] -struct Asset { - name: String, +pub struct Asset { + pub name: String, } #[instrument(level = "trace", skip_all)]