From 2b4b7e4e73741a1c771fe232517d76dd8fca7d87 Mon Sep 17 00:00:00 2001 From: Timothy Rule <34501912+trulede@users.noreply.github.com> Date: Sat, 18 Apr 2026 14:28:19 +0200 Subject: [PATCH 1/2] Make the failfast test less flakey. --- executor_test.go | 1 + testdata/failfast/default/.gitignore | 1 + testdata/failfast/default/Taskfile.yaml | 32 ++++++++++++++----- ...estFailfast-Default-default-err-run.golden | 2 +- ...TestFailfast-Option-default-err-run.golden | 2 +- testdata/failfast/task/.gitignore | 1 + testdata/failfast/task/Taskfile.yaml | 22 ++++++++++--- .../TestFailfast-Task-task-err-run.golden | 2 +- 8 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 testdata/failfast/default/.gitignore create mode 100644 testdata/failfast/task/.gitignore 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..757ba2a46d 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}}; echo 'dep1' + dep2: touch dep2.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep2' + dep3: touch dep3.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep3' + # 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..825f74a39f 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}}; echo 'dep1' + dep2: touch dep2.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep2' + dep3: touch dep3.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep3' + # 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 From 3308b8484140acc9804ec11678da8cded7a5fc29 Mon Sep 17 00:00:00 2001 From: Timothy Rule <34501912+trulede@users.noreply.github.com> Date: Tue, 21 Apr 2026 19:58:22 +0200 Subject: [PATCH 2/2] Try to reduce general flake --- testdata/failfast/default/Taskfile.yaml | 6 +++--- testdata/failfast/task/Taskfile.yaml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/testdata/failfast/default/Taskfile.yaml b/testdata/failfast/default/Taskfile.yaml index 757ba2a46d..674d9aa552 100644 --- a/testdata/failfast/default/Taskfile.yaml +++ b/testdata/failfast/default/Taskfile.yaml @@ -19,9 +19,9 @@ tasks: - task: dep4 # Deps1-3 wait for Dep4 before starting. - dep1: touch dep1.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep1' - dep2: touch dep2.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep2' - dep3: touch dep3.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep3' + 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: diff --git a/testdata/failfast/task/Taskfile.yaml b/testdata/failfast/task/Taskfile.yaml index 825f74a39f..85839c1f9d 100644 --- a/testdata/failfast/task/Taskfile.yaml +++ b/testdata/failfast/task/Taskfile.yaml @@ -18,9 +18,9 @@ tasks: failfast: true # Deps1-3 wait for Dep4 before starting. - dep1: touch dep1.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep1' - dep2: touch dep2.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep2' - dep3: touch dep3.txt; until [ -f dep4.txt ]; do sleep 0.1; done; sleep {{.PUSH}}; echo 'dep3' + 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: