Changelog
Unreleased
uv-matrix rungained--continue-on-error/--no-continue-on-error, overriding both the task-level and the globalcontinue-on-errorsettings inpyproject.tomlfor that invocation. Failing jobs still count toward the exit code either way.
0.0.6 2026/08/01
Breaking change: the reserved
platformcontext name is now theplatformmodule instead of thesys.platformstring. An existing expression likewhen = "platform == 'win32'"no longer matches and must be rewritten aswhen = "sys.platform == 'win32'"(orplatform.system() == 'Windows').The
sysmodule is now exposed as a reserved context name, and the members ofbuiltinsare available in Python expressions (when, stringvarsvalues) via the evaluation globals.The task
runfield now accepts an array as well as a string (exec form): each element is rendered as a Jinja2 template into exactly one argv element and executed directly with no shell, after a--that stops uv’s own flag parsing. Unlike other list fields, an element that renders empty is kept as an empty argument, and an element that is exactly{{ posargs }}is spliced with the raw CLI arguments given after--. The string form is unchanged (rendered as one template and run through the platform shell).
0.0.5 2026/07/27
Parallel runs now execute every job fully in parallel: each parallel slot gets its own environment directory (
.uv-matrix/slot-<n>), so concurrent jobs never share an environment and no longer wait on each other to sync.The
listcommand now rejects an unknown task name instead of silently printing nothing, and gained the same-m/--matrixfilter asrun.Unknown keys in a task table or directly under
[tool.uv-matrix]are now rejected with a config error naming the offending and known keys, so a typo likegroupforgroupscan no longer silently drop a setting.A malformed config shape (a non-table
[tool.uv-matrix],matrix,tasks,vars, orenv) now fails with a clean error message and exit code 1 instead of escaping as a raw traceback.An
excluderule value that matches no value of its axis is now a config error instead of a silent no-op, matching how--filtertreats an unknown value.A non-string value in an
envtable orenvfilearray now fails with an error naming the owning table and key (e.g.task 't': env value for 'PORT' must be a string, got int).Fixed stop-on-failure in parallel runs: jobs cancelled by a failure are now counted in the run summary, a race that let workers start new jobs after the failure is closed, and “(stopping)” is printed only once.
Fixed argument quoting on Windows: quoted
posargs(e.g.-- "a b c") now reach the command intact throughcmd.exeinstead of being split into separate arguments with stray quote characters.
0.0.4 2026/07/04
Added top-level
envandenvfilesettings under[tool.uv-matrix]that apply to every job; a task’s ownenv/envfilelayer on top and override same-named variables for that task’s jobs only.Top-level
[tool.uv-matrix.vars]string values are now evaluated as Python expressions (likewhen): a literal string must be quoted, and each var is evaluated in definition order so a later one can build on an earlier one.
0.0.3 2026/06/29
Added matrix-level
excludesupport: a matrix table may listexcluderules (tables of axis/value pairs) to drop matching cells from the expanded product.Matrix
tasksentries must now be strings; a non-string entry raises a config error.
0.0.2 2026/06/27
Various small changes.
0.0.1 2026/06/26
Initial release.