Skip to content

Commit

Permalink
fix 5569 pipelinerun hang on Unknown status due to duplicated task pa…
Browse files Browse the repository at this point in the history
…rameters
  • Loading branch information
chengjoey committed Sep 28, 2022
1 parent 0362c6b commit 9e38370
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
7 changes: 6 additions & 1 deletion pkg/apis/pipeline/v1beta1/param_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,11 @@ func ArrayReference(a string) string {
// validatePipelineParametersVariablesInTaskParameters validates param value that
// may contain the reference(s) to other params to make sure those references are used appropriately.
func validatePipelineParametersVariablesInTaskParameters(params []Param, prefix string, paramNames sets.String, arrayParamNames sets.String, objectParamNameKeys map[string][]string) (errs *apis.FieldError) {
for _, param := range params {
taskParamNames := sets.NewString()
for i, param := range params {
if taskParamNames.Has(param.Name) {
errs = errs.Also(apis.ErrMultipleOneOf("name").ViaIndex(i))
}
switch param.Value.Type {
case ParamTypeArray:
for idx, arrayElement := range param.Value.ArrayVal {
Expand All @@ -299,6 +303,7 @@ func validatePipelineParametersVariablesInTaskParameters(params []Param, prefix
default:
errs = errs.Also(validateParamStringValue(param, prefix, paramNames, arrayParamNames, objectParamNameKeys))
}
taskParamNames.Insert(param.Name)
}
return errs
}
Expand Down
16 changes: 16 additions & 0 deletions pkg/apis/pipeline/v1beta1/pipeline_validation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2134,6 +2134,22 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) {
Paths: []string{"[0].matrix[b-param].value[0]"},
},
api: "alpha",
}, {
name: "invalid task use duplicate parameters",
tasks: []PipelineTask{{
Name: "foo-task",
TaskRef: &TaskRef{Name: "foo-task"},
Params: []Param{{
Name: "duplicate-param", Value: ParamValue{Type: ParamTypeString, StringVal: "val1"},
}, {
Name: "duplicate-param", Value: ParamValue{Type: ParamTypeString, StringVal: "val2"},
}},
}},
expectedError: apis.FieldError{
Message: `expected exactly one, got both`,
Paths: []string{"[0][1].name"},
},
api: "alpha",
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down

0 comments on commit 9e38370

Please sign in to comment.