Hmbown/CodeWhale · error · anyhow::Error

Linux riscv64 release assets are temporarily unavailable bec

Error message

Linux riscv64 release assets are temporarily unavailable because rquickjs-sys 0.12.0 does not ship riscv64gc-unknown-linux-gnu bindings. See docs/INSTALL.md for the current platform matrix.

What it means

ensure_supported_release_target hard-refuses linux/riscv64 self-updates: rquickjs-sys 0.12.0 does not ship prebuilt riscv64gc-unknown-linux-gnu bindings, so no release asset exists for that target and the updater stops with a pointer to docs/INSTALL.md. This is a deliberate, documented platform gap rather than a transient failure.

Source

Thrown at crates/cli/src/update.rs:952

    let bytes = fetch_manifest(candidate)
        .with_context(|| format!("failed to fetch {}", candidate.manifest_url))?;
    let text = std::str::from_utf8(&bytes)
        .with_context(|| format!("{} is not valid UTF-8", candidate.manifest_url))?;
    let checksums = parse_checksum_manifest(text)
        .with_context(|| format!("failed to parse {}", candidate.manifest_url))?;
    if !checksums.contains_key(&candidate.binary_name) {
        bail!(
            "{} does not list {}",
            candidate.manifest_url,
            candidate.binary_name
        );
    }
    Ok(checksums)
}

fn ensure_supported_release_target(os: &str, arch: &str) -> Result<()> {
    if os == "linux" && arch == "riscv64" {
        bail!(
            "Linux riscv64 release assets are temporarily unavailable because \
             rquickjs-sys 0.12.0 does not ship riscv64gc-unknown-linux-gnu bindings. \
             See docs/INSTALL.md for the current platform matrix."
        );
    }
    Ok(())
}

pub(crate) fn release_arch_for_rust_arch(arch: &str) -> &str {
    match arch {
        "aarch64" => "arm64",
        "x86_64" => "x64",
        other => other,
    }
}

/// Returns true when the binary name belongs to the pre-rebrand `deepseek-tui` era.
pub(crate) fn is_legacy_binary(current_exe: &Path) -> bool {

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Use the CLI on a supported architecture (see the matrix in docs/INSTALL.md)
  2. Run under emulation/qemu-user with a supported arch if you must stay on this host
  3. Track the issue tracker for riscv64 support and upgrade once a release ships bindings
  4. Do not retry: this refusal is deterministic until the platform matrix changes

Example fix

// before
if let Some(cmd) = parse_cli() {
    if cmd.is_update() {
        run_update()?; // bails on linux/riscv64
    }
}

// after
fn release_target_supported() -> bool {
    !(std::env::consts::OS == "linux" && std::env::consts::ARCH == "riscv64")
}

if cmd.is_update() {
    if !release_target_supported() {
        eprintln!("self-update unavailable on this platform; see docs/INSTALL.md");
    } else {
        run_update()?;
    }
}
Defensive patterns

Strategy: validation

Validate before calling

fn release_target_supported() -> bool {
    !cfg!(all(target_os = "linux", target_arch = "riscv64"))
        && !(std::env::consts::OS == "linux" && std::env::consts::ARCH == "riscv64")
}

if !release_target_supported() {
    eprintln!("self-update unavailable on linux/riscv64; see docs/INSTALL.md");
    return Ok(());
}

Type guard

fn is_supported_release_target() -> bool {
    !(std::env::consts::OS == "linux" && std::env::consts::ARCH == "riscv64")
}

Try / catch

Prefer guarding before the call; if the error is reached anyway, catch it and show the docs/INSTALL.md pointer verbatim - the refusal is deterministic, so do not retry.

Prevention

When it happens

Trigger: Invoking self-update (or anything that validates the release target) on Linux riscv64 - ensure_supported_release_target sees os == "linux" && arch == "riscv64" and bails before any network work.

Common situations: Users on riscv64 hardware or SBCs/containers reporting riscv64 trying the in-app updater.

Related errors


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