tonhowtf/omniget · error · anyhow::Error

release de nao tem um asset para este sistema

Error message

release {} de {} nao tem um asset para este sistema

What it means

The release was fetched and has assets, but none matched the `pick` predicate for the current platform — for the Spicetify CLI this means no asset matches the OS/arch suffix produced by `cli_asset_suffix`. The tag and repo are named so the developer knows which release lacked a compatible binary.

Solutions

  1. Confirm the current OS/arch has an upstream asset (Spicetify publishes linux-amd64, darwin-amd64/arm64, windows-x64)
  2. On unsupported Linux arch, install spicetify via the system package manager or build from source
  3. Check the release's asset names on GitHub and update the `pick` predicate to match new naming
  4. Pin to an older release tag that still ships the needed asset

Example fix

// before
let suffix = cli_asset_suffix()?; // Err on linux aarch64
// after
let suffix = cli_asset_suffix().unwrap_or_else(|_| {
    eprintln!("Spicetify CLI binary not available for this arch; install via package manager");
    std::process::exit(1);
});
Defensive patterns

Strategy: fallback

Validate before calling

let target = format!("{}-{}", std::env::consts::OS, std::env::consts::ARCH);
eprintln!("looking for asset for {target}; verify upstream publishes one");

Try / catch

match cli_asset_suffix() {
    Ok(s) => latest_asset(&client, repo, move |n| n.ends_with(s)).await,
    Err(_) => Err(anyhow!("unsupported platform — install via package manager")),
}

Prevention

When it happens

Trigger: `latest_asset` with a `pick` closure (e.g. `|n| n.ends_with("linux-amd64.tar.gz")`) looping over all asset names without a match — unusual Linux arch (ARM), renamed assets in a new release, or a repo that stopped publishing binaries for this platform.

Common situations: Running on Linux ARM/ARM64 where Spicetify publishes no CLI binary; a new upstream release renamed its assets; a fork used whose assets differ from upstream.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12). Data as JSON: /api/errors/b53736eab45d568b. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/omniget-core/src/core/spicetify.rs:409

        .as_array()
        .ok_or_else(|| anyhow!("release de {} sem assets", repo))?;
    for asset in assets {
        let name = asset["name"].as_str().unwrap_or("");
        if pick(name) {
            return Ok(ReleaseAsset {
                tag: tag.clone(),
                name: name.to_string(),
                url: asset["browser_download_url"]
                    .as_str()
                    .unwrap_or("")
                    .to_string(),
                digest: asset["digest"]
                    .as_str()
                    .and_then(integrity::parse_github_digest),
            });
        }
    }
    Err(anyhow!(
        "release {} de {} nao tem um asset para este sistema",
        tag,
        repo
    ))
}

async fn download_verified(
    client: &reqwest::Client,
    asset: &ReleaseAsset,
) -> anyhow::Result<Vec<u8>> {
    let response = client.get(&asset.url).send().await?;
    if !response.status().is_success() {
        return Err(anyhow!(
            "download de {} falhou: HTTP {}",
            asset.name,
            response.status()
        ));
    }

View on GitHub (pinned to 8600b91f42)