Conversation
Greptile SummaryThis PR adds support for aqua registry
Confidence Score: 5/5Safe to merge; all production call sites thread the new libc context consistently and the prior asset-validation double-fetch is cleanly eliminated. The change is well-scoped: every with_version call in aqua.rs has been updated to with_version_libc, the fallback to gnu on a standard glibc system is correct and matches the existing target_libc precedence, and the removal of package_with_version eliminates the previously flagged libc-divergence. New unit tests cover gnu match, musl match, unknown-key skip, and no-runtime fallback. No production path is left using the old unaware API. No files require special attention. Reviews (5): Last reviewed commit: "feat(aqua): support registry libc varian..." | Re-trigger Greptile |
There was a problem hiding this comment.
Code Review
This pull request introduces support for libc runtime variants (gnu and musl) within the Aqua registry, allowing for more precise version resolution on Linux systems. The changes include new data structures for variants, updated matching logic, and backend integration for libc detection. Feedback highlights several performance improvements, such as avoiding redundant allocations by iterating by reference and moving platform detection logic outside of loops. Additionally, it is recommended to refine the libc detection logic to prioritize tool-specific configurations over global settings to ensure consistency.
| if let Some(avo) = self | ||
| .overrides | ||
| .clone() | ||
| .into_iter() | ||
| .find(|o| o.matches(os, arch, runtime)) | ||
| { | ||
| self = apply_override(self, &avo.pkg) | ||
| } |
There was a problem hiding this comment.
The current implementation clones the entire overrides vector and its contents for every version resolution. Since apply_override takes a reference to the package, you can iterate by reference and avoid unnecessary allocations.
if let Some(avo) = self.overrides.iter().find(|o| o.matches(os, arch, runtime)) {
self = apply_override(self, &avo.pkg)
}| let target = PlatformTarget::from_current(); | ||
| let libc = if target.os_name() == "linux" { | ||
| Some(target.libc().unwrap_or("gnu")) | ||
| } else { | ||
| None | ||
| }; |
There was a problem hiding this comment.
This libc detection logic should be updated to follow the repository's configuration pattern. Instead of re-deriving the libc setting from a general context like Settings::get(), which can lead to lost configurations, it should consult the backend arguments and tool-specific configuration (e.g., ba.opts() and config.get_tool_opts(&ba)). This is especially important if the method is an override.
let target = PlatformTarget::from_current();
let libc = if target.os_name() == "linux" {
let tool_opts = config.get_tool_opts(&ba);
Some(target.libc().or(tool_opts.libc).unwrap_or("gnu"))
} else {
NoneReferences
- When checking for the
version_list_urloption, consult both the backend arguments (ba.opts()) and the user's tool-specific configuration (config.get_tool_opts(&ba)) to ensure custom configurations from sources likeconfig.tomlare correctly detected. - When overriding a method, use the provided parameters instead of re-deriving their values from a more general context. The parameters may have been computed with specific configurations that would be lost if re-derived.
| let target = PlatformTarget::from_current(); | ||
| let (target_os, target_arch) = Self::to_aqua_platform(&target); | ||
| let target_libc = Self::target_variant_libc(&target); |
| let target = PlatformTarget::from_current(); | ||
| let (target_os, target_arch) = Self::to_aqua_platform(&target); | ||
| let target_libc = Self::target_variant_libc(&target); |
Hyperfine Performance
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.5.1 x -- echo |
64.2 ± 9.2 | 29.0 | 85.8 | 1.01 ± 0.20 |
mise x -- echo |
63.8 ± 8.6 | 32.6 | 90.6 | 1.00 |
mise env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.5.1 env |
65.1 ± 6.0 | 31.5 | 79.5 | 1.00 |
mise env |
65.5 ± 4.3 | 35.7 | 91.6 | 1.01 ± 0.11 |
mise hook-env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.5.1 hook-env |
68.6 ± 2.3 | 55.7 | 77.4 | 1.00 ± 0.06 |
mise hook-env |
68.4 ± 3.1 | 48.2 | 90.4 | 1.00 |
mise ls
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.5.1 ls |
55.1 ± 2.8 | 31.4 | 64.7 | 1.03 ± 0.10 |
mise ls |
53.7 ± 4.4 | 20.0 | 78.7 | 1.00 |
xtasks/test/perf
| Command | mise-2026.5.1 | mise | Variance |
|---|---|---|---|
| install (cached) | 284ms | 281ms | +1% |
| ls (cached) | 182ms | 188ms | -3% |
| bin-paths (cached) | 205ms | 207ms | +0% |
| task-ls (cached) | 708ms | 678ms | +4% |
d9c6e9d to
053e1ec
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 053e1ec. Configure here.
16fb895 to
8b84212
Compare
8b84212 to
0a92661
Compare
### 🚀 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)

Summary
overrides[].variantsentries using the new{ key, value }shape.key: libcmatching for Linuxgnuandmusltargets while skipping unknown variant keys.linux-x64-musl.Validation
cargo fmt --checkcargo test -p aqua-registry override_variantscargo check -p misehkchecks during commit, includingcargo check --all-featuresThis PR was generated by an AI coding assistant.
Note
Medium Risk
Changes platform override resolution for Aqua packages (including lockfile resolution and remote version listing), which can affect which release assets/URLs are selected on Linux. Risk is mitigated by added unit tests, but incorrect variant matching could cause install/lock mismatches.
Overview
Adds support for aqua registry
overrides[].variantsand uses it to select Linuxgnuvsmuslassets when resolving package overrides.AquaPackagenow supportswith_version_libc(...)and override matching incorporates runtime variants (currentlykey: libc, normalized), while unknown variant keys are ignored; backend call sites are updated to pass the target libc (including cross-platform lock targets) and remove the wrapper/registrypackage_with_versionhelper. Also hardensscripts/test-standalone.shnetwork fetches by adding curl retries.Reviewed by Cursor Bugbot for commit 0a92661. Bugbot is set up for automated code reviews on this repo. Configure here.