task icon indicating copy to clipboard operation
task copied to clipboard

Problems with 'ignore_error`

Open marco-m opened this issue 4 years ago • 2 comments
trafficstars

This issue summarises two different problems I found with ignore_error. Some of these are already discussed in #363, some others are new and arise when using Go templates for the RHS of ignore_error.

Taskfile

version: "3"

tasks:

  pass:
    cmd: exit 0

  fail:
    cmds:
      - echo Failing task
      - exit 100

  ignore-error-task-without-template:
    cmds:
      - task: fail
        ignore_error: true
      - echo After ignore_error

  ignore-error-cmd-without-template:
    cmds:
      - cmd: exit 101
        ignore_error: true
      - echo After ignore_error

  ignore-error-task-with-template:
    cmds:
      - cmd: echo IGNORE="$IGNORE"
      - cmd: echo '{{if .IGNORE}}true{{else}}false{{end}}'
      - task: fail
        ignore_error: '{{if .IGNORE}}true{{else}}false{{end}}'
      - echo After ignore_error

  ignore-error-cmd-with-template:
    cmds:
      - cmd: echo IGNORE="$IGNORE"
      - cmd: echo '{{if .IGNORE}}true{{else}}false{{end}}'
      - cmd: exit 102
        ignore_error: '{{if .IGNORE}}true{{else}}false{{end}}'
      - echo After ignore_error

Target fail

Works as expected:

$ task fail
task: echo Failing task
Failing task
task: exit 100
task: Failed to run task "fail": exit status 100

Target ignore-error-task-without-template

Fails:

$ task ignore-error-task-without-template
task: echo Failing task
Failing task
task: exit 100
task: Failed to run task "ignore-error-task-without-template": task: Failed to run task "fail": exit status 100

Expected:

$ task ignore-error-task-without-template
task: echo Failing task
Failing task
task: exit 100
task: echo After ignore_error
After ignore_error

Target ignore-error-cmd-without-template

Works as expected:

$ task ignore-error-cmd-without-template
task: exit 101
task: echo After ignore_error
After ignore_error

Target ignore-error-task-with-template

Works as expected:

$ task ignore-error-task-with-template
task: echo IGNORE="$IGNORE"
IGNORE=
task: echo 'false'
false
task: echo Failing task
Failing task
task: exit 100
task: Failed to run task "ignore-error-task-with-template": task: Failed to run task "fail": exit status 100

Fails:

$ IGNORE=1 task ignore-error-task-with-template
task: echo IGNORE="$IGNORE"
IGNORE=1
task: echo 'true'
true
task: echo Failing task
Failing task
task: exit 100
task: Failed to run task "ignore-error-task-with-template": task: Failed to run task "fail": exit status 100

Expected:

$ IGNORE=1 task ignore-error-task-with-template
task: echo IGNORE="$IGNORE"
IGNORE=1
task: echo 'true'
true
task: echo Failing task
Failing task
task: exit 100
task: echo After ignore_error
After ignore_error

Target ignore-error-cmd-with-template

Fails:

$ task ignore-error-cmd-with-template
task: echo IGNORE="$IGNORE"
IGNORE=
task: echo 'false'
false
task: echo After ignore_error
After ignore_error

Expected:

$ task ignore-error-cmd-with-template
task: echo IGNORE="$IGNORE"
IGNORE=
task: echo 'false'
false
task: exit 102
task: Failed to run task "ignore-error-cmd-with-template": exit status 102

Somewhat works as expected:

"somewhat" because the previous bug just makes this work always:

$ IGNORE=1 task ignore-error-cmd-with-template
task: echo IGNORE="$IGNORE"
IGNORE=1
task: echo 'true'
true
task: echo After ignore_error
After ignore_error

marco-m avatar Mar 23 '21 10:03 marco-m

Hi @marco-m

I've fixed previous issue #363 (I'll do the PR ASAP) and I checked your template. My fix works with without-template cases but after fixing your Taskfile: ignore_error is misaligned. (see bellow)

If I align the ignore_errorin the task with with-template cases taskfile raise an error line 32: cannot unmarshal !!str {{if .I... into bool. This because ignore_erroris a bool. To use task with with-template is necessary to review the yaml struct and the how to use scripting in it.

I suggest to close this issue and to open another one with enhancement tag for task with with-template.

Taskfile

version: "3"

tasks:

  pass:
    cmd: exit 0

  fail:
    cmds:
      - echo Failing task
      - exit 100

  ignore-error-task-without-template:
    cmds:
      - task: fail
      - echo After ignore_error
    ignore_error: true          # FIXED

  ignore-error-cmd-without-template:
    cmds:
      - cmd: exit 101
      - echo After ignore_error
    ignore_error: true          # FIXED


  ignore-error-task-with-template:
    cmds:
      - cmd: echo IGNORE="$IGNORE"
      - cmd: echo '{{if .IGNORE}}true{{else}}false{{end}}'
      - task: fail
      - echo After ignore_error
    # ignore_error: '{{if .IGNORE}}true{{else}}false{{end}}'

  ignore-error-cmd-with-template:
    cmds:
      - cmd: echo IGNORE="$IGNORE"
      - cmd: echo '{{if .IGNORE}}true{{else}}false{{end}}'
      - cmd: exit 102
      - echo After ignore_error
    # ignore_error: '{{if .IGNORE}}true{{else}}false{{end}}'

core-dev-crypto avatar Sep 03 '22 15:09 core-dev-crypto