Skip to content

v4.1.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 21:22
· 26 commits to main since this release
  • Quoted strings in Go-syntax templates keep their dots, so
    {{ .FILE | replace ".tar.gz" "" }} strips what it was given. Affected tasks
    re-run once, and a Taskfile already converted by task --migrate --write
    needs checking by hand.
  • An escaped quote works inside a Go-syntax template string. A Taskfile
    already converted by task --migrate --write needs checking by hand.
  • Go-syntax templates can call the string helpers directly, not only after
    a pipe, so {{trimSuffix ".po" .ITEM}} works. splitList was splitting the
    wrong argument. Affected tasks re-run once.
  • default, title, join, first and last mean the same on either side
    of a pipe
    in Go-syntax Taskfiles — most visibly, default substitutes for
    any empty value, not only an unset one. Jinja Taskfiles keep Jinja's meaning.
    Affected tasks re-run once, and a Taskfile already converted needs checking by
    hand.
  • The Go-template deprecation warning no longer runs into the next line.
  • A dependency cycle is reported as one, naming the path (a -> b -> a),
    instead of running until the process ran out of stack. A task that reaches
    itself is rejected: calling itself with different vars: still works, but
    recursion driven by state outside the Taskfile no longer does.
  • Deep dependency trees no longer crash the runner. Thousands of levels
    run; a runaway recursion stops with an error instead.
  • Tasks start in a different order, so interleaved output can differ.
    --output group and prefixed still keep each task's output together.
  • A failing dependency no longer stops its siblings starting. Under
    --failfast they all start and are cancelled when one fails, so a cancelled
    sibling may leave partial work behind.
  • A failing run stops the commands it leaves behind instead of orphaning
    them. It cannot tell those from a job a task backgrounded on purpose, so both
    are stopped; TASK_NO_REAP=1 turns that off.
  • Ctrl-C reaches the commands, not just the runner. The second press is
    passed on to them, and the third stops them before exiting.
  • A confirmation prompt no longer pauses the rest of the run, and Ctrl-C
    works while one is waiting.
  • A SIGTERM stops the run at once, exiting 1 — it comes from a
    supervisor, so there is no second signal to wait for. Ctrl-C keeps its
    three-press escalation, and watch sessions are unchanged.