Skip to content

refactor(config): support structured TOML values in registry backend options#9584

Merged
jdx merged 8 commits intojdx:mainfrom
risu729:fix/registry-structured-options
May 6, 2026
Merged

refactor(config): support structured TOML values in registry backend options#9584
jdx merged 8 commits intojdx:mainfrom
risu729:fix/registry-structured-options

Conversation

@risu729
Copy link
Copy Markdown
Contributor

@risu729 risu729 commented May 3, 2026

Registry backend options are now parsed as full TOML values (booleans, integers, arrays, tables) instead of only strings. This enables richer option types like nested platform-specific configurations.

Changes

  • build.rs: serialize option values via toml::ser::ValueSerializer so nested tables round-trip correctly into the generated code
  • src/registry.rs: parse option strings as toml::Value at runtime instead of treating them all as strings
  • schema: add recursive optionValue definition allowing string, number, boolean, array, and object types
  • Cargo.toml: add serde dev-dependency for ValueSerializer

TOML datetime values are not explicitly denied — they are simply unsupported since the serializer does not produce them in practice.

…options

Registry backend options are now parsed as full TOML values (booleans,
integers, arrays, tables) instead of only strings. This enables richer
option types like nested platform-specific configurations.

- build.rs: serialize option values via toml::ser::ValueSerializer
  so nested tables round-trip correctly into the generated code
- src/registry.rs: parse option strings as toml::Value at runtime
- schema: add recursive optionValue definition allowing string,
  number, boolean, array, and object types
- Cargo.toml: add serde dev-dependency for ValueSerializer
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 3, 2026

Greptile Summary

This PR refactors registry backend option parsing to support structured TOML values (booleans, integers, arrays, and tables) instead of treating all options as plain strings. build.rs is updated to serialize options via toml::ser::ValueSerializer, and registry.rs parses them back as typed toml::Value at runtime.

  • Backend call sites in http.rs, static_helpers.rs, pipx.rs, and aqua.rs are migrated from opts.get() (strings only) to opts.get_string(), which coerces scalar types to their string representation, preventing silent None returns for integer or boolean registry values.
  • The JSON schema is extended with a recursive optionValue definition that covers string, number, boolean, array, and object types, replacing the prior oneOf: [string, boolean] constraint.
  • New unit tests cover the full serialization/deserialization round-trip and confirm scalar coercion via get_string.

Confidence Score: 4/5

Safe to merge after resolving the outstanding no_app regression in github.rs noted in prior review comments.

The changed files are correctly updated to use get_string where previously get would silently drop non-string values. However, github.rs (not in this diff) still reads no_app via opts.get at three call sites. Since swiftformat.toml sets no_app = true as a TOML boolean, that option is now stored as Boolean(true) after this PR, and opts.get() returns None for non-String variants — meaning .app bundles are no longer penalized when installing swiftformat. This was flagged in a prior review round and remains unaddressed.

src/backend/github.rs — three opts.get("no_app") sites that are not part of this diff but are broken by the value-type change this PR introduces.

Reviews (8): Last reviewed commit: "Merge branch 'main' into fix/registry-st..." | Re-trigger Greptile

Comment thread src/registry.rs Outdated
@risu729 risu729 marked this pull request as ready for review May 4, 2026 06:02
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@jdx
Copy link
Copy Markdown
Owner

jdx commented May 5, 2026

looks good but has merge conflicts

@jdx
Copy link
Copy Markdown
Owner

jdx commented May 5, 2026

looks good, has merge conflicts

@risu729

This comment was marked as outdated.

@jdx jdx enabled auto-merge (squash) May 5, 2026 21:04
@jdx jdx merged commit c1335eb into jdx:main May 6, 2026
34 checks passed
@risu729 risu729 deleted the fix/registry-structured-options branch May 6, 2026 01:20
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