diff --git a/errors/errors_task.go b/errors/errors_task.go index 968b404a55..f558d6c9cf 100644 --- a/errors/errors_task.go +++ b/errors/errors_task.go @@ -44,6 +44,10 @@ func (err *TaskRunError) Error() string { } func (err *TaskRunError) Code() int { + var te TaskError + if As(err.Err, &te) { + return te.Code() + } return CodeTaskRunError } diff --git a/errors/errors_task_test.go b/errors/errors_task_test.go new file mode 100644 index 0000000000..679e9204ea --- /dev/null +++ b/errors/errors_task_test.go @@ -0,0 +1,20 @@ +package errors + +import "testing" + +func TestTaskRunErrorCodeUnwrapsCancelled(t *testing.T) { + t.Parallel() + inner := &TaskCancelledByUserError{TaskName: "prompted"} + err := &TaskRunError{TaskName: "prompted", Err: inner} + if got := err.Code(); got != CodeTaskCancelled { + t.Fatalf("Code() = %d, want %d", got, CodeTaskCancelled) + } +} + +func TestTaskRunErrorCodeStaysRunErrorWithoutInnerTaskError(t *testing.T) { + t.Parallel() + err := &TaskRunError{TaskName: "foo", Err: New("command failed")} + if got := err.Code(); got != CodeTaskRunError { + t.Fatalf("Code() = %d, want %d", got, CodeTaskRunError) + } +}