diff --git a/pkg/apis/pipeline/v1/pipeline_validation.go b/pkg/apis/pipeline/v1/pipeline_validation.go index 164046412e8..e98fff7823b 100644 --- a/pkg/apis/pipeline/v1/pipeline_validation.go +++ b/pkg/apis/pipeline/v1/pipeline_validation.go @@ -382,7 +382,7 @@ func validatePipelineTaskParameterUsage(tasks []PipelineTask, params ParamSpecs) } errs = errs.Also(validatePipelineParametersVariables(tasks, "params", allParamNames, arrayParamNames, objectParameterNameKeys)) for i, task := range tasks { - errs = errs.Also(task.Params.validateDuplicateParameters().ViaFieldIndex("params", i)) + errs = errs.Also(task.Params.validateDuplicateParameters().ViaField("params").ViaIndex(i)) } return errs } diff --git a/pkg/apis/pipeline/v1/pipeline_validation_test.go b/pkg/apis/pipeline/v1/pipeline_validation_test.go index 4ee7acc508c..55c7b121d87 100644 --- a/pkg/apis/pipeline/v1/pipeline_validation_test.go +++ b/pkg/apis/pipeline/v1/pipeline_validation_test.go @@ -220,6 +220,52 @@ func TestPipeline_Validate_Failure(t *testing.T) { Message: `non-existent variable in "$(params.doesnotexist)"`, Paths: []string{"spec.finally[0].steps[0].script"}, }, + }, { + name: "invalid duplicate parameter in pipeline task", + p: &Pipeline{ + ObjectMeta: metav1.ObjectMeta{Name: "pipeline"}, + Spec: PipelineSpec{ + Tasks: []PipelineTask{{ + Name: "pipeline-task", + TaskSpec: &EmbeddedTask{TaskSpec: TaskSpec{ + Steps: []Step{{ + Name: "some-step", + Image: "some-image", + Command: []string{"cmd"}, + }}, + }}, + }}, + Finally: []PipelineTask{{ + Name: "invalid-pipeline-task", + Params: Params{ + { + Name: "name", + Value: ParamValue{ + Type: ParamTypeString, + StringVal: "", + }, + }, + { + Name: "name", + Value: ParamValue{ + Type: ParamTypeString, + StringVal: "", + }, + }, + }, + TaskSpec: &EmbeddedTask{TaskSpec: TaskSpec{ + Steps: []Step{{ + Name: "some-step", + Image: "some-image", + }}, + }}, + }}, + }, + }, + expectedError: apis.FieldError{ + Message: `parameter names must be unique, the parameter "name" is also defined at`, + Paths: []string{"spec.finally[0].params[1].name"}, + }, }, { name: "invalid task with pipelineRef and pipelineSpec", wc: cfgtesting.EnableAlphaAPIFields, diff --git a/pkg/apis/pipeline/v1beta1/pipeline_validation.go b/pkg/apis/pipeline/v1beta1/pipeline_validation.go index 1179249626d..075d49afff9 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_validation.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_validation.go @@ -400,7 +400,7 @@ func validatePipelineTaskParameterUsage(tasks []PipelineTask, params ParamSpecs) } errs = errs.Also(validatePipelineParametersVariables(tasks, "params", allParamNames, arrayParamNames, objectParameterNameKeys)) for i, task := range tasks { - errs = errs.Also(task.Params.validateDuplicateParameters().ViaFieldIndex("params", i)) + errs = errs.Also(task.Params.validateDuplicateParameters().ViaField("params").ViaIndex(i)) } return errs } diff --git a/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go b/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go index 9f37d95586e..a67351ad277 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go @@ -222,6 +222,52 @@ func TestPipeline_Validate_Failure(t *testing.T) { Message: `non-existent variable in "$(params.doesnotexist)"`, Paths: []string{"spec.finally[0].steps[0].script"}, }, + }, { + name: "invalid duplicate parameter in pipeline task", + p: &Pipeline{ + ObjectMeta: metav1.ObjectMeta{Name: "pipeline"}, + Spec: PipelineSpec{ + Tasks: []PipelineTask{{ + Name: "pipeline-task", + TaskSpec: &EmbeddedTask{TaskSpec: TaskSpec{ + Steps: []Step{{ + Name: "some-step", + Image: "some-image", + Command: []string{"cmd"}, + }}, + }}, + }}, + Finally: []PipelineTask{{ + Name: "invalid-pipeline-task", + Params: Params{ + { + Name: "name", + Value: ParamValue{ + Type: ParamTypeString, + StringVal: "", + }, + }, + { + Name: "name", + Value: ParamValue{ + Type: ParamTypeString, + StringVal: "", + }, + }, + }, + TaskSpec: &EmbeddedTask{TaskSpec: TaskSpec{ + Steps: []Step{{ + Name: "some-step", + Image: "some-image", + }}, + }}, + }}, + }, + }, + expectedError: apis.FieldError{ + Message: `parameter names must be unique, the parameter "name" is also defined at`, + Paths: []string{"spec.finally[0].params[1].name"}, + }, }, { name: "invalid task with pipelineRef and pipelineSpec", wc: cfgtesting.EnableAlphaAPIFields,