Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR introduces task dependency groups with support for parallel execution within task definitions, expanding the run field to accept not just shell commands but also task references and parallel task groups.
- Adds
TaskRunCommandenum with three variants:Script,Task, andTaskGroup - Updates task execution logic to handle mixed command types including sequential task references and parallel groups
- Maintains backward compatibility with existing string-based task definitions
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| src/task/mod.rs | Introduces TaskRunCommand enum and updates Task struct to use it instead of Vec |
| src/config/config_file/mise_toml.rs | Updates task deserialization to use TaskRunCommand::Script for backward compatibility |
| src/cli/tasks/info.rs | Updates task info display to handle TaskRunCommand formatting |
| src/cli/run.rs | Adds execution logic for task references and parallel task groups |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
src/cli/run.rs
Outdated
| use crate::file::display_path; | ||
| use crate::task::task_file_providers::TaskFileProvidersBuilder; | ||
| use crate::task::{Deps, GetMatchingExt, Task}; | ||
| use crate::task::{Deps, GetMatchingExt, Task, TaskRunCommand}; |
There was a problem hiding this comment.
Missing import for JoinSet which is used in the exec_task_group method but not imported. This will cause a compilation error.
src/cli/run.rs
Outdated
| } | ||
|
|
||
| // Execute tasks in parallel using JoinSet | ||
| let mut join_set = JoinSet::new(); |
There was a problem hiding this comment.
JoinSet is used but not imported. Add use tokio::task::JoinSet; to the imports at the top of the file.
src/cli/run.rs
Outdated
| for cmd in task.run() { | ||
| match cmd { | ||
| TaskRunCommand::Script(script) => { | ||
| self.exec_script(script, &[], task, &BTreeMap::new(), prefix) |
There was a problem hiding this comment.
Using an empty BTreeMap::new() instead of the provided env parameter discards the environment variables that should be passed to the task execution. This should use _env parameter or the actual environment from the calling context.
| self.exec_script(script, &[], task, &BTreeMap::new(), prefix) | |
| self.exec_script(script, &[], task, _env, prefix) |
src/cli/run.rs
Outdated
| let continue_on_error = self.continue_on_error; | ||
|
|
||
| for task in task_refs { | ||
| let _config = Arc::clone(config); |
There was a problem hiding this comment.
The _config variable is cloned but never used in the spawned task. Either remove this unused variable or implement the actual task execution logic that would use it.
| let _config = Arc::clone(config); |
Hyperfine Performance
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.4 x -- echo |
18.6 ± 0.4 | 18.0 | 20.7 | 1.00 |
mise x -- echo |
18.9 ± 0.6 | 18.1 | 21.5 | 1.02 ± 0.04 |
mise env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.4 env |
18.1 ± 0.3 | 17.4 | 21.0 | 1.00 |
mise env |
18.3 ± 0.6 | 17.3 | 25.8 | 1.01 ± 0.04 |
mise hook-env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.4 hook-env |
17.6 ± 0.3 | 17.0 | 19.4 | 1.00 ± 0.03 |
mise hook-env |
17.6 ± 0.3 | 17.1 | 21.3 | 1.00 |
mise ls
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.4 ls |
16.0 ± 0.2 | 15.6 | 16.8 | 1.00 ± 0.02 |
mise ls |
15.9 ± 0.2 | 15.6 | 17.1 | 1.00 |
xtasks/test/perf
| Command | mise-2025.9.4 | mise | Variance |
|---|---|---|---|
| install (cached) | 162ms | ✅ 100ms | +62% |
| ls (cached) | 61ms | 61ms | +0% |
| bin-paths (cached) | 65ms | 65ms | +0% |
| task-ls (cached) | 461ms | 464ms | +0% |
✅ Performance improvement: install cached is 62%
8860b37 to
2c940df
Compare
2c940df to
0a979ac
Compare
24847af to
b793988
Compare
c39b484 to
24d54c2
Compare
c8e4057 to
1301a7c
Compare
1301a7c to
f03b0bc
Compare
It is no longer necessary that we have #6212
It is no longer necessary that we have #6212
It is no longer necessary that we have #6212
### 🚀 Features - **(task)** add timeout support for task execution by @jdx in [#6216](#6216) - **(task)** sub-tasks in run lists by @jdx in [#6212](#6212) ### Chore - fix npm publish action by @jdx in [14f4b09](14f4b09) - fix cloudflare release action by @jdx in [00afa25](00afa25) - fix git-cliff for release notes by @jdx in [15a9aed](15a9aed) Co-authored-by: mise-en-dev <release@mise.jdx.dev>
## [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)
No description provided.