1
0
mirror of https://github.com/go-task/task.git synced 2025-06-17 00:17:51 +02:00

feat: support refs in dependencies

This commit is contained in:
Pete Davison
2023-12-30 18:10:20 +00:00
parent 25b1966506
commit dbc120c970
3 changed files with 35 additions and 4 deletions

View File

@ -225,7 +225,8 @@ tasks:
``` ```
This means that the type of the variable is maintained when it is passed to This means that the type of the variable is maintained when it is passed to
another Task. This also works when defining a variable: another Task. This also works the same way when calling `deps` and when defining
a variable and can be used in any combination:
```yaml ```yaml
version: 3 version: 3
@ -236,8 +237,14 @@ tasks:
FOO: [A, B, C] # <-- FOO is defined as an array FOO: [A, B, C] # <-- FOO is defined as an array
BAR: BAR:
ref: FOO # <-- BAR is defined as a reference to FOO ref: FOO # <-- BAR is defined as a reference to FOO
deps:
- task: bar
vars:
BAR:
ref: BAR # <-- BAR gets passed by reference to bar and maintains its type
bar:
cmds: cmds:
- 'echo {{index .BAR 0}}' # <-- BAR refers to FOO so the task outputs 'A' - 'echo {{index .BAR 0}}' # <-- BAR still refers to FOO so the task outputs 'A'
``` ```
</TabItem></Tabs> </TabItem></Tabs>

View File

@ -3,6 +3,9 @@ version: '3'
tasks: tasks:
default: default:
- task: map - task: map
- task: ref
- task: ref-sh
- task: ref-dep
- task: json - task: json
- task: yaml - task: yaml
@ -16,7 +19,7 @@ tasks:
VAR: VAR:
ref: MAP ref: MAP
map-ref: ref:
vars: vars:
MAP: MAP:
map: {"name":"Alice","age":30,"children":[{"name":"Bob","age":5},{"name":"Charlie","age":3},{"name":"Diane","age":1}]} map: {"name":"Alice","age":30,"children":[{"name":"Bob","age":5},{"name":"Charlie","age":3},{"name":"Diane","age":1}]}
@ -28,7 +31,7 @@ tasks:
VAR: VAR:
ref: MAP_REF ref: MAP_REF
map-ref-sh: ref-sh:
vars: vars:
JSON_STRING: JSON_STRING:
sh: echo '{"name":"Alice","age":30,"children":[{"name":"Bob","age":5},{"name":"Charlie","age":3},{"name":"Diane","age":1}]}' sh: echo '{"name":"Alice","age":30,"children":[{"name":"Bob","age":5},{"name":"Charlie","age":3},{"name":"Diane","age":1}]}'
@ -42,6 +45,16 @@ tasks:
VAR: VAR:
ref: MAP_REF ref: MAP_REF
ref-dep:
vars:
MAP:
map: {"name":"Alice","age":30,"children":[{"name":"Bob","age":5},{"name":"Charlie","age":3},{"name":"Diane","age":1}]}
deps:
- task: print-var
vars:
VAR:
ref: MAP
json: json:
vars: vars:
JSON_STRING: JSON_STRING:

View File

@ -234,6 +234,17 @@ func (e *Executor) compiledTask(call ast.Call, evaluateShVars bool) (*ast.Task,
newDep := dep.DeepCopy() newDep := dep.DeepCopy()
newDep.Task = r.Replace(dep.Task) newDep.Task = r.Replace(dep.Task)
newDep.Vars = r.ReplaceVars(dep.Vars) newDep.Vars = r.ReplaceVars(dep.Vars)
// Loop over the dep's variables and resolve any references to other variables
err := dep.Vars.Range(func(k string, v ast.Var) error {
if v.Ref != "" {
refVal := vars.Get(v.Ref)
newDep.Vars.Set(k, refVal)
}
return nil
})
if err != nil {
return nil, err
}
new.Deps = append(new.Deps, newDep) new.Deps = append(new.Deps, newDep)
} }
} }