Fix Node hook installation with npm 11 - #2487
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #2487 +/- ##
==========================================
- Coverage 93.60% 93.59% -0.02%
==========================================
Files 131 131
Lines 28215 28275 +60
==========================================
+ Hits 26410 26463 +53
- Misses 1805 1812 +7 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR adjusts how prek installs remote Node hook repositories to be compatible with npm 11’s global Git installation behavior, while keeping npm 12’s --allow-git=root flow and expanding tests to validate both runtime and prepare-time dependency scenarios.
Changes:
- Introduce an npm < 12 installation path that runs
npm packon the Git hook repo and installs the resulting tarball globally (avoids npm 11 reifier issues). - Keep direct global Git installation on npm >= 12 with
--allow-git=rootfor the hook repo. - Strengthen Node language tests to cover runtime dependencies and ensure
preparecan use devDependencies across supported npm versions.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| crates/prek/src/languages/node/node.rs | Refactors Node dependency installation into an Npm helper, adding a npm pack tarball path for npm < 12 and keeping direct Git installs for npm >= 12. |
| crates/prek/tests/languages/node.rs | Updates remote Node hook tests to exercise runtime deps and removes npm-version gating for the devDependency/prepare test. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9cf8b44b19
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
📦 Cargo Bloat ComparisonBinary size change: +0.68% (29.6 MiB → 29.8 MiB) Expand for cargo-bloat outputHead Branch ResultsBase Branch Results |
⚡️ Hyperfine BenchmarksSummary: 0 regressions, 0 improvements above the 10% threshold. Environment
CLI CommandsBenchmarking basic commands in the main repo:
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base --version |
2.2 ± 0.1 | 2.0 | 2.6 | 1.02 ± 0.07 |
prek-head --version |
2.2 ± 0.1 | 2.0 | 2.6 | 1.00 |
prek list
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base list |
9.5 ± 0.2 | 9.1 | 10.2 | 1.00 |
prek-head list |
9.6 ± 0.4 | 9.1 | 12.5 | 1.01 ± 0.05 |
prek validate-config .pre-commit-config.yaml
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base validate-config .pre-commit-config.yaml |
3.2 ± 0.1 | 3.1 | 3.4 | 1.01 ± 0.03 |
prek-head validate-config .pre-commit-config.yaml |
3.2 ± 0.1 | 3.0 | 3.4 | 1.00 |
prek sample-config
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base sample-config |
2.5 ± 0.0 | 2.4 | 2.6 | 1.00 |
prek-head sample-config |
2.5 ± 0.1 | 2.4 | 2.7 | 1.02 ± 0.04 |
Cold vs Warm Runs
Comparing first run (cold) vs subsequent runs (warm cache):
prek run --all-files (cold - no cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
39.0 ± 1.6 | 36.8 | 41.9 | 1.00 |
prek-head run --all-files |
40.0 ± 1.3 | 38.4 | 42.0 | 1.03 ± 0.05 |
prek run --all-files (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
39.6 ± 1.4 | 36.8 | 41.7 | 1.00 ± 0.05 |
prek-head run --all-files |
39.5 ± 1.2 | 37.8 | 41.3 | 1.00 |
Full Hook Suite
Running the builtin hook suite on the benchmark workspace:
prek run --all-files (full builtin hook suite)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
39.3 ± 1.0 | 37.1 | 41.2 | 1.00 |
prek-head run --all-files |
39.5 ± 1.1 | 37.3 | 41.6 | 1.00 ± 0.04 |
Individual Hook Performance
Benchmarking each hook individually on the test repo:
prek run trailing-whitespace --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run trailing-whitespace --all-files |
13.3 ± 0.4 | 12.7 | 14.1 | 1.00 ± 0.04 |
prek-head run trailing-whitespace --all-files |
13.3 ± 0.4 | 12.6 | 14.5 | 1.00 |
prek run end-of-file-fixer --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run end-of-file-fixer --all-files |
11.0 ± 0.5 | 10.4 | 12.1 | 1.00 |
prek-head run end-of-file-fixer --all-files |
11.1 ± 0.4 | 10.5 | 12.0 | 1.01 ± 0.06 |
prek run check-json --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-json --all-files |
7.7 ± 0.3 | 7.3 | 8.6 | 1.00 |
prek-head run check-json --all-files |
7.8 ± 0.2 | 7.3 | 8.2 | 1.01 ± 0.05 |
prek run check-yaml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-yaml --all-files |
7.6 ± 0.1 | 7.3 | 7.9 | 1.00 |
prek-head run check-yaml --all-files |
7.6 ± 0.2 | 7.3 | 8.0 | 1.00 ± 0.03 |
prek run check-toml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-toml --all-files |
7.9 ± 0.3 | 7.4 | 8.6 | 1.00 |
prek-head run check-toml --all-files |
7.9 ± 0.3 | 7.4 | 8.9 | 1.00 ± 0.06 |
prek run check-xml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-xml --all-files |
7.8 ± 0.5 | 7.2 | 8.9 | 1.01 ± 0.08 |
prek-head run check-xml --all-files |
7.7 ± 0.4 | 7.2 | 8.9 | 1.00 |
prek run detect-private-key --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run detect-private-key --all-files |
11.2 ± 0.7 | 9.9 | 13.0 | 1.01 ± 0.09 |
prek-head run detect-private-key --all-files |
11.1 ± 0.6 | 10.2 | 12.9 | 1.00 |
prek run fix-byte-order-marker --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run fix-byte-order-marker --all-files |
13.1 ± 0.8 | 11.5 | 14.7 | 1.00 |
prek-head run fix-byte-order-marker --all-files |
13.2 ± 0.6 | 12.1 | 14.4 | 1.01 ± 0.08 |
Installation Performance
Benchmarking hook installation (fast path hooks skip Python setup):
prek install-hooks (cold - no cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base install-hooks |
4.4 ± 0.1 | 4.3 | 4.6 | 1.00 ± 0.03 |
prek-head install-hooks |
4.4 ± 0.0 | 4.4 | 4.4 | 1.00 |
prek install-hooks (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base install-hooks |
4.5 ± 0.1 | 4.4 | 4.6 | 1.01 ± 0.02 |
prek-head install-hooks |
4.5 ± 0.0 | 4.4 | 4.5 | 1.00 |
File Filtering/Scoping Performance
Testing different file selection modes:
prek run (staged files only)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run |
23.8 ± 0.5 | 23.1 | 25.2 | 1.00 |
prek-head run |
23.9 ± 0.4 | 23.3 | 24.9 | 1.01 ± 0.02 |
prek run --files '*.json' (specific file type)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --files '*.json' |
5.2 ± 0.2 | 5.0 | 5.7 | 1.02 ± 0.04 |
prek-head run --files '*.json' |
5.1 ± 0.1 | 5.0 | 5.2 | 1.00 |
Workspace Discovery & Initialization
Benchmarking hook discovery and initialization overhead:
prek run --dry-run --all-files (measures init overhead)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --dry-run --all-files |
6.9 ± 0.2 | 6.7 | 7.5 | 1.01 ± 0.03 |
prek-head run --dry-run --all-files |
6.9 ± 0.1 | 6.7 | 7.2 | 1.00 |
Meta Hooks Performance
Benchmarking meta hooks separately:
prek run check-hooks-apply --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-hooks-apply --all-files |
8.2 ± 0.1 | 8.0 | 8.4 | 1.00 |
prek-head run check-hooks-apply --all-files |
8.3 ± 0.3 | 8.1 | 9.2 | 1.02 ± 0.04 |
prek run check-useless-excludes --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-useless-excludes --all-files |
8.2 ± 0.1 | 7.9 | 8.4 | 1.01 ± 0.02 |
prek-head run check-useless-excludes --all-files |
8.1 ± 0.1 | 8.0 | 8.2 | 1.00 |
prek run identity --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run identity --all-files |
7.1 ± 0.2 | 6.9 | 7.8 | 1.02 ± 0.04 |
prek-head run identity --all-files |
7.0 ± 0.1 | 6.9 | 7.1 | 1.00 |
This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [prek](https://github.com/j178/prek) | tools | patch | `0.4.10` → `0.4.13` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>j178/prek (prek)</summary> ### [`v0.4.13`](https://github.com/j178/prek/blob/HEAD/CHANGELOG.md#0413) [Compare Source](j178/prek@v0.4.12...v0.4.13) Released on 2026-08-10. ##### Highlights ##### Manage hook tools with mise The new `language: mise` support lets hooks install tools using [`mise`](https://mise.jdx.dev/) in an isolated environment: ```yaml repos: - repo: local hooks: - id: golangci-lint name: golangci-lint language: mise additional_dependencies: ["aqua:golangci/golangci-lint@2"] entry: golangci-lint run --fast-only ./... pass_filenames: false ``` ##### Run commands in hook environments The new `prek exec` subcommand can run an explicit command in a configured hook's prepared environment. For example, the hook above makes its managed binary available to this command: ```console $ prek exec golangci-lint -- golangci-lint --version ``` ##### Enhancements - Add `mise` language support ([#​2540](j178/prek#2540)) - Add `deny-filename-pattern` and `require-filename-pattern` hooks ([#​2488](j178/prek#2488)) - Add `prek exec` for running commands in a hook environment ([#​2478](j178/prek#2478)) - Add `yaml-language-server:` comment to YAML sample config ([#​2486](j178/prek#2486)) - Make `prek cache size` output terminal-aware ([#​2508](j178/prek#2508)) - Match file regexes against path bytes ([#​2541](j178/prek#2541)) - Show hook aliases in run output ([#​2497](j178/prek#2497)) - Show hook descriptions in run output ([#​2490](j178/prek#2490)) ##### Performance - Avoid env cache scans for skipped hooks ([#​2502](j178/prek#2502)) - Cache Node version queries ([#​2500](j178/prek#2500)) ##### Bug fixes - Fix Node hook installation with npm 11 ([#​2487](j178/prek#2487)) - Isolate dependency installs from inherited Git repository state ([#​2506](j178/prek#2506)) ##### Documentation - Document combined group filtering ([#​2495](j178/prek#2495)) - Explain what prek does in README ([#​2507](j178/prek#2507)) - Refresh "Why prek" highlights ([#​2474](j178/prek#2474)) ##### Contributors - [@​will-wright-eng](https://github.com/will-wright-eng) - [@​Repiteo](https://github.com/Repiteo) - [@​j178](https://github.com/j178) ### [`v0.4.12`](https://github.com/j178/prek/blob/HEAD/CHANGELOG.md#0412) [Compare Source](j178/prek@v0.4.11...v0.4.12) Released on 2026-08-03. ##### Enhancements - Add `--require-group` for hook group intersections ([#​2472](j178/prek#2472)) - Align fast-path and builtin pre-commit hooks ([#​2433](j178/prek#2433)) - Do not shuffle file list for verbose output ([#​2431](j178/prek#2431)) - Improve top-level command descriptions ([#​2429](j178/prek#2429)) - Install `uv` from Astral CDN and drop source racing ([#​2455](j178/prek#2455)) - Make `prek install --force` bypass external hooks paths ([#​2437](j178/prek#2437)) - Show builtin hook flags in verbose list output ([#​2427](j178/prek#2427)) - Verify uv release archive checksums ([#​2456](j178/prek#2456)) ##### Performance - Precompute file tags in parallel ([#​2440](j178/prek#2440)) - Skip diffs after known hook modifications ([#​2447](j178/prek#2447)) - Skip worktree diffs for read-only languages ([#​2432](j178/prek#2432)) - Track builtin hook file changes directly ([#​2404](j178/prek#2404)) ##### Bug fixes - Use full object IDs in diff snapshots ([#​2448](j178/prek#2448)) ##### Documentation - Add a multi-repository configuration example ([#​2434](j178/prek#2434)) - Rewrite benchmark documentation ([#​2469](j178/prek#2469)) ##### Contributors - [@​j178](https://github.com/j178) - [@​BitWeaverDev](https://github.com/BitWeaverDev) - [@​allanlewis](https://github.com/allanlewis) ### [`v0.4.11`](https://github.com/j178/prek/blob/HEAD/CHANGELOG.md#0411) [Compare Source](j178/prek@v0.4.10...v0.4.11) Released on 2026-07-25. ##### Highlights - This release adds two new builtin hooks, `deny-pattern` and `require-pattern`, as native alternatives for `pygrep` use cases. `deny-pattern` fails when a configured pattern is found, while `require-pattern` ensures every selected file contains a match. By matching natively without spawning a Python subprocess, they run over 4x faster than `pygrep` in benchmarks. Note that they use [Rust `regex` syntax](https://docs.rs/regex/latest/regex/#syntax), which does not support look-around features such as negative lookbehind. - `prek run` now supports `--glob <PATTERN>` to run hooks on tracked files matching a glob. It can be repeated or combined with `--files` and `--directory`. - Hook priorities now support reusable aliases: ```toml [priorities] checks = 10 [[repos]] repo = "builtin" hooks = [ { id = "check-json", priority = "checks" }, { id = "check-yaml", priority = "checks" }, ] ``` This makes parallel scheduling easier to read and maintain. ##### Enhancements - Add `deny-pattern` and `require-pattern` builtin hooks ([#​2359](j178/prek#2359)) - Support `--glob` patterns in `prek run` ([#​2381](j178/prek#2381)) - Support reusable aliases for hook priorities ([#​2331](j178/prek#2331)) - Implement `requirements-txt-fixer` as a builtin hook ([#​2390](j178/prek#2390)) - Improve user-facing warnings and errors ([#​2380](j178/prek#2380)) - Install Node hooks through git url ([#​2394](j178/prek#2394)) ##### Performance - Reduce blocking-pool overhead in file hooks ([#​2384](j178/prek#2384)) - Speed up mixed-line-ending scans with memchr2 ([#​2391](j178/prek#2391)) ##### Bug fixes - Honor filenames in builtin hook entry and args ([#​2389](j178/prek#2389)) - Match identify tags across filename parts ([#​2399](j178/prek#2399)) - Preserve hook output order with a shared pipe ([#​2385](j178/prek#2385)) - Preserve system download policy when applying metadata ([#​2395](j178/prek#2395)) ##### Contributors - [@​j178](https://github.com/j178) - [@​chrisoro](https://github.com/chrisoro) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODYuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6cGF0Y2giXX0=-->
Automated mise tool upgrades from local config. Updated tools: - `prek` Command: `mise upgrade --bump --local prek` <details> <summary>Version changelog (prek)</summary> | Tool | Requested | Installed | |------|-----------|-----------| | `prek` | `0.4.11` → `0.4.13` | `0.4.11` → `0.4.13` | </details> <details> <summary>Release notes (1 tools)</summary> <details> <summary>prek: `0.4.11` → `0.4.13` (j178/prek)</summary> ### v0.4.12 ## Release Notes Released on 2026-08-03. ### Enhancements - Add `--require-group` for hook group intersections ([#2472](j178/prek#2472)) - Align fast-path and builtin pre-commit hooks ([#2433](j178/prek#2433)) - Do not shuffle file list for verbose output ([#2431](j178/prek#2431)) - Improve top-level command descriptions ([#2429](j178/prek#2429)) - Install `uv` from Astral CDN and drop source racing ([#2455](j178/prek#2455)) - Make `prek install --force` bypass external hooks paths ([#2437](j178/prek#2437)) - Show builtin hook flags in verbose list output ([#2427](j178/prek#2427)) - Verify uv release archive checksums ([#2456](j178/prek#2456)) ### Performance - Precompute file tags in parallel ([#2440](j178/prek#2440)) - Skip diffs after known hook modifications ([#2447](j178/prek#2447)) - Skip worktree diffs for read-only languages ([#2432](j178/prek#2432)) - Track builtin hook file changes directly ([#2404](j178/prek#2404)) ### Bug fixes - Use full object IDs in diff snapshots ([#2448](j178/prek#2448)) ### Documentation - Add a multi-repository configuration example ([#2434](j178/prek#2434)) - Rewrite benchmark documentation ([#2469](j178/prek#2469)) ### Contributors - @j178 - @BitWeaverDev - @allanlewis ## Install prek 0.4.12 ### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.4.12/prek-installer.sh | sh ``` ### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/j178/prek/releases/download/v0.4.12/prek-installer.ps1 | iex" ```… (truncated) ### v0.4.13 ## Release Notes Released on 2026-08-10. ### Highlights #### Manage hook tools with mise The new `language: mise` support lets hooks install tools using [`mise`](https://mise.jdx.dev/) in an isolated environment: ```yaml repos: - repo: local hooks: - id: golangci-lint name: golangci-lint language: mise additional_dependencies: ["aqua:golangci/golangci-lint@2"] entry: golangci-lint run --fast-only ./... pass_filenames: false ``` #### Run commands in hook environments The new `prek exec` subcommand can run an explicit command in a configured hook's prepared environment. For example, the hook above makes its managed binary available to this command: ```console $ prek exec golangci-lint -- golangci-lint --version ``` ### Enhancements - Add `mise` language support ([#2540](j178/prek#2540)) - Add `deny-filename-pattern` and `require-filename-pattern` hooks ([#2488](j178/prek#2488)) - Add `prek exec` for running commands in a hook environment ([#2478](j178/prek#2478)) - Add `yaml-language-server:` comment to YAML sample config ([#2486](j178/prek#2486)) - Make `prek cache size` output terminal-aware ([#2508](j178/prek#2508)) - Match file regexes against path bytes ([#2541](j178/prek#2541)) - Show hook aliases in run output ([#2497](j178/prek#2497)) - Show hook descriptions in run output ([#2490](j178/prek#2490)) ### Performance - Avoid env cache scans for skipped hooks ([#2502](j178/prek#2502)) - Cache Node version queries ([#2500](j178/prek#2500)) ### Bug fixes - Fix Node hook installation with npm 11 ([#2487](j178/prek#2487)) - Isolate dependency installs from inherited Git repository state ([#2506](https://github.com/j178/prek/pull/25… (truncated) </details> </details> Modified files: - `.mise.toml` Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* chore(mise): upgrade local tools Automated mise tool upgrades from local config. Updated tools: - `action-validator` - `actionlint` - `editorconfig-checker` - `ghalint` - `lychee` - `pinact` - `pipx:gh-action-pulse` - `prek` - `rumdl` - `shellcheck` - `shfmt` - `tombi` - `uv` - `yamlfmt` - `yamllint` - `zizmor` Command: `mise upgrade --bump --local action-validator actionlint editorconfig-checker ghalint lychee pinact pipx:gh-action-pulse prek rumdl shellcheck shfmt tombi uv yamlfmt yamllint zizmor` <details> <summary>Version changelog (3 tools)</summary> | Tool | Requested | Installed | |------|-----------|-----------| | `prek` | `0.4.12` → `0.4.13` | `0.4.12` → `0.4.13` | | `rumdl` | `0.2.52` → `0.2.55` | `0.2.52` → `0.2.55` | | `tombi` | `1.2.7` → `1.3.5` | `1.2.7` → `1.3.5` | </details> <details> <summary>Release notes (3 tools)</summary> <details> <summary>prek: `0.4.12` → `0.4.13` (j178/prek)</summary> ### v0.4.13 ## Release Notes Released on 2026-08-10. ### Highlights #### Manage hook tools with mise The new `language: mise` support lets hooks install tools using [`mise`](https://mise.jdx.dev/) in an isolated environment: ```yaml repos: - repo: local hooks: - id: golangci-lint name: golangci-lint language: mise additional_dependencies: ["aqua:golangci/golangci-lint@2"] entry: golangci-lint run --fast-only ./... pass_filenames: false ``` #### Run commands in hook environments The new `prek exec` subcommand can run an explicit command in a configured hook's prepared environment. For example, the hook above makes its managed binary available to this command: ```console $ prek exec golangci-lint -- golangci-lint --version ``` ### Enhancements - Add `mise` language support ([#2540](j178/prek#2540)) - Add `deny-filename-pattern` and `require-filename-pattern` hooks ([#2488](j178/prek#2488)) - Add `prek exec` for running commands in a hook environment ([#2478](j178/prek#2478)) - Add `yaml-language-server:` comment to YAML sample config ([#2486](j178/prek#2486)) - Make `prek cache size` output terminal-aware ([#2508](j178/prek#2508)) - Match file regexes against path bytes ([#2541](j178/prek#2541)) - Show hook aliases in run output ([#2497](j178/prek#2497)) - Show hook descriptions in run output ([#2490](j178/prek#2490)) ### Performance - Avoid env cache scans for skipped hooks ([#2502](j178/prek#2502)) - Cache Node version queries ([#2500](j178/prek#2500)) ### Bug fixes - Fix Node hook installation with npm 11 ([#2487](j178/prek#2487)) - Isolate dependency installs from inherited Git repository state ([#2506](https://github.com/j178/prek/pull/25… (truncated) </details> <details> <summary>rumdl: `0.2.52` → `0.2.55` (rvben/rumdl)</summary> ### v0.2.53 ### Fixed - **tables**: find a table's extent in the document's flavor ([ad139af](rvben/rumdl@ad139af)) - **tables**: quoted brackets and a blank target are not a wikilink ([a8aed70](rvben/rumdl@a8aed70)) - **lsp**: a rescan keeps an open buffer only where a file still is ([8e16303](rvben/rumdl@8e16303)) - **lsp**: keep an open document indexed from its buffer ([ea30cca](rvben/rumdl@ea30cca)) - **lsp**: index what an editor is showing when the workspace is rescanned ([0d8eacc](rvben/rumdl@0d8eacc)) - **lsp**: stop an evicted file from being put back by a waiting disk read ([5644516](rvben/rumdl@5644516)) - **md075**: ignore Obsidian wikilink aliases in prose after tables ([dda35d5](rvben/rumdl@dda35d5)) - **md084**: stop deleting line endings as invisible characters ([e6ca26e](rvben/rumdl@e6ca26e)) - **rules**: report a multi-line link's range on the line it ends on ([2e1fde5](rvben/rumdl@2e1fde5)) - **config**: break "did you mean" ties by name instead of by key order ([23fafd9](rvben/rumdl@23fafd9)) - **lsp**: keep a pending edit when a file is only evicted from the index ([1e34c47](rvben/rumdl@1e34c47)) - **lsp**: drop a pending edit when its file is deleted ([f718eca](rvben/rumdl@f718eca)) - **md038**: include the closing backtick in the reported range (… (truncated) ### v0.2.54 ### Added - **action**: add a command input to run rumdl fmt ([9b59bff](rvben/rumdl@9b59bff)) - **action**: add install-only input to skip linting ([aa0c604](rvben/rumdl@aa0c604)) - **MD010**: add ignore-code-languages to exempt fence languages from tab checks ([21b56d0](rvben/rumdl@21b56d0)) ### Fixed - **config**: honor the markdown attribute on every block-level element ([6f88d71](rvben/rumdl@6f88d71)) - **links**: stop parsing reference links and images inside HTML blocks ([8829f6b](rvben/rumdl@8829f6b)) - **html-blocks**: keep a nested raw-text element from opening its own block ([27d96bb](rvben/rumdl@27d96bb)) - **code-block-tools**: stop a linter in a format slot from overwriting the block ([a40d7da](rvben/rumdl@a40d7da)) - **code-block-tools**: report findings at the line they belong to ([31cc6cb](rvben/rumdl@31cc6cb)) - **code-block-tools**: bound a hanging tool by its timeout and stop respawning it ([6ce8a1d](rvben/rumdl@6ce8a1d)) - **action**: add rumdl to PATH so later workflow steps can call it ([98baf60](rvben/rumdl@98baf60)) ## Downloads | File | Platform | Checksum | |------|----------|----------| | [rumdl-v0.2.54-x86_64-unknown-linux-gnu.tar.gz](https://github.com/rvben/rumdl/releases/download/v0.2.54/rumdl-v0.2.54-x86_64-unknown-linux-gnu.tar.gz) | Linux x86_64 | [checksum](https://github.com/rvben/rumdl/releases/download/v0.2.54/rumdl-v0.2.54-x86_64-… (truncated) ### v0.2.55 ### Fixed - **lsp**: honor per-directory config across workspace features ([2c7670f](rvben/rumdl@2c7670f)) - **core**: align path-aware document processing across adapters ([7285b7a](rvben/rumdl@7285b7a)) ### Performance - **lsp**: construct workspace index rules directly ([864e42a](rvben/rumdl@864e42a)) ## Downloads | File | Platform | Checksum | |------|----------|----------| | [rumdl-v0.2.55-x86_64-unknown-linux-gnu.tar.gz](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-x86_64-unknown-linux-gnu.tar.gz) | Linux x86_64 | [checksum](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [rumdl-v0.2.55-x86_64-unknown-linux-musl.tar.gz](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-x86_64-unknown-linux-musl.tar.gz) | Linux x86_64 (musl) | [checksum](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-x86_64-unknown-linux-musl.tar.gz.sha256) | | [rumdl-v0.2.55-aarch64-unknown-linux-gnu.tar.gz](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-aarch64-unknown-linux-gnu.tar.gz) | Linux ARM64 | [checksum](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [rumdl-v0.2.55-aarch64-unknown-linux-musl.tar.gz](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-aarch64-unknown-linux-musl.tar.gz) | Linux ARM64 (musl) | [checksum](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-aarch64-unknown-linux-musl.tar.gz.sha256) | | [rumdl-v0.2.55-x86_64-apple-darwin.tar.gz](https://github.com/rvben/rumdl/releases/download/v0.2.55/rumdl-v0.2.55-x86_64-apple-darwin.tar.gz) | macOS x86_64 | [checksum](https://github.com/rvben/rumdl/releases/downloa… (truncated) </details> <details> <summary>tombi: `1.2.7` → `1.3.5` (tombi-toml/tombi)</summary> ### v1.2.8 <!-- Release notes generated using configuration in .github/release.yml at v1.2.8 --> ## What's Changed ### 🐝 Bug Fixes * fix(cargo): resolve completion paths from file URIs by @ya7010 in tombi-toml/tombi#2069 ### 📦 Dependencies * fix: update vulnerable npm dependencies by @ya7010 in tombi-toml/tombi#2064 ### 🛠️ Other Changes * docs: add schemas[*].strict to the configuration index by @ya7010 in tombi-toml/tombi#2063 **Full Changelog**: tombi-toml/tombi@v1.2.7...v1.2.8 ### v1.2.9 <!-- Release notes generated using configuration in .github/release.yml at v1.2.9 --> ## What's Changed ### 🦅 New Features * feat(validator): select best union diagnostics by @ya7010 in tombi-toml/tombi#2073 ### 🐝 Bug Fixes * fix(schema): preserve constraints across type projections by @ya7010 in tombi-toml/tombi#2072 ### 🛠️ Other Changes * docs: explain TOML version overrides by @ya7010 in tombi-toml/tombi#2071 **Full Changelog**: tombi-toml/tombi@v1.2.8...v1.2.9 ### v1.2.10 <!-- Release notes generated using configuration in .github/release.yml at v1.2.10 --> ## What's Changed ### 📦 Dependencies * fix(deps): update js-yaml to 4.3.1 by @ya7010 in tombi-toml/tombi#2074 **Full Changelog**: tombi-toml/tombi@v1.2.9...v1.2.10 ### v1.3.2 <!-- Release notes generated using configuration in .github/release.yml at v1.3.2 --> ## What's Changed ### 🚨 Breaking Changes * feat(formatter): change the default `line-width` to unlimited by @ya7010 in tombi-toml/tombi#2104 ### 🦅 New Features * ci: cancel superseded workflow runs by @ya7010 in tombi-toml/tombi#2103 ### 🛠️ Other Changes * fix(ci): repair WASM and npm release workflows by @ya7010 in tombi-toml/tombi#2101 * feat(wasm): export format and lint error types by @ya7010 in tombi-toml/tombi#2105 * docs(wasm): add error type hints to examples by @ya7010 in tombi-toml/tombi#2106 **Full Changelog**: tombi-toml/tombi@v1.3.1...v1.3.2 ### v1.3.3 <!-- Release notes generated using configuration in .github/release.yml at v1.3.3 --> ## What's Changed ### 🚨 Breaking Changes * feat(wasm): return structured format and lint results by @ya7010 in tombi-toml/tombi#2107 ### 🦅 New Features * feat(formatter): add comment-style rule by @ya7010 in tombi-toml/tombi#2108 **Full Changelog**: tombi-toml/tombi@v1.3.2...v1.3.3 ### v1.3.4 <!-- Release notes generated using configuration in .github/release.yml at v1.3.4 --> ## What's Changed ### 🚨 Breaking Changes * fix(wasm): reject with standard errors by @ya7010 in tombi-toml/tombi#2109 ### 🐝 Bug Fixes * fix(npm): include WASM build output in published packages by @ya7010 in tombi-toml/tombi#2110 ### 🛠️ Other Changes * docs(wasm): respect format diagnostic severity by @ya7010 in tombi-toml/tombi#2111 **Full Changelog**: tombi-toml/tombi@v1.3.3...v1.3.4 ### v1.3.5 <!-- Release notes generated using configuration in .github/release.yml at v1.3.5 --> ## What's Changed ### 🐝 Bug Fixes * fix(cli): stop LSP after exit notification by @ya7010 in tombi-toml/tombi#2112 * fix(docs): hide playground until ready by @ya7010 in tombi-toml/tombi#2113 * fix(npm): identify WASM package repositories by @ya7010 in tombi-toml/tombi#2114 **Full Changelog**: tombi-toml/tombi@v1.3.4...v1.3.5 </details> </details> Modified files: - `.mise.toml` * chore: add trailing magic comma to conserve format Signed-off-by: jylenhof <jygithub@lenhof.eu.org> --------- Signed-off-by: jylenhof <jygithub@lenhof.eu.org> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: jylenhof <jygithub@lenhof.eu.org>
Automated mise tool upgrades from local config. mise-managed tools: - `prek` Command: `mise upgrade --bump --local prek` <details> <summary>Version changelog (prek)</summary> | Tool | Requested | Installed | |------|-----------|-----------| | `prek` | `0.4.12` → `0.4.13` | `0.4.12` → `0.4.13` | </details> <details> <summary>Release notes (1 tools)</summary> <details> <summary>prek: `0.4.12` → `0.4.13` (j178/prek)</summary> ### v0.4.13 ## Release Notes Released on 2026-08-10. ### Highlights #### Manage hook tools with mise The new `language: mise` support lets hooks install tools using [`mise`](https://mise.jdx.dev/) in an isolated environment: ```yaml repos: - repo: local hooks: - id: golangci-lint name: golangci-lint language: mise additional_dependencies: ["aqua:golangci/golangci-lint@2"] entry: golangci-lint run --fast-only ./... pass_filenames: false ``` #### Run commands in hook environments The new `prek exec` subcommand can run an explicit command in a configured hook's prepared environment. For example, the hook above makes its managed binary available to this command: ```console $ prek exec golangci-lint -- golangci-lint --version ``` ### Enhancements - Add `mise` language support ([#2540](j178/prek#2540)) - Add `deny-filename-pattern` and `require-filename-pattern` hooks ([#2488](j178/prek#2488)) - Add `prek exec` for running commands in a hook environment ([#2478](j178/prek#2478)) - Add `yaml-language-server:` comment to YAML sample config ([#2486](j178/prek#2486)) - Make `prek cache size` output terminal-aware ([#2508](j178/prek#2508)) - Match file regexes against path bytes ([#2541](j178/prek#2541)) - Show hook aliases in run output ([#2497](j178/prek#2497)) - Show hook descriptions in run output ([#2490](j178/prek#2490)) ### Performance - Avoid env cache scans for skipped hooks ([#2502](j178/prek#2502)) - Cache Node version queries ([#2500](j178/prek#2500)) ### Bug fixes - Fix Node hook installation with npm 11 ([#2487](j178/prek#2487)) - Isolate dependency installs from inherited Git repository state ([#2506](https://github.com/j178/prek/pull/25… (truncated) </details> </details> Modified files: - `.mise.toml` Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
npm 11's global Git install can remove the hook package while child dependencies are still being extracted. Pack remote Node hooks first and install the resulting tarball instead.
Keep direct Git installation with
--allow-git=rooton npm 12, wherenpm packloses the root classification.Related pre-commit/pre-commit#3737