task
task copied to clipboard
Problems with 'ignore_error`
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
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}}'