jdx/mise · error

remote bootstrap failed on {} target(s): {}

Error message

remote bootstrap failed on {} target(s):
  {}

What it means

The execution-phase aggregate (src/cli/bootstrap.rs:2393): system::remote::run() failed for one or more hosts, and (without --fail-fast) every host was attempted with each 'name: error chain' collected into one bail. Root causes are connectivity/auth (SSH), staging artifact copy failures, or the remote mise binary missing or erroring.

Source

Thrown at src/cli/bootstrap.rs:2393

            bail!(
                "remote bootstrap configuration is invalid for {} target(s):\n  {}",
                configuration_errors.len(),
                configuration_errors.join("\n  ")
            );
        }
        let mut failures = vec![];
        let mut artifacts = system::remote::RemoteArtifactResolver::default();
        for host in selected.values() {
            if let Err(error) = system::remote::run(host, &options, &mut artifacts).await {
                error!("remote bootstrap failed on {}: {error:#}", host.name);
                failures.push(format!("{}: {error:#}", host.name));
                if self.fail_fast {
                    break;
                }
            }
        }
        if !failures.is_empty() {
            bail!(
                "remote bootstrap failed on {} target(s):\n  {}",
                failures.len(),
                failures.join("\n  ")
            );
        }
        info!("remote bootstrap completed on {} target(s)", selected.len());
        Ok(())
    }
}

fn select_remote_inventory(
    inventory: &indexmap::IndexMap<String, system::remote::RemoteHost>,
    targets: &[String],
    all: bool,
    tags: &[String],
) -> Result<indexmap::IndexMap<String, system::remote::RemoteHost>> {
    let mut selected = indexmap::IndexMap::new();
    for target in targets {

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Reproduce on the first failing host: ssh -p <port> user@host - fix connectivity/auth before anything else
  2. Verify mise remotely: ssh user@host mise --version; install it or pass --mise-bin /path/to/mise
  3. Re-run only the failed subset (name or --tag) once fixed
  4. Add --fail-fast when you want the first error immediately instead of a full report

Example fix

# before
mise bootstrap remote --all
# Error: remote bootstrap failed on 2 target(s): web1: ..., web2: ...

# after (isolate, fix, re-run)
ssh deploy@web1            # fix connectivity / mise install
mise bootstrap remote web1
mise bootstrap remote --all
Defensive patterns

Strategy: retry

Validate before calling

# bash: pre-flight SSH connectivity per host before the fan-out
for h in "${HOSTS[@]}"; do
  ssh -o BatchMode=yes -o ConnectTimeout=5 "$h" true || { echo "unreachable: $h" >&2; exit 1; }
done

Prevention

When it happens

Trigger: Unreachable or firewalled hosts; SSH key rejection or wrong user; wrong --port; remote host missing mise (or --mise-bin path wrong); remote command exiting non-zero; disk full in the remote staging dir.

Common situations: Fleet fan-outs where one node is down; first bootstrap on hosts without mise installed; stale known_hosts; rate-limited or proxied SSH.

Related errors


AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17). Data as JSON: /api/errors/2e6f83669f0a7bdf. Report an issue: GitHub.