Skip to content

registry: remove registry depends#9571

Merged
jdx merged 5 commits intojdx:mainfrom
risu729:feat/registry-install-depends
May 5, 2026
Merged

registry: remove registry depends#9571
jdx merged 5 commits intojdx:mainfrom
risu729:feat/registry-install-depends

Conversation

@risu729
Copy link
Copy Markdown
Contributor

@risu729 risu729 commented May 3, 2026

Summary

  • Rebased this branch onto current main after registry: remove bashly asdf fallback #9578 and registry: use github backend for rebar #9576 landed, then fast-forwarded over the latest main lockfile maintenance merge.
  • Removed registry-level depends from generated RegistryTool, the registry schema, and backend dependency expansion.
  • Added test.tools support for registry tests. This is consumed only by mise test-tool; it does not affect normal installs.
  • Kept backend/tool optional dependency support outside the registry.

Why registry depends is not needed

Registry depends mixed unrelated concerns: install ordering, runtime companions, and tools needed only for registry tests. That made shorthand registry entries apply dependencies too broadly across every backend.

The remaining valid dependency paths are covered elsewhere:

  • vfox plugins can declare install dependencies in plugin metadata with PLUGIN.depends; mise already reads those through the vfox backend.
  • asdf plugins require depends, but rebar was the only registry entry still relying on that path, and registry: use github backend for rebar #9576 moved it to github:erlang/rebar3. New asdf plugins are not being added to the registry.
  • backend install hooks that need extra external tools are too fragile for registry shorthand entries. Those tools should not be added to the registry just to satisfy postinstall scripts.
  • tools needed only to execute test.cmd belong in test.tools, which is consumed only by mise test-tool and does not affect normal installs.

Registry file changes (registry/*.toml)

Tool Change
android-sdk Removed root depends = ["java"]; added test.tools = ["java"] because the vendored vfox metadata notes Java 11+ and sdkmanager shells out to java.
elixir Removed root depends = ["erlang"]; core:elixir handles Erlang as a backend dependency.
google-java-format Removed root depends = ["java"]; its Linux registry asset is a native executable, and the Docker probe passed without adding Java.
gradle Removed root depends = ["java"]; added test.tools = ["java"] because the Gradle launcher requires java for gradle -V.
kscript Removed root depends = ["kotlin"]; added test.tools = ["kotlin"] after Docker/registry CI showed kscript --version fails without Kotlin.
ktlint Removed root depends = ["java"]; its registry test remains disabled.
kubecolor Removed root depends = ["kubectl"]; mise x kubecolor -- kubecolor --kubecolor-version passed in the e2e Docker image with no kubectl on PATH, so no test.tools entry is needed.
pipenv Removed root depends = ["python"]; added test.tools = ["python"] because the vendored vfox post-install hook creates a venv with python3/python, and the test should not rely on system Python.
pipx Removed root depends = ["python"]; added test.tools = ["python"] because the aqua pipx.pyz launcher uses #!/usr/bin/env python3.
rebar Removed root depends = ["erlang"]; #9576 moved this registry entry to github:erlang/rebar3; added test.tools = ["erlang"] because rebar3 --version needs the Erlang runtime.
sbt Removed root depends = ["java"]; the conda backend installs OpenJDK in the package environment and the Docker probe passed without registry test.tools.
spark Removed root depends = ["java"]; no registry test command is present.
tridentctl Removed root depends = ["kubectl"]; tridentctl version --client passed in Docker without kubectl.

vfox notes

  • vfox-android-sdk is vendored in crates/vfox/embedded-plugins/; its metadata says Java 11+ is required, and the installed sdkmanager launcher checks JAVA_HOME/java. Its post-install hook only uses common shell utilities (mv, mkdir, rm, chmod), which are not registry tools.
  • vfox-pipenv is vendored in crates/vfox/embedded-plugins/; its post-install hook explicitly searches for python3/python, creates a venv, then runs pip. Utility shell usage such as pwd, mkdir, and chmod is intentionally ignored.
  • vfox-gradle is not vendored under crates/vfox/embedded-plugins/; the registry test still needs Java because the Gradle launcher itself invokes java.

Pipenv note

mise-plugins/vfox-pipenv/pull/1 must be merged for pipenv to work properly through the vfox backend. GitHub Actions and the e2e image currently have Python available, but the registry should not rely on system Python: PLUGIN.depends only declares plugin execution order, so without a managed Python declaration pipenv falls back to whatever system Python is available.

Validation

  • taplo fmt --check registry/android-sdk.toml registry/gradle.toml registry/pipenv.toml registry/pipx.toml registry/kscript.toml registry/rebar.toml
  • git diff --check
  • Docker image used by registry CI: ghcr.io/jdx/mise:e2e
  • Direct Docker probes with mise x <tool> -- <test.cmd> for android-sdk, google-java-format, gradle, kscript, kubecolor, pipenv, pipx, sbt, and tridentctl

Copy link
Copy Markdown
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 refactors the depends field in the tool registry, moving it from a global tool property to a per-backend option to improve install-order scheduling and prevent misuse. The changes span registry configurations, documentation, the JSON schema, and the internal logic for parsing and promoting backend options. A critical issue was identified in src/registry.rs where the presence of bracketed options in the backend string prevents the retrieval of registry-defined defaults, and a fix was proposed to strip these options before lookup.

Comment thread src/registry.rs
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 3, 2026

Greptile Summary

This PR replaces registry-level depends (which applied dependencies too broadly across all backends) with two targeted mechanisms: per-backend options = { depends = [...] } for install-time ordering, and a new test.tools field on the registry test struct consumed exclusively by mise test-tool. The RegistryToolTest tuple is promoted to a named struct with cmd, expected, and tools fields.

  • Registry cleanup: thirteen registry/*.toml files have their root depends removed; five of those add test.tools entries for tools that are only needed to run the test command (e.g. gradle -V needs java).
  • Code changes: build.rs now embeds test.tools into the generated RegistryToolTest; src/cli/test_tool.rs installs those tools alongside the primary tool before executing the test; src/backend/mod.rs drops the code that injected registry depends into install-time dependency resolution.

Confidence Score: 5/5

The change is safe to merge: removing registry-level depends narrows the scope of auto-injected install dependencies to the correct layers, and test.tools is strictly scoped to mise test-tool with no effect on normal installs.

All thirteen registry depends removals are either covered by backend-native dependency declarations (vfox PLUGIN.depends, core:elixir built-in Erlang handling) or intentionally deferred. The new test.tools path in build.rs reads the TOML array directly without any serialization round-trip. The subprocess test path re-reads from the registry, so test.tools is correctly applied in both parallel and in-process modes.

No files require special attention; the most sensitive path (src/backend/mod.rs) is a straightforward four-line deletion with no regressions in the surrounding dependency logic.

Reviews (7): Last reviewed commit: "Merge branch 'main' into feat/registry-i..." | Re-trigger Greptile

Comment thread build.rs Outdated
Comment thread src/toolset/tool_version_options.rs Outdated
@risu729 risu729 changed the title feat(registry): per-backend install depends registry: remove install depends May 3, 2026
Comment thread registry/pipenv.toml
@risu729 risu729 force-pushed the feat/registry-install-depends branch from fc2ebd9 to 0d0ca20 Compare May 4, 2026 05:09
@risu729 risu729 changed the title registry: remove install depends registry: remove registry depends May 4, 2026
Comment thread registry/android-sdk.toml Outdated

This comment was marked as outdated.

@risu729
Copy link
Copy Markdown
Contributor Author

risu729 commented May 5, 2026

CI is complete on 270018344.

The registry-specific checks are green now:

  • test-tool-0 passed
  • registry-ci passed

The remaining red status is from unrelated e2e shards:

  • e2e-0: shell/test_xonsh
  • e2e-3: cli/test_activate_multiple_xonsh, sync/test_sync_python_uv
  • e2e-4: cli/test_deactivate_xonsh, cli/test_tool_depends

These are outside the registry/test.tools path touched here. The logs also show repeated Docker temp cleanup permission errors such as rm: cannot remove .../mise-e2e-tmp...: Permission denied, which matches an e2e environment cleanup issue rather than this registry change.

This comment was generated by an AI coding assistant.

@risu729 risu729 marked this pull request as ready for review May 5, 2026 09:44
@jdx jdx merged commit 40660c3 into jdx:main May 5, 2026
35 checks passed
@risu729 risu729 deleted the feat/registry-install-depends branch May 5, 2026 20:16
mise-en-dev added a commit that referenced this pull request May 7, 2026
### 🚀 Features

- **(aqua)** support registry libc variants by @jdx in
[#9652](#9652)
- **(bin-paths)** add executable names output by @risu729 in
[#9617](#9617)

### 🐛 Bug Fixes

- **(aqua)** preserve configured file extensions by @risu729 in
[#9611](#9611)
- **(aqua)** support registry file links by @risu729 in
[#9610](#9610)
- **(backend)** reject bare package backend names by @risu729 in
[#9608](#9608)
- **(backend)** apply inline tool option overrides by @risu729 in
[#9306](#9306)
- **(backend)** skip versions host for local tool opts by @risu729 in
[#9568](#9568)
- **(github)** chmod explicit archive bin by @risu729 in
[#9609](#9609)
- **(install)** skip remote-versions refresh in prefer-offline mode by
@jdx in [#9627](#9627)
- **(lock)** scope targets to active project root by @risu729 in
[#9319](#9319)
- **(lockfile)** respect existing platforms during auto-lock by @jdx in
[#9621](#9621)
- **(pipx)** filter yanked pypi releases by @risu729 in
[#9607](#9607)
- **(pipx)** declare python as a backend dependency by @jdx in
[#9678](#9678)
- **(schema)** update refs to $defs in mise-registry-tool.json by
@risu729 in [#9671](#9671)
- **(task)** terminate parallel siblings on failure via process groups
by @jdx in [#9655](#9655)
- **(task)** stable MISE_PROJECT_ROOT for monorepo tasks, add
MISE_MONOREPO_ROOT by @jdx in
[#9657](#9657)
- **(trust)** run enter hooks after trusting config by @risu729 in
[#9634](#9634)
- **(ui)** stop clearing screen for prompts by @jdx in
[#9619](#9619)
- use /bin/cp on macos by @pdehlke in
[#9656](#9656)

### 🚜 Refactor

- **(aqua)** store aqua var defaults as strings by @risu729 in
[#9645](#9645)
- **(config)** support structured TOML values in registry backend
options by @risu729 in [#9584](#9584)
- **(deps)** remove serde_derive dependency by @risu729 in
[#9670](#9670)
- **(deps)** remove anyhow dependency by @risu729 in
[#9661](#9661)
- **(deps)** use std::sync::LazyLock instead of once_cell::Lazy by
@risu729 in [#9668](#9668)
- **(schema)** generate task schema from mise schema by @risu729 in
[#9581](#9581)
- **(schema)** reuse task props with unevaluatedProperties by @risu729
in [#9582](#9582)
- **(schema)** reuse registry common types by @risu729 in
[#9648](#9648)
- **(schema)** reuse plugin script config by @risu729 in
[#9647](#9647)
- **(schema)** use $defs in schema files by @risu729 in
[#9646](#9646)

### 📚 Documentation

- **(node)** add tips for enabling node idiomatic by @fu050409 in
[#9675](#9675)

### 🧪 Testing

- **(cli)** remove nondeterministic tool depends assertion by @risu729
in [#9633](#9633)
- **(e2e)** pin uv to 0.11.8 around astral-sh/uv#19278 by @jdx in
[#9618](#9618)
- **(e2e)** wait for docker env cleanup by @risu729 in
[#9631](#9631)
- **(zig)** use official zig instead of mach mirror by @jdx in
[#9659](#9659)

### 📦️ Dependency Updates

- fall through to hash check when providers have no outputs by @jdx in
[#9622](#9622)
- bump Cargo.lock by @jdx in
[#9625](#9625)

### 📦 Registry

- remove registry depends by @risu729 in
[#9571](#9571)
- add code-review-graph (pipx:code-review-graph) by @chautruonglong in
[#9673](#9673)

### Chore

- **(ci)** split large registry test-tool changes by @risu729 in
[#9628](#9628)
- **(ci)** make perf script robust to runner noise by @jdx in
[#9635](#9635)
- **(ci)** skip hyperfine comments without permission by @risu729 in
[#9629](#9629)

### New Contributors

- @chautruonglong made their first contribution in
[#9673](#9673)
- @pdehlke made their first contribution in
[#9656](#9656)

## 📦 Aqua Registry Updates

### New Packages (5)

-
[`anthropics/anthropic-cli`](https://github.com/anthropics/anthropic-cli)
- [`crates.io/wasmi_cli`](https://github.com/wasmi-labs/wasmi)
- [`openclaw/gogcli`](https://github.com/openclaw/gogcli)
- `racket-lang.org/racket-minimal`
- [`runs-on/cli`](https://github.com/runs-on/cli)

### Updated Packages (13)

- [`UpCloudLtd/upcloud-cli`](https://github.com/UpCloudLtd/upcloud-cli)
- [`aristocratos/btop`](https://github.com/aristocratos/btop)
- [`dprint/dprint`](https://github.com/dprint/dprint)
- [`j178/prek`](https://github.com/j178/prek)
- [`jdx/hk`](https://github.com/jdx/hk)
- [`jdx/mise`](https://github.com/jdx/mise)
- [`jdx/usage`](https://github.com/jdx/usage)
- [`jreleaser/jreleaser`](https://github.com/jreleaser/jreleaser)
-
[`jreleaser/jreleaser/standalone`](https://github.com/jreleaser/jreleaser)
- [`pnpm/pnpm`](https://github.com/pnpm/pnpm)
- [`suzuki-shunsuke/cmdx`](https://github.com/suzuki-shunsuke/cmdx)
- [`suzuki-shunsuke/ghir`](https://github.com/suzuki-shunsuke/ghir)
- [`twpayne/chezmoi`](https://github.com/twpayne/chezmoi)
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