diff --git a/pkg/apis/pipeline/v1/param_types.go b/pkg/apis/pipeline/v1/param_types.go index cecf8ef01be..7101e993a21 100644 --- a/pkg/apis/pipeline/v1/param_types.go +++ b/pkg/apis/pipeline/v1/param_types.go @@ -116,8 +116,7 @@ type Param struct { Value ParamValue `json:"value"` } -// extractParamValuesFromParams get all param values from params -func (ps Params) extractParamValuesFromParams() []string { +func (ps Params) extractParamValues() []string { pvs := []string{} for i := range ps { pvs = append(pvs, ps[i].Value.StringVal) diff --git a/pkg/apis/pipeline/v1/pipeline_types.go b/pkg/apis/pipeline/v1/pipeline_types.go index 845ced55641..56f606b4c26 100644 --- a/pkg/apis/pipeline/v1/pipeline_types.go +++ b/pkg/apis/pipeline/v1/pipeline_types.go @@ -267,6 +267,23 @@ func (pt *PipelineTask) IsMatrixed() bool { return pt.Matrix != nil && (pt.Matrix.hasParams() || pt.Matrix.hasInclude()) } +// extractAllParams extracts all the parameters in a PipelineTask: +// - pt.Params +// - pt.Matrix.Params +// - pt.Matrix.Include.Params +func (pt *PipelineTask) extractAllParams() Params { + allParams := pt.Params + if pt.Matrix.hasParams() { + allParams = append(allParams, pt.Matrix.Params...) + } + if pt.Matrix.hasInclude() { + for _, include := range pt.Matrix.Include { + allParams = append(allParams, include.Params...) + } + } + return allParams +} + func (pt *PipelineTask) validateMatrix(ctx context.Context) (errs *apis.FieldError) { if pt.IsMatrixed() { // This is an alpha feature and will fail validation if it's used in a pipeline spec diff --git a/pkg/apis/pipeline/v1/pipeline_validation.go b/pkg/apis/pipeline/v1/pipeline_validation.go index 1c8ab05e6df..ecca25d4fd9 100644 --- a/pkg/apis/pipeline/v1/pipeline_validation.go +++ b/pkg/apis/pipeline/v1/pipeline_validation.go @@ -183,26 +183,7 @@ func validatePipelineContextVariables(tasks []PipelineTask) *apis.FieldError { ) var paramValues []string for _, task := range tasks { - var matrixParams []Param - var includeParams []Param - if task.IsMatrixed() { - matrixParams = task.Matrix.Params - if task.Matrix.hasInclude() { - for _, include := range task.Matrix.Include { - includeParams = include.Params - } - } - } - for _, param := range append(task.Params, matrixParams...) { - paramValues = append(paramValues, param.Value.StringVal) - paramValues = append(paramValues, param.Value.ArrayVal...) - } - - if task.Matrix.hasInclude() { - for _, param := range append(task.Params, includeParams...) { - paramValues = append(paramValues, param.Value.StringVal) - } - } + paramValues = task.extractAllParams().extractParamValues() } errs := validatePipelineContextVariablesInParamValues(paramValues, "context\\.pipelineRun", pipelineRunContextNames). Also(validatePipelineContextVariablesInParamValues(paramValues, "context\\.pipeline", pipelineContextNames)). @@ -441,9 +422,9 @@ func (ps *PipelineSpec) ValidateParamArrayIndex(ctx context.Context, params Para paramsRefs := []string{} for i := range ps.Tasks { - paramsRefs = append(paramsRefs, ps.Tasks[i].Params.extractParamValuesFromParams()...) + paramsRefs = append(paramsRefs, ps.Tasks[i].Params.extractParamValues()...) if ps.Tasks[i].IsMatrixed() { - paramsRefs = append(paramsRefs, ps.Tasks[i].Matrix.Params.extractParamValuesFromParams()...) + paramsRefs = append(paramsRefs, ps.Tasks[i].Matrix.Params.extractParamValues()...) } for j := range ps.Tasks[i].Workspaces { paramsRefs = append(paramsRefs, ps.Tasks[i].Workspaces[j].SubPath) @@ -455,9 +436,9 @@ func (ps *PipelineSpec) ValidateParamArrayIndex(ctx context.Context, params Para } for i := range ps.Finally { - paramsRefs = append(paramsRefs, ps.Finally[i].Params.extractParamValuesFromParams()...) + paramsRefs = append(paramsRefs, ps.Finally[i].Params.extractParamValues()...) if ps.Finally[i].IsMatrixed() { - paramsRefs = append(paramsRefs, ps.Finally[i].Matrix.Params.extractParamValuesFromParams()...) + paramsRefs = append(paramsRefs, ps.Finally[i].Matrix.Params.extractParamValues()...) } for _, wes := range ps.Finally[i].When { paramsRefs = append(paramsRefs, wes.Values...) diff --git a/pkg/apis/pipeline/v1beta1/param_types.go b/pkg/apis/pipeline/v1beta1/param_types.go index 86b34228c34..cb0be8ed84c 100644 --- a/pkg/apis/pipeline/v1beta1/param_types.go +++ b/pkg/apis/pipeline/v1beta1/param_types.go @@ -112,8 +112,7 @@ type Param struct { // Params is a list of Param type Params []Param -// extractParamValuesFromParams get all param values from params -func (ps Params) extractParamValuesFromParams() []string { +func (ps Params) extractParamValues() []string { pvs := []string{} for i := range ps { pvs = append(pvs, ps[i].Value.StringVal) diff --git a/pkg/apis/pipeline/v1beta1/pipeline_types.go b/pkg/apis/pipeline/v1beta1/pipeline_types.go index 2cf52105c97..e35d7781fcb 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_types.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_types.go @@ -283,6 +283,23 @@ func (pt *PipelineTask) IsMatrixed() bool { return pt.Matrix != nil && (pt.Matrix.hasParams() || pt.Matrix.hasInclude()) } +// extractAllParams extracts all the parameters in a PipelineTask: +// - pt.Params +// - pt.Matrix.Params +// - pt.Matrix.Include.Params +func (pt *PipelineTask) extractAllParams() Params { + allParams := pt.Params + if pt.Matrix.hasParams() { + allParams = append(allParams, pt.Matrix.Params...) + } + if pt.Matrix.hasInclude() { + for _, include := range pt.Matrix.Include { + allParams = append(allParams, include.Params...) + } + } + return allParams +} + func (pt *PipelineTask) validateMatrix(ctx context.Context) (errs *apis.FieldError) { if pt.IsMatrixed() { // This is an alpha feature and will fail validation if it's used in a pipeline spec diff --git a/pkg/apis/pipeline/v1beta1/pipeline_validation.go b/pkg/apis/pipeline/v1beta1/pipeline_validation.go index c2456a51480..798c6fe6c6c 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_validation.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_validation.go @@ -183,26 +183,7 @@ func validatePipelineContextVariables(tasks []PipelineTask) *apis.FieldError { ) var paramValues []string for _, task := range tasks { - var matrixParams []Param - var includeParams []Param - if task.IsMatrixed() { - matrixParams = task.Matrix.Params - if task.Matrix.hasInclude() { - for _, include := range task.Matrix.Include { - includeParams = include.Params - } - } - } - for _, param := range append(task.Params, matrixParams...) { - paramValues = append(paramValues, param.Value.StringVal) - paramValues = append(paramValues, param.Value.ArrayVal...) - } - - if task.Matrix.hasInclude() { - for _, param := range append(task.Params, includeParams...) { - paramValues = append(paramValues, param.Value.StringVal) - } - } + paramValues = task.extractAllParams().extractParamValues() } errs := validatePipelineContextVariablesInParamValues(paramValues, "context\\.pipelineRun", pipelineRunContextNames). Also(validatePipelineContextVariablesInParamValues(paramValues, "context\\.pipeline", pipelineContextNames)). @@ -442,9 +423,9 @@ func (ps *PipelineSpec) ValidateParamArrayIndex(ctx context.Context, params Para paramsRefs := []string{} for i := range ps.Tasks { - paramsRefs = append(paramsRefs, ps.Tasks[i].Params.extractParamValuesFromParams()...) + paramsRefs = append(paramsRefs, ps.Tasks[i].Params.extractParamValues()...) if ps.Tasks[i].IsMatrixed() { - paramsRefs = append(paramsRefs, ps.Tasks[i].Matrix.Params.extractParamValuesFromParams()...) + paramsRefs = append(paramsRefs, ps.Tasks[i].Matrix.Params.extractParamValues()...) } for j := range ps.Tasks[i].Workspaces { paramsRefs = append(paramsRefs, ps.Tasks[i].Workspaces[j].SubPath) @@ -456,9 +437,9 @@ func (ps *PipelineSpec) ValidateParamArrayIndex(ctx context.Context, params Para } for i := range ps.Finally { - paramsRefs = append(paramsRefs, ps.Finally[i].Params.extractParamValuesFromParams()...) + paramsRefs = append(paramsRefs, ps.Finally[i].Params.extractParamValues()...) if ps.Finally[i].IsMatrixed() { - paramsRefs = append(paramsRefs, ps.Finally[i].Matrix.Params.extractParamValuesFromParams()...) + paramsRefs = append(paramsRefs, ps.Finally[i].Matrix.Params.extractParamValues()...) } for _, wes := range ps.Finally[i].WhenExpressions { paramsRefs = append(paramsRefs, wes.Values...)