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

  1. Check docs/INSTALL.md for the currently supported platform matrix
  2. Build the CLI from source for your platform instead of self-updating
  3. Request platform support in the issue tracker with your OS/arch
  4. 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

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


AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20). Data as JSON: /api/errors/b6cd4265fa8bbac9. Report an issue: GitHub.