diff --git a/task.go b/task.go index d0f82a2d..0b24da07 100644 --- a/task.go +++ b/task.go @@ -324,8 +324,13 @@ func (e *Executor) runDeferred(t *ast.Task, call *ast.Call, i int, deferredExitC ctx, cancel := context.WithCancel(context.Background()) defer cancel() + origTask, err := e.GetTask(call) + if err != nil { + return + } + cmd := t.Cmds[i] - vars, _ := e.Compiler.FastGetVariables(t, call) + vars, _ := e.Compiler.FastGetVariables(origTask, call) cache := &templater.Cache{Vars: vars} extra := map[string]any{} diff --git a/task_test.go b/task_test.go index 33c3a309..c78cb384 100644 --- a/task_test.go +++ b/task_test.go @@ -1788,7 +1788,7 @@ func TestExitCodeZero(t *testing.T) { require.NoError(t, e.Setup()) require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "exit-zero"})) - assert.Equal(t, "EXIT_CODE=", strings.TrimSpace(buff.String())) + assert.Equal(t, "FOO=bar - EXIT_CODE=", strings.TrimSpace(buff.String())) } func TestExitCodeOne(t *testing.T) { @@ -1802,7 +1802,7 @@ func TestExitCodeOne(t *testing.T) { require.NoError(t, e.Setup()) require.Error(t, e.Run(context.Background(), &ast.Call{Task: "exit-one"})) - assert.Equal(t, "EXIT_CODE=1", strings.TrimSpace(buff.String())) + assert.Equal(t, "FOO=bar - EXIT_CODE=1", strings.TrimSpace(buff.String())) } func TestIgnoreNilElements(t *testing.T) { diff --git a/testdata/exit_code/Taskfile.yml b/testdata/exit_code/Taskfile.yml index ce4568d0..e78bd2cd 100644 --- a/testdata/exit_code/Taskfile.yml +++ b/testdata/exit_code/Taskfile.yml @@ -7,11 +7,15 @@ vars: tasks: exit-zero: + vars: + FOO: bar cmds: - - defer: echo {{.PREFIX}}{{.EXIT_CODE}} + - defer: echo FOO={{.FOO}} - {{.PREFIX}}{{.EXIT_CODE}} - exit 0 exit-one: + vars: + FOO: bar cmds: - - defer: echo {{.PREFIX}}{{.EXIT_CODE}} + - defer: echo FOO={{.FOO}} - {{.PREFIX}}{{.EXIT_CODE}} - exit 1