Resolve Gitea release downloads
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled

This commit is contained in:
DuProcess
2026-06-20 18:08:13 -04:00
parent 90d9b583c0
commit fbad776441
3 changed files with 86 additions and 9 deletions
+44 -8
View File
@@ -1110,6 +1110,38 @@ fn latest_release_download_url(repo: &str, artifact: &str) -> Option<String> {
Some(format!("{web}/releases/latest/download/{artifact}"))
}
fn latest_release_tag_download_url(repo: &str, artifact: &str) -> Result<Option<String>> {
let web = repo
.strip_suffix(".git")
.unwrap_or(repo)
.trim_end_matches('/');
if !web.starts_with("http://") && !web.starts_with("https://") {
return Ok(None);
}
let output = Command::new("curl")
.arg("-fsSL")
.arg("-o")
.arg("/dev/null")
.arg("-w")
.arg("%{url_effective}")
.arg(format!("{web}/releases/latest"))
.stdin(Stdio::null())
.output()
.with_context(|| format!("resolve latest release for {web}"))?;
if !output.status.success() {
return Ok(None);
}
let effective = String::from_utf8_lossy(&output.stdout);
let prefix = format!("{web}/releases/tag/");
let Some(tag) = effective.strip_prefix(&prefix) else {
return Ok(None);
};
if tag.is_empty() {
return Ok(None);
}
Ok(Some(format!("{web}/releases/download/{tag}/{artifact}")))
}
fn url_reachable(url: &str) -> Result<bool> {
let status = Command::new("curl")
.arg("-fsIL")
@@ -1130,19 +1162,23 @@ fn run_update(config: &dosh::config::ClientConfig, check_only: bool) -> Result<(
let raw_base = raw_base_from_repo(&repo);
let installer = format!("{raw_base}/raw/branch/main/install.sh");
let artifact = release_artifact_name();
let binary_url = latest_release_download_url(&repo, artifact);
if check_only {
println!("dosh {}", env!("CARGO_PKG_VERSION"));
println!("repo: {repo}");
println!("installer: {installer}");
if let Some(binary_url) = &binary_url {
let status = if url_reachable(binary_url)? {
"available"
} else {
"missing"
};
if let Some(latest_url) = latest_release_download_url(&repo, artifact) {
let mut status = "missing";
let mut display_url = latest_url.clone();
if url_reachable(&latest_url)? {
status = "available";
} else if let Some(tag_url) = latest_release_tag_download_url(&repo, artifact)?
&& url_reachable(&tag_url)?
{
status = "available";
display_url = tag_url;
}
println!("prebuilt: {status} ({artifact})");
println!("prebuilt_url: {binary_url}");
println!("prebuilt_url: {display_url}");
} else {
println!("prebuilt: unavailable for non-HTTP repo");
}