fix(http): preserve arch underscores in platform keys#6202
Conversation
…rm keys\n\nAvoid converting internal underscores to dashes in flat platform keys so architectures like x86_64 remain intact. Adds unit test to prevent regression.
There was a problem hiding this comment.
Pull Request Overview
This PR fixes a bug in platform key normalization where all underscores were being converted to dashes, incorrectly transforming architecture names like "x86_64" to "x86-64". The fix preserves underscores within architecture names while still converting the OS/arch separator underscore to a dash.
- Updates the platform key normalization logic to only convert the first underscore (OS/arch separator) to a dash
- Adds comprehensive unit test to verify the fix works for various platform configurations
- Maintains backward compatibility with existing nested key patterns
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| let platform_key = if let Some((os_part, rest)) = platform_part.split_once('_') { | ||
| format!("{os_part}-{rest}") |
There was a problem hiding this comment.
The logic assumes only one OS/arch separator underscore, but this could incorrectly handle platform parts like 'linux_musl_x86_64' where 'musl' is part of the OS identifier. The current implementation would produce 'linux-musl_x86_64' instead of the potentially expected 'linux-musl-x86_64' or preserve the original format.
| let platform_key = if let Some((os_part, rest)) = platform_part.split_once('_') { | |
| format!("{os_part}-{rest}") | |
| let platform_key = if let Some(idx) = platform_part.rfind('_') { | |
| let (os_part, arch_part) = platform_part.split_at(idx); | |
| // os_part ends at idx, arch_part starts with '_' | |
| format!("{}-{}", os_part, &arch_part[1..]) |
Hyperfine Performance
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.2 x -- echo |
18.8 ± 0.4 | 18.1 | 21.1 | 1.00 ± 0.05 |
mise x -- echo |
18.7 ± 0.9 | 18.1 | 34.5 | 1.00 |
mise env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.2 env |
18.2 ± 0.4 | 17.6 | 22.8 | 1.00 |
mise env |
18.3 ± 0.3 | 17.8 | 19.6 | 1.01 ± 0.02 |
mise hook-env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.2 hook-env |
17.8 ± 0.4 | 17.1 | 20.2 | 1.01 ± 0.02 |
mise hook-env |
17.5 ± 0.2 | 17.1 | 18.8 | 1.00 |
mise ls
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.2 ls |
16.0 ± 0.2 | 15.6 | 16.8 | 1.00 ± 0.03 |
mise ls |
16.0 ± 0.4 | 15.4 | 22.1 | 1.00 |
xtasks/test/perf
| Command | mise-2025.9.2 | mise | Variance |
|---|---|---|---|
| install (cached) | 164ms | ✅ 100ms | +64% |
| ls (cached) | 61ms | 61ms | +0% |
| bin-paths (cached) | 65ms | 65ms | +0% |
| task-ls (cached) | 487ms | 467ms | +4% |
✅ Performance improvement: install cached is 64%
### 🚀 Features - **(backend)** improve http error when platform url missing; list available platforms by @jdx in [#6200](#6200) ### 🐛 Bug Fixes - **(backend)** preserve arch underscores in platform keys by @jdx in [#6202](#6202) - **(task)** resolve hanging issue with multiple depends_post by @jdx in [#6206](#6206) - couldn't download node binary in Alpine, even if it exists in the mirror url by @Hazer in [#5972](#5972) - **breaking** use config_root for env._.path by @jdx in [#6204](#6204) - bugfix for paths that include spaces by @karim-elkholy in [#6210](#6210) ### 📚 Documentation - improve release notes generation by @jdx in [#6197](#6197) - fix release changelog contributor reporting by @jdx in [#6201](#6201) ### Chore - use fine-grained gh token by @jdx in [#6208](#6208) - use settings.local.json for claude config by @jdx in [fd0fba9](fd0fba9) ### New Contributors - @karim-elkholy made their first contribution in [#6210](#6210) - @Hazer made their first contribution in [#5972](#5972)
## [2025.9.5](https://github.com/jdx/mise/compare/v2025.9.4..v2025.9.5) - 2025-09-06 ### 🚀 Features - **(task)** add timeout support for task execution by @jdx in [#6216](jdx/mise#6216) - **(task)** sub-tasks in run lists by @jdx in [#6212](jdx/mise#6212) ### Chore - fix npm publish action by @jdx in [14f4b09](jdx/mise@14f4b09) - fix cloudflare release action by @jdx in [00afa25](jdx/mise@00afa25) - fix git-cliff for release notes by @jdx in [15a9aed](jdx/mise@15a9aed) ## [2025.9.4](https://github.com/jdx/mise/compare/v2025.9.3..v2025.9.4) - 2025-09-06 ### Chore - fix git-cliff on release by @jdx in [3c388f2](jdx/mise@3c388f2) ## [2025.9.3](https://github.com/jdx/mise/compare/v2025.9.2..v2025.9.3) - 2025-09-06 ### 🚀 Features - **(backend)** improve http error when platform url missing; list available platforms by @jdx in [#6200](jdx/mise#6200) - **(cli)** support scoped packages for all backend types by @earlgray283 in [#6213](jdx/mise#6213) - **(http)** add URL replacement feature for HTTP requests by @ThomasSteinbach in [#6207](jdx/mise#6207) ### 🐛 Bug Fixes - **(backend)** preserve arch underscores in platform keys by @jdx in [#6202](jdx/mise#6202) - **(task)** resolve hanging issue with multiple depends_post by @jdx in [#6206](jdx/mise#6206) - couldn't download node binary in Alpine, even if it exists in the mirror url by @Hazer in [#5972](jdx/mise#5972) - **breaking** use config_root for env._.path by @jdx in [#6204](jdx/mise#6204) - bugfix for paths that include spaces by @karim-elkholy in [#6210](jdx/mise#6210) ### 📚 Documentation - improve release notes generation by @jdx in [#6197](jdx/mise#6197) - fix release changelog contributor reporting by @jdx in [#6201](jdx/mise#6201) ### Chore - use fine-grained gh token by @jdx in [#6208](jdx/mise#6208) - use settings.local.json for claude config by @jdx in [fd0fba9](jdx/mise@fd0fba9) ### New Contributors - @ThomasSteinbach made their first contribution in [#6207](jdx/mise#6207) - @earlgray283 made their first contribution in [#6213](jdx/mise#6213) - @karim-elkholy made their first contribution in [#6210](jdx/mise#6210) - @Hazer made their first contribution in [#5972](jdx/mise#5972) ## [2025.9.2](https://github.com/jdx/mise/compare/v2025.9.1..v2025.9.2) - 2025-09-05 ### 🐛 Bug Fixes - **(ci)** set required environment variables for npm publishing by @jdx in [#6189](jdx/mise#6189) - **(release)** clean up extra newlines in release notes formatting by @jdx in [#6190](jdx/mise#6190) - **(release)** add proper newline after New Contributors section in cliff template by @jdx in [#6194](jdx/mise#6194) - **(release)** fix changelog formatting to remove extra blank lines by @jdx in [#6195](jdx/mise#6195) - **(release)** restore proper newline after New Contributors section by @jdx in [#6196](jdx/mise#6196) ### 🚜 Refactor - **(ci)** split release workflow into separate specialized workflows by @jdx in [#6193](jdx/mise#6193) ### Chore - **(release)** require GitHub Actions environment for release-plz script by @jdx in [#6191](jdx/mise#6191) ## [2025.9.1](https://github.com/jdx/mise/compare/v2025.9.0..v2025.9.1) - 2025-09-05 ### 🐛 Bug Fixes - python nested venv path order by @elvismacak in [#6124](jdx/mise#6124) - resolve immutable release workflow and VERSION file timing issues by @jdx in [#6187](jdx/mise#6187) ### New Contributors - @elvismacak made their first contribution in [#6124](jdx/mise#6124) ## [2025.9.0](https://github.com/jdx/mise/compare/v2025.8.21..v2025.9.0) - 2025-09-05 ### 🚀 Features - allow set/unset backend aliases by @roele in [#6172](jdx/mise#6172) ### 🐛 Bug Fixes - **(aqua)** respect order of asset_strs by @risu729 in [#6143](jdx/mise#6143) - **(java)** treat freebsd as linux (assuming linux compatability) by @roele in [#6161](jdx/mise#6161) - **(nushell/windows)** Fix $env.PATH getting converted to a string by @zackyancey in [#6157](jdx/mise#6157) - **(sync)** create uv_versions_path dir if it doesn't exist by @risu729 in [#6142](jdx/mise#6142) - **(ubi)** show relevent error messages for v-prefixed tags by @risu729 in [#6183](jdx/mise#6183) - remove nodejs/golang alias migrate code by @risu729 in [#6141](jdx/mise#6141) - mise activate not working on powershell v5 by @L0RD-ZER0 in [#6168](jdx/mise#6168) ### 📚 Documentation - **(task)** remove word "additional" to avoid confusions by @risu729 in [#6159](jdx/mise#6159) ### Chore - update Cargo.lock by @risu729 in [#6184](jdx/mise#6184) ### New Contributors - @zackyancey made their first contribution in [#6157](jdx/mise#6157)
Fixes incorrect conversion of platform key underscores to dashes in flat keys.\n\n- Preserves arch underscores (e.g., x86_64) while still normalizing os_arch to os-arch.\n- Adds unit test to prevent regression.\n\nThis resolves mismatches with expected platform keys and improves suggestion accuracy.