diff --git a/task_test.go b/task_test.go index aeaa9317be..440b41afd9 100644 --- a/task_test.go +++ b/task_test.go @@ -1948,27 +1948,34 @@ func TestIncludedVars(t *testing.T) { task.WithDir(dir), task.WithStdout(&buff), task.WithStderr(&buff), + task.WithSilent(true), ) require.NoError(t, e.Setup()) expectedOutputOrder := strings.TrimSpace(` -task: [included1:task1] echo "VAR_1 is included1-var1" VAR_1 is included1-var1 -task: [included1:task1] echo "VAR_2 is included-default-var2" VAR_2 is included-default-var2 -task: [included2:task1] echo "VAR_1 is included2-var1" VAR_1 is included2-var1 -task: [included2:task1] echo "VAR_2 is included-default-var2" VAR_2 is included-default-var2 -task: [included3:task1] echo "VAR_1 is included-default-var1" VAR_1 is included-default-var1 -task: [included3:task1] echo "VAR_2 is included-default-var2" VAR_2 is included-default-var2 -task: [included4:task1] echo "VAR_1 is included4-var1" VAR_1 is included4-var1 -task: [included4:task1] echo "VAR_2 is included-default-var2" +VAR_2 is included-default-var2 +VAR_1 is from-command-line +VAR_2 is included-default-var2 +VAR_1 is 3.43.2 VAR_2 is included-default-var2 `) + // Set one command line argument for the include 5 + vars := ast.NewVars( + &ast.VarElement{ + Key: "COMMAND_LINE_VAR", + Value: ast.Var{ + Value: "from-command-line", + }, + }) + e.Taskfile.Vars.Merge(vars, nil) + require.NoError(t, e.Run(context.Background(), &task.Call{Task: "task1"})) t.Log(buff.String()) assert.Equal(t, strings.TrimSpace(buff.String()), expectedOutputOrder) diff --git a/taskfile/ast/vars.go b/taskfile/ast/vars.go index 0271ee5c3a..93e5e5757c 100644 --- a/taskfile/ast/vars.go +++ b/taskfile/ast/vars.go @@ -117,8 +117,8 @@ func (vars *Vars) ToCacheMap() (m map[string]any) { } // Merge loops over other and merges it values with the variables in vars. If -// the include parameter is not nil and its it is an advanced import, the -// directory is set set to the value of the include parameter. +// the include parameter is not nil and it is an advanced import, the +// directory is set to the value of the include parameter. func (vars *Vars) Merge(other *Vars, include *Include) { if vars == nil || vars.om == nil || other == nil { return diff --git a/testdata/include_with_vars/Taskfile.yml b/testdata/include_with_vars/Taskfile.yml index 0f5e0d88ba..935daba626 100644 --- a/testdata/include_with_vars/Taskfile.yml +++ b/testdata/include_with_vars/Taskfile.yml @@ -18,6 +18,14 @@ includes: taskfile: include/Taskfile.include.yml vars: VAR_1: "{{.VAR_1}}" + included5: + taskfile: include/Taskfile.include.yml + vars: + VAR_1: "{{.COMMAND_LINE_VAR}}" + included6: + taskfile: include/Taskfile.include.yml + vars: + VAR_1: "{{.TASK_VERSION}}" # A special variable tasks: task1: @@ -26,3 +34,5 @@ tasks: - task: included2:task1 - task: included3:task1 - task: included4:task1 + - task: included5:task1 + - task: included6:task1