ci: use mise-action as single tool installer across all workflows (#2951)
* ci: use mise-action as single tool installer across all workflows
Replace ~10 different GitHub Actions (dtolnay/rust-toolchain,
taiki-e/install-action, astral-sh/setup-uv, actions/setup-go,
golangci/golangci-lint-action, mlugg/setup-zig, etc.) with
jdx/mise-action@v4 so tool versions are defined in one place
(mise.toml) instead of two.
Kept exceptions:
- PyO3/maturin-action: builds inside manylinux container
- Swatinem/rust-cache: caches crates/target/ (compilation, not tools)
- actions/setup-python in check-stubs: needs shared-library Python
* ci: fix mise cache save races with cache_save: false
The setup job warms the mise tool cache (cache_save: true by default).
All other jobs set cache_save: false so they only restore from cache
without racing to save the same key.
Exception: test-go on macOS saves its own cache since it's the only
job on that platform (different cache key).
* Revert "ci: fix mise cache save races with cache_save: false"
This reverts commit d4ffea642b05683c67ccd8698444942be6a295f6.
* ci: remove MISE_DISABLE_TOOLS — mise needs rustup for components
Rust components (rustfmt, clippy) are installed via rustup during
`mise install`. Disabling rustup/rustup-init caused cargo-fmt and
cargo-clippy to be missing, failing Format Rust and Lint Rust jobs.
* ci: bust stale mise cache with v2 prefix
The previous cache (mise-v1) was poisoned by MISE_DISABLE_TOOLS which
prevented rustfmt/clippy from being installed. Bumping to mise-v2
forces a fresh install with all components.