diff --git a/compiler.go b/compiler.go index 311fd58423..c0679c2cbf 100644 --- a/compiler.go +++ b/compiler.go @@ -114,6 +114,9 @@ func (c *Compiler) getVariables(t *ast.Task, call *Call, evaluateShVars bool) (* return nil, err } } + // Resolve any outstanding 'Ref' values in global vars (esp. globals from imported Taskfiles). + c.TaskfileVars = templater.ReplaceVars(c.TaskfileVars, &templater.Cache{Vars: result}) + if t != nil { for k, v := range t.IncludeVars.All() { if err := rangeFunc(k, v); err != nil { diff --git a/executor_test.go b/executor_test.go index 8649ebdce3..c43c4a2e18 100644 --- a/executor_test.go +++ b/executor_test.go @@ -905,6 +905,10 @@ func TestReference(t *testing.T) { name: "reference using templating resolver and dynamic var", call: "ref-resolver-sh", }, + { + name: "reference using templating resolver and global var", + call: "ref-global", + }, } for _, test := range tests { diff --git a/testdata/var_references/Taskfile.yml b/testdata/var_references/Taskfile.yml index 71621f2908..e6f9da4948 100644 --- a/testdata/var_references/Taskfile.yml +++ b/testdata/var_references/Taskfile.yml @@ -2,6 +2,9 @@ version: '3' vars: GLOBAL_VAR: [1, 2, 2, 2, 3, 3, 4, 5] + GLOBAL_FOO: + ref: .GLOBAL_BAR + GLOBAL_BAR: bar tasks: default: @@ -9,6 +12,7 @@ tasks: - task: ref-dep - task: ref-resolver - task: ref-resolver-sh + - task: ref-global ref-cmd: vars: @@ -72,3 +76,13 @@ tasks: {{- else}} and {{$child.name -}} {{- end -}} {{- end -}}" + + ref-global: + vars: + TASK_FUBAR: + ref: .GLOBAL_FOO + cmds: + - echo "GLOBAL_FOO={{.GLOBAL_FOO}}" + - echo "GLOBAL_BAR={{.GLOBAL_BAR}}" + - echo "TASK_FUBAR={{.TASK_FUBAR}}" + silent: true diff --git a/testdata/var_references/testdata/TestReference-reference_using_templating_resolver_and_global_var.golden b/testdata/var_references/testdata/TestReference-reference_using_templating_resolver_and_global_var.golden new file mode 100644 index 0000000000..320ea634db --- /dev/null +++ b/testdata/var_references/testdata/TestReference-reference_using_templating_resolver_and_global_var.golden @@ -0,0 +1,3 @@ +GLOBAL_FOO=bar +GLOBAL_BAR=bar +TASK_FUBAR=bar