Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #2203 +/- ##
==========================================
- Coverage 92.57% 92.56% -0.01%
==========================================
Files 124 125 +1
Lines 26461 26587 +126
==========================================
+ Hits 24495 24609 +114
- Misses 1966 1978 +12 ☔ 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 adds first-class Conda language support to prek, wiring it into the language dispatcher, documenting expected behavior, adding integration tests, and updating CI to provision Micromamba for the new language test group.
Changes:
- Add a new
condalanguage backend (install+run) and mark Conda as supported/shell-capable. - Add end-to-end language tests for
conda(local + remote repo +language_versionrejection). - Update docs and CI matrix/workflow to include Conda and install Micromamba when needed.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/generate-ci-matrix.py | Adds conda test grouping and adjusts language weights used for CI matrix balancing. |
| docs/reference/configuration.md | Updates the “shell unsupported languages” table to reflect Conda support. |
| docs/proposals/hook-shell.md | Updates proposal doc to reflect Conda no longer being unimplemented. |
| docs/languages.md | Documents Conda behavior, env selection (conda/mamba/micromamba), and language_version rejection. |
| crates/prek/tests/languages/main.rs | Registers the new conda language test module. |
| crates/prek/tests/languages/conda.rs | Adds integration tests covering Conda local/remote installs and language_version rejection. |
| crates/prek/src/languages/mod.rs | Wires conda into the language enum dispatch and shell support/supported checks. |
| crates/prek/src/languages/conda.rs | Implements Conda environment creation, dependency installation, and hook execution via PATH adjustment. |
| crates/prek-consts/src/env_vars.rs | Adds Conda-related environment variable constants. |
| .github/workflows/ci.yml | Fixes matrix generation script path and installs Micromamba + sets PRE_COMMIT_USE_MICROMAMBA for language tests. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 151e081a48
ℹ️ 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.38% (26.5 MiB → 26.6 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.5 ± 0.1 | 2.3 | 3.3 | 1.06 ± 0.07 |
prek-head --version |
2.3 ± 0.1 | 2.2 | 3.0 | 1.00 |
prek list
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base list |
9.5 ± 0.1 | 9.2 | 10.0 | 1.01 ± 0.02 |
prek-head list |
9.4 ± 0.2 | 9.0 | 10.3 | 1.00 |
prek validate-config .pre-commit-config.yaml
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base validate-config .pre-commit-config.yaml |
3.4 ± 0.1 | 3.3 | 3.8 | 1.07 ± 0.03 |
prek-head validate-config .pre-commit-config.yaml |
3.2 ± 0.1 | 3.1 | 3.3 | 1.00 |
prek sample-config
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base sample-config |
2.8 ± 0.0 | 2.7 | 2.9 | 1.07 ± 0.03 |
prek-head sample-config |
2.6 ± 0.1 | 2.5 | 2.8 | 1.00 |
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 |
75.9 ± 1.7 | 73.7 | 78.8 | 1.00 ± 0.04 |
prek-head run --all-files |
75.6 ± 2.8 | 71.6 | 79.6 | 1.00 |
prek run --all-files (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
77.8 ± 5.9 | 71.5 | 97.0 | 1.03 ± 0.09 |
prek-head run --all-files |
75.5 ± 3.4 | 70.3 | 80.2 | 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 |
75.9 ± 4.4 | 70.0 | 91.3 | 1.01 ± 0.07 |
prek-head run --all-files |
75.1 ± 3.4 | 69.7 | 81.3 | 1.00 |
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 |
20.6 ± 0.5 | 19.7 | 21.6 | 1.01 ± 0.03 |
prek-head run trailing-whitespace --all-files |
20.4 ± 0.4 | 19.6 | 21.1 | 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 |
26.9 ± 2.3 | 23.5 | 31.3 | 1.01 ± 0.11 |
prek-head run end-of-file-fixer --all-files |
26.5 ± 1.9 | 24.0 | 31.1 | 1.00 |
prek run check-json --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-json --all-files |
8.2 ± 0.2 | 7.8 | 8.7 | 1.00 ± 0.04 |
prek-head run check-json --all-files |
8.2 ± 0.3 | 7.8 | 8.9 | 1.00 |
prek run check-yaml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-yaml --all-files |
8.1 ± 0.1 | 7.8 | 8.3 | 1.03 ± 0.02 |
prek-head run check-yaml --all-files |
7.9 ± 0.1 | 7.6 | 8.3 | 1.00 |
prek run check-toml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-toml --all-files |
8.1 ± 0.2 | 7.8 | 8.5 | 1.02 ± 0.04 |
prek-head run check-toml --all-files |
8.0 ± 0.2 | 7.6 | 8.5 | 1.00 |
prek run check-xml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-xml --all-files |
8.3 ± 0.3 | 7.8 | 8.8 | 1.04 ± 0.04 |
prek-head run check-xml --all-files |
8.0 ± 0.2 | 7.6 | 8.5 | 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 |
14.1 ± 1.4 | 12.4 | 19.5 | 1.04 ± 0.12 |
prek-head run detect-private-key --all-files |
13.7 ± 0.8 | 12.5 | 15.8 | 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 |
18.9 ± 0.8 | 17.6 | 20.1 | 1.00 |
prek-head run fix-byte-order-marker --all-files |
18.9 ± 0.7 | 17.8 | 20.4 | 1.00 ± 0.06 |
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 |
5.0 ± 0.1 | 4.9 | 5.1 | 1.04 ± 0.02 |
prek-head install-hooks |
4.8 ± 0.1 | 4.7 | 4.9 | 1.00 |
prek install-hooks (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base install-hooks |
4.9 ± 0.0 | 4.9 | 5.0 | 1.04 ± 0.02 |
prek-head install-hooks |
4.7 ± 0.1 | 4.6 | 4.8 | 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 |
39.4 ± 0.9 | 38.2 | 41.0 | 1.00 |
prek-head run |
39.7 ± 0.9 | 38.3 | 41.8 | 1.01 ± 0.03 |
prek run --files '*.json' (specific file type)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --files '*.json' |
8.8 ± 0.3 | 8.6 | 9.7 | 1.04 ± 0.04 |
prek-head run --files '*.json' |
8.5 ± 0.1 | 8.4 | 8.7 | 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 |
7.5 ± 0.1 | 7.4 | 7.7 | 1.03 ± 0.02 |
prek-head run --dry-run --all-files |
7.3 ± 0.1 | 7.2 | 7.5 | 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 |
12.4 ± 1.3 | 11.4 | 14.7 | 1.10 ± 0.12 |
prek-head run check-hooks-apply --all-files |
11.3 ± 0.1 | 11.1 | 11.5 | 1.00 |
prek run check-useless-excludes --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-useless-excludes --all-files |
11.5 ± 0.1 | 11.3 | 11.8 | 1.02 ± 0.01 |
prek-head run check-useless-excludes --all-files |
11.3 ± 0.1 | 11.0 | 11.5 | 1.00 |
prek run identity --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run identity --all-files |
10.8 ± 0.1 | 10.6 | 11.0 | 1.03 ± 0.01 |
prek-head run identity --all-files |
10.5 ± 0.1 | 10.4 | 10.6 | 1.00 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5ca4c19715
ℹ️ 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".
|
Instead of using I can also guarantee that it will be much faster. |
|
That may be next step, see #2204 |
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [prek](https://github.com/j178/prek) | patch | `0.4.4` → `0.4.5` | 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.5`](https://github.com/j178/prek/blob/HEAD/CHANGELOG.md#045) [Compare Source](j178/prek@v0.4.4...v0.4.5) Released on 2026-06-15. ##### ✨Highlights 0.4.5 completes `prek`'s pre-commit language coverage. With R, Conda, Perl, and coursier now supported, `prek` supports every language available in pre-commit, plus `prek`-only modern languages such as Bun and Deno. This is full feature parity with pre-commit. The last major compatibility gap is closed, and `prek` is now on the path to 1.0. ##### 💚 Sponsorship If `prek` saves time for you or your team, please consider sponsoring the project on [GitHub Sponsors](https://github.com/sponsors/j178). It helps keep new features, performance work, and maintenance moving. ##### Enhancements - Add `Perl` language support ([#​2201](j178/prek#2201)) - Add `R` language support ([#​2206](j178/prek#2206)) - Add `Conda` language support ([#​2203](j178/prek#2203)) - Add `coursier` language support ([#​2194](j178/prek#2194)) - Add group filters to list ([#​2152](j178/prek#2152)) - Remove legacy repo path support ([#​2150](j178/prek#2150)) - Skip cloning fully filtered remote repos ([#​2151](j178/prek#2151)) ##### Performance - Avoid building JSON trees in syntax hooks ([#​2156](j178/prek#2156)) - Scan mixed line endings without line vector ([#​2160](j178/prek#2160)) - Skip file scan for always-run no-filename hooks ([#​2155](j178/prek#2155)) - Use fixed buffer for EOF scan ([#​2163](j178/prek#2163)) - Use fixed buffer for private key scan ([#​2164](j178/prek#2164)) ##### Bug fixes - Fix pretty-format-json CRLF handling ([#​2210](j178/prek#2210)) - Handle missing blobs in diff snapshots ([#​2211](j178/prek#2211)) - Ignore coursier channel from working repo ([#​2202](j178/prek#2202)) ##### Contributors - [@​j178](https://github.com/j178) </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:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTguMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6cGF0Y2giXX0=-->
Closes #52,
pixisupport not included, we might add specificlanguage: pixisupport later.