jdx/mise · error

bootstrap from repository failed with {status}

Error message

bootstrap from repository failed with {status}

What it means

Thrown when the child bootstrap process spawned from a repository checkout (run via `run_child_bootstrap`) exits with a non-zero status. mise passes the checkout path in `MISE_TRUSTED_CONFIG_PATHS`, runs the command, and if `status.success()` is false it reports the raw exit status so the underlying failure can be diagnosed.

Source

Thrown at src/cli/bootstrap.rs:2011

                if let Some(file_name) = crate::env::MISE_GLOBAL_CONFIG_FILE
                    .as_deref()
                    .and_then(Path::file_name)
                {
                    command.env("MISE_GLOBAL_CONFIG_FILE", checkout.join(file_name));
                }
            }
        }

        let mut trusted = std::env::split_paths(
            &std::env::var_os("MISE_TRUSTED_CONFIG_PATHS").unwrap_or_default(),
        )
        .collect::<Vec<_>>();
        trusted.push(checkout);
        command.env("MISE_TRUSTED_CONFIG_PATHS", std::env::join_paths(trusted)?);
        let status = command.status()?;
        if !status.success() {
            bail!("bootstrap from repository failed with {status}");
        }
        Ok(())
    }

    async fn run_hooks(
        &self,
        config: &Config,
        hooks: &[hooks::BootstrapHook],
        phase: BootstrapHookPhase,
    ) -> Result<()> {
        // Recorded before the hooks run: a hook that fails may still have
        // changed the machine.
        run_bootstrap_hooks(config, hooks, phase, self.dry_run).await
    }

    fn skip_parts(&self) -> HashSet<BootstrapPart> {
        if self.only.is_empty() {
            self.skip.iter().copied().collect()

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Re-run with `MISE_DEBUG=1` to see the child's detailed output and find the underlying failure.
  2. Inspect the child output printed before this error — the status shown (exit code) points to which step failed.
  3. Fix the failing task/config in the bootstrap repository, then re-run `mise bootstrap --from <repo>`.
  4. Verify the repository contents work by running its tasks manually before bootstrapping from it.

Example fix

// diagnose the underlying child failure
// before
mise bootstrap --from git@github.com:me/dotfiles.git
// bootstrap from repository failed with exit status: 1
// after
MISE_DEBUG=1 mise bootstrap --from git@github.com:me/dotfiles.git
Defensive patterns

Strategy: retry

Validate before calling

# validate the repo checkout's configs are parseable first
MISE_DEBUG=1 mise bootstrap --from "$REPO" --dry-run 2>&1 | tee /tmp/bootstrap.log

Try / catch

if ! mise bootstrap --from "$REPO"; then
  echo "child bootstrap failed; inspect output above and fix the repo" >&2
  exit 1
fi

Prevention

When it happens

Trigger: The child `mise bootstrap` process launched against the trusted repository checkout exits non-zero — e.g. the bootstrapped config fails to parse, an install script fails, or the child itself bails on any bootstrap error.

Common situations: Broken or untrusted dotfiles repository contents; a bootstrap hook/task failing during the fresh-machine run; missing tools referenced by the bootstrap config; network failure while the child fetches tools.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/af227d82f6b997dd. Report an issue: GitHub.