registry: add conda backends for 10 asdf-only tools#8083
Conversation
Add conda-forge as the primary backend for tools that previously only had asdf backends, keeping asdf as a fallback. Also add test sections for version verification. Tools updated: clang-format, clojure, dotnet-core, elasticsearch, ffmpeg, ghc, go-sdk, imagemagick, jfrog-cli, luajit, minio, mysql, oc, oci, sbt, vim. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Summary of ChangesHello @jdx, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly enhances the tool management capabilities by integrating conda-forge as the preferred installation method for a set of 16 critical development tools. This strategic shift aims to improve the reliability and efficiency of tool provisioning by leveraging pre-built packages, while maintaining asdf as a viable alternative. Additionally, robust version verification tests have been incorporated for each tool, ensuring consistent and correct installations across environments. Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request is a great initiative to add conda backends for 16 tools, reducing reliance on asdf plugins and improving the ecosystem. The changes are well-structured and add necessary tests for version verification. My review includes suggestions to make these new tests more robust by checking for the specific tool version in the output, which will enhance the reliability of the test assertions.
| backends = ["asdf:mise-plugins/mise-llvm"] | ||
| backends = ["conda:clang-format", "asdf:mise-plugins/mise-llvm"] | ||
| description = "format C/C++/Java/JavaScript/JSON/Objective-C/Protobuf/C# code" | ||
| test = { cmd = "clang-format --version", expected = "clang-format version" } |
There was a problem hiding this comment.
The test assertion can be strengthened by checking for the specific version number, not just the static string "clang-format version". The output of clang-format --version includes the version, so we can make the test more precise.
| test = { cmd = "clang-format --version", expected = "clang-format version" } | |
| test = { cmd = "clang-format --version", expected = "clang-format version {{version}}" } |
registry/ffmpeg.toml
Outdated
| backends = ["asdf:mise-plugins/mise-ffmpeg"] | ||
| backends = ["conda:ffmpeg", "asdf:mise-plugins/mise-ffmpeg"] | ||
| description = "A complete, cross-platform solution to record, convert and stream audio and video" | ||
| test = { cmd = "ffmpeg -version 2>&1", expected = "ffmpeg version" } |
There was a problem hiding this comment.
To make this test more robust, I suggest checking for the version number in the output. The ffmpeg -version command includes the version string, which can be verified against {{version}}.
| test = { cmd = "ffmpeg -version 2>&1", expected = "ffmpeg version" } | |
| test = { cmd = "ffmpeg -version 2>&1", expected = "ffmpeg version {{version}}" } |
| backends = ["asdf:mise-plugins/mise-go-sdk"] | ||
| backends = ["conda:go", "asdf:mise-plugins/mise-go-sdk"] | ||
| description = "Install go sdk" | ||
| test = { cmd = "go version", expected = "go version" } |
There was a problem hiding this comment.
| backends = ["asdf:mise-plugins/mise-imagemagick"] | ||
| backends = ["conda:imagemagick", "asdf:mise-plugins/mise-imagemagick"] | ||
| description = "ImageMagick is a free, open-source software suite for creating, editing, converting, and displaying images. It supports 200+ formats and offers powerful command-line tools and APIs for automation, scripting, and integration across platforms" | ||
| test = { cmd = "magick --version 2>&1", expected = "ImageMagick" } |
There was a problem hiding this comment.
The test can be improved by verifying the version number. The output of magick --version includes ImageMagick <VERSION>, so we can make the check more specific.
| test = { cmd = "magick --version 2>&1", expected = "ImageMagick" } | |
| test = { cmd = "magick --version 2>&1", expected = "ImageMagick {{version}}" } |
| backends = ["asdf:mise-plugins/mise-luaJIT"] | ||
| backends = ["conda:luajit", "asdf:mise-plugins/mise-luaJIT"] | ||
| description = "a Just-In-Time Compiler for Lua" | ||
| test = { cmd = "luajit -v 2>&1", expected = "LuaJIT" } |
There was a problem hiding this comment.
| backends = ["conda:sbt", "asdf:mise-plugins/mise-sbt"] | ||
| depends = ["java"] | ||
| description = "sbt, the interactive build tool" | ||
| test = { cmd = "sbt --version 2>&1", expected = "sbt" } |
There was a problem hiding this comment.
The test check is a bit weak. It can be made more specific by including the version. The output of sbt --version includes sbt script version: <VERSION>, which would be a more robust check.
| test = { cmd = "sbt --version 2>&1", expected = "sbt" } | |
| test = { cmd = "sbt --version 2>&1", expected = "sbt script version: {{version}}" } |
There was a problem hiding this comment.
Pull request overview
Adds conda-forge as the primary backend (with asdf fallback) for 16 previously asdf-only tools, and introduces per-tool smoke tests intended to verify installed versions.
Changes:
- Prefer
conda:backends for 16 tools while retainingasdf:as fallback - Add
testcommands/expectations for each tool to validate installation - Reduce reliance on asdf plugin ecosystem by using conda-forge packages
Reviewed changes
Copilot reviewed 16 out of 16 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| registry/clang-format.toml | Prefer conda clang-format; add a basic version test |
| registry/clojure.toml | Prefer conda clojure; add version test |
| registry/dotnet-core.toml | Prefer conda dotnet-sdk; add version test |
| registry/elasticsearch.toml | Prefer conda elasticsearch; add version test |
| registry/ffmpeg.toml | Prefer conda ffmpeg; add basic version test |
| registry/ghc.toml | Prefer conda ghc; keep existing version test |
| registry/go-sdk.toml | Prefer conda go; add basic version test |
| registry/imagemagick.toml | Prefer conda imagemagick; add basic version test |
| registry/jfrog-cli.toml | Prefer conda jfrog-cli; add version test |
| registry/luajit.toml | Prefer conda luajit; add basic version test |
| registry/minio.toml | Prefer conda minio-server; add basic version test |
| registry/mysql.toml | Prefer conda mysql; add version test |
| registry/oc.toml | Prefer conda openshift-cli; add version test |
| registry/oci.toml | Prefer conda oci-cli; add version test |
| registry/sbt.toml | Prefer conda sbt; add basic version test |
| registry/vim.toml | Prefer conda vim; add basic version test |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| backends = ["asdf:mise-plugins/mise-go-sdk"] | ||
| backends = ["conda:go", "asdf:mise-plugins/mise-go-sdk"] | ||
| description = "Install go sdk" | ||
| test = { cmd = "go version", expected = "go version" } |
There was a problem hiding this comment.
This expected value doesn’t verify the requested tool version (it will pass for any Go version). To align with the PR goal of version verification, make the expectation include {{version}} (noting that go version typically prints go{{version}}, e.g. go1.22.0).
| test = { cmd = "go version", expected = "go version" } | |
| test = { cmd = "go version", expected = "go version go{{version}}" } |
registry/ffmpeg.toml
Outdated
| backends = ["asdf:mise-plugins/mise-ffmpeg"] | ||
| backends = ["conda:ffmpeg", "asdf:mise-plugins/mise-ffmpeg"] | ||
| description = "A complete, cross-platform solution to record, convert and stream audio and video" | ||
| test = { cmd = "ffmpeg -version 2>&1", expected = "ffmpeg version" } |
There was a problem hiding this comment.
The test only checks that ffmpeg prints a version banner, not that the installed version matches the requested one. Consider including {{version}} in expected (ffmpeg typically outputs ffmpeg version {{version}} ...).
| test = { cmd = "ffmpeg -version 2>&1", expected = "ffmpeg version" } | |
| test = { cmd = "ffmpeg -version 2>&1", expected = "ffmpeg version {{version}}" } |
| backends = ["asdf:mise-plugins/mise-llvm"] | ||
| backends = ["conda:clang-format", "asdf:mise-plugins/mise-llvm"] | ||
| description = "format C/C++/Java/JavaScript/JSON/Objective-C/Protobuf/C# code" | ||
| test = { cmd = "clang-format --version", expected = "clang-format version" } |
There was a problem hiding this comment.
This assertion is too loose to confirm the requested version was installed. clang-format --version usually includes the actual version number, so expected should incorporate {{version}} to truly verify version selection.
| test = { cmd = "clang-format --version", expected = "clang-format version" } | |
| test = { cmd = "clang-format --version", expected = "clang-format version {{version}}" } |
| backends = ["asdf:mise-plugins/mise-imagemagick"] | ||
| backends = ["conda:imagemagick", "asdf:mise-plugins/mise-imagemagick"] | ||
| description = "ImageMagick is a free, open-source software suite for creating, editing, converting, and displaying images. It supports 200+ formats and offers powerful command-line tools and APIs for automation, scripting, and integration across platforms" | ||
| test = { cmd = "magick --version 2>&1", expected = "ImageMagick" } |
There was a problem hiding this comment.
Checking only for ImageMagick doesn’t validate that the requested version is installed. magick --version typically contains a version string; if your test framework supports it, prefer matching {{version}} as part of the expected output.
| test = { cmd = "magick --version 2>&1", expected = "ImageMagick" } | |
| test = { cmd = "magick --version 2>&1", expected = "ImageMagick {{version}}" } |
| backends = ["asdf:mise-plugins/mise-minio"] | ||
| backends = ["conda:minio-server", "asdf:mise-plugins/mise-minio"] | ||
| description = "MinIO AIStor is a high-performance S3-compatible object store licensed under the MinIO Commercial License" | ||
| test = { cmd = "minio --version 2>&1", expected = "minio" } |
There was a problem hiding this comment.
This test will pass even if an unexpected MinIO version is installed. If the command output includes the version (commonly does), tighten expected to include {{version}} so it acts as a true version verification.
| test = { cmd = "minio --version 2>&1", expected = "minio" } | |
| test = { cmd = "minio --version 2>&1", expected = "minio version {{version}}" } |
| backends = ["conda:sbt", "asdf:mise-plugins/mise-sbt"] | ||
| depends = ["java"] | ||
| description = "sbt, the interactive build tool" | ||
| test = { cmd = "sbt --version 2>&1", expected = "sbt" } |
There was a problem hiding this comment.
The expectation sbt doesn’t verify that the requested version was installed. If possible, use an sbt option/output that includes a deterministic version string and match against {{version}} (for example, some sbt launchers support a numeric version output).
| test = { cmd = "sbt --version 2>&1", expected = "sbt" } | |
| test = { cmd = "sbt --numeric-version 2>&1", expected = "{{version}}" } |
registry/vim.toml
Outdated
| backends = ["asdf:mise-plugins/mise-vim"] | ||
| backends = ["conda:vim", "asdf:mise-plugins/mise-vim"] | ||
| description = "Vim is an advanced text editor that seeks to provide the power of the de-facto Unix editor 'Vi', with a more complete feature set. It's useful whether you're already using vi or using a different editor" | ||
| test = { cmd = "vim --version 2>&1", expected = "VIM - Vi IMproved" } |
There was a problem hiding this comment.
This verifies Vim is runnable but not the selected version. Since vim --version prints the version on the first line, consider including {{version}} in the expected output to satisfy the PR’s version verification intent.
| test = { cmd = "vim --version 2>&1", expected = "VIM - Vi IMproved" } | |
| test = { cmd = "vim --version 2>&1", expected = "VIM - Vi IMproved {{version}}" } |
| backends = ["asdf:mise-plugins/mise-luaJIT"] | ||
| backends = ["conda:luajit", "asdf:mise-plugins/mise-luaJIT"] | ||
| description = "a Just-In-Time Compiler for Lua" | ||
| test = { cmd = "luajit -v 2>&1", expected = "LuaJIT" } |
There was a problem hiding this comment.
The test currently only checks that LuaJIT is present, not that it matches the requested version. luajit -v usually prints LuaJIT <version>; tighten expected to include {{version}} if the registry test runner supports substring matching.
| test = { cmd = "luajit -v 2>&1", expected = "LuaJIT" } | |
| test = { cmd = "luajit -v 2>&1", expected = "LuaJIT {{version}}" } |
The clojure registry entry now defaults to conda:clojure instead of asdf:mise-plugins/mise-clojure, update the test accordingly. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
src/cli/args/backend_arg.rs
Outdated
| { | ||
| asdf("asdf:clojure", "asdf:clojure", "clojure"); | ||
| asdf("clojure", "asdf:mise-plugins/mise-clojure", "clojure"); | ||
| conda("clojure", "conda:clojure", "clojure"); |
There was a problem hiding this comment.
Conda test incorrectly gated behind Unix-only cfg
Low Severity
The conda("clojure", "conda:clojure", "clojure") call is placed inside the #[cfg(unix)] block, but conda is a cross-platform backend (unlike asdf, which is Unix-only). This means the test for resolving bare "clojure" to "conda:clojure" only runs on Unix, leaving the resolution path untested on Windows. It also leaves the conda variable unused on non-Unix, producing a compiler warning.
Additional Locations (1)
The conda:elasticsearch package is the Python client library (elasticsearch-py), not the Elasticsearch server binary. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hyperfine Performance
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.2.9 x -- echo |
17.1 ± 0.4 | 16.1 | 18.6 | 1.00 |
mise x -- echo |
17.4 ± 0.4 | 16.5 | 18.7 | 1.01 ± 0.04 |
mise env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.2.9 env |
16.8 ± 0.4 | 15.9 | 19.8 | 1.00 |
mise env |
17.3 ± 0.5 | 15.9 | 20.5 | 1.02 ± 0.04 |
mise hook-env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.2.9 hook-env |
17.2 ± 1.0 | 16.2 | 32.1 | 1.00 |
mise hook-env |
17.5 ± 0.6 | 16.4 | 22.9 | 1.02 ± 0.07 |
mise ls
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.2.9 ls |
16.3 ± 0.6 | 15.2 | 26.9 | 1.00 |
mise ls |
17.1 ± 0.7 | 15.3 | 19.1 | 1.05 ± 0.06 |
xtasks/test/perf
| Command | mise-2026.2.9 | mise | Variance |
|---|---|---|---|
| install (cached) | 87ms | 89ms | -2% |
| ls (cached) | 58ms | 58ms | +0% |
| bin-paths (cached) | 59ms | 60ms | -1% |
| task-ls (cached) | 454ms | 453ms | +0% |
Remove conda backends for 6 tools that fail CI: - clojure: needs Java runtime not bundled in conda package - dotnet-core: version mismatch between package and binary output - ffmpeg, ghc, vim: shared library issues (patchelf can't resolve all deps) - oci: Python-based CLI, conda can't set up the interpreter Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…mplex packages (#8087) ## Summary - Improve Linux library path fixing (patchelf RPATH) for conda packages with large dependency trees - Pin conda dependency versions from build strings to install the correct library versions - Add conda backends for ffmpeg, ghc, and vim ## Changes to `conda_linux.rs` ### Comprehensive RPATH Previously, RPATH was set to only `$ORIGIN/../lib` for binaries and `$ORIGIN` for libraries. Complex packages like ffmpeg have shared libraries spread across multiple subdirectories. Now we: - Discover all directories containing `.so` files (using precise `.so`/`.so.` matching) - Build RPATH strings that include all library directories using `$ORIGIN`-relative paths ### Interpreter fixing If a conda binary has a hardcoded ELF interpreter pointing to a conda build path (e.g. `/home/conda/feedstock_root/.../ld-linux-x86-64.so.2`), the binary can't load at all (exit code 127). Now we: - Detect conda build-time interpreter paths - Replace with a local linker from the install dir if available, or fall back to the system linker - Support both x86-64 and aarch64 architectures ### Error logging Previously, all patchelf errors were silently swallowed (`let _ = ...`). Now they are logged at debug level for troubleshooting, including spawn failures. ### Performance Only call `fix_interpreter` for files in `bin/`/`libexec/`, skipping shared libraries that don't have `PT_INTERP`. ## Changes to `conda.rs` - Build string version pinning ### Problem Conda build strings encode which dependency versions a package was built against (e.g., `py310` = Python 3.10, `pl5321` = Perl 5.32). However, the dependency resolver was ignoring this and installing the latest version matching a loose spec like `>=3.10`, which would pick Python 3.15 instead of 3.10. ### Fix Parse build string prefixes (`py`, `pl`) to extract version pins, then use them to constrain dependency resolution. Falls back to the original version spec if the pinned version isn't available. Example: vim package `vim-9.1.1858-py310pl5321h03900fa_0` now correctly gets Python 3.10.* instead of 3.15. ## Registry updates | Tool | conda package | Test command | |------|--------------|-------------| | ffmpeg | `ffmpeg` | `ffmpeg -version` | | ghc | `ghc` | `ghc --version` | | vim | `vim` | `vim --version` | ## Context These tools were removed from #8083 because they failed with exit code 127 (shared library resolution failure). This PR improves both the patchelf mechanism and the dependency resolver to handle their complex dependency trees. ## Test plan - [x] `mise run lint` passes - [x] `mise run build` compiles successfully - [x] `mise x conda:vim -- vim --version` works locally (installs Python 3.10 correctly) - [x] CI `mise test-tool` for ffmpeg — passed - [x] CI `mise test-tool` for ghc — passed - [ ] CI `mise test-tool` for vim — pending 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches conda install/dependency resolution and Linux binary patching (`patchelf`), which can affect runtime behavior across many packages; changes are targeted but broad in impact if the heuristics mis-detect pins/prefixes or generate incorrect RPATH/interpreter settings. > > **Overview** > Improves conda-based installs for complex Linux packages by making `patchelf` fixes more robust: builds RPATHs from *all* discovered shared-library directories (excluding sysroots), optionally rewrites hardcoded ELF interpreters pointing at conda build paths, and logs `patchelf` failures instead of silently swallowing them. > > Enhances conda dependency resolution to honor build-string version pins (e.g. `py310` → Python 3.10) and stops skipping runtime `python`/`perl`/`ruby` packages so their shared libs can be present when tools link against them; also replaces conda placeholder prefixes in extracted text files. > > Adds `conda:` as a backend option for `ffmpeg`, `ghc`, and `vim` in the registry (with a new `ffmpeg` smoke test), and improves `mise test-tool` diagnostics by printing captured output for exit code `127`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 8d801e0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
### 🚀 Features - **(activate)** add shims directory as fallback when auto-install is enabled by @ctaintor in [#8106](#8106) - **(env)** add `tools` variable to tera template context by @jdx in [#8108](#8108) - **(set)** add --stdin flag for multiline environment variables by @jdx in [#8110](#8110) ### 🐛 Bug Fixes - **(backend)** improve conda patchelf and dependency resolution for complex packages by @jdx in [#8087](#8087) - **(ci)** fix validate-new-tools grep pattern for test field by @jdx in [#8100](#8100) - **(config)** make MISE_OFFLINE work correctly by gracefully skipping network calls by @jdx in [#8109](#8109) - **(github)** skip v prefix for "latest" version by @jdx in [#8105](#8105) - **(gitlab)** resolve tool options from config for aliased tools by @jdx in [#8084](#8084) - **(install)** use version_expr for Flutter to fix version resolution by @jdx in [#8081](#8081) - **(registry)** add Linux support for tuist by @fortmarek in [#8102](#8102) - **(release)** write release notes to file instead of capturing stdout by @jdx in [#8086](#8086) - **(upgrade)** tools are not uninstalled properly due to outdated symlink by @roele in [#8099](#8099) - **(upgrade)** ensure uninstallation failure does not leave invalid symlinks by @roele in [#8101](#8101) - SLSA for in-toto statement with no signatures by @gerhard in [#8094](#8094) - Vfox Plugin Auto-Installation for Environment Directives by @pose in [#8035](#8035) ### 📚 Documentation - use mise activate for PowerShell in getting-started by @rileychh in [#8112](#8112) ### 📦 Registry - add conda backend for mysql by @jdx in [#8080](#8080) - add conda backends for 10 asdf-only tools by @jdx in [#8083](#8083) - added podman-tui by @tony-sol in [#8098](#8098) ### Chore - sort settings.toml alphabetically and add test by @jdx in [#8111](#8111) ### New Contributors - @ctaintor made their first contribution in [#8106](#8106) - @rileychh made their first contribution in [#8112](#8112) - @fortmarek made their first contribution in [#8102](#8102) - @pose made their first contribution in [#8035](#8035) - @gerhard made their first contribution in [#8094](#8094) ## 📦 Aqua Registry Updates #### New Packages (2) - [`entireio/cli`](https://github.com/entireio/cli) - [`rmitchellscott/reManager`](https://github.com/rmitchellscott/reManager) #### Updated Packages (1) - [`atuinsh/atuin`](https://github.com/atuinsh/atuin)
### 🚀 Features - **(activate)** add shims directory as fallback when auto-install is enabled by @ctaintor in [#8106](#8106) - **(env)** add `tools` variable to tera template context by @jdx in [#8108](#8108) - **(set)** add --stdin flag for multiline environment variables by @jdx in [#8110](#8110) ### 🐛 Bug Fixes - **(backend)** improve conda patchelf and dependency resolution for complex packages by @jdx in [#8087](#8087) - **(ci)** fix validate-new-tools grep pattern for test field by @jdx in [#8100](#8100) - **(config)** make MISE_OFFLINE work correctly by gracefully skipping network calls by @jdx in [#8109](#8109) - **(github)** skip v prefix for "latest" version by @jdx in [#8105](#8105) - **(gitlab)** resolve tool options from config for aliased tools by @jdx in [#8084](#8084) - **(install)** use version_expr for Flutter to fix version resolution by @jdx in [#8081](#8081) - **(registry)** add Linux support for tuist by @fortmarek in [#8102](#8102) - **(release)** write release notes to file instead of capturing stdout by @jdx in [#8086](#8086) - **(upgrade)** tools are not uninstalled properly due to outdated symlink by @roele in [#8099](#8099) - **(upgrade)** ensure uninstallation failure does not leave invalid symlinks by @roele in [#8101](#8101) - SLSA for in-toto statement with no signatures by @gerhard in [#8094](#8094) - Vfox Plugin Auto-Installation for Environment Directives by @pose in [#8035](#8035) ### 📚 Documentation - use mise activate for PowerShell in getting-started by @rileychh in [#8112](#8112) ### 📦 Registry - add conda backend for mysql by @jdx in [#8080](#8080) - add conda backends for 10 asdf-only tools by @jdx in [#8083](#8083) - added podman-tui by @tony-sol in [#8098](#8098) ### Chore - sort settings.toml alphabetically and add test by @jdx in [#8111](#8111) ### New Contributors - @ctaintor made their first contribution in [#8106](#8106) - @rileychh made their first contribution in [#8112](#8112) - @fortmarek made their first contribution in [#8102](#8102) - @pose made their first contribution in [#8035](#8035) - @gerhard made their first contribution in [#8094](#8094) ## 📦 Aqua Registry Updates #### New Packages (2) - [`entireio/cli`](https://github.com/entireio/cli) - [`rmitchellscott/reManager`](https://github.com/rmitchellscott/reManager) #### Updated Packages (1) - [`atuinsh/atuin`](https://github.com/atuinsh/atuin)
## Summary - Add conda-forge as the primary backend for 10 tools that previously only had asdf backends, keeping asdf as fallback - Add test sections for version verification to all updated tools - Reduces dependency on asdf plugin ecosystem in favor of prebuilt conda-forge packages ## Tools updated | Tool | conda package | Test command | |------|--------------|-------------| | clang-format | `clang-format` | `clang-format --version` | | go-sdk | `go` | `go version` | | imagemagick | `imagemagick` | `magick --version` | | jfrog-cli | `jfrog-cli` | `jf --version` | | luajit | `luajit` | `luajit -v` | | minio | `minio-server` | `minio --version` | | mysql | `mysql` (already had conda) | `mysql --version` | | oc | `openshift-cli` | `oc version --client` | | sbt | `sbt` | `sbt --version` | ## Removed from this PR (will address separately) - **clojure** — needs Java runtime, conda package alone is not sufficient - **dotnet-core** — version mismatch between conda package and mise version resolution - **ffmpeg** — binary exits 127 due to shared library issues with patchelf - **ghc** — binary exits 127 due to shared library issues with patchelf - **oci** — Python-based CLI, needs interpreter setup - **vim** — binary exits 127 due to shared library issues with patchelf ## Not included - **emsdk** — asdf plugin sets 12 env vars that conda can't replicate - Other asdf-only tools with no conda-forge packages available ## Test plan - [x] `mise run lint-fix` passes - [x] `mise run build` compiles successfully - [ ] CI `mise test-tool <tool>` for individual tools 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Changes backend priority for several registry tools to prefer conda packages, which can alter installation behavior and available binaries across platforms. Adds new `test` commands that may fail in CI or on certain environments if output differs. > > **Overview** > Switches several registry entries (e.g. `clang-format`, `go-sdk`, `imagemagick`, `jfrog-cli`, `luajit`, `minio`, `oc`, `sbt`) to **prefer `conda:` backends** while keeping the existing `asdf:` plugins as fallback. > > Adds a `test` stanza to these tools (and `mysql`) to validate installs by running a version command and matching expected output (often templated with `{{version}}` and sometimes capturing stderr via `2>&1`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4cd7e23. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…mplex packages (jdx#8087) ## Summary - Improve Linux library path fixing (patchelf RPATH) for conda packages with large dependency trees - Pin conda dependency versions from build strings to install the correct library versions - Add conda backends for ffmpeg, ghc, and vim ## Changes to `conda_linux.rs` ### Comprehensive RPATH Previously, RPATH was set to only `$ORIGIN/../lib` for binaries and `$ORIGIN` for libraries. Complex packages like ffmpeg have shared libraries spread across multiple subdirectories. Now we: - Discover all directories containing `.so` files (using precise `.so`/`.so.` matching) - Build RPATH strings that include all library directories using `$ORIGIN`-relative paths ### Interpreter fixing If a conda binary has a hardcoded ELF interpreter pointing to a conda build path (e.g. `/home/conda/feedstock_root/.../ld-linux-x86-64.so.2`), the binary can't load at all (exit code 127). Now we: - Detect conda build-time interpreter paths - Replace with a local linker from the install dir if available, or fall back to the system linker - Support both x86-64 and aarch64 architectures ### Error logging Previously, all patchelf errors were silently swallowed (`let _ = ...`). Now they are logged at debug level for troubleshooting, including spawn failures. ### Performance Only call `fix_interpreter` for files in `bin/`/`libexec/`, skipping shared libraries that don't have `PT_INTERP`. ## Changes to `conda.rs` - Build string version pinning ### Problem Conda build strings encode which dependency versions a package was built against (e.g., `py310` = Python 3.10, `pl5321` = Perl 5.32). However, the dependency resolver was ignoring this and installing the latest version matching a loose spec like `>=3.10`, which would pick Python 3.15 instead of 3.10. ### Fix Parse build string prefixes (`py`, `pl`) to extract version pins, then use them to constrain dependency resolution. Falls back to the original version spec if the pinned version isn't available. Example: vim package `vim-9.1.1858-py310pl5321h03900fa_0` now correctly gets Python 3.10.* instead of 3.15. ## Registry updates | Tool | conda package | Test command | |------|--------------|-------------| | ffmpeg | `ffmpeg` | `ffmpeg -version` | | ghc | `ghc` | `ghc --version` | | vim | `vim` | `vim --version` | ## Context These tools were removed from jdx#8083 because they failed with exit code 127 (shared library resolution failure). This PR improves both the patchelf mechanism and the dependency resolver to handle their complex dependency trees. ## Test plan - [x] `mise run lint` passes - [x] `mise run build` compiles successfully - [x] `mise x conda:vim -- vim --version` works locally (installs Python 3.10 correctly) - [x] CI `mise test-tool` for ffmpeg — passed - [x] CI `mise test-tool` for ghc — passed - [ ] CI `mise test-tool` for vim — pending 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches conda install/dependency resolution and Linux binary patching (`patchelf`), which can affect runtime behavior across many packages; changes are targeted but broad in impact if the heuristics mis-detect pins/prefixes or generate incorrect RPATH/interpreter settings. > > **Overview** > Improves conda-based installs for complex Linux packages by making `patchelf` fixes more robust: builds RPATHs from *all* discovered shared-library directories (excluding sysroots), optionally rewrites hardcoded ELF interpreters pointing at conda build paths, and logs `patchelf` failures instead of silently swallowing them. > > Enhances conda dependency resolution to honor build-string version pins (e.g. `py310` → Python 3.10) and stops skipping runtime `python`/`perl`/`ruby` packages so their shared libs can be present when tools link against them; also replaces conda placeholder prefixes in extracted text files. > > Adds `conda:` as a backend option for `ffmpeg`, `ghc`, and `vim` in the registry (with a new `ffmpeg` smoke test), and improves `mise test-tool` diagnostics by printing captured output for exit code `127`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 8d801e0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
### 🚀 Features - **(activate)** add shims directory as fallback when auto-install is enabled by @ctaintor in [jdx#8106](jdx#8106) - **(env)** add `tools` variable to tera template context by @jdx in [jdx#8108](jdx#8108) - **(set)** add --stdin flag for multiline environment variables by @jdx in [jdx#8110](jdx#8110) ### 🐛 Bug Fixes - **(backend)** improve conda patchelf and dependency resolution for complex packages by @jdx in [jdx#8087](jdx#8087) - **(ci)** fix validate-new-tools grep pattern for test field by @jdx in [jdx#8100](jdx#8100) - **(config)** make MISE_OFFLINE work correctly by gracefully skipping network calls by @jdx in [jdx#8109](jdx#8109) - **(github)** skip v prefix for "latest" version by @jdx in [jdx#8105](jdx#8105) - **(gitlab)** resolve tool options from config for aliased tools by @jdx in [jdx#8084](jdx#8084) - **(install)** use version_expr for Flutter to fix version resolution by @jdx in [jdx#8081](jdx#8081) - **(registry)** add Linux support for tuist by @fortmarek in [jdx#8102](jdx#8102) - **(release)** write release notes to file instead of capturing stdout by @jdx in [jdx#8086](jdx#8086) - **(upgrade)** tools are not uninstalled properly due to outdated symlink by @roele in [jdx#8099](jdx#8099) - **(upgrade)** ensure uninstallation failure does not leave invalid symlinks by @roele in [jdx#8101](jdx#8101) - SLSA for in-toto statement with no signatures by @gerhard in [jdx#8094](jdx#8094) - Vfox Plugin Auto-Installation for Environment Directives by @pose in [jdx#8035](jdx#8035) ### 📚 Documentation - use mise activate for PowerShell in getting-started by @rileychh in [jdx#8112](jdx#8112) ### 📦 Registry - add conda backend for mysql by @jdx in [jdx#8080](jdx#8080) - add conda backends for 10 asdf-only tools by @jdx in [jdx#8083](jdx#8083) - added podman-tui by @tony-sol in [jdx#8098](jdx#8098) ### Chore - sort settings.toml alphabetically and add test by @jdx in [jdx#8111](jdx#8111) ### New Contributors - @ctaintor made their first contribution in [jdx#8106](jdx#8106) - @rileychh made their first contribution in [jdx#8112](jdx#8112) - @fortmarek made their first contribution in [jdx#8102](jdx#8102) - @pose made their first contribution in [jdx#8035](jdx#8035) - @gerhard made their first contribution in [jdx#8094](jdx#8094) ## 📦 Aqua Registry Updates #### New Packages (2) - [`entireio/cli`](https://github.com/entireio/cli) - [`rmitchellscott/reManager`](https://github.com/rmitchellscott/reManager) #### Updated Packages (1) - [`atuinsh/atuin`](https://github.com/atuinsh/atuin)
### 🚀 Features - **(activate)** add shims directory as fallback when auto-install is enabled by @ctaintor in [jdx#8106](jdx#8106) - **(env)** add `tools` variable to tera template context by @jdx in [jdx#8108](jdx#8108) - **(set)** add --stdin flag for multiline environment variables by @jdx in [jdx#8110](jdx#8110) ### 🐛 Bug Fixes - **(backend)** improve conda patchelf and dependency resolution for complex packages by @jdx in [jdx#8087](jdx#8087) - **(ci)** fix validate-new-tools grep pattern for test field by @jdx in [jdx#8100](jdx#8100) - **(config)** make MISE_OFFLINE work correctly by gracefully skipping network calls by @jdx in [jdx#8109](jdx#8109) - **(github)** skip v prefix for "latest" version by @jdx in [jdx#8105](jdx#8105) - **(gitlab)** resolve tool options from config for aliased tools by @jdx in [jdx#8084](jdx#8084) - **(install)** use version_expr for Flutter to fix version resolution by @jdx in [jdx#8081](jdx#8081) - **(registry)** add Linux support for tuist by @fortmarek in [jdx#8102](jdx#8102) - **(release)** write release notes to file instead of capturing stdout by @jdx in [jdx#8086](jdx#8086) - **(upgrade)** tools are not uninstalled properly due to outdated symlink by @roele in [jdx#8099](jdx#8099) - **(upgrade)** ensure uninstallation failure does not leave invalid symlinks by @roele in [jdx#8101](jdx#8101) - SLSA for in-toto statement with no signatures by @gerhard in [jdx#8094](jdx#8094) - Vfox Plugin Auto-Installation for Environment Directives by @pose in [jdx#8035](jdx#8035) ### 📚 Documentation - use mise activate for PowerShell in getting-started by @rileychh in [jdx#8112](jdx#8112) ### 📦 Registry - add conda backend for mysql by @jdx in [jdx#8080](jdx#8080) - add conda backends for 10 asdf-only tools by @jdx in [jdx#8083](jdx#8083) - added podman-tui by @tony-sol in [jdx#8098](jdx#8098) ### Chore - sort settings.toml alphabetically and add test by @jdx in [jdx#8111](jdx#8111) ### New Contributors - @ctaintor made their first contribution in [jdx#8106](jdx#8106) - @rileychh made their first contribution in [jdx#8112](jdx#8112) - @fortmarek made their first contribution in [jdx#8102](jdx#8102) - @pose made their first contribution in [jdx#8035](jdx#8035) - @gerhard made their first contribution in [jdx#8094](jdx#8094) ## 📦 Aqua Registry Updates #### New Packages (2) - [`entireio/cli`](https://github.com/entireio/cli) - [`rmitchellscott/reManager`](https://github.com/rmitchellscott/reManager) #### Updated Packages (1) - [`atuinsh/atuin`](https://github.com/atuinsh/atuin)


Summary
Tools updated
clang-formatclang-format --versiongogo versionimagemagickmagick --versionjfrog-clijf --versionluajitluajit -vminio-serverminio --versionmysql(already had conda)mysql --versionopenshift-clioc version --clientsbtsbt --versionRemoved from this PR (will address separately)
Not included
Test plan
mise run lint-fixpassesmise run buildcompiles successfullymise test-tool <tool>for individual tools🤖 Generated with Claude Code
Note
Medium Risk
Changes backend priority for several registry tools to prefer conda packages, which can alter installation behavior and available binaries across platforms. Adds new
testcommands that may fail in CI or on certain environments if output differs.Overview
Switches several registry entries (e.g.
clang-format,go-sdk,imagemagick,jfrog-cli,luajit,minio,oc,sbt) to preferconda:backends while keeping the existingasdf:plugins as fallback.Adds a
teststanza to these tools (andmysql) to validate installs by running a version command and matching expected output (often templated with{{version}}and sometimes capturing stderr via2>&1).Written by Cursor Bugbot for commit 4cd7e23. This will update automatically on new commits. Configure here.