Hmbown/CodeWhale · error · anyhow::Error
no release source publishes an asset for this platform
Error message
no release source publishes an asset for this platform
What it means
select_release_source was called with zero candidate release sources, meaning no configured source publishes an asset matching this platform (OS/arch combination). There is nothing to probe, so the update cannot proceed.
Source
Thrown at crates/cli/src/update.rs:895
MANIFEST_PROBE_TIMEOUT,
)
})
}
/// Probe every candidate at once and take the first one that answers with a
/// usable manifest.
///
/// "First" means first to *return*, not first in the list and not whichever one
/// survives a timeout: a source that is slow or unreachable simply loses, and a
/// source that answers with a manifest that does not cover this platform's
/// binary loses too. Once a winner is chosen its receiver is dropped, so a
/// straggler's result has nowhere to land and is ignored.
fn select_release_source(
candidates: Vec<ReleaseSourceCandidate>,
fetch_manifest: Arc<ManifestFetcher>,
) -> Result<DownloadPlan> {
if candidates.is_empty() {
bail!("no release source publishes an asset for this platform");
}
let (result_tx, result_rx) = mpsc::channel();
for candidate in candidates {
let result_tx = result_tx.clone();
let fetch_manifest = Arc::clone(&fetch_manifest);
thread::spawn(move || {
let outcome = probe_release_source(&candidate, &*fetch_manifest);
let _ = result_tx.send((candidate, outcome));
});
}
drop(result_tx);
let mut failures = Vec::new();
while let Ok((candidate, outcome)) = result_rx.recv() {
match outcome {
Ok(checksums) => {
return Ok(DownloadPlan {View on GitHub (pinned to 0c42157ee5)
Solutions
- Check docs/INSTALL.md for the currently supported platform matrix
- Build the CLI from source for your platform instead of self-updating
- Request platform support in the issue tracker with your OS/arch
- If assets were expected, verify the latest release actually published files for your target
Defensive patterns
Strategy: validation
Validate before calling
fn platform_has_release_assets() -> bool {
let (os, arch) = (std::env::consts::OS, std::env::consts::ARCH);
// mirror docs/INSTALL.md's matrix
matches!((os, arch),
("linux", "x86_64") | ("linux", "aarch64")
| ("macos", "x86_64") | ("macos", "aarch64")
| ("windows", "x86_64") | ("android", "aarch64"))
&& !matches!((os, arch), ("linux", "riscv64"))
}
if !platform_has_release_assets() {
eprintln!("no release assets for {}/{}; build from source", std::env::consts::OS, std::env::consts::ARCH);
} Try / catch
Catch the empty-candidates error and branch to a from-source build path or a clear 'unsupported platform' message instead of retrying.
Prevention
- Check the platform matrix in docs/INSTALL.md before enabling self-update
- Gate update UI on supported OS/arch pairs
- Track release notes for platform additions/drops
When it happens
Trigger: Running self-update on a platform outside the release matrix: the OS/arch pair matches no release asset name, so no ReleaseSourceCandidate is built (note this path is separate from the explicit riscv64 refusal in ensure_supported_release_target).
Common situations: Niche or newly added architectures, renamed asset naming schemes, or a release cycle where assets for that platform were dropped.
Related errors
- Android dladdr could not locate the updater's loaded image
- Android dladdr returned an empty loaded-image path
- {} from {} does not list {}; refusing to download an unverif
- no release source published a usable {CHECKSUM_MANIFEST_ASSE
- {} does not list {}
AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20).
Data as JSON: /api/errors/b6cd4265fa8bbac9.
Report an issue: GitHub.