Skip to content

Commit 30beb6f

Browse files
fix(cli): tauri info can't find the latest version for rust crates (#13096)
* fix(cli): `tauri info` can't find the latest version for rust crates * Forget to remove dbg! * Use strip_suffix * Add change file
1 parent 22c7a87 commit 30beb6f

5 files changed

Lines changed: 51 additions & 24 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-cli": patch:bug
3+
---
4+
5+
Fix `tauri info` can't find the latest version for rust crates
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-cli": patch:bug
3+
---
4+
5+
Fix `tauri info` logging network operations in `info` level instead of `debug`

Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/tauri-cli/src/helpers/cargo_manifest.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,30 @@ impl std::fmt::Display for CrateVersion {
9797
}
9898
}
9999

100+
// Reference: https://github.com/rust-lang/crates.io/blob/98c83c8231cbcd15d6b8f06d80a00ad462f71585/src/views.rs#L274
101+
#[derive(serde::Deserialize)]
102+
struct CrateMetadata {
103+
/// The "default" version of this crate.
104+
///
105+
/// This version will be displayed by default on the crate's page.
106+
pub default_version: Option<String>,
107+
}
108+
109+
// Reference: https://github.com/rust-lang/crates.io/blob/98c83c8231cbcd15d6b8f06d80a00ad462f71585/src/controllers/krate/metadata.rs#L44
110+
#[derive(serde::Deserialize)]
111+
struct CrateIoGetResponse {
112+
/// The crate metadata.
113+
#[serde(rename = "crate")]
114+
krate: CrateMetadata,
115+
}
116+
100117
pub fn crate_latest_version(name: &str) -> Option<String> {
101-
let url = format!("https://docs.rs/crate/{name}/");
102-
let response = ureq::get(&url).call().ok()?;
103-
if response.status().is_redirection() {
104-
if let Some(location) = response.headers().get("location") {
105-
return location.to_str().ok().map(|s| s.replace(&url, ""));
106-
}
107-
}
108-
None
118+
// Reference: https://github.com/rust-lang/crates.io/blob/98c83c8231cbcd15d6b8f06d80a00ad462f71585/src/controllers/krate/metadata.rs#L88
119+
let url = format!("https://crates.io/api/v1/crates/{name}?include");
120+
let mut response = ureq::get(&url).call().ok()?;
121+
let metadata: CrateIoGetResponse =
122+
serde_json::from_reader(response.body_mut().as_reader()).unwrap();
123+
metadata.krate.default_version
109124
}
110125

111126
pub fn crate_version(

crates/tauri-cli/src/info/packages_rust.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,20 @@ pub fn items(frontend_dir: Option<&PathBuf>, tauri_dir: Option<&Path>) -> Vec<Se
4747
if o.status.success() {
4848
let out = String::from_utf8_lossy(o.stdout.as_slice());
4949
let (package, version) = out.split_once(' ').unwrap_or_default();
50-
let latest_ver = crate_latest_version(package).unwrap_or_default();
50+
let version = version.strip_suffix('\n').unwrap_or(version);
51+
let latest_version = crate_latest_version(package).unwrap_or_default();
5152
format!(
52-
"{} {}: {}{}",
53-
package,
54-
"🦀",
55-
version.split_once('\n').unwrap_or_default().0,
56-
if !(version.is_empty() || latest_ver.is_empty()) {
57-
let version = semver::Version::parse(version).unwrap();
58-
let target_version = semver::Version::parse(latest_ver.as_str()).unwrap();
53+
"{package} 🦀: {version}{}",
54+
if !(version.is_empty() || latest_version.is_empty()) {
55+
let current_version = semver::Version::parse(version).unwrap();
56+
let target_version = semver::Version::parse(latest_version.as_str()).unwrap();
5957

60-
if version < target_version {
61-
format!(" ({}, latest: {})", "outdated".yellow(), latest_ver.green())
58+
if current_version < target_version {
59+
format!(
60+
" ({}, latest: {})",
61+
"outdated".yellow(),
62+
latest_version.green()
63+
)
6264
} else {
6365
"".into()
6466
}

0 commit comments

Comments
 (0)