{"record":{"id":"1e692afb7d0a2b79","repo":"jdx/mise","slug":"brew-is-not-available-1e692a","errorCode":null,"errorMessage":"brew is not available: {}","messagePattern":"brew is not available: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/system/prune.rs","lineNumber":133,"sourceCode":"        }\n        if !self.yes && !Settings::get().yes && console::user_attended_stderr() {\n            let msg = format!(\"{}: prune {}?\", self.manager, remove.join(\", \"));\n            if !prompt::confirm(msg)?.is_yes() {\n                info!(\"{}: skipped\", self.manager);\n                return Ok(());\n            }\n        }\n        let removed = manager.apply_prune_plan(&plan).await?;\n        info!(\"{}: pruned {removed} packages\", self.manager);\n        Ok(())\n    }\n\n    #[cfg(unix)]\n    async fn run_brew(self) -> Result<()> {\n        debug_assert_eq!(self.manager, \"brew\");\n        let manager = brew::BrewManager::new();\n        if !manager.is_available() {\n            bail!(\"brew is not available: {}\", manager.unavailable_reason());\n        }\n        let config = Config::get().await?;\n        let packages = system::packages_from_config_and_tracked_config_files(&config).await?;\n        let mut configured = packages\n            .iter()\n            .find(|mp| mp.manager.name() == \"brew\")\n            .map(|mp| mp.requests.clone())\n            .unwrap_or_default();\n        let configured_casks = packages\n            .iter()\n            .find(|mp| mp.manager.name() == \"brew-cask\")\n            .map(|mp| mp.requests.as_slice())\n            .unwrap_or_default();\n        configured.extend(brew::cask_formula_dependencies(configured_casks).await?);\n        let plan = brew::prune_plan(&configured).await?;\n        if plan.is_empty() {\n            info!(\"brew: nothing to prune\");\n            return Ok(());","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/system/prune.rs#L115-L151","documentation":"The brew branch of `mise bootstrap packages prune` first checks that Homebrew is usable via `BrewManager::is_available()`; if not, it fails with the manager's own unavailable reason (missing binary, bad prefix, unsupported platform). Pruning needs brew because it must query and uninstall actual formulae.","triggerScenarios":"Running `mise bootstrap packages prune --manager brew` on a machine without Homebrew, with `brew` not on PATH, or with a broken Homebrew installation.","commonSituations":"Linux hosts without Homebrew; macOS systems where the command-line tools/Homebrew prefix moved (e.g. Intel→Apple Silicon migration); CI images lacking brew; PATH not including `/opt/homebrew/bin`.","solutions":["Install or repair Homebrew so `brew --version` succeeds in the same shell mise runs in.","Add brew's bin directory to PATH (e.g. `eval \"$(/opt/homebrew/bin/brew shellenv)\"`).","If brew packages are managed elsewhere, exclude brew via `[system_packages] managers` and prune a different manager."],"exampleFix":"// before\n$ mise bootstrap packages prune --manager brew\nerror: brew is not available: brew not found on PATH\n\n// after\n$ eval \"$(/opt/homebrew/bin/brew shellenv)\"\n$ mise bootstrap packages prune --manager brew","handlingStrategy":"fallback","validationCode":"command -v brew >/dev/null 2>&1 || { echo \"brew missing; cannot prune\"; exit 1; }\nbrew --version >/dev/null || { echo \"brew broken\"; exit 1; }","typeGuard":null,"tryCatchPattern":"try {\n  await run(\"mise\", [\"bootstrap\",\"packages\",\"prune\",\"--manager\",\"brew\"]);\n} catch (e) {\n  if (/brew is not available/.test(e.message)) {\n    // install/repair Homebrew or exclude brew from pruning\n  } else throw e;\n}","preventionTips":["Ensure brew is installed and on PATH wherever prune automation runs.","Re-source brew shellenv after Homebrew prefix changes or migrations.","Exclude brew via system_packages.managers on hosts without Homebrew."],"tags":["brew","homebrew","dependency","prune"],"backgroundTag":"missing-dependency","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}