From db65e9f72b6e6740ff1c9e60973045b443ff578c Mon Sep 17 00:00:00 2001 From: Emma Munley Date: Fri, 24 Feb 2023 11:07:53 -0500 Subject: [PATCH] TEP-0118: Add validation for matrix pipeline parameter variables include Matrix.Include.Params [TEP-0090: Matrix] introduced `Matrix` to the `PipelineTask` specification such that the `PipelineTask` executes a list of `TaskRuns` or `Runs` in parallel with the specified list of inputs for a `Parameter` or with different combinations of the inputs for a set of `Parameters`. To build on this, Tep-0018 introduced Matrix.Include, which allows passing in a specific combinations of `Parameters` into the `Matrix`. This commit validates that matrix pipeline parameter variables including include params that may contain the reference(s) to other params are used appropriately. Note: This is still in preview mode. Other forms of validation and implementation logic will be added in subsequent commits. --- pkg/apis/pipeline/v1/param_types.go | 22 ++++-- pkg/apis/pipeline/v1/pipeline_validation.go | 2 +- .../pipeline/v1/pipeline_validation_test.go | 71 +++---------------- pkg/apis/pipeline/v1beta1/param_types.go | 22 ++++-- .../pipeline/v1beta1/pipeline_validation.go | 2 +- .../v1beta1/pipeline_validation_test.go | 71 +++---------------- 6 files changed, 56 insertions(+), 134 deletions(-) diff --git a/pkg/apis/pipeline/v1/param_types.go b/pkg/apis/pipeline/v1/param_types.go index add766d37cd..a6f9ba1c84f 100644 --- a/pkg/apis/pipeline/v1/param_types.go +++ b/pkg/apis/pipeline/v1/param_types.go @@ -314,12 +314,24 @@ func validatePipelineParametersVariablesInTaskParameters(params []Param, prefix return errs } -// validatePipelineParametersVariablesInMatrixParameters validates matrix param value +// validatePipelineParametersVariablesInMatrixParameters validates all pipeline paramater variables including Matrix.Params and Matrix.Include.Params // that may contain the reference(s) to other params to make sure those references are used appropriately. -func validatePipelineParametersVariablesInMatrixParameters(matrix []Param, prefix string, paramNames sets.String, arrayParamNames sets.String, objectParamNameKeys map[string][]string) (errs *apis.FieldError) { - for _, param := range matrix { - for idx, arrayElement := range param.Value.ArrayVal { - errs = errs.Also(validateArrayVariable(arrayElement, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaFieldIndex("value", idx).ViaFieldKey("matrix", param.Name)) +func validatePipelineParametersVariablesInMatrixParameters(matrix *Matrix, prefix string, paramNames sets.String, arrayParamNames sets.String, objectParamNameKeys map[string][]string) (errs *apis.FieldError) { + if matrix != nil { + if matrix.MatrixHasInclude() { + for _, include := range matrix.Include { + for idx, param := range include.Params { + stringElement := param.Value.StringVal + errs = errs.Also(validateStringVariable(stringElement, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaFieldIndex("value", idx).ViaFieldKey("matrix.include.params", param.Name)) + } + } + } + if matrix.MatrixHasParams() { + for _, param := range matrix.Params { + for idx, arrayElement := range param.Value.ArrayVal { + errs = errs.Also(validateArrayVariable(arrayElement, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaFieldIndex("value", idx).ViaFieldKey("matrix.params", param.Name)) + } + } } } return errs diff --git a/pkg/apis/pipeline/v1/pipeline_validation.go b/pkg/apis/pipeline/v1/pipeline_validation.go index 444d6b3a76c..8f6bf34a7c7 100644 --- a/pkg/apis/pipeline/v1/pipeline_validation.go +++ b/pkg/apis/pipeline/v1/pipeline_validation.go @@ -162,7 +162,7 @@ func validatePipelineParametersVariables(tasks []PipelineTask, prefix string, pa for idx, task := range tasks { errs = errs.Also(validatePipelineParametersVariablesInTaskParameters(task.Params, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaIndex(idx)) if task.IsMatrixed() { - errs = errs.Also(validatePipelineParametersVariablesInMatrixParameters(task.Matrix.Params, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaIndex(idx)) + errs = errs.Also(validatePipelineParametersVariablesInMatrixParameters(task.Matrix, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaIndex(idx)) } errs = errs.Also(task.When.validatePipelineParametersVariables(prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaIndex(idx)) } diff --git a/pkg/apis/pipeline/v1/pipeline_validation_test.go b/pkg/apis/pipeline/v1/pipeline_validation_test.go index 8b26c7b8e81..2699d23c9b0 100644 --- a/pkg/apis/pipeline/v1/pipeline_validation_test.go +++ b/pkg/apis/pipeline/v1/pipeline_validation_test.go @@ -1550,7 +1550,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }}, expectedError: apis.FieldError{ Message: `non-existent variable in "$(params.does-not-exist)"`, - Paths: []string{"[0].matrix[a-param].value[0]"}, + Paths: []string{"[0].matrix.params[a-param].value[0]"}, }, }, { name: "invalid pipeline task with a matrix parameter combined with missing param from the param declarations", @@ -1567,7 +1567,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }}, expectedError: apis.FieldError{ Message: `non-existent variable in "$(params.does-not-exist)"`, - Paths: []string{"[0].matrix[a-param].value[2]"}, + Paths: []string{"[0].matrix.params[a-param].value[2]"}, }, }, { name: "invalid pipeline task with two matrix parameters and one of them missing from the param declarations", @@ -1586,7 +1586,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }}, expectedError: apis.FieldError{ Message: `non-existent variable in "$(params.does-not-exist)"`, - Paths: []string{"[0].matrix[b-param].value[0]"}, + Paths: []string{"[0].matrix.params[b-param].value[0]"}, }, }, { name: "invalid object key in the input of the when expression", @@ -1730,7 +1730,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }}, expectedError: apis.FieldError{ Message: `non-existent variable in "$(params.myObject.non-exist-key)"`, - Paths: []string{"[0].matrix[b-param].value[0]"}, + Paths: []string{"[0].matrix.params[b-param].value[0]"}, }, api: "alpha", }, { @@ -2419,9 +2419,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipeline.name)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)"}}, @@ -2432,9 +2429,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.name)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.name)"}}, @@ -2445,9 +2439,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.namespace)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.namespace)"}}, @@ -2458,9 +2449,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.uid)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.uid)"}}, @@ -2471,9 +2459,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)", "and", "$(context.pipelineRun.name)"}}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)", "and", "$(context.pipelineRun.name)"}}, @@ -2484,9 +2469,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.retries)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.retries)"}, @@ -2497,9 +2479,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.retries)"}}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.retries)"}}, @@ -2510,9 +2489,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipeline.name)"}, - }}, Matrix: &Matrix{ Include: []MatrixInclude{{ Name: "build-1", @@ -2525,9 +2501,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.retries)"}, - }}, Matrix: &Matrix{ Include: []MatrixInclude{{ Name: "build-1", @@ -2545,7 +2518,7 @@ func TestContextValid(t *testing.T) { } } -func TestContextInvalid(t *testing.T) { +func TestContextInvalidMatrix(t *testing.T) { tests := []struct { name string tasks []PipelineTask @@ -2555,80 +2528,56 @@ func TestContextInvalid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipeline.missing)"}, - }}, Matrix: &Matrix{ Params: []Param{{ - Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing)"}}, }}}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ Message: `non-existent variable in "$(context.pipeline.missing)"`, Paths: []string{"value"}, - }).Also(&apis.FieldError{ - Message: `non-existent variable in "$(context.pipeline.missing-foo)"`, - Paths: []string{"value"}, }), }, { name: "invalid string context variable for pipelineRun", tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.missing)"}, - }}, Matrix: &Matrix{ Params: []Param{{ - Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.missing)"}}, }}}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ Message: `non-existent variable in "$(context.pipelineRun.missing)"`, Paths: []string{"value"}, - }).Also(&apis.FieldError{ - Message: `non-existent variable in "$(context.pipelineRun.missing-foo)"`, - Paths: []string{"value"}, }), }, { name: "invalid string context variable for pipelineTask", tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.missing)"}, - }}, Matrix: &Matrix{ Params: []Param{{ - Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.missing)"}}, }}}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ Message: `non-existent variable in "$(context.pipelineTask.missing)"`, Paths: []string{"value"}, - }).Also(&apis.FieldError{ - Message: `non-existent variable in "$(context.pipelineTask.missing-foo)"`, - Paths: []string{"value"}, }), }, { name: "invalid array context variables for pipeline, pipelineTask and pipelineRun", tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing)", "$(context.pipelineTask.missing)", "$(context.pipelineRun.missing)"}}, - }}, Matrix: &Matrix{ Params: []Param{{ - Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing-foo)", "$(context.pipelineTask.missing-foo)", "$(context.pipelineRun.missing-foo)"}}, + Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing)", "$(context.pipelineTask.missing)", "$(context.pipelineRun.missing)"}}, }}}, }}, expectedError: *apis.ErrGeneric(`non-existent variable in "$(context.pipeline.missing)"`, "value"). Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineRun.missing)"`, "value")). - Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineTask.missing)"`, "value")). - Also(apis.ErrGeneric(`non-existent variable in "$(context.pipeline.missing-foo)"`, "value")). - Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineRun.missing-foo)"`, "value")). - Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineTask.missing-foo)"`, "value")), + Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineTask.missing)"`, "value")), }, { name: "invalid string context variable for pipeline in include matrix", tasks: []PipelineTask{{ diff --git a/pkg/apis/pipeline/v1beta1/param_types.go b/pkg/apis/pipeline/v1beta1/param_types.go index 1003fa33825..4114e7fa859 100644 --- a/pkg/apis/pipeline/v1beta1/param_types.go +++ b/pkg/apis/pipeline/v1beta1/param_types.go @@ -310,12 +310,24 @@ func validatePipelineParametersVariablesInTaskParameters(params []Param, prefix return errs } -// validatePipelineParametersVariablesInMatrixParameters validates matrix param value +// validatePipelineParametersVariablesInMatrixParameters validates all pipeline paramater variables including Matrix.Params and Matrix.Include.Params // that may contain the reference(s) to other params to make sure those references are used appropriately. -func validatePipelineParametersVariablesInMatrixParameters(matrix []Param, prefix string, paramNames sets.String, arrayParamNames sets.String, objectParamNameKeys map[string][]string) (errs *apis.FieldError) { - for _, param := range matrix { - for idx, arrayElement := range param.Value.ArrayVal { - errs = errs.Also(validateArrayVariable(arrayElement, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaFieldIndex("value", idx).ViaFieldKey("matrix", param.Name)) +func validatePipelineParametersVariablesInMatrixParameters(matrix *Matrix, prefix string, paramNames sets.String, arrayParamNames sets.String, objectParamNameKeys map[string][]string) (errs *apis.FieldError) { + if matrix != nil { + if matrix.MatrixHasInclude() { + for _, include := range matrix.Include { + for idx, param := range include.Params { + stringElement := param.Value.StringVal + errs = errs.Also(validateStringVariable(stringElement, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaFieldIndex("value", idx).ViaFieldKey("matrix.include.params", param.Name)) + } + } + } + if matrix.MatrixHasParams() { + for _, param := range matrix.Params { + for idx, arrayElement := range param.Value.ArrayVal { + errs = errs.Also(validateArrayVariable(arrayElement, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaFieldIndex("value", idx).ViaFieldKey("matrix.params", param.Name)) + } + } } } return errs diff --git a/pkg/apis/pipeline/v1beta1/pipeline_validation.go b/pkg/apis/pipeline/v1beta1/pipeline_validation.go index fab984661e7..37a621fde9a 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_validation.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_validation.go @@ -168,7 +168,7 @@ func validatePipelineParametersVariables(tasks []PipelineTask, prefix string, pa for idx, task := range tasks { errs = errs.Also(validatePipelineParametersVariablesInTaskParameters(task.Params, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaIndex(idx)) if task.IsMatrixed() { - errs = errs.Also(validatePipelineParametersVariablesInMatrixParameters(task.Matrix.Params, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaIndex(idx)) + errs = errs.Also(validatePipelineParametersVariablesInMatrixParameters(task.Matrix, prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaIndex(idx)) } errs = errs.Also(task.WhenExpressions.validatePipelineParametersVariables(prefix, paramNames, arrayParamNames, objectParamNameKeys).ViaIndex(idx)) } diff --git a/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go b/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go index eefc0a39bbd..c41953a79b0 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go @@ -1943,7 +1943,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }}, expectedError: apis.FieldError{ Message: `non-existent variable in "$(params.does-not-exist)"`, - Paths: []string{"[0].matrix[a-param].value[0]"}, + Paths: []string{"[0].matrix.params[a-param].value[0]"}, }, }, { name: "invalid pipeline task with a matrix parameter combined with missing param from the param declarations", @@ -1960,7 +1960,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }}, expectedError: apis.FieldError{ Message: `non-existent variable in "$(params.does-not-exist)"`, - Paths: []string{"[0].matrix[a-param].value[2]"}, + Paths: []string{"[0].matrix.params[a-param].value[2]"}, }, }, { name: "invalid pipeline task with two matrix parameters and one of them missing from the param declarations", @@ -1979,7 +1979,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }}, expectedError: apis.FieldError{ Message: `non-existent variable in "$(params.does-not-exist)"`, - Paths: []string{"[0].matrix[b-param].value[0]"}, + Paths: []string{"[0].matrix.params[b-param].value[0]"}, }, }, { name: "invalid object key in the input of the when expression", @@ -2123,7 +2123,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }}, expectedError: apis.FieldError{ Message: `non-existent variable in "$(params.myObject.non-exist-key)"`, - Paths: []string{"[0].matrix[b-param].value[0]"}, + Paths: []string{"[0].matrix.params[b-param].value[0]"}, }, api: "alpha", }, { @@ -2863,9 +2863,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipeline.name)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)"}}, @@ -2876,9 +2873,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.name)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.name)"}}, @@ -2889,9 +2883,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.namespace)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.namespace)"}}, @@ -2902,9 +2893,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.uid)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.uid)"}}, @@ -2915,9 +2903,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)", "and", "$(context.pipelineRun.name)"}}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)", "and", "$(context.pipelineRun.name)"}}, @@ -2928,9 +2913,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.retries)"}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.retries)"}, @@ -2941,9 +2923,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.retries)"}}, - }}, Matrix: &Matrix{ Params: []Param{{ Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.retries)"}}, @@ -2954,9 +2933,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipeline.name)"}, - }}, Matrix: &Matrix{ Include: []MatrixInclude{{ Name: "build-1", @@ -2969,9 +2945,6 @@ func TestContextValid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.retries)"}, - }}, Matrix: &Matrix{ Include: []MatrixInclude{{ Name: "build-1", @@ -2989,7 +2962,7 @@ func TestContextValid(t *testing.T) { } } -func TestContextInvalid(t *testing.T) { +func TestContextInvalidMatrix(t *testing.T) { tests := []struct { name string tasks []PipelineTask @@ -2999,80 +2972,56 @@ func TestContextInvalid(t *testing.T) { tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipeline.missing)"}, - }}, Matrix: &Matrix{ Params: []Param{{ - Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing)"}}, }}}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ Message: `non-existent variable in "$(context.pipeline.missing)"`, Paths: []string{"value"}, - }).Also(&apis.FieldError{ - Message: `non-existent variable in "$(context.pipeline.missing-foo)"`, - Paths: []string{"value"}, }), }, { name: "invalid string context variable for pipelineRun", tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.missing)"}, - }}, Matrix: &Matrix{ Params: []Param{{ - Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.missing)"}}, }}}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ Message: `non-existent variable in "$(context.pipelineRun.missing)"`, Paths: []string{"value"}, - }).Also(&apis.FieldError{ - Message: `non-existent variable in "$(context.pipelineRun.missing-foo)"`, - Paths: []string{"value"}, }), }, { name: "invalid string context variable for pipelineTask", tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.missing)"}, - }}, Matrix: &Matrix{ Params: []Param{{ - Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.missing)"}}, }}}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ Message: `non-existent variable in "$(context.pipelineTask.missing)"`, Paths: []string{"value"}, - }).Also(&apis.FieldError{ - Message: `non-existent variable in "$(context.pipelineTask.missing-foo)"`, - Paths: []string{"value"}, }), }, { name: "invalid array context variables for pipeline, pipelineTask and pipelineRun", tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, - Params: []Param{{ - Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing)", "$(context.pipelineTask.missing)", "$(context.pipelineRun.missing)"}}, - }}, Matrix: &Matrix{ Params: []Param{{ - Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing-foo)", "$(context.pipelineTask.missing-foo)", "$(context.pipelineRun.missing-foo)"}}, + Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing)", "$(context.pipelineTask.missing)", "$(context.pipelineRun.missing)"}}, }}}, }}, expectedError: *apis.ErrGeneric(`non-existent variable in "$(context.pipeline.missing)"`, "value"). Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineRun.missing)"`, "value")). - Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineTask.missing)"`, "value")). - Also(apis.ErrGeneric(`non-existent variable in "$(context.pipeline.missing-foo)"`, "value")). - Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineRun.missing-foo)"`, "value")). - Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineTask.missing-foo)"`, "value")), + Also(apis.ErrGeneric(`non-existent variable in "$(context.pipelineTask.missing)"`, "value")), }, { name: "invalid string context variable for pipeline in include matrix", tasks: []PipelineTask{{