{"record":{"id":"62c9d328e01ef31d","repo":"jdx/mise","slug":"install-path-does-not-exist-run-mise-inst","errorCode":null,"errorMessage":"{} install path does not exist: {}. Run `mise install` first.","messagePattern":"(.+?) install path does not exist: (.+?)\\. Run `mise install` first\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/oci/builder.rs","lineNumber":334,"sourceCode":"        // host-native binaries. Warning on reused-only pushes (the CI re-push\n        // the reuse feature speeds up) would be a false alarm.\n        let built_tool_count = tool_reuse.iter().filter(|r| r.is_none()).count();\n        if built_tool_count > 0 && std::env::consts::OS != \"linux\" {\n            warn!(\n                \"building on {host} host — {n} tool layer(s) contain {host} binaries that \\\n                 will fail with `Exec format error` inside a linux container. Run \\\n                 `mise oci build` on a linux host (or in a linux container) for a working image.\",\n                host = std::env::consts::OS,\n                n = built_tool_count\n            );\n        }\n        for (i, (_, tv)) in versions.iter().enumerate() {\n            if tool_reuse[i].is_some() {\n                continue; // layer comes from the cache image; no install needed\n            }\n            let install_path = tv.install_path();\n            if !install_path.is_dir() {\n                bail!(\n                    \"{} install path does not exist: {}. Run `mise install` first.\",\n                    tv.style(),\n                    install_path.display()\n                );\n            }\n        }\n\n        // --- 3. System package layer (optional) ---\n        let system_packages_layer = packages::build_system_packages_layer(\n            &layout,\n            &base_layers,\n            &self.system_packages,\n            platform\n                .as_ref()\n                .map(|p| p.architecture.as_str())\n                .unwrap_or_else(|| crate::oci::normalize_arch(std::env::consts::ARCH)),\n        )?;\n","sourceCodeStart":316,"sourceCodeEnd":352,"githubUrl":"https://github.com/jdx/mise/blob/6f52dcdf99e282ef7a7db68c81301fa4618d0f79/src/oci/builder.rs#L316-L352","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"# before\nmise oci build\n# after\nmise install && mise oci build","handlingStrategy":"validation","validationCode":"#!/usr/bin/env bash\n# Ensure every configured tool is installed before building the image\nmise ls --current | awk '$2 != \"missing\" || NR==1' >/dev/null  # mis versions already show install state\nfor t in $(mise ls --current --json | jq -r '.[] | select(.installed == false) | .name + \"@\" + .version'); do\n  echo \"not installed: $t\" >&2; exit 1\ndone\nmise oci build","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["oci","mise-install","toolchain","build"],"backgroundTag":"missing-tool-install","analyzedSha":"6f52dcdf99e282ef7a7db68c81301fa4618d0f79","analyzedAt":"2026-08-22T10:14:23.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}