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
- Re-run with `MISE_DEBUG=1` to see the child's detailed output and find the underlying failure.
- Inspect the child output printed before this error — the status shown (exit code) points to which step failed.
- Fix the failing task/config in the bootstrap repository, then re-run `mise bootstrap --from <repo>`.
- 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
- Test the bootstrap repository in a VM/container before using it on real machines
- Keep tasks/hooks in the bootstrap repo idempotent and fail-fast with clear messages
- Ensure all tools referenced by the bootstrap config are installable on the target
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
- git command failed with {status}
- exited with non-zero status: {status}
- {display_program} {display_args} failed: exit code {} {}
- {program} {display_args} failed: exit code {} {}
- command exited with non-zero status: {status}
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/af227d82f6b997dd.
Report an issue: GitHub.