Skip to content

fix(registry): allow shfmt on Windows#9191

Merged
jdx merged 1 commit intojdx:mainfrom
zeitlinger:fix/shfmt-windows-registry
Apr 17, 2026
Merged

fix(registry): allow shfmt on Windows#9191
jdx merged 1 commit intojdx:mainfrom
zeitlinger:fix/shfmt-windows-registry

Conversation

@zeitlinger
Copy link
Copy Markdown
Contributor

Summary

  • Remove os = ["linux", "macos"] from registry/shfmt.toml
  • Bundled aqua-registry snapshot already supports shfmt on Windows (feat(shfmt): add Windows support aquaproj/aqua-registry#51964)
  • aqua auto-completes .exe suffix for format: raw assets, so aqua:mvdan/sh works on Windows
  • go:mvdan.cc/sh/v3/cmd/shfmt cross-compiles fine

Currently the bare shfmt short name is filtered out on Windows at the short-name dispatcher layer before it can reach the aqua backend, forcing Windows users to specify aqua:mvdan/sh explicitly.

Test plan

  • CI

Bundled aqua-registry supports Windows for mvdan/sh (aqua
auto-completes .exe for format: raw). go backend works cross-platform.
Signed-off-by: Gregor Zeitlinger <[email protected]>
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 removes the explicit operating system restrictions for the shfmt tool in the registry configuration, which likely enables its use on additional platforms such as Windows. I have no feedback to provide as there were no review comments to evaluate.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 17, 2026

Greptile Summary

Removes the os = ["linux", "macos"] constraint from registry/shfmt.toml, enabling the shfmt short name to resolve on Windows. The aqua backend (aqua:mvdan/sh) handles Windows via the .exe suffix auto-completion in the bundled aqua-registry, the go backend cross-compiles natively, and the asdf backend is already automatically excluded on Windows by the registry.rs dispatcher (line 78-80), so no Windows user will hit an unsupported backend path.

Confidence Score: 5/5

Safe to merge — the one-line removal is correct and well-supported by the existing backend dispatcher logic.

The change is minimal (one line removed) and the PR description correctly identifies why each backend works: aqua handles .exe auto-completion on Windows, go cross-compiles fine, and asdf is already excluded on Windows by the registry dispatcher. No regressions on Linux/macOS since only the Windows filter is lifted.

No files require special attention.

Important Files Changed

Filename Overview
registry/shfmt.toml Removes overly restrictive os = ["linux", "macos"] so Windows users can install shfmt via aqua or go backends; asdf is already auto-excluded on Windows by the backend dispatcher.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["User: mise install shfmt on Windows"] --> B{"is_supported_os?"}
    B -->|"Before PR: os=['linux','macos'] = false"| C["Tool unavailable on Windows"]
    B -->|"After PR: os=[] = true"| D["backends() called"]
    D --> E{"Filter BACKEND_TYPES"}
    E -->|"asdf removed on Windows"| F["aqua:mvdan/sh\ngo:mvdan.cc/sh/v3/cmd/shfmt"]
    F --> G["shfmt.exe installed via aqua or go"]
Loading

Reviews (1): Last reviewed commit: "fix(registry): allow shfmt on Windows" | Re-trigger Greptile

@zeitlinger zeitlinger marked this pull request as ready for review April 17, 2026 11:33
@jdx jdx merged commit ad5c583 into jdx:main Apr 17, 2026
36 checks passed
@zeitlinger zeitlinger deleted the fix/shfmt-windows-registry branch April 17, 2026 12:06
zeitlinger added a commit to grafana/flint that referenced this pull request Apr 18, 2026
Stacked on #187.

Two small migrations derived from the flint-v2 design todos:

### 1. `shfmt` → `github:mvdan/sh`

Bare `shfmt` resolves via aqua registry, which is broken in current
mise releases. `github:mvdan/sh` works (paired with the existing
`versioned_bin("shfmt_{version}")` wiring). Adds the mapping to
`OBSOLETE_KEYS` so `flint update` rewrites existing mise.toml files
non-interactively. Remove once
[jdx/mise#9191](jdx/mise#9191) ships
(v2026.4.17+) and #175 lands the bare `shfmt` restoration via
`aqua:mvdan/sh`.

### 2. Auto-add `node` prereq for `npm:` backend tools

npm-backed tools (prettier, biome, markdownlint-cli2, renovate) need
the `npm` command, which needs a Node.js runtime. Without an explicit
`node` entry, mise falls back to system node — may be absent, wrong
version, or drift across machines, breaking the "reproducible lint
environment" promise.

`flint init` and `flint update` now detect this and pin `node@lts`
via `mise use --pin` (resolves to a concrete version at write time).

## Test plan
- [ ] Unit tests pass (`cargo test --bin flint`)
- [ ] E2E tests pass (`cargo test --test e2e`)
- [ ] Run `flint update` on a repo with `npm:prettier` but no `node` →
adds node
- [ ] Run `flint update` on a repo with bare `shfmt` → rewritten to
`github:mvdan/sh`

---------

Signed-off-by: Gregor Zeitlinger <[email protected]>
jdx pushed a commit that referenced this pull request Apr 18, 2026
### 🐛 Bug Fixes

- **(backend)** respect install_before in latest lookup by @risu729 in
[#9193](#9193)
- **(backend)** route explicit latest through stable lookup by @risu729
in [#9228](#9228)
- **(backends)** deprecate b shorthand by @risu729 in
[#9234](#9234)
- **(config)** warn for deprecated env keys by @risu729 in
[#9205](#9205)
- **(config)** treat enable_tools empty as disable-all by @risu729 in
[#9108](#9108)
- **(github)** avoid auth on release asset downloads by @risu729 in
[#9060](#9060)
- **(gitlab)** warn when glab OAuth2 token is expired by @stanhu in
[#9195](#9195)
- **(npm)** honor install_before without day drift by @risu729 in
[#9157](#9157)
- **(npm)** warn on old bun and pnpm for install_before by @risu729 in
[#9232](#9232)
- **(pipx)** honor install_before for uv and pipx installs by @risu729
in [#9190](#9190)
- **(registry)** allow shfmt on Windows by @zeitlinger in
[#9191](#9191)

### 🚜 Refactor

- **(backend)** remove unused rolling release helper by @risu729 in
[#9175](#9175)
- **(backend)** use file util for removals by @risu729 in
[#9206](#9206)

### 📚 Documentation

- **(config)** clarify always_keep_download behavior by @risu729 in
[#9235](#9235)
- **(configuration)** add rust to idiomatic version files by @jjt in
[#9233](#9233)
- **(contributing)** expand contribution guide introduction by
@marianwolf in [#9208](#9208)
- **(github)** document multiple release assets workaround by @risu729
in [#9236](#9236)

### 📦️ Dependency Updates

- update actions/setup-node action to v6 by @renovate[bot] in
[#9183](#9183)
- update dependency @types/node to v25 by @renovate[bot] in
[#9187](#9187)
- update crazy-max/ghaction-import-gpg action to v7 by @renovate[bot] in
[#9186](#9186)
- update actions/cache action to v5 by @renovate[bot] in
[#9181](#9181)
- update amannn/action-semantic-pull-request action to v6 by
@renovate[bot] in [#9184](#9184)
- update apple-actions/import-codesign-certs action to v6 by
@renovate[bot] in [#9185](#9185)
- update dependency eslint to v10 by @renovate[bot] in
[#9200](#9200)
- update dependency toml to v4 by @renovate[bot] in
[#9201](#9201)
- update rust crate reqwest to 0.13 by @renovate[bot] in
[#9171](#9171)
- update ghcr.io/jdx/mise:deb docker digest to 523d826 by @renovate[bot]
in [#9198](#9198)
- update ghcr.io/jdx/mise:alpine docker digest to 05617e0 by
@renovate[bot] in [#9196](#9196)
- update ghcr.io/jdx/mise:rpm docker digest to c1992f9 by @renovate[bot]
in [#9199](#9199)
- update ghcr.io/jdx/mise:copr docker digest to 90db6cd by
@renovate[bot] in [#9197](#9197)
- update taiki-e/install-action digest to 58e8625 by @renovate[bot] in
[#9209](#9209)
- update fedora docker tag to v45 by @renovate[bot] in
[#9213](#9213)
- update docker/setup-buildx-action action to v4 by @renovate[bot] in
[#9212](#9212)
- update docker/metadata-action action to v6 by @renovate[bot] in
[#9211](#9211)
- update docker/login-action action to v4 by @renovate[bot] in
[#9210](#9210)
- update dependency typescript to v6 by @renovate[bot] in
[#9202](#9202)
- update docker/build-push-action action to v7 by @renovate[bot] in
[#9203](#9203)
- update github artifact actions (major) by @renovate[bot] in
[#9215](#9215)
- update rust crate duct to v1 by @renovate[bot] in
[#9220](#9220)
- update rust crate demand to v2 by @renovate[bot] in
[#9219](#9219)
- update rust crate clx to v2 by @renovate[bot] in
[#9218](#9218)
- update nick-fields/retry action to v4 by @renovate[bot] in
[#9217](#9217)
- update jdx/mise-action action to v4 by @renovate[bot] in
[#9216](#9216)
- update rust crate self_update to 0.44 by @renovate[bot] in
[#9174](#9174)
- migrate eslint config to flat format for v10 compat by @jdx in
[#9222](#9222)
- update actions/checkout action to v6 by @renovate[bot] in
[#9182](#9182)
- update rust crate toml to v1 by @renovate[bot] in
[#9225](#9225)
- update rust crate versions to v7 by @renovate[bot] in
[#9226](#9226)
- update rust crate which to v8 by @renovate[bot] in
[#9227](#9227)
- update rust crate rmcp to v1 by @renovate[bot] in
[#9221](#9221)

### 📦 Registry

- add sheldon by @3w36zj6 in
[#9104](#9104)
- add pocketbase by @ranfdev in
[#9123](#9123)
- add worktrunk ([aqua:max-sixty/worktrunk,
cargo:worktrunk](https://github.com/max-sixty/worktrunk,
cargo:worktrunk))#1 by @edouardr in
[#8796](#8796)
- add dependency-check
([aqua:dependency-check/DependencyCheck](https://github.com/dependency-check/DependencyCheck))
by @kapitoshka438 in [#9204](#9204)
- add janet by @ranfdev in
[#9241](#9241)

### New Contributors

- @ranfdev made their first contribution in
[#9241](#9241)
- @jjt made their first contribution in
[#9233](#9233)
- @marianwolf made their first contribution in
[#9208](#9208)
- @edouardr made their first contribution in
[#8796](#8796)

## 📦 Aqua Registry Updates

#### New Packages (3)

- [`LargeModGames/spotatui`](https://github.com/LargeModGames/spotatui)
-
[`android-sms-gateway/cli`](https://github.com/android-sms-gateway/cli)
- [`velero-io/velero`](https://github.com/velero-io/velero)

#### Updated Packages (1)

- [`skim-rs/skim`](https://github.com/skim-rs/skim)
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.

3 participants