diff --git a/task.go b/task.go index 71f5e6f5..489ef7e5 100644 --- a/task.go +++ b/task.go @@ -311,10 +311,12 @@ func (e *Executor) runCommand(ctx context.Context, t *ast.Task, call *Call, i in defer reacquire() err := e.RunTask(ctx, &Call{Task: cmd.Task, Vars: cmd.Vars, Silent: cmd.Silent, Indirect: true}) - if err != nil { - return err + var exitCode interp.ExitStatus + if errors.As(err, &exitCode) && cmd.IgnoreError { + e.Logger.VerboseErrf(logger.Yellow, "task: [%s] task error ignored: %v\n", t.Name(), err) + return nil } - return nil + return err case cmd.Cmd != "": if !shouldRunOnCurrentPlatform(cmd.Platforms) { e.Logger.VerboseOutf(logger.Yellow, "task: [%s] %s not for current platform - ignored\n", t.Name(), cmd.Cmd) diff --git a/taskfile/ast/cmd.go b/taskfile/ast/cmd.go index b590e6bb..d1bfb0a9 100644 --- a/taskfile/ast/cmd.go +++ b/taskfile/ast/cmd.go @@ -93,6 +93,7 @@ func (c *Cmd) UnmarshalYAML(node *yaml.Node) error { c.Vars = cmdStruct.Vars c.For = cmdStruct.For c.Silent = cmdStruct.Silent + c.IgnoreError = cmdStruct.IgnoreError return nil }