Skip to content

Commit 2894458

Browse files
authored
fix(deploy): use JSR latest for deploy CLI (#35493)
Fixes #35481. This changes `deno deploy` to respect the `latest` field from the JSR package metadata for `@deno/deploy`, falling back to the highest version key only if `latest` is absent. That makes the bundled Deploy CLI follow the registry's release pointer instead of deriving one from the version map, so publishing the next `@deno/deploy` release is enough for `deno deploy` to pick it up.
1 parent 9eeca7b commit 2894458

1 file changed

Lines changed: 29 additions & 4 deletions

File tree

cli/tools/deploy.rs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ pub async fn deploy(
5151
)
5252
.await?;
5353
let info = serde_json::from_slice::<JsrPackageInfo>(&file.source)?;
54-
let latest_version = info
55-
.versions
56-
.keys()
57-
.max()
54+
let latest_version = resolve_deploy_cli_version(&info)
5855
.expect("expected @deno/deploy to be published");
5956
Url::parse(&format!("jsr:@deno/deploy@{latest_version}"))
6057
.map_err(ResolveUrlOrPathError::UrlParse)?
@@ -81,6 +78,34 @@ pub async fn deploy(
8178
Ok(worker.run().await?)
8279
}
8380

81+
fn resolve_deploy_cli_version(
82+
info: &JsrPackageInfo,
83+
) -> Option<&deno_semver::Version> {
84+
info.latest.as_ref().or_else(|| info.versions.keys().max())
85+
}
86+
8487
pub fn get_token_entry() -> Result<keyring::Entry, keyring::Error> {
8588
keyring::Entry::new("Deno Deploy Token", "Deno Deploy")
8689
}
90+
91+
#[cfg(test)]
92+
mod tests {
93+
use super::*;
94+
95+
#[test]
96+
fn resolve_deploy_cli_version_uses_jsr_latest() {
97+
let info = serde_json::from_value::<JsrPackageInfo>(serde_json::json!({
98+
"latest": "1.0.0",
99+
"versions": {
100+
"1.0.0": {},
101+
"2.0.0": {}
102+
}
103+
}))
104+
.unwrap();
105+
106+
assert_eq!(
107+
resolve_deploy_cli_version(&info).unwrap().to_string(),
108+
"1.0.0"
109+
);
110+
}
111+
}

0 commit comments

Comments
 (0)