Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,32 @@ pub static SETTINGS_META: Lazy<IndexMap<&'static str, SettingsMeta>> = Lazy::new
indexmap!{"#
.to_string(),
);
let push_deprecated_fields = |lines: &mut Vec<String>, props: &toml::Table| {
let deprecated = props
.get("deprecated")
.map(|v| v.as_str().unwrap().to_string());
let warn_at = props
.get("deprecated_warn_at")
.map(|v| v.as_str().unwrap().to_string());
let remove_at = props
.get("deprecated_remove_at")
.map(|v| v.as_str().unwrap().to_string());
match deprecated {
Some(msg) => lines.push(format!(
" deprecated: Some({}),",
raw_string_literal(&msg)
)),
None => lines.push(" deprecated: None,".to_string()),
}
match warn_at {
Some(v) => lines.push(format!(" deprecated_warn_at: Some({v:?}),")),
None => lines.push(" deprecated_warn_at: None,".to_string()),
}
match remove_at {
Some(v) => lines.push(format!(" deprecated_remove_at: Some({v:?}),")),
None => lines.push(" deprecated_remove_at: None,".to_string()),
}
};
for (name, props) in &settings {
let props = props.as_table().unwrap();
if let Some(type_) = props.get("type").map(|v| v.as_str().unwrap()) {
Expand All @@ -439,6 +465,7 @@ pub static SETTINGS_META: Lazy<IndexMap<&'static str, SettingsMeta>> = Lazy::new
raw_string_literal(&description)
));
}
push_deprecated_fields(&mut lines, props);
lines.push(" },".to_string());
}
}
Expand All @@ -464,6 +491,7 @@ pub static SETTINGS_META: Lazy<IndexMap<&'static str, SettingsMeta>> = Lazy::new
raw_string_literal(&description)
));
}
push_deprecated_fields(&mut lines, props);
lines.push(" },".to_string());
}
}
Expand Down
2 changes: 1 addition & 1 deletion docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ raw = false # set to true to directly pipe plugins to stdin/stdout/std
yes = false # set to true to automatically answer yes to all prompts

not_found_auto_install = true # see MISE_NOT_FOUND_AUTO_INSTALL
task_output = "prefix" # see Tasks Runner for more information
task.output = "prefix" # see Tasks Runner for more information
paranoid = false # see MISE_PARANOID

shorthands_file = '~/.config/mise/shorthands.toml' # path to the shorthands file, see `MISE_SHORTHANDS_FILE`
Expand Down
2 changes: 1 addition & 1 deletion docs/tasks/running-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ By default, tasks will execute with a maximum of 4 parallel jobs. Customize this
label. By printing line-by-line we avoid interleaving output from parallel executions. However, if
--jobs == 1, the output will be set to `interleave`.

To just print stdout/stderr directly, use `--interleave`, the `task_output` setting, or `MISE_TASK_OUTPUT=interleave`.
To just print stdout/stderr directly, use `--interleave`, the `task.output` setting, or `MISE_TASK_OUTPUT=interleave`.

Stdin is not read by default. To enable this, set `raw = true` on the task that needs it. This will prevent
it running in parallel with any other task—a RWMutex will get a write lock in this case. This also prevents redactions applied to the output.
Expand Down
2 changes: 1 addition & 1 deletion e2e/config/test_auto_install_false
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ cat <<EOF >mise.toml
dummy = '1.0.0'

[settings]
task_run_auto_install = false
task.run_auto_install = false

[tasks.test]
run = 'dummy --version'
Expand Down
2 changes: 1 addition & 1 deletion e2e/tasks/test_task_file_auto_install
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ cat <<EOF >mise.toml
tiny = "1"

[settings]
task_run_auto_install = true
task.run_auto_install = true
EOF

mkdir -p mise-tasks
Expand Down
6 changes: 3 additions & 3 deletions e2e/tasks/test_task_raw_output
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#!/usr/bin/env bash

# Test that raw tasks get interleave output even when task_output=prefix is set
# This ensures raw=true takes priority over task_output setting
# Test that raw tasks get interleave output even when task.output=prefix is set
# This ensures raw=true takes priority over task.output setting

cat <<EOF >mise.toml
[settings]
task_output = "prefix"
task.output = "prefix"

[tasks.normal]
run = 'echo normal task'
Expand Down
4 changes: 2 additions & 2 deletions e2e/tasks/test_task_skip_deps
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ assert_not_contains "mise run --skip-deps c ::: b" "a"
assert "mise run --skip-deps e" "a
b"

# Test task_skip_depends setting
# Test task.skip_depends setting
cat <<EOF >mise.toml
[settings]
task_skip_depends = true
task.skip_depends = true

[tasks.a]
run = "echo a"
Expand Down
8 changes: 4 additions & 4 deletions man/man1/mise.1
Original file line number Diff line number Diff line change
Expand Up @@ -1806,7 +1806,7 @@ Force the tasks to run even if outputs are up to date
\fB\-i, \-\-interleave\fR
Print directly to stdout/stderr instead of by line
Defaults to true if \-\-jobs == 1
Configure with `task_output` config or `MISE_TASK_OUTPUT` env var
Configure with `task.output` config or `MISE_TASK_OUTPUT` env var
.TP
\fB\-j, \-\-jobs\fR \fI<JOBS>\fR
Number of tasks to run in parallel
Expand All @@ -1830,7 +1830,7 @@ Change how tasks information is output when running tasks
\fB\-p, \-\-prefix\fR
Print stdout/stderr by line, prefixed with the task's label
Defaults to true if \-\-jobs > 1
Configure with `task_output` config or `MISE_TASK_OUTPUT` env var
Configure with `task.output` config or `MISE_TASK_OUTPUT` env var
.TP
\fB\-q, \-\-quiet\fR
Don't show extra output
Expand Down Expand Up @@ -2534,7 +2534,7 @@ Force the tasks to run even if outputs are up to date
\fB\-i, \-\-interleave\fR
Print directly to stdout/stderr instead of by line
Defaults to true if \-\-jobs == 1
Configure with `task_output` config or `MISE_TASK_OUTPUT` env var
Configure with `task.output` config or `MISE_TASK_OUTPUT` env var
.TP
\fB\-j, \-\-jobs\fR \fI<JOBS>\fR
Number of tasks to run in parallel
Expand All @@ -2558,7 +2558,7 @@ Change how tasks information is output when running tasks
\fB\-p, \-\-prefix\fR
Print stdout/stderr by line, prefixed with the task's label
Defaults to true if \-\-jobs > 1
Configure with `task_output` config or `MISE_TASK_OUTPUT` env var
Configure with `task.output` config or `MISE_TASK_OUTPUT` env var
.TP
\fB\-q, \-\-quiet\fR
Don't show extra output
Expand Down
8 changes: 4 additions & 4 deletions mise.usage.kdl
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ cmd run restart_token=::: help="Run task(s)" {
arg <CD>
}
flag "-f --force" help="Force the tasks to run even if outputs are up to date"
flag "-i --interleave" help="Print directly to stdout/stderr instead of by line\nDefaults to true if --jobs == 1\nConfigure with `task_output` config or `MISE_TASK_OUTPUT` env var" hide=#true
flag "-i --interleave" help="Print directly to stdout/stderr instead of by line\nDefaults to true if --jobs == 1\nConfigure with `task.output` config or `MISE_TASK_OUTPUT` env var" hide=#true
flag "-j --jobs" help="Number of tasks to run in parallel\n[default: 4]\nConfigure with `jobs` config or `MISE_JOBS` env var" {
arg <JOBS>
}
Expand All @@ -706,7 +706,7 @@ cmd run restart_token=::: help="Run task(s)" {
long_help "Change how tasks information is output when running tasks\n\n- `prefix` - Print stdout/stderr by line, prefixed with the task's label\n- `interleave` - Print directly to stdout/stderr instead of by line\n- `replacing` - Stdout is replaced each time, stderr is printed as is\n- `timed` - Only show stdout lines if they are displayed for more than 1 second\n- `keep-order` - Print stdout/stderr by line, prefixed with the task's label, but keep the order of the output\n- `quiet` - Don't show extra output\n- `silent` - Don't show any output including stdout and stderr from the task except for errors"
arg <OUTPUT>
}
flag "-p --prefix" help="Print stdout/stderr by line, prefixed with the task's label\nDefaults to true if --jobs > 1\nConfigure with `task_output` config or `MISE_TASK_OUTPUT` env var" hide=#true
flag "-p --prefix" help="Print stdout/stderr by line, prefixed with the task's label\nDefaults to true if --jobs > 1\nConfigure with `task.output` config or `MISE_TASK_OUTPUT` env var" hide=#true
flag "-q --quiet" help="Don't show extra output"
flag "-r --raw" help="Read/write directly to stdin/stdout/stderr instead of by line\nRedactions are not applied with this option\nConfigure with `raw` config or `MISE_RAW` env var"
flag "-s --shell" help="Shell to use to run toml tasks" {
Expand Down Expand Up @@ -1009,7 +1009,7 @@ cmd tasks help="Manage tasks" {
arg <CD>
}
flag "-f --force" help="Force the tasks to run even if outputs are up to date"
flag "-i --interleave" help="Print directly to stdout/stderr instead of by line\nDefaults to true if --jobs == 1\nConfigure with `task_output` config or `MISE_TASK_OUTPUT` env var" hide=#true
flag "-i --interleave" help="Print directly to stdout/stderr instead of by line\nDefaults to true if --jobs == 1\nConfigure with `task.output` config or `MISE_TASK_OUTPUT` env var" hide=#true
flag "-j --jobs" help="Number of tasks to run in parallel\n[default: 4]\nConfigure with `jobs` config or `MISE_JOBS` env var" {
arg <JOBS>
}
Expand All @@ -1018,7 +1018,7 @@ cmd tasks help="Manage tasks" {
long_help "Change how tasks information is output when running tasks\n\n- `prefix` - Print stdout/stderr by line, prefixed with the task's label\n- `interleave` - Print directly to stdout/stderr instead of by line\n- `replacing` - Stdout is replaced each time, stderr is printed as is\n- `timed` - Only show stdout lines if they are displayed for more than 1 second\n- `keep-order` - Print stdout/stderr by line, prefixed with the task's label, but keep the order of the output\n- `quiet` - Don't show extra output\n- `silent` - Don't show any output including stdout and stderr from the task except for errors"
arg <OUTPUT>
}
flag "-p --prefix" help="Print stdout/stderr by line, prefixed with the task's label\nDefaults to true if --jobs > 1\nConfigure with `task_output` config or `MISE_TASK_OUTPUT` env var" hide=#true
flag "-p --prefix" help="Print stdout/stderr by line, prefixed with the task's label\nDefaults to true if --jobs > 1\nConfigure with `task.output` config or `MISE_TASK_OUTPUT` env var" hide=#true
flag "-q --quiet" help="Don't show extra output"
flag "-r --raw" help="Read/write directly to stdin/stdout/stderr instead of by line\nRedactions are not applied with this option\nConfigure with `raw` config or `MISE_RAW` env var"
flag "-s --shell" help="Shell to use to run toml tasks" {
Expand Down
8 changes: 8 additions & 0 deletions schema/mise-settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@
"type": "string",
"description": "Deprecation message if this setting is deprecated"
},
"deprecated_warn_at": {
"type": "string",
"description": "Mise version at which the deprecation warning starts showing (e.g. \"2026.8.0\")"
},
"deprecated_remove_at": {
"type": "string",
"description": "Mise version at which the deprecated code should be removed (triggers debug_assert, e.g. \"2027.2.0\")"
},
"description": {
"type": "string",
"description": "Brief description of what this setting does"
Expand Down
87 changes: 69 additions & 18 deletions schema/mise.json
Original file line number Diff line number Diff line change
Expand Up @@ -1338,6 +1338,14 @@
"type": "object",
"additionalProperties": false,
"properties": {
"disable_paths": {
"default": [],
"description": "Paths that mise will not look for tasks in.",
"type": "array",
"items": {
"type": "string"
}
},
"disable_spec_from_run_scripts": {
"default": false,
"description": "Opt out of parsing task run scripts to infer the usage spec (arguments and flags). When enabled, mise will derive the usage spec only from the `usage` field, ignoring any `arg()`, `option()`, or `flag()` templates used in run scripts. This can restore previous behavior and avoid the extra template pass over run scripts when collecting specs.",
Expand All @@ -1361,6 +1369,44 @@
"description": "Whether to respect .gitignore files when discovering monorepo subdirectories.",
"type": "boolean"
},
"output": {
"description": "Change output style when executing tasks.",
"type": "string",
"enum": [
"prefix",
"interleave",
"keep-order",
"replacing",
"timed",
"quiet",
"silent"
]
},
"remote_no_cache": {
"description": "Mise will always fetch the latest tasks from the remote, by default the cache is used.",
"type": "boolean"
},
"run_auto_install": {
"default": true,
"description": "Automatically install missing tools when executing tasks.",
"type": "boolean"
},
"show_full_cmd": {
"description": "Disable truncation of command lines in task execution output. When true, the full command line will be shown.",
"type": "boolean"
},
"skip": {
"default": [],
"description": "Tasks to skip when running `mise run`.",
"type": "array",
"items": {
"type": "string"
}
},
"skip_depends": {
"description": "Run only specified tasks skipping all dependencies.",
"type": "boolean"
},
"source_freshness_equal_mtime_is_fresh": {
"default": false,
"description": "When source mtime equals output mtime, consider sources fresh (use <=). Default false uses strict < comparison.",
Expand All @@ -1370,62 +1416,67 @@
"default": false,
"description": "Use content hashing (blake3) instead of metadata for source freshness. More accurate but slower.",
"type": "boolean"
},
"timeout": {
"description": "Default timeout for tasks. Can be overridden by individual tasks.",
"type": "string"
},
"timings": {
"description": "Show completion message with elapsed time for each task on `mise run`. Default shows when output type is `prefix`.",
"type": "boolean"
}
}
},
"task_disable_paths": {
"default": [],
"description": "Paths that mise will not look for tasks in.",
"type": "array",
"deprecated": true,
"items": {
"type": "string"
}
},
"task_output": {
"description": "Change output style when executing tasks.",
"type": "string",
"enum": [
"prefix",
"interleave",
"keep-order",
"replacing",
"timed",
"quiet",
"silent"
]
"deprecated": true
},
"task_remote_no_cache": {
"description": "Mise will always fetch the latest tasks from the remote, by default the cache is used.",
"type": "boolean"
"type": "boolean",
"deprecated": true
Comment on lines 1438 to +1446

Copilot AI Feb 18, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the JSON schema, task_output is still supported (deprecated) but its enum constraints were removed. This makes the schema accept values that the runtime parser will still reject, which is a validation/IDE-assistance regression. Consider keeping the original enum (and other constraints/defaults where applicable) while also marking the property as deprecated.

Copilot uses AI. Check for mistakes.
},
"task_run_auto_install": {
"default": true,
"description": "Automatically install missing tools when executing tasks.",
"type": "boolean"
"type": "boolean",
"deprecated": true
},
"task_show_full_cmd": {
"description": "Disable truncation of command lines in task execution output. When true, the full command line will be shown.",
"type": "boolean"
"type": "boolean",
"deprecated": true
},
"task_skip": {
"default": [],
"description": "Tasks to skip when running `mise run`.",
"type": "array",
"deprecated": true,
"items": {
"type": "string"
}
},
"task_skip_depends": {
"description": "Run only specified tasks skipping all dependencies.",
"type": "boolean"
"type": "boolean",
"deprecated": true
},
"task_timeout": {
"description": "Default timeout for tasks. Can be overridden by individual tasks.",
"type": "string"
"type": "string",
"deprecated": true
},
"task_timings": {
"description": "Show completion message with elapsed time for each task on `mise run`. Default shows when output type is `prefix`.",
"type": "boolean"
"type": "boolean",
"deprecated": true
},
"terminal_progress": {
"default": true,
Expand Down
Loading
Loading