jdx/mise · error
{} install path does not exist: {}. Run `mise install` first
Error message
{} install path does not exist: {}. Run `mise install` first. What it means
For every tool version in the resolved toolset that is NOT reused from the remote cache image, `mise oci build` packs the local install directory into a layer. If `tv.install_path()` is not a directory at that point, the build aborts with the tool name and missing path, telling you to install first (src/oci/builder.rs:334).
Source
Thrown at src/oci/builder.rs:334
// host-native binaries. Warning on reused-only pushes (the CI re-push
// the reuse feature speeds up) would be a false alarm.
let built_tool_count = tool_reuse.iter().filter(|r| r.is_none()).count();
if built_tool_count > 0 && std::env::consts::OS != "linux" {
warn!(
"building on {host} host — {n} tool layer(s) contain {host} binaries that \
will fail with `Exec format error` inside a linux container. Run \
`mise oci build` on a linux host (or in a linux container) for a working image.",
host = std::env::consts::OS,
n = built_tool_count
);
}
for (i, (_, tv)) in versions.iter().enumerate() {
if tool_reuse[i].is_some() {
continue; // layer comes from the cache image; no install needed
}
let install_path = tv.install_path();
if !install_path.is_dir() {
bail!(
"{} install path does not exist: {}. Run `mise install` first.",
tv.style(),
install_path.display()
);
}
}
// --- 3. System package layer (optional) ---
let system_packages_layer = packages::build_system_packages_layer(
&layout,
&base_layers,
&self.system_packages,
platform
.as_ref()
.map(|p| p.architecture.as_str())
.unwrap_or_else(|| crate::oci::normalize_arch(std::env::consts::ARCH)),
)?;
View on GitHub (pinned to 6f52dcdf99)
Solutions
- Run `mise install` in the project, then re-run `mise oci build`
- If a tool should come from the cache image instead, make sure the cache image actually contains that tool/version and the reuse key matches
- Scope the build to installed tools only, or remove the uninstalled tool from the config used for the image
Example fix
# before mise oci build # after mise install && mise oci build
Defensive patterns
Strategy: validation
Validate before calling
#!/usr/bin/env bash # Ensure every configured tool is installed before building the image mise ls --current | awk '$2 != "missing" || NR==1' >/dev/null # mis versions already show install state for t in $(mise ls --current --json | jq -r '.[] | select(.installed == false) | .name + "@" + .version'); do echo "not installed: $t" >&2; exit 1 done mise oci build
Prevention
- Make `mise install` a fixed pre-step of every `mise oci build` in CI
- Treat cache-image reuse as an optimization only — keep local installs intact as the fallback
When it happens
Trigger: Running `mise oci build` on a machine where some mise.toml tools are listed but not installed (fresh checkout, `mise install` never run, partial install, or install dir deleted), and those tools are not already present in the cache image being reused.
Common situations: CI runners building images on clean checkouts; a new tool added to mise.toml after the cache image was pushed; someone ran `mise prune`; MISE_DATA_DIR pointing at a wiped directory.
Related errors
- rustc identity command failed: {}
- {bin} get failed for {server}: {}
- base image {ref_} has {} layers in its manifest but {} diff_
- [dotfiles]."{}": source does not exist: {}
- [dotfiles]."{}": mode symlink-each requires a directory sour
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/62c9d328e01ef31d.
Report an issue: GitHub.