diff --git a/pkg/apis/pipeline/v1/pipeline_validation.go b/pkg/apis/pipeline/v1/pipeline_validation.go index a5a629770fd..406634d1967 100644 --- a/pkg/apis/pipeline/v1/pipeline_validation.go +++ b/pkg/apis/pipeline/v1/pipeline_validation.go @@ -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..results.[*]" subExpressions := strings.Split(expression, ".") pipelineTask := subExpressions[1] // pipelineTaskName diff --git a/pkg/apis/pipeline/v1/pipeline_validation_test.go b/pkg/apis/pipeline/v1/pipeline_validation_test.go index e2a67368e36..ad32a969abd 100644 --- a/pkg/apis/pipeline/v1/pipeline_validation_test.go +++ b/pkg/apis/pipeline/v1/pipeline_validation_test.go @@ -175,6 +175,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{"$(params.pipeline-words.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{"$(params.pipeline-words.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{"$(params.pipeline-words.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{"$(params.pipeline-words.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) {