go-task / task

A task runner / simpler Make alternative written in Go
https://taskfile.dev
MIT License
11.57k stars 618 forks source link

Support running all tasks even on errors #1853

Open xremming opened 1 month ago

xremming commented 1 month ago

So in my use case I'm consolidating all different linters (among other things) to be ran with the Taskfile. See the snippet below for the general structure.

When running linters it would be nice to run all of them always (the same is especially true with the for loop) and once they're all ran to return an error if any of them errored. I could work around this by using longer shell scripts but I would prefer not to.

I'm thinking something like a run_all: always parameter. The default for which could be the current behaviour of stop-on-first-error.

The ignore_error works otherwise but it also ignores the error code, meaning that when the linters are ran in CI it will not cause the run to fail.

tasks:
  lint:
    deps: [lint:terraform:fmt, lint:terraform:tflint]

  lint:terraform:fmt:
    dir: infra
    cmd: "terraform fmt -check -recursive"

  lint:terraform:tflint:
    deps: [install:tflint]
    dir: infra
    vars:
      STACKS:
        sh: "echo stacks/*"
    cmd:
      for:
        var: STACKS
      cmd: "tflint --config=../../.tflint.hcl --chdir={{ .ITEM }}"
andrewimeson commented 1 month ago

This is probably a duplicate of #1246

I posted an earlier iteration of the workaround I use on that issue.

This feature would be really nice.

xremming commented 3 weeks ago

The suggestion in #1246 on how to handle it seems better. So a +1 for failfast from me.

trulede commented 2 weeks ago

The code suggests that:

@xremming If you modify your example to something people can easily run (e.g. tasks with cmds exit(0) or exit(1) and some echos) and share the CLI command you use, it might be possible to clarify the behaviour.