Clarify remote-only update checks
ci / test (push) Canceled after 0s
ci / fuzz-smoke (push) Canceled after 0s
ci / macos-client (macos-aarch64, macos-14) (push) Canceled after 0s
ci / macos-client (macos-x86_64, macos-13) (push) Canceled after 0s
ci / windows-client (push) Canceled after 0s
ci / package-release (linux-x86_64, ubuntu-latest, , , ) (push) Canceled after 0s
ci / package-release (macos-aarch64, macos-14, , , ) (push) Canceled after 0s
ci / package-release (macos-x86_64, macos-13, , , ) (push) Canceled after 0s
ci / package-release (windows-aarch64, windows-latest, aarch64, windows, aarch64-pc-windows-msvc) (push) Canceled after 0s
ci / package-release (windows-x86_64, windows-latest, , , ) (push) Canceled after 0s
ci / remote-bench (push) Canceled after 0s
ci / publish-gitea-release (push) Canceled after 0s

This commit is contained in:
DuProcess
2026-07-16 22:59:18 -04:00
parent 8bfec4650e
commit aa61f4acf1
+72 -4
View File
@@ -4548,9 +4548,13 @@ fn run_update(
}
None => println!("latest: unknown"),
}
if let Some(latest_url) =
local_installer_role.and_then(|_| latest_release_download_url(&repo, &artifact))
{
match local_prebuilt_check_target(
local_installer_role,
update_remote_server,
&repo,
&artifact,
) {
LocalPrebuiltCheckTarget::Url(latest_url) => {
let mut status = "missing";
let mut display_url = latest_url.clone();
if let Some(tag_url) =
@@ -4567,9 +4571,14 @@ fn run_update(
}
println!("prebuilt: {status} ({artifact})");
println!("prebuilt_url: {display_url}");
} else {
}
LocalPrebuiltCheckTarget::NonHttpRepo => {
println!("prebuilt: unavailable for non-HTTP repo");
}
LocalPrebuiltCheckTarget::RemoteOnly => {
println!("prebuilt: skipped for remote-only update");
}
}
return Ok(());
}
let update_cache = dirs::cache_dir()
@@ -4605,6 +4614,31 @@ fn run_update(
Ok(())
}
#[derive(Debug, Clone, PartialEq, Eq)]
enum LocalPrebuiltCheckTarget {
Url(String),
NonHttpRepo,
RemoteOnly,
}
fn local_prebuilt_check_target(
local_installer_role: Option<&str>,
update_remote_server: bool,
repo: &str,
artifact: &str,
) -> LocalPrebuiltCheckTarget {
if local_installer_role.is_none() {
return if update_remote_server {
LocalPrebuiltCheckTarget::RemoteOnly
} else {
LocalPrebuiltCheckTarget::NonHttpRepo
};
}
latest_release_download_url(repo, artifact)
.map(LocalPrebuiltCheckTarget::Url)
.unwrap_or(LocalPrebuiltCheckTarget::NonHttpRepo)
}
fn run_update_installer(
config: &dosh::config::ClientConfig,
repo: &str,
@@ -13139,6 +13173,40 @@ mod tests {
assert!(!UpdateRole::Both.updates_remote_server_from_os("linux"));
}
#[test]
fn update_check_distinguishes_remote_only_from_missing_local_prebuilt() {
assert_eq!(
super::local_prebuilt_check_target(
Some("client"),
false,
"https://git.palav.dev/Palav/dosh.git",
"dosh-windows-x86_64.zip",
),
super::LocalPrebuiltCheckTarget::Url(
"https://git.palav.dev/Palav/dosh/releases/latest/download/dosh-windows-x86_64.zip"
.to_string()
)
);
assert_eq!(
super::local_prebuilt_check_target(
Some("client"),
false,
"git@git.palav.dev:Palav/dosh.git",
"dosh-windows-x86_64.zip",
),
super::LocalPrebuiltCheckTarget::NonHttpRepo
);
assert_eq!(
super::local_prebuilt_check_target(
UpdateRole::Server.local_installer_arg_for_os("windows"),
UpdateRole::Server.updates_remote_server_from_os("windows"),
"https://git.palav.dev/Palav/dosh.git",
"dosh-windows-x86_64.zip",
),
super::LocalPrebuiltCheckTarget::RemoteOnly
);
}
#[test]
fn update_scripts_are_native_to_the_platform() {
let config = ClientConfig {