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

feat: loop over a matrix (#1767)

This commit is contained in:
Pete Davison
2024-09-02 20:29:00 +01:00
committed by GitHub
parent 1cb5daf73e
commit 281d259e6e
7 changed files with 145 additions and 18 deletions

View File

@ -8,11 +8,12 @@ import (
)
type For struct {
From string
List []any
Var string
Split string
As string
From string
List []any
Matrix map[string][]any
Var string
Split string
As string
}
func (f *For) UnmarshalYAML(node *yaml.Node) error {
@ -36,16 +37,21 @@ func (f *For) UnmarshalYAML(node *yaml.Node) error {
case yaml.MappingNode:
var forStruct struct {
Var string
Split string
As string
Matrix map[string][]any
Var string
Split string
As string
}
if err := node.Decode(&forStruct); err != nil {
return errors.NewTaskfileDecodeError(err, node)
}
if forStruct.Var == "" {
if forStruct.Var == "" && forStruct.Matrix == nil {
return errors.NewTaskfileDecodeError(nil, node).WithMessage("invalid keys in for")
}
if forStruct.Var != "" && forStruct.Matrix != nil {
return errors.NewTaskfileDecodeError(nil, node).WithMessage("cannot use both var and matrix in for")
}
f.Matrix = forStruct.Matrix
f.Var = forStruct.Var
f.Split = forStruct.Split
f.As = forStruct.As
@ -60,10 +66,11 @@ func (f *For) DeepCopy() *For {
return nil
}
return &For{
From: f.From,
List: deepcopy.Slice(f.List),
Var: f.Var,
Split: f.Split,
As: f.As,
From: f.From,
List: deepcopy.Slice(f.List),
Matrix: deepcopy.Map(f.Matrix),
Var: f.Var,
Split: f.Split,
As: f.As,
}
}