Skip to content

Commit

Permalink
Perform matrix results validation on only result ref params
Browse files Browse the repository at this point in the history
This will add a check to skip the validation of normal params
while doing the validation for matrix task result ref as params
  • Loading branch information
piyush-garg authored and tekton-robot committed Jul 15, 2024
1 parent 84aa130 commit 11d8bbd
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 0 deletions.
4 changes: 4 additions & 0 deletions pkg/apis/pipeline/v1/pipeline_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,10 @@ func findAndValidateResultRefsForMatrix(tasks []PipelineTask, taskMapping map[st
func validateMatrixedPipelineTaskConsumed(expressions []string, taskMapping map[string]PipelineTask) (resultRefs []*ResultRef, errs *apis.FieldError) {
var filteredExpressions []string
for _, expression := range expressions {
// if it is not matrix result ref expression, skip
if !resultref.LooksLikeResultRef(expression) {
continue
}
// ie. "tasks.<pipelineTaskName>.results.<resultName>[*]"
subExpressions := strings.Split(expression, ".")
pipelineTask := subExpressions[1] // pipelineTaskName
Expand Down
123 changes: 123 additions & 0 deletions pkg/apis/pipeline/v1/pipeline_validation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,129 @@ func TestPipeline_Validate_Success(t *testing.T) {
},
},
},
}, {
name: "param with different type of values without matrix",
p: &Pipeline{
ObjectMeta: metav1.ObjectMeta{
Name: "pipelinelinename",
},
Spec: PipelineSpec{
Params: ParamSpecs{{
Name: "pipeline-words",
Default: &ParamValue{
Type: ParamTypeObject,
ObjectVal: map[string]string{"hello": "pipeline"},
},
Type: ParamTypeObject,
Properties: map[string]PropertySpec{
"hello": {Type: ParamTypeString},
},
}},
Tasks: []PipelineTask{{
Name: "echoit",
TaskSpec: &EmbeddedTask{TaskSpec: TaskSpec{
Steps: []Step{{
Name: "echo",
Image: "ubuntu",
Command: []string{"echo"},
Args: []string{"hello"},
}},
}},
Params: Params{
{
Name: "name",
Value: ParamValue{
Type: ParamTypeString,
StringVal: "$(params.pipeline-words.hello)",
},
},
{
Name: "name2",
Value: ParamValue{
Type: ParamTypeString,
StringVal: "$(tasks.pipeline-words.results.hello) + $(pipeline-words)",
},
},
},
RunAfter: []string{"pipeline-words"},
}, {
Name: "pipeline-words",
TaskSpec: &EmbeddedTask{TaskSpec: TaskSpec{
Steps: []Step{{
Name: "echo",
Image: "ubuntu",
Command: []string{"echo"},
Args: []string{"hello"},
}},
}},
}},
},
},
}, {
name: "param with different type of values with matrix",
p: &Pipeline{
ObjectMeta: metav1.ObjectMeta{
Name: "pipelinelinename",
},
Spec: PipelineSpec{
Params: ParamSpecs{{
Name: "pipeline-words",
Default: &ParamValue{
Type: ParamTypeObject,
ObjectVal: map[string]string{"hello": "pipeline"},
},
Type: ParamTypeObject,
Properties: map[string]PropertySpec{
"hello": {Type: ParamTypeString},
},
}},
Tasks: []PipelineTask{{
Name: "echoit",
TaskSpec: &EmbeddedTask{TaskSpec: TaskSpec{
Steps: []Step{{
Name: "echo",
Image: "ubuntu",
Command: []string{"echo"},
Args: []string{"hello"},
}},
}},
Params: Params{
{
Name: "name",
Value: ParamValue{
Type: ParamTypeString,
StringVal: "$(params.pipeline-words.hello)",
},
},
{
Name: "name2",
Value: ParamValue{
Type: ParamTypeString,
StringVal: "$(tasks.pipeline-words.results.hello[*]) + $(pipeline-words)",
},
},
},
RunAfter: []string{"pipeline-words"},
}, {
Name: "pipeline-words",
TaskSpec: &EmbeddedTask{TaskSpec: TaskSpec{
Steps: []Step{{
Name: "echo",
Image: "ubuntu",
Command: []string{"echo"},
Args: []string{"hello"},
}},
}},
Matrix: &Matrix{
Params: Params{{
Name: "GOARCH", Value: ParamValue{ArrayVal: []string{"linux/amd64", "linux/ppc64le", "linux/s390x"}},
}, {
Name: "version", Value: ParamValue{ArrayVal: []string{"go1.17", "go1.18.1"}},
}},
Include: IncludeParamsList{{}}},
}},
},
},
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down

0 comments on commit 11d8bbd

Please sign in to comment.