diff --git a/executor_test.go b/executor_test.go index d963fa6d3f..7d41f66395 100644 --- a/executor_test.go +++ b/executor_test.go @@ -1129,6 +1129,7 @@ func TestFailfast(t *testing.T) { t.Parallel() NewExecutorTest(t, + WithVar("PUSH", "5"), WithName("default"), WithExecutorOptions( task.WithDir("testdata/failfast/default"), diff --git a/testdata/failfast/default/.gitignore b/testdata/failfast/default/.gitignore new file mode 100644 index 0000000000..314f02b1bc --- /dev/null +++ b/testdata/failfast/default/.gitignore @@ -0,0 +1 @@ +*.txt \ No newline at end of file diff --git a/testdata/failfast/default/Taskfile.yaml b/testdata/failfast/default/Taskfile.yaml index 079ad05abc..674d9aa552 100644 --- a/testdata/failfast/default/Taskfile.yaml +++ b/testdata/failfast/default/Taskfile.yaml @@ -2,13 +2,29 @@ version: '3' tasks: default: + cmds: + - rm -f *.txt + - task: test + vars: + PUSH: '{{.PUSH | default 0.1}}' # Push the deps1-3 out beyond the failfast event. + + test: deps: - - dep1 - - dep2 - - dep3 - - dep4 + - task: dep1 + vars: { PUSH: '{{.PUSH}}' } + - task: dep2 + vars: { PUSH: '{{.PUSH}}' } + - task: dep3 + vars: { PUSH: '{{.PUSH}}' } + - task: dep4 - dep1: sleep 0.1 && echo 'dep1' - dep2: sleep 0.2 && echo 'dep2' - dep3: sleep 0.3 && echo 'dep3' - dep4: exit 1 + # Deps1-3 wait for Dep4 before starting. + dep1: touch dep1.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; printf "dep1\n" + dep2: touch dep2.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; printf "dep2\n" + dep3: touch dep3.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; printf "dep3\n" + # Dep4 waits from Dep1-3 and then indicates that it has started. + dep4: + cmds: + - until [ -f dep1.txt ] && [ -f dep2.txt ] && [ -f dep3.txt ]; do sleep 0.1; done + - touch dep4.txt + - exit 1 diff --git a/testdata/failfast/default/testdata/TestFailfast-Default-default-err-run.golden b/testdata/failfast/default/testdata/TestFailfast-Default-default-err-run.golden index fccb62abff..cb7c2d9424 100644 --- a/testdata/failfast/default/testdata/TestFailfast-Default-default-err-run.golden +++ b/testdata/failfast/default/testdata/TestFailfast-Default-default-err-run.golden @@ -1 +1 @@ -task: Failed to run task "default": task: Failed to run task "dep4": exit status 1 +task: Failed to run task "default": task: Failed to run task "test": task: Failed to run task "dep4": exit status 1 diff --git a/testdata/failfast/default/testdata/TestFailfast-Option-default-err-run.golden b/testdata/failfast/default/testdata/TestFailfast-Option-default-err-run.golden index fccb62abff..cb7c2d9424 100644 --- a/testdata/failfast/default/testdata/TestFailfast-Option-default-err-run.golden +++ b/testdata/failfast/default/testdata/TestFailfast-Option-default-err-run.golden @@ -1 +1 @@ -task: Failed to run task "default": task: Failed to run task "dep4": exit status 1 +task: Failed to run task "default": task: Failed to run task "test": task: Failed to run task "dep4": exit status 1 diff --git a/testdata/failfast/task/.gitignore b/testdata/failfast/task/.gitignore new file mode 100644 index 0000000000..314f02b1bc --- /dev/null +++ b/testdata/failfast/task/.gitignore @@ -0,0 +1 @@ +*.txt \ No newline at end of file diff --git a/testdata/failfast/task/Taskfile.yaml b/testdata/failfast/task/Taskfile.yaml index 078ed17dd5..85839c1f9d 100644 --- a/testdata/failfast/task/Taskfile.yaml +++ b/testdata/failfast/task/Taskfile.yaml @@ -1,7 +1,15 @@ version: '3' +vars: + PUSH: 5 # Push the deps1-3 out beyond the failfast event. + tasks: default: + cmds: + - rm -f *.txt + - task: test + + test: deps: - dep1 - dep2 @@ -9,7 +17,13 @@ tasks: - dep4 failfast: true - dep1: sleep 0.1 && echo 'dep1' - dep2: sleep 0.2 && echo 'dep2' - dep3: sleep 0.3 && echo 'dep3' - dep4: exit 1 + # Deps1-3 wait for Dep4 before starting. + dep1: touch dep1.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; printf "dep1\n" + dep2: touch dep2.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; printf "dep2\n" + dep3: touch dep3.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; printf "dep3\n" + # Dep4 waits from Dep1-3 and then indicates that it has started. + dep4: + cmds: + - until [ -f dep1.txt ] && [ -f dep2.txt ] && [ -f dep3.txt ]; do sleep 0.1; done + - touch dep4.txt + - exit 1 diff --git a/testdata/failfast/task/testdata/TestFailfast-Task-task-err-run.golden b/testdata/failfast/task/testdata/TestFailfast-Task-task-err-run.golden index fccb62abff..cb7c2d9424 100644 --- a/testdata/failfast/task/testdata/TestFailfast-Task-task-err-run.golden +++ b/testdata/failfast/task/testdata/TestFailfast-Task-task-err-run.golden @@ -1 +1 @@ -task: Failed to run task "default": task: Failed to run task "dep4": exit status 1 +task: Failed to run task "default": task: Failed to run task "test": task: Failed to run task "dep4": exit status 1