Skip to content

fix(schema): accept [bootstrap.secrets] - #14322

Merged
jdx merged 1 commit into
jdx:mainfrom
JamBalaya56562:fix-schema-bootstrap-secrets
Oct 12, 2026
Merged

jdx merged 1 commit into
jdx:mainfrom
JamBalaya56562:fix-schema-bootstrap-secrets

Conversation

@JamBalaya56562

@JamBalaya56562 JamBalaya56562 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

[bootstrap.secrets] was missing from the JSON schema, so a strict schema checker such as tombi rejected any config that used it, even though mise reads it:

[bootstrap.secrets]
github_token = "GITHUB_TOKEN"
"deploy.key" = { env = "DEPLOY_KEY", description = "Deploy key", allow_empty = true }

The schema now describes it the way src/system/secrets.rs reads it:

  • The key is the secret name. It uses ASCII letters, digits, ., _ or -.
  • The value is an environment variable name, either as a string or as a table with env, description and allow_empty.

The table form rejects unknown keys. mise silently ignores a misspelled option such as allow_emty = true, which leaves allow_empty at its default, so the schema is where that typo can be caught.

This takes over #12789 by @risu729, which pr-closer closed after 7 days of failing checks on the fork run. They are credited as co-author. CodeRabbit and Greptile both left the same open thread on #12789: add additionalProperties: false to the table form. This PR does that.

Validation

  • e2e/config/test_schema_tombi:
    • The strict mise.toml fixture now declares both forms above.
    • Three new fixtures must each fail:
      • an unknown key: "allow_emty" is not allowed;
      • an invalid variable name 1BAD: does not match the pattern ^[A-Za-z_][A-Za-z0-9_]*$;
      • an invalid secret name bad name: does not match the pattern ^[A-Za-z0-9_.-]+$.
  • Ran tombi 0.9.22: with main's schema the mise.toml fixture fails, and with this PR's it passes. The three invalid fixtures fail with the messages above.
  • With mise 2026.10.5, mise bootstrap secrets status gave these results:
    • It lists both secrets above.
    • It accepts allow_emty without a word.
    • It rejects 1BAD (invalid environment variable name) and bad name (invalid bootstrap secret name). These are the same rules the schema now applies.

AI-assisted β€” Tool: Claude Code; model: anthropic/claude-opus-5-5; version: unavailable.

πŸ€– Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added schema support for configuring bootstrap secrets by environment-variable name or object. Secret objects can include a description and an allow_empty setting, which defaults to false.
  • Bug Fixes
    • The schema now rejects invalid secret names, environment-variable names, and secret table keys. Added regression coverage for valid and invalid bootstrap-secret configurations.

Co-authored-by: Taku Kodama <79110363+risu729@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack β†’

No actionable comments were generated in the recent review. πŸŽ‰

ℹ️ Recent review info
βš™οΈ Run configuration
  • Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 46e3d96c-226f-4996-96fa-9ec25c7b0815

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between f4c616d and 9c7e4ad.


πŸ“’ Files selected for processing (2)
  • e2e/config/test_schema_tombi
  • schema/mise.json

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.



πŸ“ Walkthrough

Walkthrough

The bootstrap secret schema now defines accepted secret names and value forms. The tombi regression test covers valid declarations and rejects invalid table options, environment-variable names, and secret names.

Changes

Bootstrap secret schema

Layer / File(s) Summary
Bootstrap secret schema and validation coverage
schema/mise.json, e2e/config/test_schema_tombi
The schema defines secret-name and environment-variable patterns, accepted value forms, and optional object fields. The regression test adds valid examples and invalid lint cases.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Suggested reviewers: jdx


Merge Risk: βšͺ Minimal Β· up to 9c7e4

No actionable merge-blocking risk is identified; the change is ready for normal checks.

Pre-merge checks | Passed 5
βœ… Passed checks (5 passed)
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main change: adding schema support for [bootstrap.secrets].
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.

  • Autofix Β· Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❀️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no actionable issues were found.

Summary

Adds [bootstrap.secrets] to the configuration schema.

  • Strict schema checkers accept valid bootstrap secrets and reject invalid names or options.

JamBalaya56562 explicitly described rejecting unknown table fields as intentional: mise ignores misspelled fields, so the schema should catch them.

No actionable issues found. Tests were not run during this review.

Reviews (1) Β· Last reviewed commit: "fix(schema): accept [bootstrap.secrets]" Β· Reviewed by Greptile

@jdx
jdx merged commit 76c6466 into jdx:main Oct 12, 2026
50 of 52 checks passed
@JamBalaya56562
JamBalaya56562 deleted the fix-schema-bootstrap-secrets branch October 12, 2026 21:35
jdx pushed a commit that referenced this pull request Oct 13, 2026
<!-- entire-trail-link-start -->
https://entire.io/gh/jdx/mise/trails/640
<!-- entire-trail-link-end -->

### πŸš€ Features

- **(bootstrap)** add apt repositories and PPAs with
[bootstrap.apt.sources] by @jdx in
[#14306](#14306)
- **(bootstrap)** embed apt source signing keys inline in .sources files
by @jdx in [#14348](#14348)
- **(bootstrap)** render templates in [bootstrap.repos] checkout paths
by @jdx in [#14359](#14359)
- **(bootstrap)** declare macOS login items by @jdx in
[#14354](#14354)
- **(bootstrap)** layer dnf packages with rpm-ostree on Fedora Atomic
hosts by @jdx in [#14357](#14357)
- **(bootstrap)** support run0 and doas for privilege elevation by @jdx
in [#14351](#14351)
- **(dotfiles)** show tracked entries that no variant selects in status
by @jdx in [#14266](#14266)
- **(dotfiles)** group mise dot status into sections by @jdx in
[#14361](#14361)
- **(github)** add oauth_copy_code to copy the device code to the
clipboard by @jdx in [#14269](#14269)
- **(github)** keep the native OAuth refresh token in a password manager
or keychain by @jdx in [#14360](#14360)
- **(http)** add libc() and avx2() template functions by @jdx in
[#14298](#14298)
- **(pypi)** read upload times from PEP 691 simple indexes by @jdx in
[#14352](#14352)
- **(rust)** download rustup-init from RUSTUP_UPDATE_ROOT by @jdx in
[#14356](#14356)

### πŸ› Bug Fixes

- **(aqua)** warn once for packages with no repo to list versions from
by @jdx in [#14336](#14336)
- **(backend)** keep decoded download file names inside the download
directory by @JamBalaya56562 in
[#14274](#14274)
- **(bootstrap)** support dnf package groups by @jdx in
[#14347](#14347)
- **(bootstrap)** don't print a stdin-only helper as a manual command by
@jdx in [#14350](#14350)
- **(bootstrap)** explain why dnf packages cannot install on ostree
hosts by @jdx in [#14353](#14353)
- **(brew)** install bottle etc files and run post_install_steps when
pouring by @jdx in [#14272](#14272)
- **(brew)** refuse to chown a prefix owned by another user by @jdx in
[#14345](#14345)
- **(brew)** preserve protected post-install copy destinations by @jdx
in [#14311](#14311)
- **(brew-cask)** support generate completions in evaluated casks by
@pmmmwh in [#14255](#14255)
- **(docker)** install libatomic1 in the Debian image so Node.js 26 runs
by @jdx in [#14303](#14303)
- **(dotfiles)** keep existing ciphertext when an encrypted file is
unchanged by @jdx in [#14300](#14300)
- **(dotfiles)** stop a newly selected profile from deleting its shared
file by @jdx in [#14275](#14275)
- **(dotfiles)** restore config entries when adopting under a symlinked
home by @jdx in [#14315](#14315)
- **(dotfiles)** show per-file diffs for directory copy entries in dot
diff by @jdx in [#14333](#14333)
- **(dotfiles)** apply mise's own config before planning the other
entries by @jdx in [#14339](#14339)
- **(go)** read an exact go line in go.mod as the toolchain version by
@jdx in [#14308](#14308)
- **(http)** retry artifact downloads started by mise exec and shims by
@jdx in [#14342](#14342)
- **(npm)** resolve unlocked latest to the npm version of a graph-locked
install by @jdx in [#14307](#14307)
- **(npm)** give unlocked requests their own install under the identity
layout by @jdx in [#14309](#14309)
- **(oci)** ignore host apt hooks when installing apt bootstrap packages
by @jdx in [#14296](#14296)
- **(packslip)** let a workflow list carry the signer pin across a
workflow move by @jdx in
[#14338](#14338)
- **(packslip)** keep a renamed project's lockfile signer under packslip
1.7 by @jdx in [#14362](#14362)
- **(prune)** keep a uv-locked pipx tool's installs for every Python by
@jdx in [#14335](#14335)
- **(prune)** keep versions of task-scoped tools by @jdx in
[#14334](#14334)
- **(schema)** accept [bootstrap.secrets] by @JamBalaya56562 in
[#14322](#14322)
- **(schema)** accept [bootstrap.groups] and [bootstrap.users] by
@JamBalaya56562 in [#14340](#14340)
- **(schema)** accept table forms for vars._.file and vars._.source by
@JamBalaya56562 in [#14383](#14383)
- **(shim)** keep other projects' command wrappers on reshim by @jdx in
[#14355](#14355)
- **(task)** bump gix so remote tasks work in git hooks by @any-victor
in [#14316](#14316)
- hide the Windows console for the tool-update service by @jdx in
[#14344](#14344)

### 🚜 Refactor

- replace serde_yaml with serde-saphyr by @jdx in
[#14328](#14328)

### πŸ“š Documentation

- **(bootstrap)** explain when to use --from versus --adopt by @jdx in
[#14301](#14301)
- **(bootstrap)** recommend fish = "auto" for fish shell activation by
@jdx in [#14304](#14304)
- **(dotfiles)** explain when to use sync, pull, and apply by @jdx in
[#14343](#14343)
- **(shims)** explain how to check whether a tool is installed by @jdx
in [#14337](#14337)
- switch body text to DM Sans and tighten the releases page by @jdx in
[#14302](#14302)
- self-host DM Sans and JetBrains Mono so they load on mise.jdx.dev by
@jdx in [#14310](#14310)

### πŸ§ͺ Testing

- **(bootstrap)** don't depend on bc being absent in the apt sources
test by @jdx in [#14371](#14371)

### πŸ“¦οΈ Dependency Updates

- install Homebrew uses_from_macos dependencies on Linux by @itskyf in
[#14288](#14288)
- bump packslip to 1.7.0 by @jdx in
[#14363](#14363)
- lock file maintenance by @renovate[bot] in
[#14320](#14320)
- update github actions by @renovate[bot] in
[#14380](#14380)
- update dependency python to v3.14.8 by @renovate[bot] in
[#14381](#14381)
- update rust crates by @renovate[bot] in
[#14382](#14382)
- update docker images by @renovate[bot] in
[#14379](#14379)

### πŸ“¦ Registry

- install opencode 2 from npm by @jdx in
[#14295](#14295)

### Chore

- **(ci)** switch to jactionlint v2 and drop zizmor by @jdx in
[#14256](#14256)
- fix CI for the aqua registry update and the unsafe-libyaml advisory by
@jdx in [#14326](#14326)

### Ci

- double the unit-macos job timeout by @jdx in
[#14346](#14346)

### Security

- **(config)** require trust for path: tool versions by @jdx in
[#14358](#14358)

### New Contributors

- @pmmmwh made their first contribution in
[#14255](#14255)
- @itskyf made their first contribution in
[#14288](#14288)

## πŸ“¦ Aqua Registry Updates

### New Packages (3)

- [`Alice39s/xmtr`](https://github.com/Alice39s/xmtr)
-
[`bufbuild/protoschema-plugins/protoc-gen-jsonschema`](https://github.com/bufbuild/protoschema-plugins)
- [`takumin/qemu-bin`](https://github.com/takumin/qemu-bin)

### Updated Packages (3)

- [`bootandy/dust`](https://github.com/bootandy/dust)
-
[`connectrpc/connect-go/protoc-gen-connect-go`](https://github.com/connectrpc/connect-go)
- [`sharkdp/hyperfine`](https://github.com/sharkdp/hyperfine)
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