@@ -32,37 +32,48 @@ func (c *CompilerV3) GetVariables(t *taskfile.Task, call taskfile.Call) (*taskfi
3232 result := compiler .GetEnviron ()
3333 result .Set ("TASK" , taskfile.Var {Static : t .Task })
3434
35- // NOTE(@andreynering): We're manually joining these paths here because
36- // this is the raw task, not the compiled one.
37- dir := t .Dir
38- if ! filepath .IsAbs (dir ) {
39- dir = filepath .Join (c .Dir , dir )
40- }
41-
42- rangeFunc := func (k string , v taskfile.Var ) error {
43- tr := templater.Templater {Vars : result , RemoveNoValue : true }
44- v = taskfile.Var {
45- Static : tr .Replace (v .Static ),
46- Sh : tr .Replace (v .Sh ),
47- }
48- if err := tr .Err (); err != nil {
49- return err
50- }
51- static , err := c .HandleDynamicVar (v , dir )
52- if err != nil {
53- return err
35+ getRangeFunc := func (dir string ) func (k string , v taskfile.Var ) error {
36+ return func (k string , v taskfile.Var ) error {
37+ tr := templater.Templater {Vars : result , RemoveNoValue : true }
38+
39+ v = taskfile.Var {
40+ Static : tr .Replace (v .Static ),
41+ Sh : tr .Replace (v .Sh ),
42+ Dir : v .Dir ,
43+ }
44+ if err := tr .Err (); err != nil {
45+ return err
46+ }
47+ static , err := c .HandleDynamicVar (v , dir )
48+ if err != nil {
49+ return err
50+ }
51+ result .Set (k , taskfile.Var {Static : static })
52+ return nil
5453 }
55- result .Set (k , taskfile.Var {Static : static })
56- return nil
5754 }
55+ rangeFunc := getRangeFunc (c .Dir )
5856
5957 if err := c .TaskfileVars .Range (rangeFunc ); err != nil {
6058 return nil , err
6159 }
6260 if err := call .Vars .Range (rangeFunc ); err != nil {
6361 return nil , err
6462 }
65- if err := t .Vars .Range (rangeFunc ); err != nil {
63+
64+ // NOTE(@andreynering): We're manually joining these paths here because
65+ // this is the raw task, not the compiled one.
66+ tr := templater.Templater {Vars : result , RemoveNoValue : true }
67+ dir := tr .Replace (t .Dir )
68+ if err := tr .Err (); err != nil {
69+ return nil , err
70+ }
71+ if ! filepath .IsAbs (dir ) {
72+ dir = filepath .Join (c .Dir , dir )
73+ }
74+ taskRangeFunc := getRangeFunc (dir )
75+
76+ if err := t .Vars .Range (taskRangeFunc ); err != nil {
6677 return nil , err
6778 }
6879
@@ -84,6 +95,11 @@ func (c *CompilerV3) HandleDynamicVar(v taskfile.Var, dir string) (string, error
8495 return result , nil
8596 }
8697
98+ // NOTE(@andreynering): If a var have a specific dir, use this instead
99+ if v .Dir != "" {
100+ dir = v .Dir
101+ }
102+
87103 var stdout bytes.Buffer
88104 opts := & execext.RunCommandOptions {
89105 Command : v .Sh ,
0 commit comments