From e9a0e1dac6f68c53f951b6a6416807d166f6ea6a Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Thu, 2 May 2024 22:11:51 -0500 Subject: [PATCH 01/11] draft of updating with Warg federation --- .gitignore | 1 + Cargo.lock | 111 ++++---- Cargo.toml | 15 +- crates/wac-resolver/src/lib.rs | 25 +- crates/wac-resolver/src/registry.rs | 321 +++++++---------------- crates/wac-resolver/tests/support/mod.rs | 2 + src/commands/plug.rs | 7 +- 7 files changed, 183 insertions(+), 299 deletions(-) diff --git a/.gitignore b/.gitignore index 3c58539b..e9868cca 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ Cargo.lock **/*.rs.bk *.pdb publish +*.swp diff --git a/Cargo.lock b/Cargo.lock index 3e12d94f..a6621494 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -775,6 +775,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "dialoguer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "shell-words", + "tempfile", + "thiserror", + "zeroize", +] + [[package]] name = "diff" version = "0.1.13" @@ -1854,18 +1867,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "miette" -version = "5.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" -dependencies = [ - "miette-derive 5.10.0", - "once_cell", - "thiserror", - "unicode-width", -] - [[package]] name = "miette" version = "7.2.0" @@ -1875,7 +1876,7 @@ dependencies = [ "backtrace", "backtrace-ext", "cfg-if", - "miette-derive 7.2.0", + "miette-derive", "owo-colors", "serde 1.0.197", "supports-color 3.0.0", @@ -1887,17 +1888,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "miette-derive" -version = "5.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.57", -] - [[package]] name = "miette-derive" version = "7.2.0" @@ -2544,12 +2534,12 @@ dependencies = [ [[package]] name = "prost-reflect" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057237efdb71cf4b3f9396302a3d6599a92fa94063ba537b66130980ea9909f3" +checksum = "6f5eec97d5d34bdd17ad2db2219aabf46b054c6c41bd5529767c9ce55be5898f" dependencies = [ - "logos 0.13.0", - "miette 5.10.0", + "logos 0.14.0", + "miette", "once_cell", "prost", "prost-types", @@ -2566,12 +2556,12 @@ dependencies = [ [[package]] name = "protox" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bb76c5f6221de491fe2c8f39b106330bbd9762c6511119c07940e10eb9ff11" +checksum = "a29b3c5596eb23a849deba860b53ffd468199d9ad5fe4402a7d55379e16aa2d2" dependencies = [ "bytes", - "miette 5.10.0", + "miette", "prost", "prost-reflect", "prost-types", @@ -2581,12 +2571,12 @@ dependencies = [ [[package]] name = "protox-parse" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4581f441c58863525a3e6bec7b8de98188cf75239a56c725a3e7288450a33f" +checksum = "033b939d76d358f7c32120c86c71f515bae45e64f2bde455200356557276276c" dependencies = [ "logos 0.13.0", - "miette 5.10.0", + "miette", "prost-types", "thiserror", ] @@ -3174,6 +3164,12 @@ dependencies = [ "lazy_static 1.4.0", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -3850,7 +3846,7 @@ dependencies = [ "indexmap 2.2.6", "indicatif", "log", - "miette 7.2.0", + "miette", "owo-colors", "pretty_env_logger", "semver", @@ -3899,7 +3895,7 @@ dependencies = [ "indexmap 2.2.6", "log", "logos 0.14.0", - "miette 7.2.0", + "miette", "owo-colors", "pretty_assertions", "pretty_env_logger", @@ -3925,7 +3921,7 @@ dependencies = [ "futures", "indexmap 2.2.6", "log", - "miette 7.2.0", + "miette", "pretty_assertions", "secrecy", "semver", @@ -3987,9 +3983,8 @@ dependencies = [ [[package]] name = "warg-api" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bf1e22e1e396b98a2181219b06d1a49a3478c1b9d87a29cd9cd819d714e6c3" +version = "0.5.0-dev" +source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" dependencies = [ "indexmap 2.2.6", "itertools 0.12.1", @@ -4002,15 +3997,15 @@ dependencies = [ [[package]] name = "warg-client" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56cfaf9781ca2d084468bbdd8bbc1e35947bb2a19f8d3940d899852f6dd78aa" +version = "0.5.0-dev" +source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" dependencies = [ "anyhow", "async-recursion", "async-trait", "bytes", "clap", + "dialoguer", "dirs", "futures-util", "indexmap 2.2.6", @@ -4046,9 +4041,8 @@ dependencies = [ [[package]] name = "warg-credentials" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626224ba1a00965282b669d2611654fd6292a15396ed8c850ce91684678fe19f" +version = "0.5.0-dev" +source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" dependencies = [ "anyhow", "indexmap 2.2.6", @@ -4060,9 +4054,8 @@ dependencies = [ [[package]] name = "warg-crypto" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a8c47e96a7f1903931b34db9a1f0d22bcb3761a203ee6861db686daaedcb4b" +version = "0.5.0-dev" +source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" dependencies = [ "anyhow", "base64", @@ -4081,9 +4074,8 @@ dependencies = [ [[package]] name = "warg-protobuf" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed0e698efd0fab8bb747efd452156a65149eb389f7fe2a6b6b3ced4e25ab24" +version = "0.5.0-dev" +source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" dependencies = [ "anyhow", "pbjson", @@ -4100,9 +4092,8 @@ dependencies = [ [[package]] name = "warg-protocol" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69be98a2e9e0aeace7cbd62184b11462d259c5e391e6208d59506c9a2d33571c" +version = "0.5.0-dev" +source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" dependencies = [ "anyhow", "base64", @@ -4123,9 +4114,8 @@ dependencies = [ [[package]] name = "warg-server" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07f15457ced83df5c2298f225fc83b6700e93c7bf320a2e4ef01114c0b34d7ce" +version = "0.5.0-dev" +source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" dependencies = [ "anyhow", "axum", @@ -4154,9 +4144,8 @@ dependencies = [ [[package]] name = "warg-transparency" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d272b3002b9e5f6f636817089ba091e1ba7b85858e72529f96e24bc9827f530" +version = "0.5.0-dev" +source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" dependencies = [ "anyhow", "indexmap 2.2.6", diff --git a/Cargo.toml b/Cargo.toml index cafdad15..b367d408 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,11 +71,16 @@ wat = "1.202.0" logos = "0.14.0" miette = "7.2.0" thiserror = "1.0.58" -warg-client = "0.4.1" -warg-protocol = "0.4.1" -warg-crypto = "0.4.1" -warg-server = "0.4.1" -warg-credentials = "0.4.1" +warg-protocol = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } +warg-crypto = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } +warg-client = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } +warg-credentials = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } +warg-server = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } +#warg-client = "0.4.1" +#warg-protocol = "0.4.1" +#warg-crypto = "0.4.1" +#warg-server = "0.4.1" +#warg-credentials = "0.4.1" secrecy = "0.8.0" futures = "0.3.30" indicatif = "0.17.8" diff --git a/crates/wac-resolver/src/lib.rs b/crates/wac-resolver/src/lib.rs index 94763518..a22f05c7 100644 --- a/crates/wac-resolver/src/lib.rs +++ b/crates/wac-resolver/src/lib.rs @@ -28,6 +28,15 @@ pub enum Error { #[label(primary, "unknown package `{name}`")] span: SourceSpan, }, + /// An invalid package name was encountered. + #[error("invalid package name `{name}`")] + InvalidPackageName { + /// The name of the package. + name: String, + /// The span where the error occurred. + #[label(primary, "invalid package name `{name}`")] + span: SourceSpan, + }, /// An unknown package version was encountered. #[cfg(feature = "registry")] #[error("version {version} of package `{name}` does not exist")] @@ -56,22 +65,22 @@ pub enum Error { #[label(primary, "package `{name}` does not exist")] span: SourceSpan, }, - /// The requested package version has been yanked. + /// The requested package version has been yanked or does not exist. #[cfg(feature = "registry")] - #[error("version {version} of package `{name}` has been yanked")] - PackageVersionYanked { + #[error("version {version} of package `{name}` has been yanked or does not exist")] + PackageVersionYankedOrDoesNotExist { /// The name of the package. name: String, - /// The version of the package that has been yanked. + /// The version of the package. version: semver::Version, /// The span where the error occurred. - #[label(primary, "{version} has been yanked")] + #[label(primary, "{version} has been yanked or does not exist")] span: SourceSpan, }, - /// A package log was empty. + /// A package has no releases. #[cfg(feature = "registry")] - #[error("a release for package `{name}` has not yet been published")] - PackageLogEmpty { + #[error("package `{name}` has no releases")] + PackageNoReleases { /// The name of the package. name: String, /// The span where the error occurred. diff --git a/crates/wac-resolver/src/registry.rs b/crates/wac-resolver/src/registry.rs index 6bb20d8a..6f1c7954 100644 --- a/crates/wac-resolver/src/registry.rs +++ b/crates/wac-resolver/src/registry.rs @@ -1,18 +1,15 @@ use super::Error; use anyhow::Result; use futures::{stream::FuturesUnordered, StreamExt}; -use indexmap::{IndexMap, IndexSet}; +use indexmap::IndexMap; use miette::SourceSpan; use secrecy::Secret; -use semver::{Comparator, Op, Version, VersionReq}; +use semver::{Version, VersionReq}; use std::{fs, path::Path, sync::Arc}; use wac_types::BorrowedPackageKey; -use warg_client::{ - storage::{ContentStorage, RegistryStorage}, - Client, ClientError, Config, FileSystemClient, RegistryUrl, -}; +use warg_client::{Client, ClientError, Config, FileSystemClient, RegistryUrl}; use warg_credentials::keyring::get_auth_token; -use warg_crypto::hash::AnyHash; +use warg_protocol::registry::PackageName; /// Implemented by progress bars. /// @@ -82,242 +79,120 @@ impl RegistryPackageResolver { &self, keys: &IndexMap, SourceSpan>, ) -> Result, Vec>, Error> { - // Start by fetching any required package logs - self.fetch(keys).await?; - - // All the logs have been updated, now we need to see what content - // is missing from local storage. - let mut packages = IndexMap::new(); - let missing = self.find_missing_content(keys, &mut packages).await?; + // parses into `PackageName` and maps back to `SourceSpan` + let package_names_with_source_span = keys + .iter() + .map(|(key, span)| { + Ok(( + PackageName::new(key.name.to_string()).map_err(|_| { + Error::InvalidPackageName { + name: key.name.to_string(), + span: *span, + } + })?, + (key.version.cloned(), *span), + )) + }) + .collect::, SourceSpan)>, Error>>()?; + + // fetch required package logs and return error if any not found + if let Some(bar) = self.bar.as_ref() { + bar.init(1); + bar.println("Updating", "package logs from the registry"); + } - if !missing.is_empty() { - if let Some(bar) = self.bar.as_ref() { - bar.init(missing.len()); - bar.println("Downloading", "package content from the registry"); + match self + .client + .fetch_packages(package_names_with_source_span.keys()) + .await + { + Ok(_) => {} + Err(ClientError::PackageDoesNotExist { name }) => { + return Err(Error::PackageDoesNotExist { + name: name.to_string(), + span: package_names_with_source_span.get(&name).unwrap().1, + }); } - - let mut tasks = FuturesUnordered::new(); - for (index, hash) in missing.keys().enumerate() { - let client = self.client.clone(); - let hash = hash.clone(); - tasks.push(tokio::spawn(async move { - Ok((index, client.download_content(&hash).await?)) - })); - } - - let count = tasks.len(); - let mut finished = 0; - while let Some(res) = tasks.next().await { - let (index, path) = res - .unwrap() - .map_err(|e| Error::RegistryDownloadFailure { source: e })?; - - let (hash, (version, set)) = missing.get_index(index).unwrap(); - log::debug!("downloaded content `{hash}`"); - - finished += 1; - - if let Some(bar) = self.bar.as_ref() { - bar.inc(1); - let first = set.first().unwrap(); - bar.println( - "Downloaded", - &format!("package `{name}` {version} ({hash})", name = first.name), - ) - } - - let contents = Self::read_contents(&path)?; - for key in set { - packages.insert(*key, contents.clone()); - } + Err(err) => { + return Err(Error::RegistryUpdateFailure { source: err.into() }); } + } - assert_eq!(finished, count); + if let Some(bar) = self.bar.as_ref() { + bar.inc(1); + bar.finish(); - if let Some(bar) = self.bar.as_ref() { - bar.finish(); - } + // download package content if not in cache + bar.init(keys.len()); + bar.println("Downloading", "package content from the registry"); } - Ok(packages) - } + let mut tasks = FuturesUnordered::new(); + for (index, (package_name, (version, span))) in + package_names_with_source_span.into_iter().enumerate() + { + let client = self.client.clone(); + tasks.push(tokio::spawn(async move { + Ok(( + index, + if let Some(version) = version { + client + .download_exact(&package_name, &version) + .await + .map_err(|err| match err { + ClientError::PackageVersionDoesNotExist { name, version } => { + Error::PackageVersionYankedOrDoesNotExist { + name: name.to_string(), + version, + span, + } + } + err => Error::RegistryDownloadFailure { source: err.into() }, + })? + } else { + client + .download(&package_name, &VersionReq::STAR) + .await + .map_err(|err| Error::RegistryDownloadFailure { source: err.into() })? + .ok_or_else(|| Error::PackageNoReleases { + name: package_name.to_string(), + span, + })? + }, + )) + })); + } - async fn fetch<'a>( - &self, - keys: &IndexMap, SourceSpan>, - ) -> Result<(), Error> { - // First check if we already have the packages in client storage. - // If not, we'll fetch the logs from the registry. - let mut fetch = IndexMap::new(); - for (key, span) in keys { - let id = - key.name - .parse() - .map_err(|e: anyhow::Error| Error::PackageResolutionFailure { - name: key.name.to_string(), - span: *span, - source: e, - })?; + let mut packages = IndexMap::with_capacity(keys.len()); + let count = tasks.len(); + let mut finished = 0; - // Load the package from client storage to see if we already - // have a matching version present. - if let Some(info) = self - .client - .registry() - .load_package(self.client.get_warg_registry(), &id) - .await - .map_err(|e| Error::PackageResolutionFailure { - name: key.name.to_string(), - span: *span, - source: e, - })? - { - if let Some(version) = key.version { - let req = VersionReq { - comparators: vec![Comparator { - op: Op::Exact, - major: version.major, - minor: Some(version.minor), - patch: Some(version.patch), - pre: version.pre.clone(), - }], - }; + while let Some(res) = tasks.next().await { + let (index, download) = res.unwrap()?; - // Version already present, no need to fetch the log - if info.state.find_latest_release(&req).is_some() { - log::debug!( - "package log for `{name}` has a release version {version}", - name = key.name - ); - continue; - } - } - } + finished += 1; - fetch.entry(id).or_insert_with(|| { - log::debug!( - "fetching log for package `{name}` from the registry", - name = key.name - ); - span - }); - } + let (key, _) = keys.get_index(index).unwrap(); - // Fetch the logs - if !fetch.is_empty() { if let Some(bar) = self.bar.as_ref() { - bar.init(1); - bar.println("Updating", "package logs from the registry"); + bar.inc(1); + let BorrowedPackageKey { name, .. } = key; + bar.println( + "Downloaded", + &format!("package `{name}` {version}", version = download.version), + ) } - match self.client.upsert(fetch.keys()).await { - Ok(_) => { - if let Some(bar) = self.bar.as_ref() { - bar.inc(1); - bar.finish(); - } - } - Err(ClientError::PackageDoesNotExist { name }) => { - return Err(Error::PackageDoesNotExist { - name: name.to_string(), - span: *fetch[&name], - }) - } - Err(e) => { - return Err(Error::RegistryUpdateFailure { source: e.into() }); - } - } + packages.insert(*key, Self::read_contents(&download.path)?); } - Ok(()) - } + assert_eq!(finished, count); - async fn find_missing_content<'a>( - &self, - keys: &IndexMap, SourceSpan>, - packages: &mut IndexMap, Vec>, - ) -> Result>)>, Error> { - let mut downloads: IndexMap)> = - IndexMap::new(); - for (key, span) in keys { - let id = - key.name - .parse() - .map_err(|e: anyhow::Error| Error::PackageResolutionFailure { - name: key.name.to_string(), - span: *span, - source: e, - })?; - - let info = self - .client - .registry() - .load_package(self.client.get_warg_registry(), &id) - .await - .map_err(|e| Error::PackageResolutionFailure { - name: key.name.to_string(), - span: *span, - source: e, - })? - .expect("package log should be present after fetching"); - - let req = match key.version { - Some(v) => VersionReq { - comparators: vec![Comparator { - op: Op::Exact, - major: v.major, - minor: Some(v.minor), - patch: Some(v.patch), - pre: v.pre.clone(), - }], - }, - None => VersionReq::STAR, - }; - - let release = match info.state.find_latest_release(&req) { - Some(release) if !release.yanked() => release, - Some(release) => { - return Err(Error::PackageVersionYanked { - name: key.name.to_string(), - version: release.version.clone(), - span: *span, - }); - } - None => { - if let Some(version) = key.version { - return Err(Error::UnknownPackageVersion { - name: key.name.to_string(), - version: version.clone(), - span: *span, - }); - } else { - return Err(Error::PackageLogEmpty { - name: key.name.to_string(), - span: *span, - }); - } - } - }; - - let hash = release.content().unwrap(); - if let Some(path) = self.client.content().content_location(hash) { - packages.insert(*key, Self::read_contents(&path)?); - } else { - log::debug!( - "downloading content for version {version} of package `{name}`", - name = key.name, - version = release.version - ); - - downloads - .entry(hash.clone()) - .or_insert_with(|| (release.version.clone(), Default::default())) - .1 - .insert(*key); - } + if let Some(bar) = self.bar.as_ref() { + bar.finish(); } - Ok(downloads) + Ok(packages) } fn read_contents(path: &Path) -> Result, Error> { diff --git a/crates/wac-resolver/tests/support/mod.rs b/crates/wac-resolver/tests/support/mod.rs index afe77c59..21357bb8 100644 --- a/crates/wac-resolver/tests/support/mod.rs +++ b/crates/wac-resolver/tests/support/mod.rs @@ -149,6 +149,8 @@ pub async fn spawn_server(root: &Path) -> Result<(ServerInstance, warg_client::C namespace_map_path: Some(root.join("namespaces")), keyring_auth: false, keys: Default::default(), + ignore_federation_hints: false, + auto_accept_federation_hints: false, }; Ok((instance, config)) diff --git a/src/commands/plug.rs b/src/commands/plug.rs index 41198dc9..fc3815c7 100644 --- a/src/commands/plug.rs +++ b/src/commands/plug.rs @@ -108,7 +108,7 @@ impl PlugCommand { } match &self.output { Some(path) => { - std::fs::write(&path, bytes).context(format!( + std::fs::write(path, bytes).context(format!( "failed to write output file `{path}`", path = path.display() ))?; @@ -143,7 +143,10 @@ fn plug_into_socket( let mut checker = SubtypeChecker::new(&mut cache); for (name, plug_ty) in &graph.types()[graph[plug].ty()].exports { if let Some(socket_ty) = graph.types()[graph[socket].ty()].imports.get(name) { - if let Ok(_) = checker.is_subtype(*plug_ty, graph.types(), *socket_ty, graph.types()) { + if checker + .is_subtype(*plug_ty, graph.types(), *socket_ty, graph.types()) + .is_ok() + { plugs.push(name.clone()); } } From 4b217b053bb918619b5ab9b8246084ac341d4efb Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Mon, 6 May 2024 10:07:31 -0500 Subject: [PATCH 02/11] updated warg dep --- Cargo.lock | 16 ++++++++-------- Cargo.toml | 10 +++++----- crates/wac-resolver/src/registry.rs | 2 +- crates/wac-resolver/tests/support/mod.rs | 1 + 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a6621494..ce9b8986 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3984,7 +3984,7 @@ dependencies = [ [[package]] name = "warg-api" version = "0.5.0-dev" -source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" +source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" dependencies = [ "indexmap 2.2.6", "itertools 0.12.1", @@ -3998,7 +3998,7 @@ dependencies = [ [[package]] name = "warg-client" version = "0.5.0-dev" -source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" +source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" dependencies = [ "anyhow", "async-recursion", @@ -4042,7 +4042,7 @@ dependencies = [ [[package]] name = "warg-credentials" version = "0.5.0-dev" -source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" +source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" dependencies = [ "anyhow", "indexmap 2.2.6", @@ -4055,7 +4055,7 @@ dependencies = [ [[package]] name = "warg-crypto" version = "0.5.0-dev" -source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" +source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" dependencies = [ "anyhow", "base64", @@ -4075,7 +4075,7 @@ dependencies = [ [[package]] name = "warg-protobuf" version = "0.5.0-dev" -source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" +source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" dependencies = [ "anyhow", "pbjson", @@ -4093,7 +4093,7 @@ dependencies = [ [[package]] name = "warg-protocol" version = "0.5.0-dev" -source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" +source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" dependencies = [ "anyhow", "base64", @@ -4115,7 +4115,7 @@ dependencies = [ [[package]] name = "warg-server" version = "0.5.0-dev" -source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" +source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" dependencies = [ "anyhow", "axum", @@ -4145,7 +4145,7 @@ dependencies = [ [[package]] name = "warg-transparency" version = "0.5.0-dev" -source = "git+https://github.com/bytecodealliance/registry?rev=ac901b9#ac901b93ea5ae3aec9b23a50136670bc0e07c1b8" +source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" dependencies = [ "anyhow", "indexmap 2.2.6", diff --git a/Cargo.toml b/Cargo.toml index b367d408..23a943ce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,11 +71,11 @@ wat = "1.202.0" logos = "0.14.0" miette = "7.2.0" thiserror = "1.0.58" -warg-protocol = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } -warg-crypto = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } -warg-client = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } -warg-credentials = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } -warg-server = { git = "https://github.com/bytecodealliance/registry", rev = "ac901b9" } +warg-protocol = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } +warg-crypto = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } +warg-client = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } +warg-credentials = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } +warg-server = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } #warg-client = "0.4.1" #warg-protocol = "0.4.1" #warg-crypto = "0.4.1" diff --git a/crates/wac-resolver/src/registry.rs b/crates/wac-resolver/src/registry.rs index 6f1c7954..a023edbe 100644 --- a/crates/wac-resolver/src/registry.rs +++ b/crates/wac-resolver/src/registry.rs @@ -107,7 +107,7 @@ impl RegistryPackageResolver { .await { Ok(_) => {} - Err(ClientError::PackageDoesNotExist { name }) => { + Err(ClientError::PackageDoesNotExist { name, .. }) => { return Err(Error::PackageDoesNotExist { name: name.to_string(), span: package_names_with_source_span.get(&name).unwrap().1, diff --git a/crates/wac-resolver/tests/support/mod.rs b/crates/wac-resolver/tests/support/mod.rs index 21357bb8..f45b59bc 100644 --- a/crates/wac-resolver/tests/support/mod.rs +++ b/crates/wac-resolver/tests/support/mod.rs @@ -151,6 +151,7 @@ pub async fn spawn_server(root: &Path) -> Result<(ServerInstance, warg_client::C keys: Default::default(), ignore_federation_hints: false, auto_accept_federation_hints: false, + disable_dialoguer: true, }; Ok((instance, config)) From 358e6c8fc2fcdbbead0c9d3108c81f0ecada5db6 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Tue, 7 May 2024 16:22:45 -0500 Subject: [PATCH 03/11] updated to warg release v0.4.2 --- Cargo.lock | 46 ++++++++++++++---------- Cargo.toml | 15 +++----- crates/wac-resolver/tests/support/mod.rs | 2 +- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ce9b8986..18078c93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1441,7 +1441,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2 0.5.6", "tokio", "tower-service", "tracing", @@ -1669,9 +1669,9 @@ dependencies = [ [[package]] name = "keyring" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be8bc4c6b6e9d85ecdad090fcf342a9216f53d747a537cc05e3452fd650ca46" +checksum = "363387f0019d714aa60cc30ab4fe501a747f4c08fc58f069dd14be971bd495a0" dependencies = [ "byteorder", "lazy_static 1.4.0", @@ -3983,8 +3983,9 @@ dependencies = [ [[package]] name = "warg-api" -version = "0.5.0-dev" -source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b556c2cc6a4fcac4f50587bb62b04d1c722943702c659b31e16240311588f8f" dependencies = [ "indexmap 2.2.6", "itertools 0.12.1", @@ -3997,8 +3998,9 @@ dependencies = [ [[package]] name = "warg-client" -version = "0.5.0-dev" -source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f99db16e7821706e7f4efe2a4a10c7dd7d4545a42c87e2d6bef77283a14b096" dependencies = [ "anyhow", "async-recursion", @@ -4041,8 +4043,9 @@ dependencies = [ [[package]] name = "warg-credentials" -version = "0.5.0-dev" -source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a87b014f5773027bdaa4c407ea72a84889a583e48f67ec2b21b490a27313d68a" dependencies = [ "anyhow", "indexmap 2.2.6", @@ -4054,8 +4057,9 @@ dependencies = [ [[package]] name = "warg-crypto" -version = "0.5.0-dev" -source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "394967bc096c72ef524de2bd64f0a516e0c4378ca89b88838bb5d64311fdb224" dependencies = [ "anyhow", "base64", @@ -4074,8 +4078,9 @@ dependencies = [ [[package]] name = "warg-protobuf" -version = "0.5.0-dev" -source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13bf18aec939aa032f89fe05ac1957002c6619eabf58a74e88e300657ec4087e" dependencies = [ "anyhow", "pbjson", @@ -4092,8 +4097,9 @@ dependencies = [ [[package]] name = "warg-protocol" -version = "0.5.0-dev" -source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b00c0564b6d52db574b2345dae2918f138dab82a341ef4da61e611eb679a8ee" dependencies = [ "anyhow", "base64", @@ -4114,8 +4120,9 @@ dependencies = [ [[package]] name = "warg-server" -version = "0.5.0-dev" -source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687bf9d3e34eabe867432fe08a9f5d05c4b34d49d1b1ff516265b901fe75d33b" dependencies = [ "anyhow", "axum", @@ -4144,8 +4151,9 @@ dependencies = [ [[package]] name = "warg-transparency" -version = "0.5.0-dev" -source = "git+https://github.com/calvinrp/bytecodealliance-registry?rev=3eb6368#3eb63685df8f485d84ffefb35216e387ea31eab7" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1592ffca976471c8b998a176faa5da328ca99ddba1858c5a3dac149cf4557c8" dependencies = [ "anyhow", "indexmap 2.2.6", diff --git a/Cargo.toml b/Cargo.toml index 23a943ce..e5b6116e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,16 +71,11 @@ wat = "1.202.0" logos = "0.14.0" miette = "7.2.0" thiserror = "1.0.58" -warg-protocol = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } -warg-crypto = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } -warg-client = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } -warg-credentials = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } -warg-server = { git = "https://github.com/calvinrp/bytecodealliance-registry", rev = "3eb6368" } -#warg-client = "0.4.1" -#warg-protocol = "0.4.1" -#warg-crypto = "0.4.1" -#warg-server = "0.4.1" -#warg-credentials = "0.4.1" +warg-client = "0.4.2" +warg-protocol = "0.4.2" +warg-crypto = "0.4.2" +warg-server = "0.4.2" +warg-credentials = "0.4.2" secrecy = "0.8.0" futures = "0.3.30" indicatif = "0.17.8" diff --git a/crates/wac-resolver/tests/support/mod.rs b/crates/wac-resolver/tests/support/mod.rs index f45b59bc..a3339df8 100644 --- a/crates/wac-resolver/tests/support/mod.rs +++ b/crates/wac-resolver/tests/support/mod.rs @@ -151,7 +151,7 @@ pub async fn spawn_server(root: &Path) -> Result<(ServerInstance, warg_client::C keys: Default::default(), ignore_federation_hints: false, auto_accept_federation_hints: false, - disable_dialoguer: true, + disable_interactive: true, }; Ok((instance, config)) From 7811ecb7b37b184a5b1af022dff7a64f30e1f763 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Wed, 8 May 2024 14:34:12 -0500 Subject: [PATCH 04/11] warg version bump --- Cargo.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e5b6116e..4e1d2a16 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,11 +71,11 @@ wat = "1.202.0" logos = "0.14.0" miette = "7.2.0" thiserror = "1.0.58" -warg-client = "0.4.2" -warg-protocol = "0.4.2" -warg-crypto = "0.4.2" -warg-server = "0.4.2" -warg-credentials = "0.4.2" +warg-client = "0.5.0" +warg-protocol = "0.5.0" +warg-crypto = "0.5.0" +warg-server = "0.5.0" +warg-credentials = "0.5.0" secrecy = "0.8.0" futures = "0.3.30" indicatif = "0.17.8" From 1b4aa7cadedb3384377baf89b1be995288d81cf5 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Thu, 9 May 2024 10:57:32 -0500 Subject: [PATCH 05/11] adds `registry` feature to the `default` features --- Cargo.lock | 32 ++++++++++++++++---------------- Cargo.toml | 2 +- README.md | 6 ------ 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 18078c93..19db4a13 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3983,9 +3983,9 @@ dependencies = [ [[package]] name = "warg-api" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b556c2cc6a4fcac4f50587bb62b04d1c722943702c659b31e16240311588f8f" +checksum = "7ebf403d734c6d35ba8edb5841f5bdb50cb286c9bd0b973a0c50041497980019" dependencies = [ "indexmap 2.2.6", "itertools 0.12.1", @@ -3998,9 +3998,9 @@ dependencies = [ [[package]] name = "warg-client" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f99db16e7821706e7f4efe2a4a10c7dd7d4545a42c87e2d6bef77283a14b096" +checksum = "ee251c7ee9f46fe9d1dba9dd3b3006682c75c0996963fca9e8ea15f61882646e" dependencies = [ "anyhow", "async-recursion", @@ -4043,9 +4043,9 @@ dependencies = [ [[package]] name = "warg-credentials" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a87b014f5773027bdaa4c407ea72a84889a583e48f67ec2b21b490a27313d68a" +checksum = "24763162199157c2f3658196a770367765c0c95e39b760766be73ff35f76f335" dependencies = [ "anyhow", "indexmap 2.2.6", @@ -4057,9 +4057,9 @@ dependencies = [ [[package]] name = "warg-crypto" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "394967bc096c72ef524de2bd64f0a516e0c4378ca89b88838bb5d64311fdb224" +checksum = "cd8ca44e5e2a26a690276d573207316b840ecf6b1eab742108320299c1efa3c9" dependencies = [ "anyhow", "base64", @@ -4078,9 +4078,9 @@ dependencies = [ [[package]] name = "warg-protobuf" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bf18aec939aa032f89fe05ac1957002c6619eabf58a74e88e300657ec4087e" +checksum = "b875f26daf113584f9e01e42782735ef03de1f16ee7f107dd5fba0e6b1e81e1e" dependencies = [ "anyhow", "pbjson", @@ -4097,9 +4097,9 @@ dependencies = [ [[package]] name = "warg-protocol" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b00c0564b6d52db574b2345dae2918f138dab82a341ef4da61e611eb679a8ee" +checksum = "443a1c29d5d895d11b5eb5fdcb2a5e8adacee7ab103b314e7c2f2c1a5d7dff3f" dependencies = [ "anyhow", "base64", @@ -4120,9 +4120,9 @@ dependencies = [ [[package]] name = "warg-server" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687bf9d3e34eabe867432fe08a9f5d05c4b34d49d1b1ff516265b901fe75d33b" +checksum = "77b0e4dfe7920e0249f7a71d9015a5a9a874b08c9cfcb35a7dbeaa094bc758b1" dependencies = [ "anyhow", "axum", @@ -4151,9 +4151,9 @@ dependencies = [ [[package]] name = "warg-transparency" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1592ffca976471c8b998a176faa5da328ca99ddba1858c5a3dac149cf4557c8" +checksum = "33dbc0c98f11e68e3e9fa5df1656cf15bc11c5daf524a99b2fa802eff555d26b" dependencies = [ "anyhow", "indexmap 2.2.6", diff --git a/Cargo.toml b/Cargo.toml index 4e1d2a16..50f0475e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,7 +40,7 @@ semver = { workspace = true } indicatif = { workspace = true, optional = true } [features] -default = ["wit"] +default = ["wit", "registry"] wat = ["wac-resolver/wat"] wit = ["wac-resolver/wit"] registry = ["wac-resolver/registry", "indicatif"] diff --git a/README.md b/README.md index 24952b6d..01a73e1e 100644 --- a/README.md +++ b/README.md @@ -84,12 +84,6 @@ For a full description of the `wac` language see [the language guide](LANGUAGE.m cargo install wac-cli ``` -To enable support Warg component registries, specify the `registry` feature: - -``` -cargo install wac-cli --features registry -``` - ## Usage The `wac` CLI tool has three commands: From 88099dce32a6a2fce788ef43e538dbacdb064c45 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Thu, 9 May 2024 17:07:50 -0500 Subject: [PATCH 06/11] version bumped warg to the 0.6.0 and removed unused deps --- Cargo.lock | 45 ++++++++++------------------- Cargo.toml | 12 ++++---- crates/wac-resolver/Cargo.toml | 6 ++-- crates/wac-resolver/src/registry.rs | 31 ++------------------ 4 files changed, 25 insertions(+), 69 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 19db4a13..47455899 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3923,7 +3923,6 @@ dependencies = [ "log", "miette", "pretty_assertions", - "secrecy", "semver", "tempdir", "thiserror", @@ -3933,7 +3932,6 @@ dependencies = [ "wac-parser", "wac-types", "warg-client", - "warg-credentials", "warg-crypto", "warg-protocol", "warg-server", @@ -3983,9 +3981,9 @@ dependencies = [ [[package]] name = "warg-api" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebf403d734c6d35ba8edb5841f5bdb50cb286c9bd0b973a0c50041497980019" +checksum = "b08e86feb745fa5a4e9b3ed8c53ca7353ce474c9164573e7963c65eab0e20998" dependencies = [ "indexmap 2.2.6", "itertools 0.12.1", @@ -3998,9 +3996,9 @@ dependencies = [ [[package]] name = "warg-client" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee251c7ee9f46fe9d1dba9dd3b3006682c75c0996963fca9e8ea15f61882646e" +checksum = "ecb95cdddbc52c73e774d6d555412bb8060156f1ac666df733c18bdeb923c22c" dependencies = [ "anyhow", "async-recursion", @@ -4012,6 +4010,7 @@ dependencies = [ "futures-util", "indexmap 2.2.6", "itertools 0.12.1", + "keyring", "libc", "normpath", "once_cell", @@ -4041,25 +4040,11 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "warg-credentials" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24763162199157c2f3658196a770367765c0c95e39b760766be73ff35f76f335" -dependencies = [ - "anyhow", - "indexmap 2.2.6", - "keyring", - "secrecy", - "warg-client", - "warg-crypto", -] - [[package]] name = "warg-crypto" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8ca44e5e2a26a690276d573207316b840ecf6b1eab742108320299c1efa3c9" +checksum = "79344c8bd2cf133533ce6352b6491fbb343e374a8c09527073adda5015c89c92" dependencies = [ "anyhow", "base64", @@ -4078,9 +4063,9 @@ dependencies = [ [[package]] name = "warg-protobuf" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b875f26daf113584f9e01e42782735ef03de1f16ee7f107dd5fba0e6b1e81e1e" +checksum = "975e38d2ddba1d26f46713d75cccecf3769ebaae7d14b0dcb830d207867c50bf" dependencies = [ "anyhow", "pbjson", @@ -4097,9 +4082,9 @@ dependencies = [ [[package]] name = "warg-protocol" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443a1c29d5d895d11b5eb5fdcb2a5e8adacee7ab103b314e7c2f2c1a5d7dff3f" +checksum = "fb997bf019742f796123539e9c9031d3ec8ed973950a0534e1f6af508e27e4f1" dependencies = [ "anyhow", "base64", @@ -4120,9 +4105,9 @@ dependencies = [ [[package]] name = "warg-server" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77b0e4dfe7920e0249f7a71d9015a5a9a874b08c9cfcb35a7dbeaa094bc758b1" +checksum = "a8ada7d9f5ec554959501509b60229da52f5bd0e535b6b83eef2ca4f7f47d127" dependencies = [ "anyhow", "axum", @@ -4151,9 +4136,9 @@ dependencies = [ [[package]] name = "warg-transparency" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33dbc0c98f11e68e3e9fa5df1656cf15bc11c5daf524a99b2fa802eff555d26b" +checksum = "f04b4573fd7c7ebee61f5b4645b464e7dcd656386d0ca4c77b37533ad1bb98d9" dependencies = [ "anyhow", "indexmap 2.2.6", diff --git a/Cargo.toml b/Cargo.toml index 50f0475e..6d9185db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,7 +43,7 @@ indicatif = { workspace = true, optional = true } default = ["wit", "registry"] wat = ["wac-resolver/wat"] wit = ["wac-resolver/wit"] -registry = ["wac-resolver/registry", "indicatif"] +registry = ["wac-resolver/registry", "dep:indicatif"] [workspace.dependencies] wac-parser = { path = "crates/wac-parser", version = "0.1.0", default-features = false } @@ -71,12 +71,10 @@ wat = "1.202.0" logos = "0.14.0" miette = "7.2.0" thiserror = "1.0.58" -warg-client = "0.5.0" -warg-protocol = "0.5.0" -warg-crypto = "0.5.0" -warg-server = "0.5.0" -warg-credentials = "0.5.0" -secrecy = "0.8.0" +warg-client = "0.6.0" +warg-protocol = "0.6.0" +warg-crypto = "0.6.0" +warg-server = "0.6.0" futures = "0.3.30" indicatif = "0.17.8" pretty_assertions = "1.4.0" diff --git a/crates/wac-resolver/Cargo.toml b/crates/wac-resolver/Cargo.toml index 7ff8349e..8aa8a381 100644 --- a/crates/wac-resolver/Cargo.toml +++ b/crates/wac-resolver/Cargo.toml @@ -24,8 +24,6 @@ miette = { workspace = true } warg-client = { workspace = true, optional = true } warg-protocol = { workspace = true, optional = true } warg-crypto = { workspace = true, optional = true } -warg-credentials = { workspace = true, optional = true } -secrecy = { workspace = true, optional = true } tokio = { workspace = true, optional = true } futures = { workspace = true, optional = true } @@ -40,5 +38,5 @@ tempdir = "0.3.7" [features] default = ["registry"] wat = ["dep:wat"] -wit = ["wit-parser"] -registry = ["warg-client", "warg-protocol", "warg-crypto", "warg-credentials", "secrecy", "tokio", "futures"] +wit = ["dep:wit-parser"] +registry = ["dep:warg-client", "dep:warg-protocol", "dep:warg-crypto", "dep:tokio", "dep:futures"] diff --git a/crates/wac-resolver/src/registry.rs b/crates/wac-resolver/src/registry.rs index a023edbe..bd6463f9 100644 --- a/crates/wac-resolver/src/registry.rs +++ b/crates/wac-resolver/src/registry.rs @@ -3,12 +3,10 @@ use anyhow::Result; use futures::{stream::FuturesUnordered, StreamExt}; use indexmap::IndexMap; use miette::SourceSpan; -use secrecy::Secret; use semver::{Version, VersionReq}; use std::{fs, path::Path, sync::Arc}; use wac_types::BorrowedPackageKey; -use warg_client::{Client, ClientError, Config, FileSystemClient, RegistryUrl}; -use warg_credentials::keyring::get_auth_token; +use warg_client::{Client, ClientError, Config, FileSystemClient}; use warg_protocol::registry::PackageName; /// Implemented by progress bars. @@ -43,13 +41,8 @@ impl RegistryPackageResolver { /// /// If `url` is `None`, the default URL will be used. pub fn new(url: Option<&str>, bar: Option>) -> Result { - let config = Config::from_default_file()?.unwrap_or_default(); Ok(Self { - client: Arc::new(Client::new_with_config( - url, - &config, - Self::auth_token(&config, url)?, - )?), + client: Arc::new(Client::new_with_default_config(url)?), bar, }) } @@ -63,11 +56,7 @@ impl RegistryPackageResolver { bar: Option>, ) -> Result { Ok(Self { - client: Arc::new(Client::new_with_config( - url, - config, - Self::auth_token(config, url)?, - )?), + client: Arc::new(Client::new_with_config(url, config, None)?), bar, }) } @@ -201,18 +190,4 @@ impl RegistryPackageResolver { source: e.into(), }) } - - pub fn auth_token(config: &Config, url: Option<&str>) -> Result>> { - if config.keyring_auth { - return if let Some(url) = url { - Ok(get_auth_token(&RegistryUrl::new(url)?)?) - } else if let Some(url) = config.home_url.as_ref() { - Ok(get_auth_token(&RegistryUrl::new(url)?)?) - } else { - Ok(None) - }; - } - - Ok(None) - } } From 4c85b7643c28ddb49ebb29265854384ebce09349 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Thu, 9 May 2024 23:06:48 -0500 Subject: [PATCH 07/11] add registry support to `plug` subcommand --- Cargo.lock | 2 + Cargo.toml | 4 +- src/commands/plug.rs | 118 ++++++++++++++++++++++++++++++++++++------- 3 files changed, 106 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 47455899..37e5bab3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3858,6 +3858,8 @@ dependencies = [ "wac-parser", "wac-resolver", "wac-types", + "warg-client", + "warg-protocol", "wasmprinter 0.202.0", "wat", ] diff --git a/Cargo.toml b/Cargo.toml index 6d9185db..d6851417 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,8 @@ wac-types = { workspace = true } wac-graph = { workspace = true } wac-resolver = { workspace = true, default-features = false } wac-parser = { workspace = true, default-features = false } +warg-client = { workspace = true, optional = true } +warg-protocol = { workspace = true, optional = true } anyhow = { workspace = true } clap = { workspace = true } pretty_env_logger = { workspace = true } @@ -43,7 +45,7 @@ indicatif = { workspace = true, optional = true } default = ["wit", "registry"] wat = ["wac-resolver/wat"] wit = ["wac-resolver/wit"] -registry = ["wac-resolver/registry", "dep:indicatif"] +registry = ["wac-resolver/registry", "dep:indicatif", "dep:warg-client", "dep:warg-protocol"] [workspace.dependencies] wac-parser = { path = "crates/wac-parser", version = "0.1.0", default-features = false } diff --git a/src/commands/plug.rs b/src/commands/plug.rs index fc3815c7..30e5ca27 100644 --- a/src/commands/plug.rs +++ b/src/commands/plug.rs @@ -3,24 +3,69 @@ use std::{ path::PathBuf, }; -use anyhow::{bail, Context as _, Result}; +use anyhow::{anyhow, bail, Context as _, Error, Result}; use clap::Args; +use std::borrow::Cow; +use std::str::FromStr; use wac_graph::{CompositionGraph, EncodeOptions, NodeId, PackageId}; use wac_types::{Package, SubtypeChecker}; +#[cfg(feature = "registry")] +use warg_client::FileSystemClient; + +#[cfg(feature = "registry")] +use warg_protocol::registry::PackageName; + +/// The package path or registry package name. +#[derive(Clone, Debug)] +pub enum PackageRef { + /// The local file path to the component. + LocalPath(PathBuf), + /// The registry package name. + #[cfg(feature = "registry")] + RegistryPackage(PackageName), // TODO handle package versions +} + +impl FromStr for PackageRef { + type Err = Error; + + fn from_str(s: &str) -> Result { + if cfg!(not(feature = "registry")) { + return Ok(Self::LocalPath(PathBuf::from(s))); + } + + #[cfg(feature = "registry")] + if let Ok(package_name) = PackageName::new(s) { + // only `namespace:package-name` without file extensions is valid + Ok(Self::RegistryPackage(package_name)) + } else { + Ok(Self::LocalPath(PathBuf::from(s))) + } + } +} + +impl std::fmt::Display for PackageRef { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::LocalPath(path) => write!(f, "{}", path.display()), + Self::RegistryPackage(name) => write!(f, "{}", name), + } + } +} + /// Plugs the exports of any number of 'plug' components into the imports of a 'socket' component. #[derive(Args)] #[clap(disable_version_flag = true)] pub struct PlugCommand { - /// The path to the plug component. + /// The local path to the plug component or the registry package name. /// /// More than one plug can be supplied. #[clap(long = "plug", value_name = "PLUG_PATH", required = true)] - pub plugs: Vec, + pub plugs: Vec, - /// The path to the socket component + /// The local path to the socket component or the registry package name. #[clap(value_name = "SOCKET_PATH", required = true)] - pub socket: PathBuf, + pub socket: PackageRef, /// Whether to emit the WebAssembly text format. #[clap(long, short = 't')] @@ -31,6 +76,11 @@ pub struct PlugCommand { /// If not specified, the output will be written to stdout. #[clap(long, short = 'o')] pub output: Option, + + /// The URL of the registry to use. + #[cfg(feature = "registry")] + #[clap(long, value_name = "URL")] + pub registry: Option, } impl PlugCommand { @@ -39,10 +89,28 @@ impl PlugCommand { log::debug!("executing plug command"); let mut graph = CompositionGraph::new(); - let socket = std::fs::read(&self.socket).with_context(|| { + #[cfg(feature = "registry")] + let client = FileSystemClient::new_with_default_config(self.registry.as_deref()).ok(); + + let socket_path = match &self.socket { + #[cfg(feature = "registry")] + PackageRef::RegistryPackage(name) => { + client + .as_ref() + .ok_or_else(|| { + anyhow!("Warg registry is not configured. Package `{name}` was not found.") + })? + .download(name, &semver::VersionReq::STAR) + .await? + .ok_or_else(|| anyhow!("package `{name}` was not found"))? + .path + } + PackageRef::LocalPath(path) => path.clone(), + }; + let socket = std::fs::read(&socket_path).with_context(|| { format!( - "failed to read socket component `{path}`", - path = self.socket.display() + "failed to read socket component `{socket}`", + socket = self.socket ) })?; @@ -53,24 +121,40 @@ impl PlugCommand { // Collect the plugs by their names let mut plugs_by_name = std::collections::HashMap::<_, Vec<_>>::new(); for plug in self.plugs.iter() { - let name = plug - .file_stem() - .map(|fs| fs.to_string_lossy()) - .with_context(|| format!("path to plug '{}' was not a file", plug.display()))?; + let name = match plug { + PackageRef::RegistryPackage(name) => Cow::Borrowed(name.as_ref()), + PackageRef::LocalPath(path) => path + .file_stem() + .map(|fs| fs.to_string_lossy()) + .with_context(|| format!("path to plug '{}' was not a file", plug))?, + }; + // TODO(rylev): sanitize the name to ensure it's a valid package identifier. plugs_by_name.entry(name).or_default().push(plug); } // Plug each plug into the socket. - for (name, plug_paths) in plugs_by_name { - for (i, plug_path) in plug_paths.iter().enumerate() { - let mut name = format!("plug:{name}"); + for (name, plug_refs) in plugs_by_name { + for (i, plug_ref) in plug_refs.iter().enumerate() { + let (mut name, path) = match plug_ref { + PackageRef::RegistryPackage(name) => ( + name.as_ref().to_string(), + client + .as_ref() + .ok_or_else(|| anyhow!("Warg registry is not configured. Package `{name}` was not found."))? + .download(name, &semver::VersionReq::STAR) + .await? + .ok_or_else(|| anyhow!("package `{name}` was not found"))? + .path, + ), + PackageRef::LocalPath(path) => (format!("plug:{name}"), path.clone()), + }; // If there's more than one plug with the same name, append an index to the name. - if plug_paths.len() > 1 { + if plug_refs.len() > 1 { use core::fmt::Write; write!(&mut name, "{i}").unwrap(); } - plug_into_socket(&name, plug_path, socket, socket_instantiation, &mut graph)?; + plug_into_socket(&name, &path, socket, socket_instantiation, &mut graph)?; } } From e0bf803a02dee2a0ea6d8f151efa57f4961e8088 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Thu, 9 May 2024 23:26:33 -0500 Subject: [PATCH 08/11] fixed feature flag blocks --- src/commands/plug.rs | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/commands/plug.rs b/src/commands/plug.rs index 30e5ca27..c284f23a 100644 --- a/src/commands/plug.rs +++ b/src/commands/plug.rs @@ -3,9 +3,8 @@ use std::{ path::PathBuf, }; -use anyhow::{anyhow, bail, Context as _, Error, Result}; +use anyhow::{bail, Context as _, Error, Result}; use clap::Args; -use std::borrow::Cow; use std::str::FromStr; use wac_graph::{CompositionGraph, EncodeOptions, NodeId, PackageId}; use wac_types::{Package, SubtypeChecker}; @@ -30,17 +29,16 @@ impl FromStr for PackageRef { type Err = Error; fn from_str(s: &str) -> Result { - if cfg!(not(feature = "registry")) { - return Ok(Self::LocalPath(PathBuf::from(s))); - } - #[cfg(feature = "registry")] - if let Ok(package_name) = PackageName::new(s) { + return if let Ok(package_name) = PackageName::new(s) { // only `namespace:package-name` without file extensions is valid Ok(Self::RegistryPackage(package_name)) } else { Ok(Self::LocalPath(PathBuf::from(s))) - } + }; + + #[cfg(not(feature = "registry"))] + Ok(Self::LocalPath(PathBuf::from(s))) } } @@ -48,6 +46,7 @@ impl std::fmt::Display for PackageRef { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::LocalPath(path) => write!(f, "{}", path.display()), + #[cfg(feature = "registry")] Self::RegistryPackage(name) => write!(f, "{}", name), } } @@ -98,16 +97,18 @@ impl PlugCommand { client .as_ref() .ok_or_else(|| { - anyhow!("Warg registry is not configured. Package `{name}` was not found.") + anyhow::anyhow!( + "Warg registry is not configured. Package `{name}` was not found." + ) })? .download(name, &semver::VersionReq::STAR) .await? - .ok_or_else(|| anyhow!("package `{name}` was not found"))? + .ok_or_else(|| anyhow::anyhow!("package `{name}` was not found"))? .path } PackageRef::LocalPath(path) => path.clone(), }; - let socket = std::fs::read(&socket_path).with_context(|| { + let socket = std::fs::read(socket_path).with_context(|| { format!( "failed to read socket component `{socket}`", socket = self.socket @@ -122,7 +123,8 @@ impl PlugCommand { let mut plugs_by_name = std::collections::HashMap::<_, Vec<_>>::new(); for plug in self.plugs.iter() { let name = match plug { - PackageRef::RegistryPackage(name) => Cow::Borrowed(name.as_ref()), + #[cfg(feature = "registry")] + PackageRef::RegistryPackage(name) => std::borrow::Cow::Borrowed(name.as_ref()), PackageRef::LocalPath(path) => path .file_stem() .map(|fs| fs.to_string_lossy()) @@ -137,14 +139,15 @@ impl PlugCommand { for (name, plug_refs) in plugs_by_name { for (i, plug_ref) in plug_refs.iter().enumerate() { let (mut name, path) = match plug_ref { + #[cfg(feature = "registry")] PackageRef::RegistryPackage(name) => ( name.as_ref().to_string(), client .as_ref() - .ok_or_else(|| anyhow!("Warg registry is not configured. Package `{name}` was not found."))? + .ok_or_else(|| anyhow::anyhow!("Warg registry is not configured. Package `{name}` was not found."))? .download(name, &semver::VersionReq::STAR) .await? - .ok_or_else(|| anyhow!("package `{name}` was not found"))? + .ok_or_else(|| anyhow::anyhow!("package `{name}` was not found"))? .path, ), PackageRef::LocalPath(path) => (format!("plug:{name}"), path.clone()), From 17f18035a53d310e3efc26ccb75e932f7ed7abb1 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Fri, 10 May 2024 12:36:12 -0500 Subject: [PATCH 09/11] added version parsing --- src/commands/plug.rs | 120 +++++++++++++++++++++++++++++++------------ 1 file changed, 87 insertions(+), 33 deletions(-) diff --git a/src/commands/plug.rs b/src/commands/plug.rs index c284f23a..4539e71f 100644 --- a/src/commands/plug.rs +++ b/src/commands/plug.rs @@ -22,7 +22,7 @@ pub enum PackageRef { LocalPath(PathBuf), /// The registry package name. #[cfg(feature = "registry")] - RegistryPackage(PackageName), // TODO handle package versions + RegistryPackage((PackageName, Option)), } impl FromStr for PackageRef { @@ -30,12 +30,20 @@ impl FromStr for PackageRef { fn from_str(s: &str) -> Result { #[cfg(feature = "registry")] - return if let Ok(package_name) = PackageName::new(s) { - // only `namespace:package-name` without file extensions is valid - Ok(Self::RegistryPackage(package_name)) - } else { - Ok(Self::LocalPath(PathBuf::from(s))) - }; + return Ok(s + .split_once('@') + .map(|(name, version)| { + match (PackageName::new(name), semver::Version::parse(version)) { + (Ok(name), Ok(ver)) => Ok(Some(Self::RegistryPackage((name, Some(ver))))), + (Ok(_), Err(e)) => bail!("invalid version for package `{s}`: {e}"), + (Err(_), _) => Ok(None), + } + }) + .unwrap_or(Ok(None))? + .unwrap_or_else(|| match PackageName::new(s) { + Ok(name) => Self::RegistryPackage((name, None)), + _ => Self::LocalPath(PathBuf::from(s)), + })); #[cfg(not(feature = "registry"))] Ok(Self::LocalPath(PathBuf::from(s))) @@ -47,7 +55,9 @@ impl std::fmt::Display for PackageRef { match self { Self::LocalPath(path) => write!(f, "{}", path.display()), #[cfg(feature = "registry")] - Self::RegistryPackage(name) => write!(f, "{}", name), + Self::RegistryPackage((name, Some(ver))) => write!(f, "{}@{}", name, ver), + #[cfg(feature = "registry")] + Self::RegistryPackage((name, None)) => write!(f, "{}", name), } } } @@ -93,20 +103,39 @@ impl PlugCommand { let socket_path = match &self.socket { #[cfg(feature = "registry")] - PackageRef::RegistryPackage(name) => { - client - .as_ref() - .ok_or_else(|| { - anyhow::anyhow!( - "Warg registry is not configured. Package `{name}` was not found." - ) - })? - .download(name, &semver::VersionReq::STAR) - .await? - .ok_or_else(|| anyhow::anyhow!("package `{name}` was not found"))? - .path + PackageRef::RegistryPackage((name, version)) => { + let client = client.as_ref().ok_or_else(|| { + anyhow::anyhow!( + "Warg registry is not configured. Package `{name}` was not found." + ) + })?; + + if let Some(ver) = version { + let download = client.download_exact(name, ver).await?; + println!( + "Plugging `{name}` version `{ver}` using registry `{registry}`", + registry = client.url() + ); + download.path + } else { + let download = client + .download(name, &semver::VersionReq::STAR) + .await? + .ok_or_else(|| anyhow::anyhow!("package `{name}` was not found"))?; + + println!( + "Plugging `{name}` version `{ver}` using registry `{registry}`", + ver = &download.version, + registry = client.url() + ); + download.path + } + } + PackageRef::LocalPath(path) => { + println!("Plugging `{path}`", path = path.display()); + + path.clone() } - PackageRef::LocalPath(path) => path.clone(), }; let socket = std::fs::read(socket_path).with_context(|| { format!( @@ -124,7 +153,7 @@ impl PlugCommand { for plug in self.plugs.iter() { let name = match plug { #[cfg(feature = "registry")] - PackageRef::RegistryPackage(name) => std::borrow::Cow::Borrowed(name.as_ref()), + PackageRef::RegistryPackage((name, _)) => std::borrow::Cow::Borrowed(name.as_ref()), PackageRef::LocalPath(path) => path .file_stem() .map(|fs| fs.to_string_lossy()) @@ -140,17 +169,41 @@ impl PlugCommand { for (i, plug_ref) in plug_refs.iter().enumerate() { let (mut name, path) = match plug_ref { #[cfg(feature = "registry")] - PackageRef::RegistryPackage(name) => ( - name.as_ref().to_string(), - client - .as_ref() - .ok_or_else(|| anyhow::anyhow!("Warg registry is not configured. Package `{name}` was not found."))? - .download(name, &semver::VersionReq::STAR) - .await? - .ok_or_else(|| anyhow::anyhow!("package `{name}` was not found"))? - .path, - ), - PackageRef::LocalPath(path) => (format!("plug:{name}"), path.clone()), + PackageRef::RegistryPackage((name, version)) => { + let client = client.as_ref().ok_or_else(|| { + anyhow::anyhow!( + "Warg registry is not configured. Package `{name}` was not found." + ) + })?; + + let path = if let Some(ver) = version { + let download = client.download_exact(name, ver).await?; + println!( + " with `{name}` version `{ver}` using registry `{registry}`", + registry = client.url() + ); + download.path + } else { + let download = client + .download(name, &semver::VersionReq::STAR) + .await? + .ok_or_else(|| anyhow::anyhow!("package `{name}` was not found"))?; + + println!( + " with `{name}` version `{ver}` using registry `{registry}`", + ver = &download.version, + registry = client.url() + ); + download.path + }; + + let name = name.as_ref().to_string(); + (name, path) + } + PackageRef::LocalPath(path) => { + println!(" with `{path}`", path = path.display()); + (format!("plug:{name}"), path.clone()) + } }; // If there's more than one plug with the same name, append an index to the name. if plug_refs.len() > 1 { @@ -199,6 +252,7 @@ impl PlugCommand { "failed to write output file `{path}`", path = path.display() ))?; + println!("\nWrote plugged component: `{path}`", path = path.display()); } None => { std::io::stdout() From dc3081f7bdd7847344a5cd5fdb8ff74cd6a24314 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Fri, 10 May 2024 13:57:14 -0500 Subject: [PATCH 10/11] error variant renamed to `PackageVersionDoesNotExist` --- crates/wac-resolver/src/lib.rs | 8 ++++---- crates/wac-resolver/src/registry.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/wac-resolver/src/lib.rs b/crates/wac-resolver/src/lib.rs index a22f05c7..6ec7a62f 100644 --- a/crates/wac-resolver/src/lib.rs +++ b/crates/wac-resolver/src/lib.rs @@ -65,16 +65,16 @@ pub enum Error { #[label(primary, "package `{name}` does not exist")] span: SourceSpan, }, - /// The requested package version has been yanked or does not exist. + /// The requested package version does not exist. #[cfg(feature = "registry")] - #[error("version {version} of package `{name}` has been yanked or does not exist")] - PackageVersionYankedOrDoesNotExist { + #[error("version {version} of package `{name}` does not exist")] + PackageVersionDoesNotExist { /// The name of the package. name: String, /// The version of the package. version: semver::Version, /// The span where the error occurred. - #[label(primary, "{version} has been yanked or does not exist")] + #[label(primary, "{version} does not exist")] span: SourceSpan, }, /// A package has no releases. diff --git a/crates/wac-resolver/src/registry.rs b/crates/wac-resolver/src/registry.rs index bd6463f9..bf34948c 100644 --- a/crates/wac-resolver/src/registry.rs +++ b/crates/wac-resolver/src/registry.rs @@ -130,7 +130,7 @@ impl RegistryPackageResolver { .await .map_err(|err| match err { ClientError::PackageVersionDoesNotExist { name, version } => { - Error::PackageVersionYankedOrDoesNotExist { + Error::PackageVersionDoesNotExist { name: name.to_string(), version, span, From e28403e04b426727a89e2943f24c7b78a8e519d3 Mon Sep 17 00:00:00 2001 From: Calvin Prewitt Date: Mon, 13 May 2024 07:05:49 -0500 Subject: [PATCH 11/11] switched to `log::debug!` from `println!` for plug subcommand; skipped using the progress bar output when only one thing to do --- crates/wac-resolver/src/registry.rs | 4 ---- src/commands/plug.rs | 14 +++++++------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/crates/wac-resolver/src/registry.rs b/crates/wac-resolver/src/registry.rs index bf34948c..2e36e7fb 100644 --- a/crates/wac-resolver/src/registry.rs +++ b/crates/wac-resolver/src/registry.rs @@ -86,7 +86,6 @@ impl RegistryPackageResolver { // fetch required package logs and return error if any not found if let Some(bar) = self.bar.as_ref() { - bar.init(1); bar.println("Updating", "package logs from the registry"); } @@ -108,9 +107,6 @@ impl RegistryPackageResolver { } if let Some(bar) = self.bar.as_ref() { - bar.inc(1); - bar.finish(); - // download package content if not in cache bar.init(keys.len()); bar.println("Downloading", "package content from the registry"); diff --git a/src/commands/plug.rs b/src/commands/plug.rs index 4539e71f..d0ebaa57 100644 --- a/src/commands/plug.rs +++ b/src/commands/plug.rs @@ -112,7 +112,7 @@ impl PlugCommand { if let Some(ver) = version { let download = client.download_exact(name, ver).await?; - println!( + log::debug!( "Plugging `{name}` version `{ver}` using registry `{registry}`", registry = client.url() ); @@ -123,7 +123,7 @@ impl PlugCommand { .await? .ok_or_else(|| anyhow::anyhow!("package `{name}` was not found"))?; - println!( + log::debug!( "Plugging `{name}` version `{ver}` using registry `{registry}`", ver = &download.version, registry = client.url() @@ -132,7 +132,7 @@ impl PlugCommand { } } PackageRef::LocalPath(path) => { - println!("Plugging `{path}`", path = path.display()); + log::debug!("Plugging `{path}`", path = path.display()); path.clone() } @@ -178,7 +178,7 @@ impl PlugCommand { let path = if let Some(ver) = version { let download = client.download_exact(name, ver).await?; - println!( + log::debug!( " with `{name}` version `{ver}` using registry `{registry}`", registry = client.url() ); @@ -189,7 +189,7 @@ impl PlugCommand { .await? .ok_or_else(|| anyhow::anyhow!("package `{name}` was not found"))?; - println!( + log::debug!( " with `{name}` version `{ver}` using registry `{registry}`", ver = &download.version, registry = client.url() @@ -201,7 +201,7 @@ impl PlugCommand { (name, path) } PackageRef::LocalPath(path) => { - println!(" with `{path}`", path = path.display()); + log::debug!(" with `{path}`", path = path.display()); (format!("plug:{name}"), path.clone()) } }; @@ -252,7 +252,7 @@ impl PlugCommand { "failed to write output file `{path}`", path = path.display() ))?; - println!("\nWrote plugged component: `{path}`", path = path.display()); + log::debug!("\nWrote plugged component: `{path}`", path = path.display()); } None => { std::io::stdout()