From 0e2c9cc88f84715011e19ad44ee11e03a229ba4d Mon Sep 17 00:00:00 2001 From: Valentin Maerten Date: Fri, 6 Sep 2024 15:44:28 +0200 Subject: [PATCH] fix: include flatten with a default task (#1778) --- task_test.go | 2 ++ taskfile/ast/tasks.go | 4 ++-- testdata/includes_flatten/Taskfile.with_default.yml | 3 +++ testdata/includes_flatten/Taskfile.yml | 8 +++++--- 4 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 testdata/includes_flatten/Taskfile.with_default.yml diff --git a/task_test.go b/task_test.go index 689cf621..33c3a309 100644 --- a/task_test.go +++ b/task_test.go @@ -1240,6 +1240,8 @@ func TestIncludesFlatten(t *testing.T) { expectedOutput string }{ {name: "included flatten", taskfile: "Taskfile.yml", task: "gen", expectedOutput: "gen from included\n"}, + {name: "included flatten with default", taskfile: "Taskfile.yml", task: "default", expectedOutput: "default from included flatten\n"}, + {name: "included flatten can call entrypoint tasks", taskfile: "Taskfile.yml", task: "from_entrypoint", expectedOutput: "from entrypoint\n"}, {name: "included flatten with deps", taskfile: "Taskfile.yml", task: "with_deps", expectedOutput: "gen from included\nwith_deps from included\n"}, {name: "included flatten nested", taskfile: "Taskfile.yml", task: "from_nested", expectedOutput: "from nested\n"}, {name: "included flatten multiple same task", taskfile: "Taskfile.multiple.yml", task: "gen", expectedErr: true, expectedOutput: "task: Found multiple tasks (gen) included by \"included\"\""}, diff --git a/taskfile/ast/tasks.go b/taskfile/ast/tasks.go index a440a096..cfe29a8d 100644 --- a/taskfile/ast/tasks.go +++ b/taskfile/ast/tasks.go @@ -112,12 +112,12 @@ func (t1 *Tasks) Merge(t2 Tasks, include *Include, includedTaskfileVars *Vars) e return nil }) - // If the included Taskfile has a default task and the parent namespace has + // If the included Taskfile has a default task, being not flattened and the parent namespace has // no task with a matching name, we can add an alias so that the user can // run the included Taskfile's default task without specifying its full // name. If the parent namespace has aliases, we add another alias for each // of them. - if t2.Get("default") != nil && t1.Get(include.Namespace) == nil { + if t2.Get("default") != nil && t1.Get(include.Namespace) == nil && !include.Flatten { defaultTaskName := fmt.Sprintf("%s:default", include.Namespace) t1.Get(defaultTaskName).Aliases = append(t1.Get(defaultTaskName).Aliases, include.Namespace) t1.Get(defaultTaskName).Aliases = slices.Concat(t1.Get(defaultTaskName).Aliases, include.Aliases) diff --git a/testdata/includes_flatten/Taskfile.with_default.yml b/testdata/includes_flatten/Taskfile.with_default.yml new file mode 100644 index 00000000..b49af30b --- /dev/null +++ b/testdata/includes_flatten/Taskfile.with_default.yml @@ -0,0 +1,3 @@ +version: '3' +tasks: + default: echo "default from included flatten" diff --git a/testdata/includes_flatten/Taskfile.yml b/testdata/includes_flatten/Taskfile.yml index 1ed6cd9c..44e25819 100644 --- a/testdata/includes_flatten/Taskfile.yml +++ b/testdata/includes_flatten/Taskfile.yml @@ -5,9 +5,11 @@ includes: taskfile: ./included dir: ./included flatten: true + with_default: + taskfile: ./Taskfile.with_default.yml + flatten: true tasks: - default: - cmds: - - echo root_directory > root_directory.txt + from_entrypoint: echo "from entrypoint" +