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
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:
+86
-18
@@ -4548,27 +4548,36 @@ fn run_update(
|
||||
}
|
||||
None => println!("latest: unknown"),
|
||||
}
|
||||
if let Some(latest_url) =
|
||||
local_installer_role.and_then(|_| latest_release_download_url(&repo, &artifact))
|
||||
{
|
||||
let mut status = "missing";
|
||||
let mut display_url = latest_url.clone();
|
||||
if let Some(tag_url) =
|
||||
effective_update_artifact_tag(local_version, latest_tag.as_deref())
|
||||
.as_deref()
|
||||
.and_then(|tag| release_tag_download_url(&repo, tag, &artifact))
|
||||
{
|
||||
display_url = tag_url;
|
||||
if url_reachable(&display_url)? {
|
||||
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) =
|
||||
effective_update_artifact_tag(local_version, latest_tag.as_deref())
|
||||
.as_deref()
|
||||
.and_then(|tag| release_tag_download_url(&repo, tag, &artifact))
|
||||
{
|
||||
display_url = tag_url;
|
||||
if url_reachable(&display_url)? {
|
||||
status = "available";
|
||||
}
|
||||
} else if url_reachable(&latest_url)? {
|
||||
status = "available";
|
||||
}
|
||||
} else if url_reachable(&latest_url)? {
|
||||
status = "available";
|
||||
println!("prebuilt: {status} ({artifact})");
|
||||
println!("prebuilt_url: {display_url}");
|
||||
}
|
||||
LocalPrebuiltCheckTarget::NonHttpRepo => {
|
||||
println!("prebuilt: unavailable for non-HTTP repo");
|
||||
}
|
||||
LocalPrebuiltCheckTarget::RemoteOnly => {
|
||||
println!("prebuilt: skipped for remote-only update");
|
||||
}
|
||||
println!("prebuilt: {status} ({artifact})");
|
||||
println!("prebuilt_url: {display_url}");
|
||||
} else {
|
||||
println!("prebuilt: unavailable for non-HTTP repo");
|
||||
}
|
||||
return Ok(());
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user