🚀 Features
- Remote Taskfiles are now generally available! This has been an experimental feature for 3 years, but is now enabled by default. Massive thanks to all those that contributed and gave feedback (too many to list here). We've also given the Remote Taskfiles documentation a bit of a polish (#1317, #2906 by @pd93).
- Added a per-command
timeoutthat terminates a command once it exceeds the given duration (Go duration syntax). It covers shell commands, task calls, deferred commands,depsand theifcondition, obeysignore_error, and reports exit code124. Callers that join arun: onceorwhen_changedtask already running now honor their owntimeout, and inherit that task's failure instead of being told it succeeded (#1569, #2898 by @vmaerten). - Considerably improve performance of fingerprinting on large repositories (monorepos). Fingerprinting is up to 86% faster and make up to 70% fewer memory allocations on the more advanced scenarios. Benchmarks were added as well. We're basically skipping work when not needed. (#2853, #2883 by @Napolitain, #2884 by @Napolitain).
- Further improved fingerprinting performance on large repositories: hashing source files now reuses a single buffer, reducing memory allocations by ~98% and wall-clock time by ~7% (#2925 by @vmaerten).
includes.excludescan now exclude a whole namespace: append:*to the namespace name, e.g.excludes: ['debug:*']. Bare entries still match a single task name exactly (#2300, #2959 by @xmxxc).- Added support for
enum.refin--interactiveprompts. Required vars usingenum.refnow show the selection list like static enums, instead of falling back to free-form input (#2817 by @vmaerten). - Added Nushell completions, available via
task --completion nu. They complete task names and aliases, every flag with its description, and the values of--completion,--outputand--sort(#2966 by @vmaerten). - Added a verbose log line for failed tasks. In
--verbosemode, a task whose command exits non-zero now reportstask: "<name>" failed: <error>instead of stopping without a trace (#2240 by @Drino).
🐛 Fixes
- Fixed a pinned
checksum:not being verified when a remote Taskfile came from the cache (#2980 by @vmaerten). - Fixed the fingerprint variable (
{{.CHECKSUM}}/{{.TIMESTAMP}}) ignoring amethod:set at the Taskfile level: the variable now follows the same method resolution as the up-to-date check. Only the variable matching the effective method is injected, so a task inheriting a Taskfile-levelmethod: timestampgets{{.TIMESTAMP}}and no longer a{{.CHECKSUM}}(which now renders as an empty string), and neither variable is injected when the effective method isnone(#2924 by @vmaerten). - Fixed
ref:infor: matrix:andenum:only accepting literal lists. Refs computed with template functions likekeysorsplitListno longer fail with "must resolve to a list" (#2544, #2956 by @no-hup). - Fixed pressing
Escat an interactive variable prompt not cancelling the run (#2942 by @anilnatha). - Fixed
joinUrlcollapsing the//in a URL scheme (e.g. producinghttp:/localhostinstead ofhttp://localhost) (#2915 by @vsaraikin). - Fixed the JSON schema rejecting
ignore_erroron a command inside aforloop. Editors no longer flag a Taskfile that Task runs perfectly fine (#2044 by @gokeefe-atb). - Fixed the JSON schema rejecting more keys the Taskfile parser accepts:
ignore_erroron atask:call, andif,setandshopton a command inside aforloop (#2967 by @vmaerten).