From 6059ce2ac48972a6dd160e3d377c1db49eb37964 Mon Sep 17 00:00:00 2001 From: Pete Davison Date: Wed, 19 Jul 2023 23:08:22 +0000 Subject: [PATCH] fix: exit codes for indirect tasks --- task.go | 4 +++ task_test.go | 44 ++++++++++++++++++++++---------- testdata/error_code/Taskfile.yml | 6 ++++- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/task.go b/task.go index 7cca7980..cb559554 100644 --- a/task.go +++ b/task.go @@ -239,6 +239,10 @@ func (e *Executor) RunTask(ctx context.Context, call taskfile.Call) error { continue } + if !call.Direct { + return err + } + return &errors.TaskRunError{TaskName: t.Task, Err: err} } } diff --git a/task_test.go b/task_test.go index c3b2bc3e..950a1b36 100644 --- a/task_test.go +++ b/task_test.go @@ -1823,21 +1823,39 @@ Hello bar func TestErrorCode(t *testing.T) { const dir = "testdata/error_code" - - var buff bytes.Buffer - e := &task.Executor{ - Dir: dir, - Stdout: &buff, - Stderr: &buff, - Silent: true, + tests := []struct { + name string + task string + expected int + }{ + { + name: "direct task", + task: "direct", + expected: 42, + }, { + name: "indirect task", + task: "indirect", + expected: 42, + }, } - require.NoError(t, e.Setup()) + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + var buff bytes.Buffer + e := &task.Executor{ + Dir: dir, + Stdout: &buff, + Stderr: &buff, + Silent: true, + } + require.NoError(t, e.Setup()) - err := e.Run(context.Background(), taskfile.Call{Task: "test-exit-code"}) - require.Error(t, err) - casted, ok := err.(*errors.TaskRunError) - assert.True(t, ok, "cannot cast returned error to *task.TaskRunError") - assert.Equal(t, 42, casted.TaskExitCode(), "unexpected exit code from task") + err := e.Run(context.Background(), taskfile.Call{Task: test.task, Direct: true}) + require.Error(t, err) + taskRunErr, ok := err.(*errors.TaskRunError) + assert.True(t, ok, "cannot cast returned error to *task.TaskRunError") + assert.Equal(t, test.expected, taskRunErr.TaskExitCode(), "unexpected exit code from task") + }) + } } func TestEvaluateSymlinksInPaths(t *testing.T) { diff --git a/testdata/error_code/Taskfile.yml b/testdata/error_code/Taskfile.yml index b2c83ff8..ac5a2b69 100644 --- a/testdata/error_code/Taskfile.yml +++ b/testdata/error_code/Taskfile.yml @@ -1,6 +1,10 @@ version: '3' tasks: - test-exit-code: + direct: cmds: - exit 42 + + indirect: + cmds: + - task: direct