jdx/mise · error

artifactbundle = false conflicts with…

Error message

artifactbundle = false conflicts with spm.artifactbundle_only

What it means

should_try_artifactbundle validates option combinations: if a tool entry sets artifactbundle = false (source-only) while the global setting spm.artifactbundle_only is true, the requirements are contradictory and mise refuses to guess.

Solutions

  1. Remove artifactbundle = false from the tool entry, or
  2. Set spm.artifactbundle_only = false so the per-tool override wins
  3. Pick one policy: either bundles-only globally or per-tool opt-outs

Example fix

// before (mise.toml)
[tools.swiftlint]
version = '0.54.0'
artifactbundle = false
# plus settings: spm.artifactbundle_only = true
// after
[tools.swiftlint]
version = '0.54.0'
# artifactbundle = false removed; obey global bundles-only policy
Defensive patterns

Strategy: validation

Validate before calling

// search configs for conflicting settings
mise settings get spm.artifactbundle_only
grep -n 'artifactbundle' mise.toml .config/mise.toml 2>/dev/null

Prevention

When it happens

Trigger: Calling should_try_artifactbundle with ArtifactBundleMode::SourceOnly while artifactbundle_only is true — i.e. a mise tool config with [tool].artifactbundle = false for a SwiftPM tool plus settings spm.artifactbundle_only = true.

Common situations: A project's mise.toml disables artifact bundles for one tool while a global/company setting mandates artifact bundles for all SwiftPM tools.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/18dde676d779f798. Report an issue: GitHub.

Appendix: source

Thrown at src/backend/spm.rs:647

fn package_revision(tv: &ToolVersion) -> Option<PackageRevision> {
    match &tv.request {
        ToolRequest::Ref { ref_, ref_type, .. } if matches!(ref_type.as_str(), "ref" | "rev") => {
            Some(PackageRevision::Git(ref_.clone()))
        }
        _ => None,
    }
}

fn should_try_artifactbundle(
    revision: &PackageRevision,
    opts: &SpmOptions<'_>,
    mode: ArtifactBundleMode,
    artifactbundle_only: bool,
    display_version: &str,
) -> eyre::Result<bool> {
    if mode == ArtifactBundleMode::SourceOnly && artifactbundle_only {
        bail!("artifactbundle = false conflicts with spm.artifactbundle_only");
    }
    if revision.is_git_revision() && (opts.requires_artifactbundle(mode) || artifactbundle_only) {
        bail!(
            "SwiftPM artifact bundles require a release version; {display_version} selects a Git revision and must be built from source"
        );
    }
    Ok(!revision.is_git_revision() && mode != ArtifactBundleMode::SourceOnly)
}

fn with_install_env(mut command: Expression, tv: &ToolVersion) -> Expression {
    for (key, value) in tv.install_env() {
        command = match value.into_string() {
            Some(value) => command.env(key, value),
            None => command.env_remove(key),
        };
    }
    command
}

View on GitHub (pinned to 533346cc37)