jdx/mise · error · eyre::Report
artifactbundle_asset must end with .artifactbundle.zip, got
Error message
artifactbundle_asset must end with .artifactbundle.zip, got {name} What it means
When a spm tool pins `artifactbundle_asset`, the asset name must end with `.artifactbundle.zip` (checked case-insensitively elsewhere). This error means the configured name fails that suffix check, so mise rejects the selection before looking at the release.
Source
Thrown at src/backend/spm.rs:924
})
.collect()
})
}
};
let Some(assets) = assets else {
return Ok(None);
};
select_artifactbundle_asset(assets, opts)
}
fn select_artifactbundle_asset(
assets: Vec<ArtifactBundleReleaseAsset>,
opts: &SpmOptions<'_>,
) -> eyre::Result<Option<ArtifactBundleReleaseAsset>> {
let artifactbundle_asset = opts.artifactbundle_asset(None);
if let Some(name) = artifactbundle_asset {
if !is_artifactbundle_zip(&name) {
bail!("artifactbundle_asset must end with .artifactbundle.zip, got {name}");
}
return assets
.into_iter()
.find(|a| a.name == name)
.map(Some)
.ok_or_else(|| {
eyre::eyre!("artifactbundle_asset not found in release assets: {name}")
});
}
let candidates = assets
.into_iter()
.filter(|a| is_artifactbundle_zip(&a.name))
.collect::<Vec<_>>();
match candidates.len() {
0 => Ok(None),
1 => Ok(candidates.into_iter().next()),
_ => bail!(View on GitHub (pinned to 6f52dcdf99)
Solutions
- Copy the exact asset filename from the release; it must end with .artifactbundle.zip
- If the release only has a plain tarball/zip, that asset cannot be used as a bundle — remove artifactbundle_asset and use source build or another backend
- Check for trailing spaces or wrong extension when hand-typing the name
Example fix
# before [tools."spm:foo/bar"] version = "1.0.0" artifactbundle_asset = "Bar-macos.artifactbundle" # after [tools."spm:foo/bar"] version = "1.0.0" artifactbundle_asset = "Bar-macos.artifactbundle.zip"
Defensive patterns
Strategy: validation
Validate before calling
name='Bar-macos.artifactbundle.zip'; case "${name,,}" in *.artifactbundle.zip) echo ok;; *) echo 'must end with .artifactbundle.zip';; esac Type guard
fn is_artifactbundle_zip(name: &str) -> bool { name.to_lowercase().ends_with(".artifactbundle.zip") } Prevention
- Copy asset names verbatim from the GitHub release page
- Only .artifactbundle.zip assets are bundles; plain zips need a different mechanism
When it happens
Trigger: `artifactbundle_asset = "Repo-1.0.0.tar.gz"`, `"Repo.artifactbundle.tar.gz"`, or `"Repo.artifactbundle"` — anything not ending in .artifactbundle.zip.
Common situations: Guessing the asset name instead of copying it from the GitHub release page, or targeting a plain zip the project publishes alongside its bundles.
Understand the failure class
Background: Config validation failed: what "invalid value for {key}" and settings-rejection errors mean across 19 open-source libraries — this error's family across 19 libraries.
Related errors
- artifactbundle must be true, false, 1, or 0, got {value}
- install_command must be a non-empty string
- install_command cannot be used with filter_bins
- No matching SwiftPM artifact bundle found for {}
- No matching SwiftPM artifact bundle found for {}, but spm.ar
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/930892138c8c560e.
Report an issue: GitHub.