Skip to content

registry: add conda backends for 10 asdf-only tools#8083

Merged
jdx merged 5 commits intomainfrom
registry/add-conda-backends
Feb 10, 2026
Merged

registry: add conda backends for 10 asdf-only tools#8083
jdx merged 5 commits intomainfrom
registry/add-conda-backends

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Feb 10, 2026

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

  • mise run lint-fix passes
  • mise run build compiles successfully
  • CI mise 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 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).

Written by Cursor Bugbot for commit 4cd7e23. This will update automatically on new commits. Configure here.

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>
Copilot AI review requested due to automatic review settings February 10, 2026 12:07
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @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

  • Conda Backend Prioritization: Added conda-forge as the primary backend for 16 tools that previously relied solely on asdf, with asdf remaining as a fallback option.
  • Version Verification Tests: Introduced new test sections for version verification to all 16 updated tools, ensuring correct installation and functionality.
  • Reduced asdf Dependency: Decreased the overall dependency on the asdf plugin ecosystem by favoring prebuilt conda-forge packages for these tools.
Changelog
  • registry/clang-format.toml
    • Prioritized conda:clang-format as the primary backend, with asdf:mise-plugins/mise-llvm as fallback.
    • Added a test section to verify clang-format --version output.
  • registry/clojure.toml
    • Prioritized conda:clojure as the primary backend, with asdf:mise-plugins/mise-clojure as fallback.
    • Added a test section to verify clj --version output.
  • registry/dotnet-core.toml
    • Prioritized conda:dotnet-sdk as the primary backend, with asdf:mise-plugins/mise-dotnet-core as fallback.
    • Added a test section to verify dotnet --version output.
  • registry/elasticsearch.toml
    • Prioritized conda:elasticsearch as the primary backend, with asdf:mise-plugins/mise-elasticsearch as fallback.
    • Added a test section to verify elasticsearch --version output.
  • registry/ffmpeg.toml
    • Prioritized conda:ffmpeg as the primary backend, with asdf:mise-plugins/mise-ffmpeg as fallback.
    • Added a test section to verify ffmpeg -version output.
  • registry/ghc.toml
    • Prioritized conda:ghc as the primary backend, with asdf:mise-plugins/mise-ghcup as fallback.
    • Added a test section to verify ghc --version output.
  • registry/go-sdk.toml
    • Prioritized conda:go as the primary backend, with asdf:mise-plugins/mise-go-sdk as fallback.
    • Added a test section to verify go version output.
  • registry/imagemagick.toml
    • Prioritized conda:imagemagick as the primary backend, with asdf:mise-plugins/mise-imagemagick as fallback.
    • Added a test section to verify magick --version output.
  • registry/jfrog-cli.toml
    • Prioritized conda:jfrog-cli as the primary backend, with asdf:mise-plugins/mise-jfrog-cli as fallback.
    • Added a test section to verify jf --version output.
  • registry/luajit.toml
    • Prioritized conda:luajit as the primary backend, with asdf:mise-plugins/mise-luaJIT as fallback.
    • Added a test section to verify luajit -v output.
  • registry/minio.toml
    • Prioritized conda:minio-server as the primary backend, with asdf:mise-plugins/mise-minio as fallback.
    • Added a test section to verify minio --version output.
  • registry/mysql.toml
    • Prioritized conda:mysql as the primary backend, with asdf:mise-plugins/mise-mysql as fallback.
    • Added a test section to verify mysql --version output.
  • registry/oc.toml
    • Prioritized conda:openshift-cli as the primary backend, with asdf:mise-plugins/mise-oc as fallback.
    • Added a test section to verify oc version --client output.
  • registry/oci.toml
    • Prioritized conda:oci-cli as the primary backend, with asdf:mise-plugins/mise-oci as fallback.
    • Added a test section to verify oci --version output.
  • registry/sbt.toml
    • Prioritized conda:sbt as the primary backend, with asdf:mise-plugins/mise-sbt as fallback.
    • Added a test section to verify sbt --version output.
  • registry/vim.toml
    • Prioritized conda:vim as the primary backend, with asdf:mise-plugins/mise-vim as fallback.
    • Added a test section to verify vim --version output.
Activity
  • The pull request was generated using Claude Code, indicating an AI-assisted creation process.
Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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" }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
test = { cmd = "clang-format --version", expected = "clang-format version" }
test = { cmd = "clang-format --version", expected = "clang-format version {{version}}" }

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" }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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}}.

Suggested change
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" }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The test can be more specific. The output of go version is go version go<VERSION> .... We can check for the version number to make the test more reliable.

Suggested change
test = { cmd = "go version", expected = "go version" }
test = { cmd = "go version", expected = "go version go{{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" }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
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" }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This test can be made more specific by checking for the version. The output of luajit -v is LuaJIT <VERSION> ..., which allows for a more precise test.

Suggested change
test = { cmd = "luajit -v 2>&1", expected = "LuaJIT" }
test = { cmd = "luajit -v 2>&1", expected = "LuaJIT {{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" }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
test = { cmd = "sbt --version 2>&1", expected = "sbt" }
test = { cmd = "sbt --version 2>&1", expected = "sbt script version: {{version}}" }

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 retaining asdf: as fallback
  • Add test commands/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" }
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
test = { cmd = "go version", expected = "go version" }
test = { cmd = "go version", expected = "go version go{{version}}" }

Copilot uses AI. Check for mistakes.
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" }
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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}} ...).

Suggested change
test = { cmd = "ffmpeg -version 2>&1", expected = "ffmpeg version" }
test = { cmd = "ffmpeg -version 2>&1", expected = "ffmpeg version {{version}}" }

Copilot uses AI. Check for mistakes.
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" }
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
test = { cmd = "clang-format --version", expected = "clang-format version" }
test = { cmd = "clang-format --version", expected = "clang-format version {{version}}" }

Copilot uses AI. Check for mistakes.
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" }
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
test = { cmd = "magick --version 2>&1", expected = "ImageMagick" }
test = { cmd = "magick --version 2>&1", expected = "ImageMagick {{version}}" }

Copilot uses AI. Check for mistakes.
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" }
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
test = { cmd = "minio --version 2>&1", expected = "minio" }
test = { cmd = "minio --version 2>&1", expected = "minio version {{version}}" }

Copilot uses AI. Check for mistakes.
backends = ["conda:sbt", "asdf:mise-plugins/mise-sbt"]
depends = ["java"]
description = "sbt, the interactive build tool"
test = { cmd = "sbt --version 2>&1", expected = "sbt" }
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
test = { cmd = "sbt --version 2>&1", expected = "sbt" }
test = { cmd = "sbt --numeric-version 2>&1", expected = "{{version}}" }

Copilot uses AI. Check for mistakes.
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" }
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
test = { cmd = "vim --version 2>&1", expected = "VIM - Vi IMproved" }
test = { cmd = "vim --version 2>&1", expected = "VIM - Vi IMproved {{version}}" }

Copilot uses AI. Check for mistakes.
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" }
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
test = { cmd = "luajit -v 2>&1", expected = "LuaJIT" }
test = { cmd = "luajit -v 2>&1", expected = "LuaJIT {{version}}" }

Copilot uses AI. Check for mistakes.
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>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is ON, but a Cloud Agent failed to start.

{
asdf("asdf:clojure", "asdf:clojure", "clojure");
asdf("clojure", "asdf:mise-plugins/mise-clojure", "clojure");
conda("clojure", "conda:clojure", "clojure");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)

Fix in Cursor Fix in Web

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>
@github-actions
Copy link

github-actions bot commented Feb 10, 2026

Hyperfine Performance

mise x -- echo

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%

jdx and others added 2 commits February 10, 2026 13:54
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>
@jdx jdx changed the title registry: add conda backends for 16 asdf-only tools registry: add conda backends for 10 asdf-only tools Feb 10, 2026
@jdx jdx merged commit b1e4362 into main Feb 10, 2026
36 checks passed
@jdx jdx deleted the registry/add-conda-backends branch February 10, 2026 14:15
jdx added a commit that referenced this pull request Feb 11, 2026
…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>
jdx pushed a commit that referenced this pull request Feb 12, 2026
### 🚀 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)
jdx pushed a commit that referenced this pull request Feb 12, 2026
### 🚀 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)
lucasew pushed a commit to lucasew/CONTRIB-mise that referenced this pull request Feb 18, 2026
## 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>
lucasew pushed a commit to lucasew/CONTRIB-mise that referenced this pull request Feb 18, 2026
…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>
lucasew pushed a commit to lucasew/CONTRIB-mise that referenced this pull request Feb 18, 2026
### 🚀 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)
lucasew pushed a commit to lucasew/CONTRIB-mise that referenced this pull request Feb 18, 2026
### 🚀 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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants