jdx/mise · error
bootstrap from repository failed with
Error message
bootstrap from repository failed with {status} What it means
mise's `mise bootstrap` command re-executes itself (or another bootstrap binary) as a child process to run repository hooks with a prepared environment. This error is thrown when that spawned child process exits with a non-zero status code, meaning the inner bootstrap run failed. It propagates the child's exit status into the parent's error message.
Solutions
- Rerun the bootstrap command directly (without the wrapper) to see the real underlying error from the child process
- Check that the checkout directory is trusted (`mise trust <path>`) since MISE_TRUSTED_CONFIG_PATHS is set to include it
- Inspect hook scripts and repo config for failures that would make the child exit non-zero
- Set MISE_DEBUG=1 to see the child's full output
Defensive patterns
Strategy: try-catch
Validate before calling
mise bootstrap --dry-run # or run the inner bootstrap step directly first
Try / catch
match result { Err(e) if e.contains("bootstrap from repository failed") => inspect child logs, Ok(_) => continue } Prevention
- Trust the checkout directory before bootstrapping
- Test hooks locally before adding them to the repo
- Run bootstrap with MISE_DEBUG=1 to capture child output
When it happens
Trigger: Running `mise bootstrap` from a checkout: `command.status()` returns a non-success ExitStatus from the re-invoked bootstrap process, so `bail!` fires in the bootstrap-from-repository path.
Common situations: The inner mise run hits a trust error, a failing hook script, a bad config file, or any of the usual bootstrap failures — the parent just surfaces the exit code. Also occurs when git/hooks fail inside the child (e.g. untrusted checkout paths).
Understand the failure class
Background: "git command failed": what it means when a tool shells out to git and git exits non-zero — this error's family across 21 libraries.
Related errors
- bootstrap plan contains resources with unknown state
- command exited with non-zero status
- --connect-timeout must be greater than zero
- failed: exit code
- {} {err}
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/af227d82f6b997dd.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/bootstrap.rs:1993
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 533346cc37)