Pipeline describes a list of Tasks to execute. It expresses how outputs +of tasks feed into inputs of subsequent tasks.
+Field | +Description | +||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+apiVersion +string |
+
+
+tekton.dev/v1
+
+ |
+||||||||||||
+kind +string + |
+Pipeline |
+||||||||||||
+metadata + + +Kubernetes meta/v1.ObjectMeta + + + |
+
+(Optional)
+Refer to the Kubernetes API documentation for the fields of the
+metadata field.
+ |
+||||||||||||
+spec + + +PipelineSpec + + + |
+
+(Optional)
+ Spec holds the desired state of the Pipeline from the client ++ +
|
+
-(Appears on:Param, ParamSpec, TaskRunResult) +(Appears on:PipelineTask)
ArrayOrString is a type that can hold a single string or string array. -Used in JSON unmarshalling so that a single JSON field can accept -either an individual string or an array of strings. -TODO (@chuangw6): This struct will be renamed or be embedded in a new struct to take into -consideration the object case after the community reaches an agreement on it.
+EmbeddedTask is used to define a Task inline within a Pipeline’s PipelineTasks.
-type + spec - -ParamType +k8s.io/apimachinery/pkg/runtime.RawExtension + + |
+
+(Optional)
+ Spec is a specification of a custom task ++ +
|
+||||
+metadata + + +PipelineTaskMetadata + + + |
++(Optional) + | +||||
+TaskSpec + + +TaskSpec |
+
+(Members of TaskSpec is a specification of a task |
+(Appears on:PipelineTask) +
+Param declares an ParamValues to use for the parameter called name.
+Field | +Description | +
---|---|
-stringVal + name string |
- Represents the stored type of ArrayOrString. |
-arrayVal + value -[]string + +ParamValue + + + |
++ | +
+(Appears on:PipelineSpec, TaskSpec) +
+ParamSpec defines arbitrary parameters needed beyond typed inputs (such as +resources). Parameter values are provided by users as inputs on a TaskRun +or PipelineRun.
+Field | +Description | +
---|---|
+name + +string + + |
+
+ Name declares the name by which a parameter is referenced. + |
+
+type + + +ParamType + + + |
+
+(Optional)
+ Type is the user-specified type of the parameter. The possible types +are currently “string”, “array” and “object”, and “string” is the default. + |
+
+description + +string + + |
+
+(Optional)
+ Description is a user-facing description of the parameter that may be +used to populate a UI. + |
+
+properties + + +map[string]github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.PropertySpec + + + |
+
+(Optional)
+ Properties is the JSON Schema properties to support key-value pairs parameter. + |
+
+default + + +ParamValue + + + |
+
+(Optional)
+ Default is the value a parameter takes if no input value is supplied. If +default is set, a Task may be executed without a supplied value for the +parameter. + |
+
string
alias)+(Appears on:ParamSpec, ParamValue, PropertySpec) +
+ParamType indicates the type of an input parameter; +Used to distinguish between a single string and an array of strings.
+Value | +Description | +
---|---|
"array" |
++ |
"object" |
++ |
"string" |
++ |
+(Appears on:Param, ParamSpec, PipelineResult, TaskRunResult) +
+ResultValue is a type alias of ParamValue
+Field | +Description | +
---|---|
+type + + +ParamType + + + |
++ | +
+stringVal + +string + + |
+
+ Represents the stored type of ParamValues. + |
+
+arrayVal + +[]string + + |
++ | +
+objectVal + +map[string]string + + |
++ | +
+(Appears on:PipelineSpec) +
+PipelineResult used to describe the results of a pipeline
+Field | +Description | +
---|---|
+name + +string + + |
+
+ Name the given name + |
+
+type + + +ResultsType + + + |
+
+ Type is the user-specified type of the result. +The possible types are ‘string’, ‘array’, and ‘object’, with ‘string’ as the default. +‘array’ and ‘object’ types are alpha features. + |
+
+description + +string + + |
+
+(Optional)
+ Description is a human-readable description of the result + |
+
+value + + +ParamValue + + + |
+
+ Value the expression used to retrieve the value + |
+
+(Appears on:Pipeline) +
+PipelineSpec defines the desired state of Pipeline.
+Field | +Description | +
---|---|
+description + +string + + |
+
+(Optional)
+ Description is a user-facing description of the pipeline that may be +used to populate a UI. + |
+
+tasks + + +[]PipelineTask + + + |
+
+ Tasks declares the graph of Tasks that execute when this Pipeline is run. + |
+
+params + + +[]ParamSpec + + + |
+
+ Params declares a list of input parameters that must be supplied when +this Pipeline is run. + |
+
+workspaces + + +[]PipelineWorkspaceDeclaration + + + |
+
+(Optional)
+ Workspaces declares a set of named workspaces that are expected to be +provided by a PipelineRun. + |
+
+results + + +[]PipelineResult + + + |
+
+(Optional)
+ Results are values that this pipeline can output once run + |
+
+finally + + +[]PipelineTask + + + |
+
+ Finally declares the list of Tasks that execute just before leaving the Pipeline +i.e. either after all Tasks are finished executing successfully +or after a failure which would result in ending the Pipeline + |
+
+(Appears on:PipelineSpec) +
+PipelineTask defines a task in a Pipeline, passing inputs from both +Params and from the output of previous tasks.
+Field | +Description | +
---|---|
+name + +string + + |
+
+ Name is the name of this task within the context of a Pipeline. Name is
+used as a coordinate with the |
+
+taskRef + + +TaskRef + + + |
+
+(Optional)
+ TaskRef is a reference to a task definition. + |
+
+taskSpec + + +EmbeddedTask + + + |
+
+(Optional)
+ TaskSpec is a specification of a task + |
+
+when + + +WhenExpressions + + + |
+
+(Optional)
+ When is a list of when expressions that need to be true for the task to run + |
+
+retries + +int + + |
+
+(Optional)
+ Retries represents how many times this task should be retried in case of task failure: ConditionSucceeded set to False + |
+
+runAfter + +[]string + + |
+
+(Optional)
+ RunAfter is the list of PipelineTask names that should be executed before +this Task executes. (Used to force a specific ordering in graph execution.) + |
+
+params + + +[]Param + + + |
+
+(Optional)
+ Parameters declares parameters passed to this task. + |
+
+matrix + + +[]Param + + + |
+
+(Optional)
+ Matrix declares parameters used to fan out this task. + |
+
+workspaces + + +[]WorkspacePipelineTaskBinding + |
+(Optional)
+ Workspaces maps workspaces from the pipeline spec to the workspaces +declared in the Task. |
-objectVal + timeout -map[string]string + +Kubernetes meta/v1.Duration + |
+(Optional)
+ Time after which the TaskRun times out. Defaults to 1 hour. +Specified TaskRun timeout should be less than 24h. +Refer Go’s ParseDuration documentation for expected format: https://golang.org/pkg/time/#ParseDuration |
+(Appears on:EmbeddedTask) +
Param declares an ArrayOrString to use for the parameter called name.
+PipelineTaskMetadata contains the labels or annotations for an EmbeddedTask
-name + labels -string +map[string]string |
+(Optional) |
-value + annotations - -ArrayOrString - +map[string]string |
+(Optional) |
-(Appears on:TaskSpec) -
ParamSpec defines arbitrary parameters needed beyond typed inputs (such as -resources). Parameter values are provided by users as inputs on a TaskRun -or PipelineRun.
+PipelineTaskParam is used to provide arbitrary string parameters to a Task.
- Name declares the name by which a parameter is referenced. - |
-
-|
-type - - -ParamType - - - |
-
-(Optional)
- Type is the user-specified type of the parameter. The possible types -are currently “string”, “array” and “object”, and “string” is the default. |
-description + value string |
-(Optional)
- Description is a user-facing description of the parameter that may be -used to populate a UI. - |
-
-properties - - -map[string]github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.PropertySpec - - - |
-
-(Optional)
- Properties is the JSON Schema properties to support key-value pairs parameter. - |
-
-default - - -ArrayOrString - - - |
-
-(Optional)
- Default is the value a parameter takes if no input value is supplied. If -default is set, a Task may be executed without a supplied value for the -parameter. |
string
alias)-(Appears on:ArrayOrString, ParamSpec, PropertySpec) -
-ParamType indicates the type of an input parameter; -Used to distinguish between a single string and an array of strings.
-Value | -Description | -
---|---|
"array" |
-- |
"object" |
-- |
"string" |
-- |
+(Appears on:PipelineSpec) +
WorkspacePipelineDeclaration creates a named slot in a Pipeline that a PipelineRun is expected to populate with a workspace binding. @@ -557,6 +1203,9 @@ passed to the resolver.
+(Appears on:TaskRef) +
ResolverRef can be used to refer to a Pipeline or Task in a remote location like a git repo. This feature is in alpha and these fields @@ -604,19 +1253,72 @@ the chosen resolver.
+ResultRef is a type that represents a reference to a task run result
+Field | +Description | +
---|---|
+pipelineTask + +string + + |
++ | +
+result + +string + + |
++ | +
+resultsIndex + +int + + |
++ | +
+property + +string + + |
++ | +
string
alias)-(Appears on:TaskResult, TaskRunResult) +(Appears on:PipelineResult, TaskResult, TaskRunResult)
ResultsType indicates the type of a result; Used to distinguish between a single string and an array of strings. Note that there is ResultType used to find out whether a PipelineResourceResult is from a task result or not, which is different from -this ResultsType. -TODO(#4723): add “array” and “object” support -TODO(#4723): align ResultsType and ParamType in ArrayOrString
+this ResultsType.
imagePullPolicy - -Kubernetes core/v1.PullPolicy - + +Kubernetes core/v1.PullPolicy + + + |
+
+(Optional)
+ Image pull policy. +One of Always, Never, IfNotPresent. +Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. +Cannot be updated. +More info: https://kubernetes.io/docs/concepts/containers/images#updating-images + |
+
+
+securityContext + + +Kubernetes core/v1.SecurityContext + + + |
+
+(Optional)
+ SecurityContext defines the security options the container should be run with. +If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext. +More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ + |
+
string
alias)+(Appears on:TaskRef) +
+TaskKind defines the type of Task used by the pipeline.
+Value | +Description | +
---|---|
"Task" |
+NamespacedTaskKind indicates that the task type has a namespaced scope. + |
+
+(Appears on:PipelineTask) +
+TaskRef can be used to refer to a specific instance of a task.
+Field | +Description | +
---|---|
+name + +string + + |
+
+ Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names + |
+
+kind + + +TaskKind + + + |
+
+ TaskKind indicates the kind of the task, namespaced or cluster scoped. + |
+
+apiVersion + +string |
(Optional)
- Image pull policy. -One of Always, Never, IfNotPresent. -Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. -Cannot be updated. -More info: https://kubernetes.io/docs/concepts/containers/images#updating-images +API version of the referent |
-securityContext + ResolverRef - -Kubernetes core/v1.SecurityContext + +ResolverRef |
(Optional)
- SecurityContext defines the security options the container should be run with. -If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext. -More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +ResolverRef allows referencing a Task in a remote location +like a git repo. This field is only supported when the alpha +feature gate is enabled. |
value - -ArrayOrString + +ParamValue |
@@ -1706,7 +2498,7 @@ ArrayOrString
WhenExpression allows a PipelineTask to declare expressions to be evaluated before the Task is run +to determine whether the Task should be executed or skipped
+Field | +Description | +
---|---|
+input + +string + + |
+
+ Input is the string for guard checking which can be a static input or an output from a parent Task + |
+
+operator + +k8s.io/apimachinery/pkg/selection.Operator + + |
+
+ Operator that represents an Input’s relationship to the values + |
+
+values + +[]string + + |
+
+ Values is an array of strings, which is compared against the input, for guard checking +It must be non-empty + |
+
[]github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.WhenExpression
alias)+(Appears on:PipelineTask) +
+WhenExpressions are used to specify whether a Task should be executed or skipped +All of them need to evaluate to True for a guarded Task to be executed.
++(Appears on:PipelineTask) +
WorkspacePipelineTaskBinding describes how a workspace passed into the pipeline should be mapped to a task’s declared workspace.
@@ -2246,6 +3100,20 @@ RunSpecStatusstatusMessage
Status message for cancellation.
+retries
statusMessage
Status message for cancellation.
+retries
string
alias)
++(Appears on:RunSpec) +
+RunSpecStatusMessage defines human readable status messages for the TaskRun.
+@@ -4066,6 +4956,20 @@ TaskRunSpecStatus
statusMessage
Status message for cancellation.
+timeout
-(Appears on:Param, ParamSpec, PipelineResult, PipelineRunResult, TaskRunResult) -
-ArrayOrString is a type that can hold a single string or string array. -Used in JSON unmarshalling so that a single JSON field can accept -either an individual string or an array of strings. -TODO (@chuangw6): This struct will be renamed or be embedded in a new struct to take into -consideration the object case after the community reaches an agreement on it.
-Field | -Description | -
---|---|
-type - - -ParamType - - - |
-- | -
-stringVal - -string - - |
-
- Represents the stored type of ArrayOrString. - |
-
-arrayVal - -[]string - - |
-- | -
-objectVal - -map[string]string - - |
-- | -
@@ -4573,7 +5412,7 @@ TaskSpec (Appears on:RunSpec, PipelineRunSpec, PipelineTask, TaskRunInputs, TaskRunSpec)
Param declares an ArrayOrString to use for the parameter called name.
+Param declares an ParamValues to use for the parameter called name.
value - -ArrayOrString + +ParamValue |
@@ -4682,8 +5521,8 @@ map[string]github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.PropertySpec
default - -ArrayOrString + +ParamValue |
@@ -4699,7 +5538,7 @@ parameter.
+(Appears on:Param, ParamSpec, PipelineResult, PipelineRunResult, TaskRunResult) +
+ResultValue is a type alias of ParamValue
+Field | +Description | +
---|---|
+type + + +ParamType + + + |
++ | +
+stringVal + +string + + |
+
+ Represents the stored type of ParamValues. + |
+
+arrayVal + +[]string + + |
++ | +
+objectVal + +map[string]string + + |
++ | +
@@ -5076,8 +5976,8 @@ string
value
value
value - -ArrayOrString + +ParamValue |
@@ -8839,6 +9737,20 @@ TaskRunSpecStatus
||||
+statusMessage + + +TaskRunSpecStatusMessage + + + |
+
+(Optional)
+ Status message for cancellation. + |
+|||
timeout @@ -8937,6 +9849,27 @@ Kubernetes core/v1.ResourceRequirements TaskRunSpecStatus defines the taskrun spec status the user can provide TaskRunSpecStatusMessage
+(
+ |
Value | +Description | +
---|---|
"TaskRun cancelled as the PipelineRun it belongs to has been cancelled." |
+TaskRunCancelledByPipelineMsg indicates that the PipelineRun of which this +TaskRun was a part of has been cancelled. + |
+
diff --git a/pkg/apis/pipeline/v1/openapi_generated.go b/pkg/apis/pipeline/v1/openapi_generated.go index 33b9b69f48a..3c2bb89c1ea 100644 --- a/pkg/apis/pipeline/v1/openapi_generated.go +++ b/pkg/apis/pipeline/v1/openapi_generated.go @@ -32,10 +32,10 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA return map[string]common.OpenAPIDefinition{ "github.com/tektoncd/pipeline/pkg/apis/pipeline/pod.AffinityAssistantTemplate": schema_pkg_apis_pipeline_pod_AffinityAssistantTemplate(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/pod.Template": schema_pkg_apis_pipeline_pod_Template(ref), - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString": schema_pkg_apis_pipeline_v1_ArrayOrString(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.EmbeddedTask": schema_pkg_apis_pipeline_v1_EmbeddedTask(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.Param": schema_pkg_apis_pipeline_v1_Param(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamSpec": schema_pkg_apis_pipeline_v1_ParamSpec(ref), + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue": schema_pkg_apis_pipeline_v1_ParamValue(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.Pipeline": schema_pkg_apis_pipeline_v1_Pipeline(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.PipelineList": schema_pkg_apis_pipeline_v1_PipelineList(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.PipelineResult": schema_pkg_apis_pipeline_v1_PipelineResult(ref), @@ -330,69 +330,6 @@ func schema_pkg_apis_pipeline_pod_Template(ref common.ReferenceCallback) common. } } -func schema_pkg_apis_pipeline_v1_ArrayOrString(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ArrayOrString is a type that can hold a single string or string array. Used in JSON unmarshalling so that a single JSON field can accept either an individual string or an array of strings. consideration the object case after the community reaches an agreement on it.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - "stringVal": { - SchemaProps: spec.SchemaProps{ - Description: "Represents the stored type of ArrayOrString.", - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - "arrayVal": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-list-type": "atomic", - }, - }, - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "objectVal": { - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"type", "stringVal", "arrayVal", "objectVal"}, - }, - }, - } -} - func schema_pkg_apis_pipeline_v1_EmbeddedTask(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -564,7 +501,7 @@ func schema_pkg_apis_pipeline_v1_Param(ref common.ReferenceCallback) common.Open return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ - Description: "Param declares an ArrayOrString to use for the parameter called name.", + Description: "Param declares an ParamValues to use for the parameter called name.", Type: []string{"object"}, Properties: map[string]spec.Schema{ "name": { @@ -577,7 +514,7 @@ func schema_pkg_apis_pipeline_v1_Param(ref common.ReferenceCallback) common.Open "value": { SchemaProps: spec.SchemaProps{ Default: map[string]interface{}{}, - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue"), }, }, }, @@ -585,7 +522,7 @@ func schema_pkg_apis_pipeline_v1_Param(ref common.ReferenceCallback) common.Open }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue"}, } } @@ -636,7 +573,7 @@ func schema_pkg_apis_pipeline_v1_ParamSpec(ref common.ReferenceCallback) common. "default": { SchemaProps: spec.SchemaProps{ Description: "Default is the value a parameter takes if no input value is supplied. If default is set, a Task may be executed without a supplied value for the parameter.", - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue"), }, }, }, @@ -644,7 +581,70 @@ func schema_pkg_apis_pipeline_v1_ParamSpec(ref common.ReferenceCallback) common. }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString", "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.PropertySpec"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue", "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.PropertySpec"}, + } +} + +func schema_pkg_apis_pipeline_v1_ParamValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResultValue is a type alias of ParamValue", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "stringVal": { + SchemaProps: spec.SchemaProps{ + Description: "Represents the stored type of ParamValues.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "arrayVal": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "objectVal": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"type", "stringVal", "arrayVal", "objectVal"}, + }, + }, } } @@ -773,7 +773,7 @@ func schema_pkg_apis_pipeline_v1_PipelineResult(ref common.ReferenceCallback) co SchemaProps: spec.SchemaProps{ Description: "Value the expression used to retrieve the value", Default: map[string]interface{}{}, - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue"), }, }, }, @@ -781,7 +781,7 @@ func schema_pkg_apis_pipeline_v1_PipelineResult(ref common.ReferenceCallback) co }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue"}, } } @@ -2195,7 +2195,7 @@ func schema_pkg_apis_pipeline_v1_TaskRunResult(ref common.ReferenceCallback) com SchemaProps: spec.SchemaProps{ Description: "Value the given value of the result", Default: map[string]interface{}{}, - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue"), }, }, }, @@ -2203,7 +2203,7 @@ func schema_pkg_apis_pipeline_v1_TaskRunResult(ref common.ReferenceCallback) com }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ArrayOrString"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1.ParamValue"}, } } diff --git a/pkg/apis/pipeline/v1/param_types.go b/pkg/apis/pipeline/v1/param_types.go index 1f27e767fef..075e35a6f06 100644 --- a/pkg/apis/pipeline/v1/param_types.go +++ b/pkg/apis/pipeline/v1/param_types.go @@ -59,7 +59,7 @@ type ParamSpec struct { // default is set, a Task may be executed without a supplied value for the // parameter. // +optional - Default *ArrayOrString `json:"default,omitempty"` + Default *ParamValue `json:"default,omitempty"` } // PropertySpec defines the struct for object keys @@ -111,10 +111,10 @@ func (pp *ParamSpec) setDefaultsForProperties() { // the specific context of PipelineResources. type ResourceParam = resource.ResourceParam -// Param declares an ArrayOrString to use for the parameter called name. +// Param declares an ParamValues to use for the parameter called name. type Param struct { - Name string `json:"name"` - Value ArrayOrString `json:"value"` + Name string `json:"name"` + Value ParamValue `json:"value"` } // ParamType indicates the type of an input parameter; @@ -131,15 +131,13 @@ const ( // AllParamTypes can be used for ParamType validation. var AllParamTypes = []ParamType{ParamTypeString, ParamTypeArray, ParamTypeObject} -// ArrayOrString is modeled after IntOrString in kubernetes/apimachinery: +// ParamValues is modeled after IntOrString in kubernetes/apimachinery: -// ArrayOrString is a type that can hold a single string or string array. +// ParamValue is a type that can hold a single string, string array, or string map. // Used in JSON unmarshalling so that a single JSON field can accept // either an individual string or an array of strings. -// TODO (@chuangw6): This struct will be renamed or be embedded in a new struct to take into -// consideration the object case after the community reaches an agreement on it. -type ArrayOrString struct { - Type ParamType `json:"type"` // Represents the stored type of ArrayOrString. +type ParamValue struct { + Type ParamType `json:"type"` // Represents the stored type of ParamValues. StringVal string `json:"stringVal"` // +listType=atomic ArrayVal []string `json:"arrayVal"` @@ -147,11 +145,11 @@ type ArrayOrString struct { } // UnmarshalJSON implements the json.Unmarshaller interface. -func (arrayOrString *ArrayOrString) UnmarshalJSON(value []byte) error { - // ArrayOrString is used for Results Value as well, the results can be any kind of +func (paramValues *ParamValue) UnmarshalJSON(value []byte) error { + // ParamValues is used for Results Value as well, the results can be any kind of // data so we need to check if it is empty. if len(value) == 0 { - arrayOrString.Type = ParamTypeString + paramValues.Type = ParamTypeString return nil } if value[0] == '[' { @@ -162,8 +160,8 @@ func (arrayOrString *ArrayOrString) UnmarshalJSON(value []byte) error { // if failed to unmarshal to array, we will convert the value to string and marshal it to string var a []string if err := json.Unmarshal(value, &a); err == nil { - arrayOrString.Type = ParamTypeArray - arrayOrString.ArrayVal = a + paramValues.Type = ParamTypeArray + paramValues.ArrayVal = a return nil } } @@ -171,65 +169,65 @@ func (arrayOrString *ArrayOrString) UnmarshalJSON(value []byte) error { // if failed to unmarshal to map, we will convert the value to string and marshal it to string var m map[string]string if err := json.Unmarshal(value, &m); err == nil { - arrayOrString.Type = ParamTypeObject - arrayOrString.ObjectVal = m + paramValues.Type = ParamTypeObject + paramValues.ObjectVal = m return nil } } // By default we unmarshal to string - arrayOrString.Type = ParamTypeString - if err := json.Unmarshal(value, &arrayOrString.StringVal); err == nil { + paramValues.Type = ParamTypeString + if err := json.Unmarshal(value, ¶mValues.StringVal); err == nil { return nil } - arrayOrString.StringVal = string(value) + paramValues.StringVal = string(value) return nil } // MarshalJSON implements the json.Marshaller interface. -func (arrayOrString ArrayOrString) MarshalJSON() ([]byte, error) { - switch arrayOrString.Type { +func (paramValues ParamValue) MarshalJSON() ([]byte, error) { + switch paramValues.Type { case ParamTypeString: - return json.Marshal(arrayOrString.StringVal) + return json.Marshal(paramValues.StringVal) case ParamTypeArray: - return json.Marshal(arrayOrString.ArrayVal) + return json.Marshal(paramValues.ArrayVal) case ParamTypeObject: - return json.Marshal(arrayOrString.ObjectVal) + return json.Marshal(paramValues.ObjectVal) default: - return []byte{}, fmt.Errorf("impossible ArrayOrString.Type: %q", arrayOrString.Type) + return []byte{}, fmt.Errorf("impossible ParamValues.Type: %q", paramValues.Type) } } -// ApplyReplacements applyes replacements for ArrayOrString type -func (arrayOrString *ArrayOrString) ApplyReplacements(stringReplacements map[string]string, arrayReplacements map[string][]string, objectReplacements map[string]map[string]string) { - switch arrayOrString.Type { +// ApplyReplacements applyes replacements for ParamValues type +func (paramValues *ParamValue) ApplyReplacements(stringReplacements map[string]string, arrayReplacements map[string][]string, objectReplacements map[string]map[string]string) { + switch paramValues.Type { case ParamTypeArray: var newArrayVal []string - for _, v := range arrayOrString.ArrayVal { + for _, v := range paramValues.ArrayVal { newArrayVal = append(newArrayVal, substitution.ApplyArrayReplacements(v, stringReplacements, arrayReplacements)...) } - arrayOrString.ArrayVal = newArrayVal + paramValues.ArrayVal = newArrayVal case ParamTypeObject: newObjectVal := map[string]string{} - for k, v := range arrayOrString.ObjectVal { + for k, v := range paramValues.ObjectVal { newObjectVal[k] = substitution.ApplyReplacements(v, stringReplacements) } - arrayOrString.ObjectVal = newObjectVal + paramValues.ObjectVal = newObjectVal default: - arrayOrString.applyOrCorrect(stringReplacements, arrayReplacements, objectReplacements) + paramValues.applyOrCorrect(stringReplacements, arrayReplacements, objectReplacements) } } // applyOrCorrect deals with string param whose value can be string literal or a reference to a string/array/object param/result. -// If the value of arrayOrString is a reference to array or object, the type will be corrected from string to array/object. -func (arrayOrString *ArrayOrString) applyOrCorrect(stringReplacements map[string]string, arrayReplacements map[string][]string, objectReplacements map[string]map[string]string) { - stringVal := arrayOrString.StringVal +// If the value of paramValues is a reference to array or object, the type will be corrected from string to array/object. +func (paramValues *ParamValue) applyOrCorrect(stringReplacements map[string]string, arrayReplacements map[string][]string, objectReplacements map[string]map[string]string) { + stringVal := paramValues.StringVal // if the stringVal is a string literal or a string that mixed with var references // just do the normal string replacement if !exactVariableSubstitutionRegex.MatchString(stringVal) { - arrayOrString.StringVal = substitution.ApplyReplacements(arrayOrString.StringVal, stringReplacements) + paramValues.StringVal = substitution.ApplyReplacements(paramValues.StringVal, stringReplacements) return } @@ -239,21 +237,21 @@ func (arrayOrString *ArrayOrString) applyOrCorrect(stringReplacements map[string // if the stringVal is a reference to a string param if _, ok := stringReplacements[trimedStringVal]; ok { - arrayOrString.StringVal = substitution.ApplyReplacements(arrayOrString.StringVal, stringReplacements) + paramValues.StringVal = substitution.ApplyReplacements(paramValues.StringVal, stringReplacements) } // if the stringVal is a reference to an array param, we need to change the type other than apply replacement if _, ok := arrayReplacements[trimedStringVal]; ok { - arrayOrString.StringVal = "" - arrayOrString.ArrayVal = substitution.ApplyArrayReplacements(stringVal, stringReplacements, arrayReplacements) - arrayOrString.Type = ParamTypeArray + paramValues.StringVal = "" + paramValues.ArrayVal = substitution.ApplyArrayReplacements(stringVal, stringReplacements, arrayReplacements) + paramValues.Type = ParamTypeArray } // if the stringVal is a reference an object param, we need to change the type other than apply replacement if _, ok := objectReplacements[trimedStringVal]; ok { - arrayOrString.StringVal = "" - arrayOrString.ObjectVal = objectReplacements[trimedStringVal] - arrayOrString.Type = ParamTypeObject + paramValues.StringVal = "" + paramValues.ObjectVal = objectReplacements[trimedStringVal] + paramValues.Type = ParamTypeObject } } @@ -262,24 +260,24 @@ func StripStarVarSubExpression(s string) string { return strings.TrimSuffix(strings.TrimSuffix(strings.TrimPrefix(s, "$("), ")"), "[*]") } -// NewArrayOrString creates an ArrayOrString of type ParamTypeString or ParamTypeArray, based on +// NewStructuredValues creates an ParamValues of type ParamTypeString or ParamTypeArray, based on // how many inputs are given (>1 input will create an array, not string). -func NewArrayOrString(value string, values ...string) *ArrayOrString { +func NewStructuredValues(value string, values ...string) *ParamValue { if len(values) > 0 { - return &ArrayOrString{ + return &ParamValue{ Type: ParamTypeArray, ArrayVal: append([]string{value}, values...), } } - return &ArrayOrString{ + return &ParamValue{ Type: ParamTypeString, StringVal: value, } } -// NewObject creates an ArrayOrString of type ParamTypeObject using the provided key-value pairs -func NewObject(pairs map[string]string) *ArrayOrString { - return &ArrayOrString{ +// NewObject creates an ParamValues of type ParamTypeObject using the provided key-value pairs +func NewObject(pairs map[string]string) *ParamValue { + return &ParamValue{ Type: ParamTypeObject, ObjectVal: pairs, } diff --git a/pkg/apis/pipeline/v1/param_types_test.go b/pkg/apis/pipeline/v1/param_types_test.go index 95ff6887a85..b0928c47504 100644 --- a/pkg/apis/pipeline/v1/param_types_test.go +++ b/pkg/apis/pipeline/v1/param_types_test.go @@ -46,14 +46,14 @@ func TestParamSpec_SetDefaults(t *testing.T) { name: "inferred type from default value - array", before: &v1.ParamSpec{ Name: "parametername", - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ ArrayVal: []string{"array"}, }, }, defaultsApplied: &v1.ParamSpec{ Name: "parametername", Type: v1.ParamTypeArray, - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ ArrayVal: []string{"array"}, }, }, @@ -61,14 +61,14 @@ func TestParamSpec_SetDefaults(t *testing.T) { name: "inferred type from default value - string", before: &v1.ParamSpec{ Name: "parametername", - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ StringVal: "an", }, }, defaultsApplied: &v1.ParamSpec{ Name: "parametername", Type: v1.ParamTypeString, - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ StringVal: "an", }, }, @@ -76,14 +76,14 @@ func TestParamSpec_SetDefaults(t *testing.T) { name: "inferred type from default value - object", before: &v1.ParamSpec{ Name: "parametername", - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ ObjectVal: map[string]string{"url": "test", "path": "test"}, }, }, defaultsApplied: &v1.ParamSpec{ Name: "parametername", Type: v1.ParamTypeObject, - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ ObjectVal: map[string]string{"url": "test", "path": "test"}, }, }, @@ -115,7 +115,7 @@ func TestParamSpec_SetDefaults(t *testing.T) { Name: "parametername", Type: v1.ParamTypeArray, Description: "a description", - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ ArrayVal: []string{"array"}, }, }, @@ -123,7 +123,7 @@ func TestParamSpec_SetDefaults(t *testing.T) { Name: "parametername", Type: v1.ParamTypeArray, Description: "a description", - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ ArrayVal: []string{"array"}, }, }, @@ -133,7 +133,7 @@ func TestParamSpec_SetDefaults(t *testing.T) { Name: "parametername", Type: v1.ParamTypeObject, Description: "a description", - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ ObjectVal: map[string]string{"url": "test", "path": "test"}, }, }, @@ -141,7 +141,7 @@ func TestParamSpec_SetDefaults(t *testing.T) { Name: "parametername", Type: v1.ParamTypeObject, Description: "a description", - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ ObjectVal: map[string]string{"url": "test", "path": "test"}, }, }, @@ -157,9 +157,9 @@ func TestParamSpec_SetDefaults(t *testing.T) { } } -func TestArrayOrString_ApplyReplacements(t *testing.T) { +func TestParamValues_ApplyReplacements(t *testing.T) { type args struct { - input *v1.ArrayOrString + input *v1.ParamValue stringReplacements map[string]string arrayReplacements map[string][]string objectReplacements map[string]map[string]string @@ -167,87 +167,87 @@ func TestArrayOrString_ApplyReplacements(t *testing.T) { tests := []struct { name string args args - expectedOutput *v1.ArrayOrString + expectedOutput *v1.ParamValue }{{ name: "no replacements on array", args: args{ - input: v1.NewArrayOrString("an", "array"), + input: v1.NewStructuredValues("an", "array"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"sdf", "sdfsd"}}, }, - expectedOutput: v1.NewArrayOrString("an", "array"), + expectedOutput: v1.NewStructuredValues("an", "array"), }, { name: "single string replacement on string", args: args{ - input: v1.NewArrayOrString("$(params.myString1)"), + input: v1.NewStructuredValues("$(params.myString1)"), stringReplacements: map[string]string{"params.myString1": "value1", "params.myString2": "value2"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"asdf", "sdfsd"}}, }, - expectedOutput: v1.NewArrayOrString("value1"), + expectedOutput: v1.NewStructuredValues("value1"), }, { name: "multiple string replacements on string", args: args{ - input: v1.NewArrayOrString("astring$(some) asdf $(anotherkey)"), + input: v1.NewStructuredValues("astring$(some) asdf $(anotherkey)"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"asdf", "sdfsd"}}, }, - expectedOutput: v1.NewArrayOrString("astringvalue asdf value"), + expectedOutput: v1.NewStructuredValues("astringvalue asdf value"), }, { name: "single array replacement", args: args{ - input: v1.NewArrayOrString("firstvalue", "$(arraykey)", "lastvalue"), + input: v1.NewStructuredValues("firstvalue", "$(arraykey)", "lastvalue"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"asdf", "sdfsd"}}, }, - expectedOutput: v1.NewArrayOrString("firstvalue", "array", "value", "lastvalue"), + expectedOutput: v1.NewStructuredValues("firstvalue", "array", "value", "lastvalue"), }, { name: "multiple array replacement", args: args{ - input: v1.NewArrayOrString("firstvalue", "$(arraykey)", "lastvalue", "$(sdfdf)"), + input: v1.NewStructuredValues("firstvalue", "$(arraykey)", "lastvalue", "$(sdfdf)"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"asdf", "sdfsd"}}, }, - expectedOutput: v1.NewArrayOrString("firstvalue", "array", "value", "lastvalue", "asdf", "sdfsd"), + expectedOutput: v1.NewStructuredValues("firstvalue", "array", "value", "lastvalue", "asdf", "sdfsd"), }, { name: "empty array replacement without extra elements", args: args{ - input: v1.NewArrayOrString("$(arraykey)"), + input: v1.NewStructuredValues("$(arraykey)"), arrayReplacements: map[string][]string{"arraykey": {}}, }, - expectedOutput: &v1.ArrayOrString{Type: v1.ParamTypeArray, ArrayVal: []string{}}, + expectedOutput: &v1.ParamValue{Type: v1.ParamTypeArray, ArrayVal: []string{}}, }, { name: "empty array replacement with extra elements", args: args{ - input: v1.NewArrayOrString("firstvalue", "$(arraykey)", "lastvalue"), + input: v1.NewStructuredValues("firstvalue", "$(arraykey)", "lastvalue"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {}}, }, - expectedOutput: v1.NewArrayOrString("firstvalue", "lastvalue"), + expectedOutput: v1.NewStructuredValues("firstvalue", "lastvalue"), }, { name: "array replacement on string val", args: args{ - input: v1.NewArrayOrString("$(params.myarray)"), + input: v1.NewStructuredValues("$(params.myarray)"), arrayReplacements: map[string][]string{"params.myarray": {"a", "b", "c"}}, }, - expectedOutput: v1.NewArrayOrString("a", "b", "c"), + expectedOutput: v1.NewStructuredValues("a", "b", "c"), }, { name: "array star replacement on string val", args: args{ - input: v1.NewArrayOrString("$(params.myarray[*])"), + input: v1.NewStructuredValues("$(params.myarray[*])"), arrayReplacements: map[string][]string{"params.myarray": {"a", "b", "c"}}, }, - expectedOutput: v1.NewArrayOrString("a", "b", "c"), + expectedOutput: v1.NewStructuredValues("a", "b", "c"), }, { name: "array indexing replacement on string val", args: args{ - input: v1.NewArrayOrString("$(params.myarray[0])"), + input: v1.NewStructuredValues("$(params.myarray[0])"), stringReplacements: map[string]string{"params.myarray[0]": "a", "params.myarray[1]": "b"}, }, - expectedOutput: v1.NewArrayOrString("a"), + expectedOutput: v1.NewStructuredValues("a"), }, { name: "object replacement on string val", args: args{ - input: v1.NewArrayOrString("$(params.object)"), + input: v1.NewStructuredValues("$(params.object)"), objectReplacements: map[string]map[string]string{ "params.object": { "url": "abc.com", @@ -262,7 +262,7 @@ func TestArrayOrString_ApplyReplacements(t *testing.T) { }, { name: "object star replacement on string val", args: args{ - input: v1.NewArrayOrString("$(params.object[*])"), + input: v1.NewStructuredValues("$(params.object[*])"), objectReplacements: map[string]map[string]string{ "params.object": { "url": "abc.com", @@ -301,46 +301,46 @@ func TestArrayOrString_ApplyReplacements(t *testing.T) { } } -type ArrayOrStringHolder struct { - AOrS v1.ArrayOrString `json:"val"` +type ParamValuesHolder struct { + AOrS v1.ParamValue `json:"val"` } -func TestArrayOrString_UnmarshalJSON(t *testing.T) { +func TestParamValues_UnmarshalJSON(t *testing.T) { cases := []struct { input map[string]interface{} - result v1.ArrayOrString + result v1.ParamValue }{ { input: map[string]interface{}{"val": 123}, - result: *v1.NewArrayOrString("123"), + result: *v1.NewStructuredValues("123"), }, { input: map[string]interface{}{"val": "123"}, - result: *v1.NewArrayOrString("123"), + result: *v1.NewStructuredValues("123"), }, { input: map[string]interface{}{"val": ""}, - result: *v1.NewArrayOrString(""), + result: *v1.NewStructuredValues(""), }, { input: map[string]interface{}{"val": nil}, - result: v1.ArrayOrString{Type: v1.ParamTypeString, ArrayVal: nil}, + result: v1.ParamValue{Type: v1.ParamTypeString, ArrayVal: nil}, }, { input: map[string]interface{}{"val": []string{}}, - result: v1.ArrayOrString{Type: v1.ParamTypeArray, ArrayVal: []string{}}, + result: v1.ParamValue{Type: v1.ParamTypeArray, ArrayVal: []string{}}, }, { input: map[string]interface{}{"val": []string{"oneelement"}}, - result: v1.ArrayOrString{Type: v1.ParamTypeArray, ArrayVal: []string{"oneelement"}}, + result: v1.ParamValue{Type: v1.ParamTypeArray, ArrayVal: []string{"oneelement"}}, }, { input: map[string]interface{}{"val": []string{"multiple", "elements"}}, - result: v1.ArrayOrString{Type: v1.ParamTypeArray, ArrayVal: []string{"multiple", "elements"}}, + result: v1.ParamValue{Type: v1.ParamTypeArray, ArrayVal: []string{"multiple", "elements"}}, }, { input: map[string]interface{}{"val": map[string]string{"key1": "val1", "key2": "val2"}}, - result: v1.ArrayOrString{Type: v1.ParamTypeObject, ObjectVal: map[string]string{"key1": "val1", "key2": "val2"}}, + result: v1.ParamValue{Type: v1.ParamTypeObject, ObjectVal: map[string]string{"key1": "val1", "key2": "val2"}}, }, } @@ -358,7 +358,7 @@ func TestArrayOrString_UnmarshalJSON(t *testing.T) { t.Fatalf("error encoding json: %v", err) } - var result ArrayOrStringHolder + var result ParamValuesHolder if err := json.Unmarshal(b.Bytes(), &result); err != nil { t.Errorf("Failed to unmarshal input '%v': %v", c.input, err) } @@ -369,33 +369,33 @@ func TestArrayOrString_UnmarshalJSON(t *testing.T) { } } -func TestArrayOrString_UnmarshalJSON_Directly(t *testing.T) { +func TestParamValues_UnmarshalJSON_Directly(t *testing.T) { cases := []struct { desc string input string - expected v1.ArrayOrString + expected v1.ParamValue }{ - {desc: "empty value", input: ``, expected: *v1.NewArrayOrString("")}, - {desc: "int value", input: `1`, expected: *v1.NewArrayOrString("1")}, - {desc: "int array", input: `[1,2,3]`, expected: *v1.NewArrayOrString("[1,2,3]")}, - {desc: "nested array", input: `[1,\"2\",3]`, expected: *v1.NewArrayOrString(`[1,\"2\",3]`)}, - {desc: "string value", input: `hello`, expected: *v1.NewArrayOrString("hello")}, - {desc: "array value", input: `["hello","world"]`, expected: *v1.NewArrayOrString("hello", "world")}, + {desc: "empty value", input: ``, expected: *v1.NewStructuredValues("")}, + {desc: "int value", input: `1`, expected: *v1.NewStructuredValues("1")}, + {desc: "int array", input: `[1,2,3]`, expected: *v1.NewStructuredValues("[1,2,3]")}, + {desc: "nested array", input: `[1,\"2\",3]`, expected: *v1.NewStructuredValues(`[1,\"2\",3]`)}, + {desc: "string value", input: `hello`, expected: *v1.NewStructuredValues("hello")}, + {desc: "array value", input: `["hello","world"]`, expected: *v1.NewStructuredValues("hello", "world")}, {desc: "object value", input: `{"hello":"world"}`, expected: *v1.NewObject(map[string]string{"hello": "world"})}, } for _, c := range cases { - aos := v1.ArrayOrString{} - if err := aos.UnmarshalJSON([]byte(c.input)); err != nil { + v := v1.ParamValue{} + if err := v.UnmarshalJSON([]byte(c.input)); err != nil { t.Errorf("Failed to unmarshal input '%v': %v", c.input, err) } - if !reflect.DeepEqual(aos, c.expected) { - t.Errorf("Failed to unmarshal input '%v': expected %+v, got %+v", c.input, c.expected, aos) + if !reflect.DeepEqual(v, c.expected) { + t.Errorf("Failed to unmarshal input '%v': expected %+v, got %+v", c.input, c.expected, v) } } } -func TestArrayOrString_UnmarshalJSON_Error(t *testing.T) { +func TestParamValues_UnmarshalJSON_Error(t *testing.T) { cases := []struct { desc string input string @@ -405,26 +405,26 @@ func TestArrayOrString_UnmarshalJSON_Error(t *testing.T) { } for _, c := range cases { - var result ArrayOrStringHolder + var result ParamValuesHolder if err := json.Unmarshal([]byte(c.input), &result); err == nil { t.Errorf("Should return err but got nil '%v'", c.input) } } } -func TestArrayOrString_MarshalJSON(t *testing.T) { +func TestParamValues_MarshalJSON(t *testing.T) { cases := []struct { - input v1.ArrayOrString + input v1.ParamValue result string }{ - {*v1.NewArrayOrString("123"), "{\"val\":\"123\"}"}, - {*v1.NewArrayOrString("123", "1234"), "{\"val\":[\"123\",\"1234\"]}"}, - {*v1.NewArrayOrString("a", "a", "a"), "{\"val\":[\"a\",\"a\",\"a\"]}"}, + {*v1.NewStructuredValues("123"), "{\"val\":\"123\"}"}, + {*v1.NewStructuredValues("123", "1234"), "{\"val\":[\"123\",\"1234\"]}"}, + {*v1.NewStructuredValues("a", "a", "a"), "{\"val\":[\"a\",\"a\",\"a\"]}"}, {*v1.NewObject(map[string]string{"key1": "var1", "key2": "var2"}), "{\"val\":{\"key1\":\"var1\",\"key2\":\"var2\"}}"}, } for _, c := range cases { - input := ArrayOrStringHolder{c.input} + input := ParamValuesHolder{c.input} result, err := json.Marshal(&input) if err != nil { t.Errorf("Failed to marshal input '%v': %v", input, err) diff --git a/pkg/apis/pipeline/v1/pipeline_defaults_test.go b/pkg/apis/pipeline/v1/pipeline_defaults_test.go index eda814351d8..be2a08696e1 100644 --- a/pkg/apis/pipeline/v1/pipeline_defaults_test.go +++ b/pkg/apis/pipeline/v1/pipeline_defaults_test.go @@ -86,14 +86,14 @@ func TestPipelineSpec_SetDefaults(t *testing.T) { ps: &v1.PipelineSpec{ Params: []v1.ParamSpec{{ Name: "string-param", - Default: &v1.ArrayOrString{ + Default: &v1.ParamValue{ StringVal: "foo", }, }}, }, want: &v1.PipelineSpec{ Params: []v1.ParamSpec{{ - Name: "string-param", Type: v1.ParamTypeString, Default: &v1.ArrayOrString{StringVal: "foo"}, + Name: "string-param", Type: v1.ParamTypeString, Default: &v1.ParamValue{StringVal: "foo"}, }}, }, }, { diff --git a/pkg/apis/pipeline/v1/pipeline_types.go b/pkg/apis/pipeline/v1/pipeline_types.go index a00067af71c..716d38549e3 100644 --- a/pkg/apis/pipeline/v1/pipeline_types.go +++ b/pkg/apis/pipeline/v1/pipeline_types.go @@ -123,7 +123,7 @@ type PipelineResult struct { Description string `json:"description"` // Value the expression used to retrieve the value - Value ArrayOrString `json:"value"` + Value ResultValue `json:"value"` } // PipelineTaskMetadata contains the labels or annotations for an EmbeddedTask diff --git a/pkg/apis/pipeline/v1/pipeline_types_test.go b/pkg/apis/pipeline/v1/pipeline_types_test.go index 6df540491bc..2865597144b 100644 --- a/pkg/apis/pipeline/v1/pipeline_types_test.go +++ b/pkg/apis/pipeline/v1/pipeline_types_test.go @@ -384,10 +384,10 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, Params: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }, wantErrs: apis.ErrMultipleOneOf("matrix[foobar]", "params[foobar]"), @@ -396,10 +396,10 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, Params: []Param{{ - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }, }, { @@ -407,9 +407,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeString, StringVal: "foo"}, + Name: "foo", Value: ParamValue{Type: ParamTypeString, StringVal: "foo"}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeString, StringVal: "bar"}, + Name: "bar", Value: ParamValue{Type: ParamTypeString, StringVal: "bar"}, }}, }, wantErrs: &apis.FieldError{ @@ -421,9 +421,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }, }, { @@ -431,7 +431,7 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.foo-task.results.a-result)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.foo-task.results.a-result)"}}, }}, }, }, { @@ -439,9 +439,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "platform", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Name: "platform", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }, { - Name: "browser", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"chrome", "firefox", "safari"}}, + Name: "browser", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"chrome", "firefox", "safari"}}, }}, }, wantErrs: &apis.FieldError{ @@ -453,9 +453,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "platform", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"linux", "mac"}}, + Name: "platform", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"linux", "mac"}}, }, { - Name: "browser", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"chrome", "firefox"}}, + Name: "browser", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"chrome", "firefox"}}, }}, }, }, { @@ -463,9 +463,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }, embeddedStatus: config.FullEmbeddedStatus, @@ -477,9 +477,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }, embeddedStatus: config.BothEmbeddedStatus, @@ -527,7 +527,7 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo"}}, }}, }, matrixCombinationsCount: 1, @@ -536,9 +536,9 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo"}}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar"}}, + Name: "bar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar"}}, }}, }, matrixCombinationsCount: 1, @@ -547,7 +547,7 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }, matrixCombinationsCount: 2, @@ -556,9 +556,9 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"f", "o", "o"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"f", "o", "o"}}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"b", "a", "r"}}, + Name: "bar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"b", "a", "r"}}, }}, }, matrixCombinationsCount: 9, @@ -567,13 +567,13 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"f", "o", "o"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"f", "o", "o"}}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"b", "a", "r"}}, + Name: "bar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"b", "a", "r"}}, }, { - Name: "quz", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"q", "u", "x"}}, + Name: "quz", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"q", "u", "x"}}, }, { - Name: "xyzzy", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"x", "y", "z", "z", "y"}}, + Name: "xyzzy", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"x", "y", "z", "z", "y"}}, }}, }, matrixCombinationsCount: 135, diff --git a/pkg/apis/pipeline/v1/pipeline_validation_test.go b/pkg/apis/pipeline/v1/pipeline_validation_test.go index 916aba6d488..b7341add6d2 100644 --- a/pkg/apis/pipeline/v1/pipeline_validation_test.go +++ b/pkg/apis/pipeline/v1/pipeline_validation_test.go @@ -698,7 +698,7 @@ func TestValidateParamResults_Success(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.foo) and $(tasks.a-task.results.output)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.foo) and $(tasks.a-task.results.output)"}, }}, }} if err := validateParamResults(tasks); err != nil { @@ -713,7 +713,7 @@ func TestValidateParamResults_Failure(t *testing.T) { }, { Name: "b-task", TaskRef: &TaskRef{Name: "b-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.a-task.resultTypo.bResult)"}}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.a-task.resultTypo.bResult)"}}}, }} expectedError := apis.FieldError{ Message: `invalid value: expected all of the expressions [tasks.a-task.resultTypo.bResult] to be result expressions but only [] were`, @@ -733,11 +733,11 @@ func TestValidatePipelineResults_Success(t *testing.T) { results := []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(tasks.a-task.results.output)"), + Value: *NewStructuredValues("$(tasks.a-task.results.output)"), }, { Name: "my-pipeline-object-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(tasks.a-task.results.gitrepo.commit)"), + Value: *NewStructuredValues("$(tasks.a-task.results.gitrepo.commit)"), }} if err := validatePipelineResults(results, []PipelineTask{{Name: "a-task"}}); err != nil { t.Errorf("Pipeline.validatePipelineResults() returned error for valid pipeline: %s: %v", desc, err) @@ -754,7 +754,7 @@ func TestValidatePipelineResults_Failure(t *testing.T) { results: []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(tasks.a-task.results.output.key1.extra)"), + Value: *NewStructuredValues("$(tasks.a-task.results.output.key1.extra)"), }}, expectedError: *apis.ErrInvalidValue(`expected all of the expressions [tasks.a-task.results.output.key1.extra] to be result expressions but only [] were`, "results[0].value").Also( apis.ErrInvalidValue("referencing a nonexistent task", "results[0].value")), @@ -763,7 +763,7 @@ func TestValidatePipelineResults_Failure(t *testing.T) { results: []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("foo.bar"), + Value: *NewStructuredValues("foo.bar"), }}, expectedError: *apis.ErrInvalidValue(`expected pipeline results to be task result expressions but an invalid expressions was found`, "results[0].value").Also( apis.ErrInvalidValue(`expected pipeline results to be task result expressions but no expressions were found`, "results[0].value")).Also( @@ -773,7 +773,7 @@ func TestValidatePipelineResults_Failure(t *testing.T) { results: []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(foo.bar)"), + Value: *NewStructuredValues("$(foo.bar)"), }}, expectedError: *apis.ErrInvalidValue(`expected pipeline results to be task result expressions but an invalid expressions was found`, "results[0].value").Also( apis.ErrInvalidValue("referencing a nonexistent task", "results[0].value")), @@ -801,7 +801,7 @@ func TestFinallyTaskResultsToPipelineResults_Success(t *testing.T) { Spec: PipelineSpec{ Results: []PipelineResult{{ Name: "initialized", - Value: *NewArrayOrString("$(tasks.clone-app-repo.results.initialized)"), + Value: *NewStructuredValues("$(tasks.clone-app-repo.results.initialized)"), }}, Tasks: []PipelineTask{{ Name: "clone-app-repo", @@ -846,7 +846,7 @@ func TestFinallyTaskResultsToPipelineResults_Failure(t *testing.T) { Spec: PipelineSpec{ Results: []PipelineResult{{ Name: "initialized", - Value: *NewArrayOrString("$(tasks.check-git-commit.results.init)"), + Value: *NewStructuredValues("$(tasks.check-git-commit.results.init)"), }}, Tasks: []PipelineTask{{ Name: "clone-app-repo", @@ -913,7 +913,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.baz) and $(params.foo-is-baz)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.baz) and $(params.foo-is-baz)"}, }}, }}, }, { @@ -941,7 +941,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { params: []ParamSpec{{ Name: "baz", Type: ParamTypeString, }, { - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", @@ -955,7 +955,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { }, { name: "valid array parameter variables", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, + Name: "baz", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, }, { Name: "foo-is-baz", Type: ParamTypeArray, }}, @@ -963,13 +963,13 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz)", "and", "$(params.foo-is-baz)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz)", "and", "$(params.foo-is-baz)"}}, }}, }}, }, { name: "valid star array parameter variables", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, + Name: "baz", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, }, { Name: "foo-is-baz", Type: ParamTypeArray, }}, @@ -977,7 +977,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz[*])", "and", "$(params.foo-is-baz[*])"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz[*])", "and", "$(params.foo-is-baz[*])"}}, }}, }}, }, { @@ -989,7 +989,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(input.workspace.$(params.baz))"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(input.workspace.$(params.baz))"}, }}, }}, }, { @@ -1002,7 +1002,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param-intended-to-be-array", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myArray[*])"}, + Name: "a-param-intended-to-be-array", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myArray[*])"}, }}, }}, }, { @@ -1019,7 +1019,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-string-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myObject.key1)"}, + Name: "a-string-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myObject.key1)"}, }}, }}, }, { @@ -1036,7 +1036,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-string-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myObject.key1) and $(params.myObject.key2)"}, + Name: "a-string-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myObject.key1) and $(params.myObject.key2)"}, }}, }}, }, { @@ -1053,7 +1053,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "an-array-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.key1)", "another one $(params.myObject.key2)"}}, + Name: "an-array-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.key1)", "another one $(params.myObject.key2)"}}, }}, }}, }, { @@ -1073,7 +1073,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "an-object-param", Value: ArrayOrString{Type: ParamTypeObject, ObjectVal: map[string]string{ + Name: "an-object-param", Value: ParamValue{Type: ParamTypeObject, ObjectVal: map[string]string{ "url": "$(params.myObject.key1)", "commit": "$(params.myString)", }}, @@ -1093,7 +1093,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param-intended-to-be-object", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myObject[*])"}, + Name: "a-param-intended-to-be-object", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myObject[*])"}, }}, }}, }, { @@ -1106,7 +1106,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { "key2": {Type: "string"}, }, }, { - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", @@ -1141,7 +1141,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.does-not-exist)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.does-not-exist)"}, }}, }}, expectedError: apis.FieldError{ @@ -1181,7 +1181,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "invalid string parameter variables in when expression, array reference in input", params: []ParamSpec{{ - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", @@ -1199,7 +1199,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "Invalid array parameter variable in when expression, array reference in input with array notation [*]", params: []ParamSpec{{ - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", @@ -1223,7 +1223,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo-task", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.foo) and $(params.does-not-exist)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.foo) and $(params.does-not-exist)"}, }}, }}, expectedError: apis.FieldError{ @@ -1239,9 +1239,9 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo-task", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.foo)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.foo)"}, }, { - Name: "b-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.does-not-exist)"}, + Name: "b-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.does-not-exist)"}, }}, }}, expectedError: apis.FieldError{ @@ -1264,7 +1264,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "array parameter mismatching default type", params: []ParamSpec{{ - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeString, StringVal: "astring"}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeString, StringVal: "astring"}, }}, tasks: []PipelineTask{{ Name: "foo", @@ -1277,7 +1277,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "string parameter mismatching default type", params: []ParamSpec{{ - Name: "foo", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "foo", @@ -1290,13 +1290,13 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "array parameter used as string", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "baz", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.baz)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.baz)"}, }}, }}, expectedError: apis.FieldError{ @@ -1306,13 +1306,13 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "star array parameter used as string", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "baz", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.baz[*])"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.baz[*])"}, }}, }}, expectedError: apis.FieldError{ @@ -1322,13 +1322,13 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "array parameter string template not isolated", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "baz", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"value: $(params.baz)", "last"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"value: $(params.baz)", "last"}}, }}, }}, expectedError: apis.FieldError{ @@ -1338,13 +1338,13 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "star array parameter string template not isolated", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "baz", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"value: $(params.baz[*])", "last"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"value: $(params.baz[*])", "last"}}, }}, }}, expectedError: apis.FieldError{ @@ -1456,7 +1456,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.non-exist-key)", "last"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.non-exist-key)", "last"}}, }}, }}, expectedError: apis.FieldError{ @@ -1477,7 +1477,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myObject.non-exist-key)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myObject.non-exist-key)"}, }}, }}, expectedError: apis.FieldError{ @@ -1501,7 +1501,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "an-object-param", Value: ArrayOrString{Type: ParamTypeObject, ObjectVal: map[string]string{ + Name: "an-object-param", Value: ParamValue{Type: ParamTypeObject, ObjectVal: map[string]string{ "url": "$(params.myObject.non-exist-key)", "commit": "$(params.myString)", }}, @@ -1712,7 +1712,7 @@ func TestValidatePipelineWithFinalTasks_Success(t *testing.T) { Name: "final-task-1", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.non-final-task.results.output)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.non-final-task.results.output)"}, }}, }}, }, @@ -1730,7 +1730,7 @@ func TestValidatePipelineWithFinalTasks_Success(t *testing.T) { Name: "final-task-1", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(context.pipelineRun.name)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(context.pipelineRun.name)"}, }}, }}, }, @@ -1900,7 +1900,7 @@ func TestValidatePipelineWithFinalTasks_Failure(t *testing.T) { Name: "final-task", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "final-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.foo) and $(params.does-not-exist)"}, + Name: "final-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.foo) and $(params.does-not-exist)"}, }}, }}, }, @@ -1975,7 +1975,7 @@ func TestValidatePipelineWithFinalTasks_Failure(t *testing.T) { Name: "final-task-1", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(context.pipelineRun.missing)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(context.pipelineRun.missing)"}, }}, }}, }, @@ -2078,7 +2078,7 @@ func TestValidateFinalTasks_Failure(t *testing.T) { Name: "final-task-2", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.final-task-1.results.output)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.final-task-1.results.output)"}, }}, }}, expectedError: apis.FieldError{ @@ -2109,7 +2109,7 @@ func TestValidateFinalTasks_Failure(t *testing.T) { Name: "final-task", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.no-dag-task-1.results.output)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.no-dag-task-1.results.output)"}, }}, }}, expectedError: apis.FieldError{ @@ -2145,9 +2145,9 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "foo-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.foo.status)"}, + Name: "foo-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.foo.status)"}, }, { - Name: "tasks-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.status)"}, + Name: "tasks-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.status)"}, }}, When: WhenExpressions{{ Input: "$(tasks.foo.status)", @@ -2165,7 +2165,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "foo-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.foo.results.status)"}, + Name: "foo-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.foo.results.status)"}, }}, When: WhenExpressions{WhenExpression{ Input: "$(tasks.foo.results.status)", @@ -2182,7 +2182,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "foo-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of foo is $(tasks.foo.status)."}, + Name: "foo-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of foo is $(tasks.foo.status)."}, }}, }}, }, { @@ -2194,7 +2194,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "foo-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of $(tasks.taskname) is $(tasks.foo.status)."}, + Name: "foo-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of $(tasks.taskname) is $(tasks.foo.status)."}, }}, }}, }, { @@ -2203,7 +2203,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "bar-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.bar.status)"}, + Name: "bar-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.bar.status)"}, }}, When: WhenExpressions{WhenExpression{ Input: "$(tasks.bar.status)", @@ -2221,7 +2221,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "tasks-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.status)"}, + Name: "tasks-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.status)"}, }}, }}, expectedError: apis.FieldError{ @@ -2234,7 +2234,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "bar-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of bar is $(tasks.bar.status)"}, + Name: "bar-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of bar is $(tasks.bar.status)"}, }}, }}, expectedError: apis.FieldError{ @@ -2247,7 +2247,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "bar-status", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.bar.status)"}}, + Name: "bar-status", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.bar.status)"}}, }}, }}, expectedError: apis.FieldError{ @@ -2260,7 +2260,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "tasks-status", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.status)"}}, + Name: "tasks-status", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.status)"}}, }}, }}, expectedError: apis.FieldError{ @@ -2273,7 +2273,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "notask-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.notask.status)"}, + Name: "notask-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.notask.status)"}, }}, }}, expectedError: apis.FieldError{ @@ -2301,7 +2301,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "notask-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.notask.status)"}, + Name: "notask-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.notask.status)"}, }}, }, { Name: "foo", @@ -2322,7 +2322,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "notask-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of notask is $(tasks.notask.status)."}, + Name: "notask-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of notask is $(tasks.notask.status)."}, }}, }}, expectedError: apis.FieldError{ @@ -2335,7 +2335,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "notask-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of $(tasks.taskname) is $(tasks.notask.status)."}, + Name: "notask-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of $(tasks.taskname) is $(tasks.notask.status)."}, }}, }}, expectedError: apis.FieldError{ diff --git a/pkg/apis/pipeline/v1/result_types.go b/pkg/apis/pipeline/v1/result_types.go index daf9abf2606..a64c867f225 100644 --- a/pkg/apis/pipeline/v1/result_types.go +++ b/pkg/apis/pipeline/v1/result_types.go @@ -45,16 +45,17 @@ type TaskRunResult struct { Type ResultsType `json:"type,omitempty"` // Value the given value of the result - Value ArrayOrString `json:"value"` + Value ResultValue `json:"value"` } +// ResultValue is a type alias of ParamValue +type ResultValue = ParamValue + // ResultsType indicates the type of a result; // Used to distinguish between a single string and an array of strings. // Note that there is ResultType used to find out whether a // PipelineResourceResult is from a task result or not, which is different from // this ResultsType. -// TODO(#4723): add "array" and "object" support -// TODO(#4723): align ResultsType and ParamType in ArrayOrString type ResultsType string // Valid ResultsType: diff --git a/pkg/apis/pipeline/v1/resultref_test.go b/pkg/apis/pipeline/v1/resultref_test.go index 10dfdda0fc4..5b910eb4227 100644 --- a/pkg/apis/pipeline/v1/resultref_test.go +++ b/pkg/apis/pipeline/v1/resultref_test.go @@ -35,7 +35,7 @@ func TestNewResultReference(t *testing.T) { name: "Test valid expression", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask.results.sumResult)"), + Value: *v1.NewStructuredValues("$(tasks.sumTask.results.sumResult)"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask", @@ -45,7 +45,7 @@ func TestNewResultReference(t *testing.T) { name: "refer whole array result", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask.results.sumResult[*])"), + Value: *v1.NewStructuredValues("$(tasks.sumTask.results.sumResult[*])"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask", @@ -55,7 +55,7 @@ func TestNewResultReference(t *testing.T) { name: "Test valid expression with single object result property", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask.results.sumResult.key1)"), + Value: *v1.NewStructuredValues("$(tasks.sumTask.results.sumResult.key1)"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask", @@ -66,7 +66,7 @@ func TestNewResultReference(t *testing.T) { name: "refer array indexing result", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask.results.sumResult[1])"), + Value: *v1.NewStructuredValues("$(tasks.sumTask.results.sumResult[1])"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask", @@ -77,7 +77,7 @@ func TestNewResultReference(t *testing.T) { name: "Test valid expression with multiple object result properties", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask.results.imageresult.digest), and another one $(tasks.sumTask.results.imageresult.tag)"), + Value: *v1.NewStructuredValues("$(tasks.sumTask.results.imageresult.digest), and another one $(tasks.sumTask.results.imageresult.tag)"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask", @@ -92,7 +92,7 @@ func TestNewResultReference(t *testing.T) { name: "substitution within string", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("sum-will-go-here -> $(tasks.sumTask.results.sumResult)"), + Value: *v1.NewStructuredValues("sum-will-go-here -> $(tasks.sumTask.results.sumResult)"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask", @@ -102,7 +102,7 @@ func TestNewResultReference(t *testing.T) { name: "multiple substitution", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask1.results.sumResult) and another $(tasks.sumTask2.results.sumResult), last one $(tasks.sumTask3.results.sumResult.key1)"), + Value: *v1.NewStructuredValues("$(tasks.sumTask1.results.sumResult) and another $(tasks.sumTask2.results.sumResult), last one $(tasks.sumTask3.results.sumResult.key1)"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask1", @@ -119,7 +119,7 @@ func TestNewResultReference(t *testing.T) { name: "multiple substitution with param", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(params.param) $(tasks.sumTask1.results.sumResult) and another $(tasks.sumTask2.results.sumResult), last one $(tasks.sumTask3.results.sumResult.key1)"), + Value: *v1.NewStructuredValues("$(params.param) $(tasks.sumTask1.results.sumResult) and another $(tasks.sumTask2.results.sumResult), last one $(tasks.sumTask3.results.sumResult.key1)"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask1", @@ -136,35 +136,35 @@ func TestNewResultReference(t *testing.T) { name: "first separator typo", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(task.sumTasks.results.sumResult)"), + Value: *v1.NewStructuredValues("$(task.sumTasks.results.sumResult)"), }, want: nil, }, { name: "third separator typo", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTasks.result.sumResult)"), + Value: *v1.NewStructuredValues("$(tasks.sumTasks.result.sumResult)"), }, want: nil, }, { name: "more than 5 dot-separated components", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTasks.result.sumResult.key.extra)"), + Value: *v1.NewStructuredValues("$(tasks.sumTasks.result.sumResult.key.extra)"), }, want: nil, }, { name: "param substitution shouldn't be considered result ref", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(params.paramName)"), + Value: *v1.NewStructuredValues("$(params.paramName)"), }, want: nil, }, { name: "One bad and good result substitution", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("good -> $(tasks.sumTask1.results.sumResult) bad-> $(task.sumTask2.results.sumResult)"), + Value: *v1.NewStructuredValues("good -> $(tasks.sumTask1.results.sumResult) bad-> $(task.sumTask2.results.sumResult)"), }, want: []*v1.ResultRef{{ PipelineTask: "sumTask1", @@ -194,7 +194,7 @@ func TestHasResultReference(t *testing.T) { name: "Test valid expression", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask.results.sumResult)"), + Value: *v1.NewStructuredValues("$(tasks.sumTask.results.sumResult)"), }, wantRef: []*v1.ResultRef{{ PipelineTask: "sumTask", @@ -204,7 +204,7 @@ func TestHasResultReference(t *testing.T) { name: "Test valid expression with dashes", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sum-task.results.sum-result)"), + Value: *v1.NewStructuredValues("$(tasks.sum-task.results.sum-result)"), }, wantRef: []*v1.ResultRef{{ PipelineTask: "sum-task", @@ -214,7 +214,7 @@ func TestHasResultReference(t *testing.T) { name: "Test valid expression with underscores", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sum-task.results.sum_result)"), + Value: *v1.NewStructuredValues("$(tasks.sum-task.results.sum_result)"), }, wantRef: []*v1.ResultRef{{ PipelineTask: "sum-task", @@ -224,14 +224,14 @@ func TestHasResultReference(t *testing.T) { name: "Test invalid expression: param substitution shouldn't be considered result ref", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(params.paramName)"), + Value: *v1.NewStructuredValues("$(params.paramName)"), }, wantRef: nil, }, { name: "Test valid expression in array", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask.results.sumResult)", "$(tasks.sumTask2.results.sumResult2)"), + Value: *v1.NewStructuredValues("$(tasks.sumTask.results.sumResult)", "$(tasks.sumTask2.results.sumResult2)"), }, wantRef: []*v1.ResultRef{{ PipelineTask: "sumTask", @@ -244,7 +244,7 @@ func TestHasResultReference(t *testing.T) { name: "Test valid expression in array - no ref in first element", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("1", "$(tasks.sumTask2.results.sumResult2)"), + Value: *v1.NewStructuredValues("1", "$(tasks.sumTask2.results.sumResult2)"), }, wantRef: []*v1.ResultRef{{ PipelineTask: "sumTask2", @@ -301,56 +301,56 @@ func TestLooksLikeResultRef(t *testing.T) { name: "test expression that is a result ref", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTasks.results.sumResult)"), + Value: *v1.NewStructuredValues("$(tasks.sumTasks.results.sumResult)"), }, want: true, }, { name: "test expression: looks like result ref, but typo in 'task' separator", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(task.sumTasks.results.sumResult)"), + Value: *v1.NewStructuredValues("$(task.sumTasks.results.sumResult)"), }, want: true, }, { name: "test expression: looks like result ref, but typo in 'results' separator", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTasks.result.sumResult)"), + Value: *v1.NewStructuredValues("$(tasks.sumTasks.result.sumResult)"), }, want: true, }, { name: "test expression: missing 'task' separator", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(sumTasks.results.sumResult)"), + Value: *v1.NewStructuredValues("$(sumTasks.results.sumResult)"), }, want: false, }, { name: "test expression: missing variable substitution", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("tasks.sumTasks.results.sumResult"), + Value: *v1.NewStructuredValues("tasks.sumTasks.results.sumResult"), }, want: false, }, { name: "test expression: param substitution shouldn't be considered result ref", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(params.someParam)"), + Value: *v1.NewStructuredValues("$(params.someParam)"), }, want: false, }, { name: "test expression: one good ref, one bad one should return true", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTasks.results.sumResult) $(task.sumTasks.results.sumResult)"), + Value: *v1.NewStructuredValues("$(tasks.sumTasks.results.sumResult) $(task.sumTasks.results.sumResult)"), }, want: true, }, { name: "test expression: inside array parameter", param: v1.Param{ Name: "param", - Value: *v1.NewArrayOrString("$(tasks.sumTask.results.sumResult)", "$(tasks.sumTask2.results.sumResult2)"), + Value: *v1.NewStructuredValues("$(tasks.sumTask.results.sumResult)", "$(tasks.sumTask2.results.sumResult2)"), }, want: true, }} { @@ -641,9 +641,9 @@ func TestLooksLikeResultRefWhenExpressionFalse(t *testing.T) { func TestPipelineTaskResultRefs(t *testing.T) { pt := v1.PipelineTask{ Params: []v1.Param{{ - Value: *v1.NewArrayOrString("$(tasks.pt1.results.r1)"), + Value: *v1.NewStructuredValues("$(tasks.pt1.results.r1)"), }, { - Value: *v1.NewArrayOrString("$(tasks.pt2.results.r2)"), + Value: *v1.NewStructuredValues("$(tasks.pt2.results.r2)"), }}, When: []v1.WhenExpression{{ Input: "$(tasks.pt3.results.r3)", @@ -653,9 +653,9 @@ func TestPipelineTaskResultRefs(t *testing.T) { }, }}, Matrix: []v1.Param{{ - Value: *v1.NewArrayOrString("$(tasks.pt5.results.r5)", "$(tasks.pt6.results.r6)"), + Value: *v1.NewStructuredValues("$(tasks.pt5.results.r5)", "$(tasks.pt6.results.r6)"), }, { - Value: *v1.NewArrayOrString("$(tasks.pt7.results.r7)", "$(tasks.pt8.results.r8)"), + Value: *v1.NewStructuredValues("$(tasks.pt7.results.r7)", "$(tasks.pt8.results.r8)"), }}, } refs := v1.PipelineTaskResultRefs(&pt) @@ -729,7 +729,7 @@ func TestGetVarSubstitutionExpressionsForPipelineResult(t *testing.T) { result: v1.PipelineResult{ Name: "string result", Type: v1.ResultsTypeString, - Value: *v1.NewArrayOrString("$(tasks.task1.results.result1) and $(tasks.task2.results.result2)"), + Value: *v1.NewStructuredValues("$(tasks.task1.results.result1) and $(tasks.task2.results.result2)"), }, want: []string{"tasks.task1.results.result1", "tasks.task2.results.result2"}, }, { @@ -737,7 +737,7 @@ func TestGetVarSubstitutionExpressionsForPipelineResult(t *testing.T) { result: v1.PipelineResult{ Name: "array result", Type: v1.ResultsTypeString, - Value: *v1.NewArrayOrString("$(tasks.task1.results.result1)", "$(tasks.task2.results.result2)"), + Value: *v1.NewStructuredValues("$(tasks.task1.results.result1)", "$(tasks.task2.results.result2)"), }, want: []string{"tasks.task1.results.result1", "tasks.task2.results.result2"}, }, { diff --git a/pkg/apis/pipeline/v1/swagger.json b/pkg/apis/pipeline/v1/swagger.json index 209158131ff..41134e0ec2f 100644 --- a/pkg/apis/pipeline/v1/swagger.json +++ b/pkg/apis/pipeline/v1/swagger.json @@ -140,42 +140,6 @@ } } }, - "v1.ArrayOrString": { - "description": "ArrayOrString is a type that can hold a single string or string array. Used in JSON unmarshalling so that a single JSON field can accept either an individual string or an array of strings. consideration the object case after the community reaches an agreement on it.", - "type": "object", - "required": [ - "type", - "stringVal", - "arrayVal", - "objectVal" - ], - "properties": { - "arrayVal": { - "type": "array", - "items": { - "type": "string", - "default": "" - }, - "x-kubernetes-list-type": "atomic" - }, - "objectVal": { - "type": "object", - "additionalProperties": { - "type": "string", - "default": "" - } - }, - "stringVal": { - "description": "Represents the stored type of ArrayOrString.", - "type": "string", - "default": "" - }, - "type": { - "type": "string", - "default": "" - } - } - }, "v1.EmbeddedTask": { "description": "EmbeddedTask is used to define a Task inline within a Pipeline's PipelineTasks.", "type": "object", @@ -260,7 +224,7 @@ } }, "v1.Param": { - "description": "Param declares an ArrayOrString to use for the parameter called name.", + "description": "Param declares an ParamValues to use for the parameter called name.", "type": "object", "required": [ "name", @@ -273,7 +237,7 @@ }, "value": { "default": {}, - "$ref": "#/definitions/v1.ArrayOrString" + "$ref": "#/definitions/v1.ParamValue" } } }, @@ -286,7 +250,7 @@ "properties": { "default": { "description": "Default is the value a parameter takes if no input value is supplied. If default is set, a Task may be executed without a supplied value for the parameter.", - "$ref": "#/definitions/v1.ArrayOrString" + "$ref": "#/definitions/v1.ParamValue" }, "description": { "description": "Description is a user-facing description of the parameter that may be used to populate a UI.", @@ -311,6 +275,42 @@ } } }, + "v1.ParamValue": { + "description": "ResultValue is a type alias of ParamValue", + "type": "object", + "required": [ + "type", + "stringVal", + "arrayVal", + "objectVal" + ], + "properties": { + "arrayVal": { + "type": "array", + "items": { + "type": "string", + "default": "" + }, + "x-kubernetes-list-type": "atomic" + }, + "objectVal": { + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "stringVal": { + "description": "Represents the stored type of ParamValues.", + "type": "string", + "default": "" + }, + "type": { + "type": "string", + "default": "" + } + } + }, "v1.Pipeline": { "description": "Pipeline describes a list of Tasks to execute. It expresses how outputs of tasks feed into inputs of subsequent tasks.", "type": "object", @@ -387,7 +387,7 @@ "value": { "description": "Value the expression used to retrieve the value", "default": {}, - "$ref": "#/definitions/v1.ArrayOrString" + "$ref": "#/definitions/v1.ParamValue" } } }, @@ -1153,7 +1153,7 @@ "value": { "description": "Value the given value of the result", "default": {}, - "$ref": "#/definitions/v1.ArrayOrString" + "$ref": "#/definitions/v1.ParamValue" } } }, diff --git a/pkg/apis/pipeline/v1/task_validation.go b/pkg/apis/pipeline/v1/task_validation.go index 8133330c950..c43de635198 100644 --- a/pkg/apis/pipeline/v1/task_validation.go +++ b/pkg/apis/pipeline/v1/task_validation.go @@ -414,7 +414,7 @@ func validateObjectDefault(objectParams []ParamSpec) (errs *apis.FieldError) { } // ValidateObjectKeys validates if object keys defined in properties are all provided in its value provider iff the provider is not nil. -func ValidateObjectKeys(properties map[string]PropertySpec, propertiesProvider *ArrayOrString) (errs *apis.FieldError) { +func ValidateObjectKeys(properties map[string]PropertySpec, propertiesProvider *ParamValue) (errs *apis.FieldError) { if propertiesProvider == nil || propertiesProvider.ObjectVal == nil { return nil } diff --git a/pkg/apis/pipeline/v1/task_validation_test.go b/pkg/apis/pipeline/v1/task_validation_test.go index fee9ec14d45..ea16fc3e41a 100644 --- a/pkg/apis/pipeline/v1/task_validation_test.go +++ b/pkg/apis/pipeline/v1/task_validation_test.go @@ -160,7 +160,7 @@ func TestTaskSpecValidate(t *testing.T) { Params: []v1.ParamSpec{{ Name: "task", Description: "param", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }}, Steps: validSteps, }, @@ -171,7 +171,7 @@ func TestTaskSpecValidate(t *testing.T) { Name: "task", Type: v1.ParamTypeString, Description: "param", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }, { Name: "myobj", Type: v1.ParamTypeObject, @@ -500,7 +500,7 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "validparam", Type: v1.ParamTypeString, Description: "parameter", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }}, }, expectedError: apis.FieldError{ @@ -563,12 +563,12 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "foo", Type: v1.ParamTypeString, Description: "parameter", - Default: v1.NewArrayOrString("value1"), + Default: v1.NewStructuredValues("value1"), }, { Name: "foo", Type: v1.ParamTypeString, Description: "parameter", - Default: v1.NewArrayOrString("value2"), + Default: v1.NewStructuredValues("value2"), }}, Steps: validSteps, }, @@ -583,12 +583,12 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "validparam", Type: v1.ParamTypeString, Description: "parameter", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }, { Name: "param-with-invalid-type", Type: "invalidtype", Description: "invalidtypedesc", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }}, Steps: validSteps, }, @@ -603,7 +603,7 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "task", Type: v1.ParamTypeArray, Description: "param", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }}, Steps: validSteps, }, @@ -618,7 +618,7 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "task", Type: v1.ParamTypeString, Description: "param", - Default: v1.NewArrayOrString("default", "array"), + Default: v1.NewStructuredValues("default", "array"), }}, Steps: validSteps, }, @@ -652,7 +652,7 @@ func TestTaskSpecValidateError(t *testing.T) { Type: v1.ParamTypeObject, Description: "param", Properties: map[string]v1.PropertySpec{"key1": {}}, - Default: v1.NewArrayOrString("var"), + Default: v1.NewStructuredValues("var"), }}, Steps: validSteps, }, @@ -717,7 +717,7 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "validparam", Type: v1.ParamTypeString, Description: "parameter", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }}, Steps: []v1.Step{}, }, @@ -863,10 +863,10 @@ func TestTaskSpecValidateError(t *testing.T) { fields: fields{ Params: []v1.ParamSpec{{ Name: "baz", - Default: v1.NewArrayOrString("implied", "array", "type"), + Default: v1.NewStructuredValues("implied", "array", "type"), }, { Name: "foo-is-baz", - Default: v1.NewArrayOrString("implied", "array", "type"), + Default: v1.NewStructuredValues("implied", "array", "type"), }}, Steps: []v1.Step{{ Name: "mystep", @@ -885,10 +885,10 @@ func TestTaskSpecValidateError(t *testing.T) { fields: fields{ Params: []v1.ParamSpec{{ Name: "baz", - Default: v1.NewArrayOrString("implied", "array", "type"), + Default: v1.NewStructuredValues("implied", "array", "type"), }, { Name: "foo-is-baz", - Default: v1.NewArrayOrString("implied", "array", "type"), + Default: v1.NewStructuredValues("implied", "array", "type"), }}, Steps: []v1.Step{{ Name: "mystep", @@ -997,7 +997,7 @@ func TestTaskSpecValidateError(t *testing.T) { { Name: "foo", Description: "param", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }, }, Steps: []v1.Step{{ @@ -1018,7 +1018,7 @@ func TestTaskSpecValidateError(t *testing.T) { Params: []v1.ParamSpec{{ Name: "foo", Description: "param", - Default: v1.NewArrayOrString("default"), + Default: v1.NewStructuredValues("default"), }}, Steps: []v1.Step{{ Name: "mystep", diff --git a/pkg/apis/pipeline/v1/zz_generated.deepcopy.go b/pkg/apis/pipeline/v1/zz_generated.deepcopy.go index cafd90d563c..81868ef3d7a 100644 --- a/pkg/apis/pipeline/v1/zz_generated.deepcopy.go +++ b/pkg/apis/pipeline/v1/zz_generated.deepcopy.go @@ -27,34 +27,6 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ArrayOrString) DeepCopyInto(out *ArrayOrString) { - *out = *in - if in.ArrayVal != nil { - in, out := &in.ArrayVal, &out.ArrayVal - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.ObjectVal != nil { - in, out := &in.ObjectVal, &out.ObjectVal - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArrayOrString. -func (in *ArrayOrString) DeepCopy() *ArrayOrString { - if in == nil { - return nil - } - out := new(ArrayOrString) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *EmbeddedTask) DeepCopyInto(out *EmbeddedTask) { *out = *in @@ -104,7 +76,7 @@ func (in *ParamSpec) DeepCopyInto(out *ParamSpec) { } if in.Default != nil { in, out := &in.Default, &out.Default - *out = new(ArrayOrString) + *out = new(ParamValue) (*in).DeepCopyInto(*out) } return @@ -120,6 +92,34 @@ func (in *ParamSpec) DeepCopy() *ParamSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ParamValue) DeepCopyInto(out *ParamValue) { + *out = *in + if in.ArrayVal != nil { + in, out := &in.ArrayVal, &out.ArrayVal + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ObjectVal != nil { + in, out := &in.ObjectVal, &out.ObjectVal + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ParamValue. +func (in *ParamValue) DeepCopy() *ParamValue { + if in == nil { + return nil + } + out := new(ParamValue) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Pipeline) DeepCopyInto(out *Pipeline) { *out = *in diff --git a/pkg/apis/pipeline/v1alpha1/run_types_test.go b/pkg/apis/pipeline/v1alpha1/run_types_test.go index 5c315f71670..39611e23fe4 100644 --- a/pkg/apis/pipeline/v1alpha1/run_types_test.go +++ b/pkg/apis/pipeline/v1alpha1/run_types_test.go @@ -53,26 +53,26 @@ func TestGetParams(t *testing.T) { spec: v1alpha1.RunSpec{ Params: []v1beta1.Param{{ Name: "first", - Value: *v1beta1.NewArrayOrString("blah"), + Value: *v1beta1.NewStructuredValues("blah"), }, { Name: "foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }}, }, name: "foo", want: &v1beta1.Param{ Name: "foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }, }, { desc: "not found", spec: v1alpha1.RunSpec{ Params: []v1beta1.Param{{ Name: "first", - Value: *v1beta1.NewArrayOrString("blah"), + Value: *v1beta1.NewStructuredValues("blah"), }, { Name: "foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }}, }, name: "bar", @@ -85,19 +85,19 @@ func TestGetParams(t *testing.T) { spec: v1alpha1.RunSpec{ Params: []v1beta1.Param{{ Name: "first", - Value: *v1beta1.NewArrayOrString("blah"), + Value: *v1beta1.NewStructuredValues("blah"), }, { Name: "foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }, { Name: "foo", - Value: *v1beta1.NewArrayOrString("second bar"), + Value: *v1beta1.NewStructuredValues("second bar"), }}, }, name: "foo", want: &v1beta1.Param{ Name: "foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }, }} { t.Run(c.desc, func(t *testing.T) { diff --git a/pkg/apis/pipeline/v1alpha1/run_validation_test.go b/pkg/apis/pipeline/v1alpha1/run_validation_test.go index 6375d8afa86..c417936b303 100644 --- a/pkg/apis/pipeline/v1alpha1/run_validation_test.go +++ b/pkg/apis/pipeline/v1alpha1/run_validation_test.go @@ -173,10 +173,10 @@ func TestRun_Invalid(t *testing.T) { }, Params: []v1beta1.Param{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("foo"), + Value: *v1beta1.NewStructuredValues("foo"), }, { Name: "foo", - Value: *v1beta1.NewArrayOrString("foo"), + Value: *v1beta1.NewStructuredValues("foo"), }}, }, }, @@ -265,10 +265,10 @@ func TestRun_Valid(t *testing.T) { }, Params: []v1beta1.Param{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("foo"), + Value: *v1beta1.NewStructuredValues("foo"), }, { Name: "bar", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }}, }, }, diff --git a/pkg/apis/pipeline/v1beta1/openapi_generated.go b/pkg/apis/pipeline/v1beta1/openapi_generated.go index b224bd85cdb..fcc51144e64 100644 --- a/pkg/apis/pipeline/v1beta1/openapi_generated.go +++ b/pkg/apis/pipeline/v1beta1/openapi_generated.go @@ -32,7 +32,6 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA return map[string]common.OpenAPIDefinition{ "github.com/tektoncd/pipeline/pkg/apis/pipeline/pod.AffinityAssistantTemplate": schema_pkg_apis_pipeline_pod_AffinityAssistantTemplate(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/pod.Template": schema_pkg_apis_pipeline_pod_Template(ref), - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString": schema_pkg_apis_pipeline_v1beta1_ArrayOrString(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ChildStatusReference": schema_pkg_apis_pipeline_v1beta1_ChildStatusReference(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.CloudEventDelivery": schema_pkg_apis_pipeline_v1beta1_CloudEventDelivery(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.CloudEventDeliveryState": schema_pkg_apis_pipeline_v1beta1_CloudEventDeliveryState(ref), @@ -42,6 +41,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.InternalTaskModifier": schema_pkg_apis_pipeline_v1beta1_InternalTaskModifier(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.Param": schema_pkg_apis_pipeline_v1beta1_Param(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamSpec": schema_pkg_apis_pipeline_v1beta1_ParamSpec(ref), + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue": schema_pkg_apis_pipeline_v1beta1_ParamValue(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.Pipeline": schema_pkg_apis_pipeline_v1beta1_Pipeline(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.PipelineDeclaredResource": schema_pkg_apis_pipeline_v1beta1_PipelineDeclaredResource(ref), "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.PipelineList": schema_pkg_apis_pipeline_v1beta1_PipelineList(ref), @@ -379,69 +379,6 @@ func schema_pkg_apis_pipeline_pod_Template(ref common.ReferenceCallback) common. } } -func schema_pkg_apis_pipeline_v1beta1_ArrayOrString(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ArrayOrString is a type that can hold a single string or string array. Used in JSON unmarshalling so that a single JSON field can accept either an individual string or an array of strings. consideration the object case after the community reaches an agreement on it.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - "stringVal": { - SchemaProps: spec.SchemaProps{ - Description: "Represents the stored type of ArrayOrString.", - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - "arrayVal": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-list-type": "atomic", - }, - }, - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "objectVal": { - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"type", "stringVal", "arrayVal", "objectVal"}, - }, - }, - } -} - func schema_pkg_apis_pipeline_v1beta1_ChildStatusReference(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -913,7 +850,7 @@ func schema_pkg_apis_pipeline_v1beta1_Param(ref common.ReferenceCallback) common return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ - Description: "Param declares an ArrayOrString to use for the parameter called name.", + Description: "Param declares an ParamValues to use for the parameter called name.", Type: []string{"object"}, Properties: map[string]spec.Schema{ "name": { @@ -926,7 +863,7 @@ func schema_pkg_apis_pipeline_v1beta1_Param(ref common.ReferenceCallback) common "value": { SchemaProps: spec.SchemaProps{ Default: map[string]interface{}{}, - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"), }, }, }, @@ -934,7 +871,7 @@ func schema_pkg_apis_pipeline_v1beta1_Param(ref common.ReferenceCallback) common }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"}, } } @@ -985,7 +922,7 @@ func schema_pkg_apis_pipeline_v1beta1_ParamSpec(ref common.ReferenceCallback) co "default": { SchemaProps: spec.SchemaProps{ Description: "Default is the value a parameter takes if no input value is supplied. If default is set, a Task may be executed without a supplied value for the parameter.", - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"), }, }, }, @@ -993,7 +930,70 @@ func schema_pkg_apis_pipeline_v1beta1_ParamSpec(ref common.ReferenceCallback) co }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString", "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.PropertySpec"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue", "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.PropertySpec"}, + } +} + +func schema_pkg_apis_pipeline_v1beta1_ParamValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResultValue is a type alias of ParamValue", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "stringVal": { + SchemaProps: spec.SchemaProps{ + Description: "Represents the stored type of ParamValues.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "arrayVal": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "objectVal": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"type", "stringVal", "arrayVal", "objectVal"}, + }, + }, } } @@ -1294,7 +1294,7 @@ func schema_pkg_apis_pipeline_v1beta1_PipelineResult(ref common.ReferenceCallbac SchemaProps: spec.SchemaProps{ Description: "Value the expression used to retrieve the value", Default: map[string]interface{}{}, - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"), }, }, }, @@ -1302,7 +1302,7 @@ func schema_pkg_apis_pipeline_v1beta1_PipelineResult(ref common.ReferenceCallbac }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"}, } } @@ -1420,7 +1420,7 @@ func schema_pkg_apis_pipeline_v1beta1_PipelineRunResult(ref common.ReferenceCall SchemaProps: spec.SchemaProps{ Description: "Value is the result returned from the execution of this PipelineRun", Default: map[string]interface{}{}, - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"), }, }, }, @@ -1428,7 +1428,7 @@ func schema_pkg_apis_pipeline_v1beta1_PipelineRunResult(ref common.ReferenceCall }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"}, } } @@ -4363,7 +4363,7 @@ func schema_pkg_apis_pipeline_v1beta1_TaskRunResult(ref common.ReferenceCallback SchemaProps: spec.SchemaProps{ Description: "Value the given value of the result", Default: map[string]interface{}{}, - Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"), + Ref: ref("github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"), }, }, }, @@ -4371,7 +4371,7 @@ func schema_pkg_apis_pipeline_v1beta1_TaskRunResult(ref common.ReferenceCallback }, }, Dependencies: []string{ - "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ArrayOrString"}, + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.ParamValue"}, } } diff --git a/pkg/apis/pipeline/v1beta1/param_conversion.go b/pkg/apis/pipeline/v1beta1/param_conversion.go index f6885b228e1..c0594f9c6d8 100644 --- a/pkg/apis/pipeline/v1beta1/param_conversion.go +++ b/pkg/apis/pipeline/v1beta1/param_conversion.go @@ -19,7 +19,7 @@ func (p ParamSpec) convertTo(ctx context.Context, sink *v1.ParamSpec) { } sink.Properties = properties if p.Default != nil { - sink.Default = &v1.ArrayOrString{ + sink.Default = &v1.ParamValue{ Type: v1.ParamType(p.Default.Type), StringVal: p.Default.StringVal, ArrayVal: p.Default.ArrayVal, ObjectVal: p.Default.ObjectVal, } @@ -39,7 +39,7 @@ func (p *ParamSpec) convertFrom(ctx context.Context, source v1.ParamSpec) { } p.Properties = properties if source.Default != nil { - p.Default = &ArrayOrString{ + p.Default = &ParamValue{ Type: ParamType(source.Default.Type), StringVal: source.Default.StringVal, ArrayVal: source.Default.ArrayVal, ObjectVal: source.Default.ObjectVal, } @@ -48,28 +48,28 @@ func (p *ParamSpec) convertFrom(ctx context.Context, source v1.ParamSpec) { func (p Param) convertTo(ctx context.Context, sink *v1.Param) { sink.Name = p.Name - newValue := v1.ArrayOrString{} + newValue := v1.ParamValue{} p.Value.convertTo(ctx, &newValue) sink.Value = newValue } func (p *Param) convertFrom(ctx context.Context, source v1.Param) { p.Name = source.Name - newValue := ArrayOrString{} + newValue := ParamValue{} newValue.convertFrom(ctx, source.Value) p.Value = newValue } -func (aos ArrayOrString) convertTo(ctx context.Context, sink *v1.ArrayOrString) { - sink.Type = v1.ParamType(aos.Type) - sink.StringVal = aos.StringVal - sink.ArrayVal = aos.ArrayVal - sink.ObjectVal = aos.ObjectVal +func (v ParamValue) convertTo(ctx context.Context, sink *v1.ParamValue) { + sink.Type = v1.ParamType(v.Type) + sink.StringVal = v.StringVal + sink.ArrayVal = v.ArrayVal + sink.ObjectVal = v.ObjectVal } -func (aos *ArrayOrString) convertFrom(ctx context.Context, source v1.ArrayOrString) { - aos.Type = ParamType(source.Type) - aos.StringVal = source.StringVal - aos.ArrayVal = source.ArrayVal - aos.ObjectVal = source.ObjectVal +func (v *ParamValue) convertFrom(ctx context.Context, source v1.ParamValue) { + v.Type = ParamType(source.Type) + v.StringVal = source.StringVal + v.ArrayVal = source.ArrayVal + v.ObjectVal = source.ObjectVal } diff --git a/pkg/apis/pipeline/v1beta1/param_types.go b/pkg/apis/pipeline/v1beta1/param_types.go index 23e71a52ef4..631d080d689 100644 --- a/pkg/apis/pipeline/v1beta1/param_types.go +++ b/pkg/apis/pipeline/v1beta1/param_types.go @@ -52,7 +52,7 @@ type ParamSpec struct { // default is set, a Task may be executed without a supplied value for the // parameter. // +optional - Default *ArrayOrString `json:"default,omitempty"` + Default *ParamValue `json:"default,omitempty"` } // PropertySpec defines the struct for object keys @@ -104,10 +104,10 @@ func (pp *ParamSpec) setDefaultsForProperties() { // the specific context of PipelineResources. type ResourceParam = resource.ResourceParam -// Param declares an ArrayOrString to use for the parameter called name. +// Param declares an ParamValues to use for the parameter called name. type Param struct { - Name string `json:"name"` - Value ArrayOrString `json:"value"` + Name string `json:"name"` + Value ParamValue `json:"value"` } // ParamType indicates the type of an input parameter; @@ -124,27 +124,28 @@ const ( // AllParamTypes can be used for ParamType validation. var AllParamTypes = []ParamType{ParamTypeString, ParamTypeArray, ParamTypeObject} -// ArrayOrString is modeled after IntOrString in kubernetes/apimachinery: +// ParamValues is modeled after IntOrString in kubernetes/apimachinery: -// ArrayOrString is a type that can hold a single string or string array. +// ParamValue is a type that can hold a single string or string array. // Used in JSON unmarshalling so that a single JSON field can accept // either an individual string or an array of strings. -// TODO (@chuangw6): This struct will be renamed or be embedded in a new struct to take into -// consideration the object case after the community reaches an agreement on it. -type ArrayOrString struct { - Type ParamType `json:"type"` // Represents the stored type of ArrayOrString. +type ParamValue struct { + Type ParamType `json:"type"` // Represents the stored type of ParamValues. StringVal string `json:"stringVal"` // +listType=atomic ArrayVal []string `json:"arrayVal"` ObjectVal map[string]string `json:"objectVal"` } +// ArrayOrString is deprecated, this is to keep backward compatibility +type ArrayOrString = ParamValue + // UnmarshalJSON implements the json.Unmarshaller interface. -func (arrayOrString *ArrayOrString) UnmarshalJSON(value []byte) error { - // ArrayOrString is used for Results Value as well, the results can be any kind of +func (paramValues *ParamValue) UnmarshalJSON(value []byte) error { + // ParamValues is used for Results Value as well, the results can be any kind of // data so we need to check if it is empty. if len(value) == 0 { - arrayOrString.Type = ParamTypeString + paramValues.Type = ParamTypeString return nil } if value[0] == '[' { @@ -155,8 +156,8 @@ func (arrayOrString *ArrayOrString) UnmarshalJSON(value []byte) error { // if failed to unmarshal to array, we will convert the value to string and marshal it to string var a []string if err := json.Unmarshal(value, &a); err == nil { - arrayOrString.Type = ParamTypeArray - arrayOrString.ArrayVal = a + paramValues.Type = ParamTypeArray + paramValues.ArrayVal = a return nil } } @@ -164,65 +165,65 @@ func (arrayOrString *ArrayOrString) UnmarshalJSON(value []byte) error { // if failed to unmarshal to map, we will convert the value to string and marshal it to string var m map[string]string if err := json.Unmarshal(value, &m); err == nil { - arrayOrString.Type = ParamTypeObject - arrayOrString.ObjectVal = m + paramValues.Type = ParamTypeObject + paramValues.ObjectVal = m return nil } } // By default we unmarshal to string - arrayOrString.Type = ParamTypeString - if err := json.Unmarshal(value, &arrayOrString.StringVal); err == nil { + paramValues.Type = ParamTypeString + if err := json.Unmarshal(value, ¶mValues.StringVal); err == nil { return nil } - arrayOrString.StringVal = string(value) + paramValues.StringVal = string(value) return nil } // MarshalJSON implements the json.Marshaller interface. -func (arrayOrString ArrayOrString) MarshalJSON() ([]byte, error) { - switch arrayOrString.Type { +func (paramValues ParamValue) MarshalJSON() ([]byte, error) { + switch paramValues.Type { case ParamTypeString: - return json.Marshal(arrayOrString.StringVal) + return json.Marshal(paramValues.StringVal) case ParamTypeArray: - return json.Marshal(arrayOrString.ArrayVal) + return json.Marshal(paramValues.ArrayVal) case ParamTypeObject: - return json.Marshal(arrayOrString.ObjectVal) + return json.Marshal(paramValues.ObjectVal) default: - return []byte{}, fmt.Errorf("impossible ArrayOrString.Type: %q", arrayOrString.Type) + return []byte{}, fmt.Errorf("impossible ParamValues.Type: %q", paramValues.Type) } } -// ApplyReplacements applyes replacements for ArrayOrString type -func (arrayOrString *ArrayOrString) ApplyReplacements(stringReplacements map[string]string, arrayReplacements map[string][]string, objectReplacements map[string]map[string]string) { - switch arrayOrString.Type { +// ApplyReplacements applyes replacements for ParamValues type +func (paramValues *ParamValue) ApplyReplacements(stringReplacements map[string]string, arrayReplacements map[string][]string, objectReplacements map[string]map[string]string) { + switch paramValues.Type { case ParamTypeArray: newArrayVal := []string{} - for _, v := range arrayOrString.ArrayVal { + for _, v := range paramValues.ArrayVal { newArrayVal = append(newArrayVal, substitution.ApplyArrayReplacements(v, stringReplacements, arrayReplacements)...) } - arrayOrString.ArrayVal = newArrayVal + paramValues.ArrayVal = newArrayVal case ParamTypeObject: newObjectVal := map[string]string{} - for k, v := range arrayOrString.ObjectVal { + for k, v := range paramValues.ObjectVal { newObjectVal[k] = substitution.ApplyReplacements(v, stringReplacements) } - arrayOrString.ObjectVal = newObjectVal + paramValues.ObjectVal = newObjectVal default: - arrayOrString.applyOrCorrect(stringReplacements, arrayReplacements, objectReplacements) + paramValues.applyOrCorrect(stringReplacements, arrayReplacements, objectReplacements) } } // applyOrCorrect deals with string param whose value can be string literal or a reference to a string/array/object param/result. -// If the value of arrayOrString is a reference to array or object, the type will be corrected from string to array/object. -func (arrayOrString *ArrayOrString) applyOrCorrect(stringReplacements map[string]string, arrayReplacements map[string][]string, objectReplacements map[string]map[string]string) { - stringVal := arrayOrString.StringVal +// If the value of paramValues is a reference to array or object, the type will be corrected from string to array/object. +func (paramValues *ParamValue) applyOrCorrect(stringReplacements map[string]string, arrayReplacements map[string][]string, objectReplacements map[string]map[string]string) { + stringVal := paramValues.StringVal // if the stringVal is a string literal or a string that mixed with var references // just do the normal string replacement if !exactVariableSubstitutionRegex.MatchString(stringVal) { - arrayOrString.StringVal = substitution.ApplyReplacements(arrayOrString.StringVal, stringReplacements) + paramValues.StringVal = substitution.ApplyReplacements(paramValues.StringVal, stringReplacements) return } @@ -232,42 +233,45 @@ func (arrayOrString *ArrayOrString) applyOrCorrect(stringReplacements map[string // if the stringVal is a reference to a string param if _, ok := stringReplacements[trimedStringVal]; ok { - arrayOrString.StringVal = substitution.ApplyReplacements(arrayOrString.StringVal, stringReplacements) + paramValues.StringVal = substitution.ApplyReplacements(paramValues.StringVal, stringReplacements) } // if the stringVal is a reference to an array param, we need to change the type other than apply replacement if _, ok := arrayReplacements[trimedStringVal]; ok { - arrayOrString.StringVal = "" - arrayOrString.ArrayVal = substitution.ApplyArrayReplacements(stringVal, stringReplacements, arrayReplacements) - arrayOrString.Type = ParamTypeArray + paramValues.StringVal = "" + paramValues.ArrayVal = substitution.ApplyArrayReplacements(stringVal, stringReplacements, arrayReplacements) + paramValues.Type = ParamTypeArray } // if the stringVal is a reference an object param, we need to change the type other than apply replacement if _, ok := objectReplacements[trimedStringVal]; ok { - arrayOrString.StringVal = "" - arrayOrString.ObjectVal = objectReplacements[trimedStringVal] - arrayOrString.Type = ParamTypeObject + paramValues.StringVal = "" + paramValues.ObjectVal = objectReplacements[trimedStringVal] + paramValues.Type = ParamTypeObject } } -// NewArrayOrString creates an ArrayOrString of type ParamTypeString or ParamTypeArray, based on +// NewStructuredValues creates an ParamValues of type ParamTypeString or ParamTypeArray, based on // how many inputs are given (>1 input will create an array, not string). -func NewArrayOrString(value string, values ...string) *ArrayOrString { +func NewStructuredValues(value string, values ...string) *ParamValue { if len(values) > 0 { - return &ArrayOrString{ + return &ParamValue{ Type: ParamTypeArray, ArrayVal: append([]string{value}, values...), } } - return &ArrayOrString{ + return &ParamValue{ Type: ParamTypeString, StringVal: value, } } -// NewObject creates an ArrayOrString of type ParamTypeObject using the provided key-value pairs -func NewObject(pairs map[string]string) *ArrayOrString { - return &ArrayOrString{ +// NewArrayOrString is the deprecated, this is to keep backward compatibility +var NewArrayOrString = NewStructuredValues + +// NewObject creates an ParamValues of type ParamTypeObject using the provided key-value pairs +func NewObject(pairs map[string]string) *ParamValue { + return &ParamValue{ Type: ParamTypeObject, ObjectVal: pairs, } diff --git a/pkg/apis/pipeline/v1beta1/param_types_test.go b/pkg/apis/pipeline/v1beta1/param_types_test.go index fe437e42cad..cd1cccff074 100644 --- a/pkg/apis/pipeline/v1beta1/param_types_test.go +++ b/pkg/apis/pipeline/v1beta1/param_types_test.go @@ -46,14 +46,14 @@ func TestParamSpec_SetDefaults(t *testing.T) { name: "inferred type from default value - array", before: &v1beta1.ParamSpec{ Name: "parametername", - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ ArrayVal: []string{"array"}, }, }, defaultsApplied: &v1beta1.ParamSpec{ Name: "parametername", Type: v1beta1.ParamTypeArray, - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ ArrayVal: []string{"array"}, }, }, @@ -61,14 +61,14 @@ func TestParamSpec_SetDefaults(t *testing.T) { name: "inferred type from default value - string", before: &v1beta1.ParamSpec{ Name: "parametername", - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ StringVal: "an", }, }, defaultsApplied: &v1beta1.ParamSpec{ Name: "parametername", Type: v1beta1.ParamTypeString, - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ StringVal: "an", }, }, @@ -76,14 +76,14 @@ func TestParamSpec_SetDefaults(t *testing.T) { name: "inferred type from default value - object", before: &v1beta1.ParamSpec{ Name: "parametername", - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ ObjectVal: map[string]string{"url": "test", "path": "test"}, }, }, defaultsApplied: &v1beta1.ParamSpec{ Name: "parametername", Type: v1beta1.ParamTypeObject, - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ ObjectVal: map[string]string{"url": "test", "path": "test"}, }, }, @@ -115,7 +115,7 @@ func TestParamSpec_SetDefaults(t *testing.T) { Name: "parametername", Type: v1beta1.ParamTypeArray, Description: "a description", - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ ArrayVal: []string{"array"}, }, }, @@ -123,7 +123,7 @@ func TestParamSpec_SetDefaults(t *testing.T) { Name: "parametername", Type: v1beta1.ParamTypeArray, Description: "a description", - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ ArrayVal: []string{"array"}, }, }, @@ -133,7 +133,7 @@ func TestParamSpec_SetDefaults(t *testing.T) { Name: "parametername", Type: v1beta1.ParamTypeObject, Description: "a description", - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ ObjectVal: map[string]string{"url": "test", "path": "test"}, }, }, @@ -141,7 +141,7 @@ func TestParamSpec_SetDefaults(t *testing.T) { Name: "parametername", Type: v1beta1.ParamTypeObject, Description: "a description", - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ ObjectVal: map[string]string{"url": "test", "path": "test"}, }, }, @@ -157,9 +157,9 @@ func TestParamSpec_SetDefaults(t *testing.T) { } } -func TestArrayOrString_ApplyReplacements(t *testing.T) { +func TestParamValues_ApplyReplacements(t *testing.T) { type args struct { - input *v1beta1.ArrayOrString + input *v1beta1.ParamValue stringReplacements map[string]string arrayReplacements map[string][]string objectReplacements map[string]map[string]string @@ -167,87 +167,87 @@ func TestArrayOrString_ApplyReplacements(t *testing.T) { tests := []struct { name string args args - expectedOutput *v1beta1.ArrayOrString + expectedOutput *v1beta1.ParamValue }{{ name: "no replacements on array", args: args{ - input: v1beta1.NewArrayOrString("an", "array"), + input: v1beta1.NewStructuredValues("an", "array"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"sdf", "sdfsd"}}, }, - expectedOutput: v1beta1.NewArrayOrString("an", "array"), + expectedOutput: v1beta1.NewStructuredValues("an", "array"), }, { name: "single string replacement on string", args: args{ - input: v1beta1.NewArrayOrString("$(params.myString1)"), + input: v1beta1.NewStructuredValues("$(params.myString1)"), stringReplacements: map[string]string{"params.myString1": "value1", "params.myString2": "value2"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"asdf", "sdfsd"}}, }, - expectedOutput: v1beta1.NewArrayOrString("value1"), + expectedOutput: v1beta1.NewStructuredValues("value1"), }, { name: "multiple string replacements on string", args: args{ - input: v1beta1.NewArrayOrString("astring$(some) asdf $(anotherkey)"), + input: v1beta1.NewStructuredValues("astring$(some) asdf $(anotherkey)"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"asdf", "sdfsd"}}, }, - expectedOutput: v1beta1.NewArrayOrString("astringvalue asdf value"), + expectedOutput: v1beta1.NewStructuredValues("astringvalue asdf value"), }, { name: "single array replacement", args: args{ - input: v1beta1.NewArrayOrString("firstvalue", "$(arraykey)", "lastvalue"), + input: v1beta1.NewStructuredValues("firstvalue", "$(arraykey)", "lastvalue"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"asdf", "sdfsd"}}, }, - expectedOutput: v1beta1.NewArrayOrString("firstvalue", "array", "value", "lastvalue"), + expectedOutput: v1beta1.NewStructuredValues("firstvalue", "array", "value", "lastvalue"), }, { name: "multiple array replacement", args: args{ - input: v1beta1.NewArrayOrString("firstvalue", "$(arraykey)", "lastvalue", "$(sdfdf)"), + input: v1beta1.NewStructuredValues("firstvalue", "$(arraykey)", "lastvalue", "$(sdfdf)"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {"array", "value"}, "sdfdf": {"asdf", "sdfsd"}}, }, - expectedOutput: v1beta1.NewArrayOrString("firstvalue", "array", "value", "lastvalue", "asdf", "sdfsd"), + expectedOutput: v1beta1.NewStructuredValues("firstvalue", "array", "value", "lastvalue", "asdf", "sdfsd"), }, { name: "empty array replacement without extra elements", args: args{ - input: v1beta1.NewArrayOrString("$(arraykey)"), + input: v1beta1.NewStructuredValues("$(arraykey)"), arrayReplacements: map[string][]string{"arraykey": {}}, }, - expectedOutput: &v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{}}, + expectedOutput: &v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{}}, }, { name: "empty array replacement with extra elements", args: args{ - input: v1beta1.NewArrayOrString("firstvalue", "$(arraykey)", "lastvalue"), + input: v1beta1.NewStructuredValues("firstvalue", "$(arraykey)", "lastvalue"), stringReplacements: map[string]string{"some": "value", "anotherkey": "value"}, arrayReplacements: map[string][]string{"arraykey": {}}, }, - expectedOutput: v1beta1.NewArrayOrString("firstvalue", "lastvalue"), + expectedOutput: v1beta1.NewStructuredValues("firstvalue", "lastvalue"), }, { name: "array replacement on string val", args: args{ - input: v1beta1.NewArrayOrString("$(params.myarray)"), + input: v1beta1.NewStructuredValues("$(params.myarray)"), arrayReplacements: map[string][]string{"params.myarray": {"a", "b", "c"}}, }, - expectedOutput: v1beta1.NewArrayOrString("a", "b", "c"), + expectedOutput: v1beta1.NewStructuredValues("a", "b", "c"), }, { name: "array star replacement on string val", args: args{ - input: v1beta1.NewArrayOrString("$(params.myarray[*])"), + input: v1beta1.NewStructuredValues("$(params.myarray[*])"), arrayReplacements: map[string][]string{"params.myarray": {"a", "b", "c"}}, }, - expectedOutput: v1beta1.NewArrayOrString("a", "b", "c"), + expectedOutput: v1beta1.NewStructuredValues("a", "b", "c"), }, { name: "array indexing replacement on string val", args: args{ - input: v1beta1.NewArrayOrString("$(params.myarray[0])"), + input: v1beta1.NewStructuredValues("$(params.myarray[0])"), stringReplacements: map[string]string{"params.myarray[0]": "a", "params.myarray[1]": "b"}, }, - expectedOutput: v1beta1.NewArrayOrString("a"), + expectedOutput: v1beta1.NewStructuredValues("a"), }, { name: "object replacement on string val", args: args{ - input: v1beta1.NewArrayOrString("$(params.object)"), + input: v1beta1.NewStructuredValues("$(params.object)"), objectReplacements: map[string]map[string]string{ "params.object": { "url": "abc.com", @@ -262,7 +262,7 @@ func TestArrayOrString_ApplyReplacements(t *testing.T) { }, { name: "object star replacement on string val", args: args{ - input: v1beta1.NewArrayOrString("$(params.object[*])"), + input: v1beta1.NewStructuredValues("$(params.object[*])"), objectReplacements: map[string]map[string]string{ "params.object": { "url": "abc.com", @@ -301,46 +301,46 @@ func TestArrayOrString_ApplyReplacements(t *testing.T) { } } -type ArrayOrStringHolder struct { - AOrS v1beta1.ArrayOrString `json:"val"` +type ParamValuesHolder struct { + AOrS v1beta1.ParamValue `json:"val"` } -func TestArrayOrString_UnmarshalJSON(t *testing.T) { +func TestParamValues_UnmarshalJSON(t *testing.T) { cases := []struct { input map[string]interface{} - result v1beta1.ArrayOrString + result v1beta1.ParamValue }{ { input: map[string]interface{}{"val": 123}, - result: *v1beta1.NewArrayOrString("123"), + result: *v1beta1.NewStructuredValues("123"), }, { input: map[string]interface{}{"val": "123"}, - result: *v1beta1.NewArrayOrString("123"), + result: *v1beta1.NewStructuredValues("123"), }, { input: map[string]interface{}{"val": ""}, - result: *v1beta1.NewArrayOrString(""), + result: *v1beta1.NewStructuredValues(""), }, { input: map[string]interface{}{"val": nil}, - result: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, ArrayVal: nil}, + result: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, ArrayVal: nil}, }, { input: map[string]interface{}{"val": []string{}}, - result: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{}}, + result: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{}}, }, { input: map[string]interface{}{"val": []string{"oneelement"}}, - result: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"oneelement"}}, + result: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"oneelement"}}, }, { input: map[string]interface{}{"val": []string{"multiple", "elements"}}, - result: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"multiple", "elements"}}, + result: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"multiple", "elements"}}, }, { input: map[string]interface{}{"val": map[string]string{"key1": "val1", "key2": "val2"}}, - result: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeObject, ObjectVal: map[string]string{"key1": "val1", "key2": "val2"}}, + result: v1beta1.ParamValue{Type: v1beta1.ParamTypeObject, ObjectVal: map[string]string{"key1": "val1", "key2": "val2"}}, }, } @@ -358,7 +358,7 @@ func TestArrayOrString_UnmarshalJSON(t *testing.T) { t.Fatalf("error encoding json: %v", err) } - var result ArrayOrStringHolder + var result ParamValuesHolder if err := json.Unmarshal(b.Bytes(), &result); err != nil { t.Errorf("Failed to unmarshal input '%v': %v", c.input, err) } @@ -369,33 +369,33 @@ func TestArrayOrString_UnmarshalJSON(t *testing.T) { } } -func TestArrayOrString_UnmarshalJSON_Directly(t *testing.T) { +func TestParamValues_UnmarshalJSON_Directly(t *testing.T) { cases := []struct { desc string input string - expected v1beta1.ArrayOrString + expected v1beta1.ParamValue }{ - {desc: "empty value", input: ``, expected: *v1beta1.NewArrayOrString("")}, - {desc: "int value", input: `1`, expected: *v1beta1.NewArrayOrString("1")}, - {desc: "int array", input: `[1,2,3]`, expected: *v1beta1.NewArrayOrString("[1,2,3]")}, - {desc: "nested array", input: `[1,\"2\",3]`, expected: *v1beta1.NewArrayOrString(`[1,\"2\",3]`)}, - {desc: "string value", input: `hello`, expected: *v1beta1.NewArrayOrString("hello")}, - {desc: "array value", input: `["hello","world"]`, expected: *v1beta1.NewArrayOrString("hello", "world")}, + {desc: "empty value", input: ``, expected: *v1beta1.NewStructuredValues("")}, + {desc: "int value", input: `1`, expected: *v1beta1.NewStructuredValues("1")}, + {desc: "int array", input: `[1,2,3]`, expected: *v1beta1.NewStructuredValues("[1,2,3]")}, + {desc: "nested array", input: `[1,\"2\",3]`, expected: *v1beta1.NewStructuredValues(`[1,\"2\",3]`)}, + {desc: "string value", input: `hello`, expected: *v1beta1.NewStructuredValues("hello")}, + {desc: "array value", input: `["hello","world"]`, expected: *v1beta1.NewStructuredValues("hello", "world")}, {desc: "object value", input: `{"hello":"world"}`, expected: *v1beta1.NewObject(map[string]string{"hello": "world"})}, } for _, c := range cases { - aos := v1beta1.ArrayOrString{} - if err := aos.UnmarshalJSON([]byte(c.input)); err != nil { + v := v1beta1.ParamValue{} + if err := v.UnmarshalJSON([]byte(c.input)); err != nil { t.Errorf("Failed to unmarshal input '%v': %v", c.input, err) } - if !reflect.DeepEqual(aos, c.expected) { - t.Errorf("Failed to unmarshal input '%v': expected %+v, got %+v", c.input, c.expected, aos) + if !reflect.DeepEqual(v, c.expected) { + t.Errorf("Failed to unmarshal input '%v': expected %+v, got %+v", c.input, c.expected, v) } } } -func TestArrayOrString_UnmarshalJSON_Error(t *testing.T) { +func TestParamValues_UnmarshalJSON_Error(t *testing.T) { cases := []struct { desc string input string @@ -405,26 +405,26 @@ func TestArrayOrString_UnmarshalJSON_Error(t *testing.T) { } for _, c := range cases { - var result ArrayOrStringHolder + var result ParamValuesHolder if err := json.Unmarshal([]byte(c.input), &result); err == nil { t.Errorf("Should return err but got nil '%v'", c.input) } } } -func TestArrayOrString_MarshalJSON(t *testing.T) { +func TestParamValues_MarshalJSON(t *testing.T) { cases := []struct { - input v1beta1.ArrayOrString + input v1beta1.ParamValue result string }{ - {*v1beta1.NewArrayOrString("123"), "{\"val\":\"123\"}"}, - {*v1beta1.NewArrayOrString("123", "1234"), "{\"val\":[\"123\",\"1234\"]}"}, - {*v1beta1.NewArrayOrString("a", "a", "a"), "{\"val\":[\"a\",\"a\",\"a\"]}"}, + {*v1beta1.NewStructuredValues("123"), "{\"val\":\"123\"}"}, + {*v1beta1.NewStructuredValues("123", "1234"), "{\"val\":[\"123\",\"1234\"]}"}, + {*v1beta1.NewStructuredValues("a", "a", "a"), "{\"val\":[\"a\",\"a\",\"a\"]}"}, {*v1beta1.NewObject(map[string]string{"key1": "var1", "key2": "var2"}), "{\"val\":{\"key1\":\"var1\",\"key2\":\"var2\"}}"}, } for _, c := range cases { - input := ArrayOrStringHolder{c.input} + input := ParamValuesHolder{c.input} result, err := json.Marshal(&input) if err != nil { t.Errorf("Failed to marshal input '%v': %v", input, err) @@ -453,3 +453,34 @@ func TestArrayReference(t *testing.T) { } } } + +func TestArrayOrString(t *testing.T) { + tests := []struct { + name string + inputA string + inputB string + expected *v1beta1.ParamValue + }{{ + name: "string", + inputA: "astring", + inputB: "", + expected: &v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "astring"}, + }, { + name: "array", + inputA: "astring", + inputB: "bstring", + expected: &v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"astring", "bstring"}}, + }} + for _, tt := range tests { + expected := &v1beta1.ArrayOrString{} + if tt.inputB == "" { + expected = v1beta1.NewArrayOrString(tt.inputA) + } else { + expected = v1beta1.NewArrayOrString(tt.inputA, tt.inputB) + } + + if d := cmp.Diff(expected, tt.expected); d != "" { + t.Errorf(diff.PrintWantGot(d)) + } + } +} diff --git a/pkg/apis/pipeline/v1beta1/pipeline_conversion.go b/pkg/apis/pipeline/v1beta1/pipeline_conversion.go index fd324b1e056..d2630e07cb4 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_conversion.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_conversion.go @@ -258,7 +258,7 @@ func (pr PipelineResult) convertTo(ctx context.Context, sink *v1.PipelineResult) sink.Name = pr.Name sink.Type = v1.ResultsType(pr.Type) sink.Description = pr.Description - newValue := v1.ArrayOrString{} + newValue := v1.ParamValue{} pr.Value.convertTo(ctx, &newValue) sink.Value = newValue } @@ -267,7 +267,7 @@ func (pr *PipelineResult) convertFrom(ctx context.Context, source v1.PipelineRes pr.Name = source.Name pr.Type = ResultsType(source.Type) pr.Description = source.Description - newValue := ArrayOrString{} + newValue := ParamValue{} newValue.convertFrom(ctx, source.Value) pr.Value = newValue } diff --git a/pkg/apis/pipeline/v1beta1/pipeline_conversion_test.go b/pkg/apis/pipeline/v1beta1/pipeline_conversion_test.go index f6c3e4f7239..f1c98fe1a02 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_conversion_test.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_conversion_test.go @@ -104,13 +104,13 @@ func TestPipelineConversion(t *testing.T) { RunAfter: []string{"task-1"}, Params: []v1beta1.Param{{ Name: "param-task-1", - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ ArrayVal: []string{"value-task-1"}, }, }}, Matrix: []v1beta1.Param{{ Name: "a-param", - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ Type: v1beta1.ParamTypeArray, ArrayVal: []string{"$(params.baz)", "and", "$(params.foo-is-baz)"}, }, @@ -127,7 +127,7 @@ func TestPipelineConversion(t *testing.T) { Type: v1beta1.ParamTypeString, Description: "My first pipeline param", Properties: map[string]v1beta1.PropertySpec{"foo": {Type: v1beta1.ParamTypeString}}, - Default: v1beta1.NewArrayOrString("bar"), + Default: v1beta1.NewStructuredValues("bar"), }}, Workspaces: []v1beta1.WorkspacePipelineDeclaration{{ Name: "workspace", @@ -138,7 +138,7 @@ func TestPipelineConversion(t *testing.T) { Name: "my-pipeline-result", Type: v1beta1.ResultsTypeObject, Description: "this is my pipeline result", - Value: *v1beta1.NewArrayOrString("foo.bar"), + Value: *v1beta1.NewStructuredValues("foo.bar"), }}, Finally: []v1beta1.PipelineTask{{ Name: "final-task", diff --git a/pkg/apis/pipeline/v1beta1/pipeline_defaults_test.go b/pkg/apis/pipeline/v1beta1/pipeline_defaults_test.go index 6753b3214f9..8e7bff10f2e 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_defaults_test.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_defaults_test.go @@ -86,14 +86,14 @@ func TestPipelineSpec_SetDefaults(t *testing.T) { ps: &v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{{ Name: "string-param", - Default: &v1beta1.ArrayOrString{ + Default: &v1beta1.ParamValue{ StringVal: "foo", }, }}, }, want: &v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{{ - Name: "string-param", Type: v1beta1.ParamTypeString, Default: &v1beta1.ArrayOrString{StringVal: "foo"}, + Name: "string-param", Type: v1beta1.ParamTypeString, Default: &v1beta1.ParamValue{StringVal: "foo"}, }}, }, }, { diff --git a/pkg/apis/pipeline/v1beta1/pipeline_types.go b/pkg/apis/pipeline/v1beta1/pipeline_types.go index ecacac87aea..f994fb0ad81 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_types.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_types.go @@ -133,7 +133,7 @@ type PipelineResult struct { Description string `json:"description"` // Value the expression used to retrieve the value - Value ArrayOrString `json:"value"` + Value ResultValue `json:"value"` } // PipelineTaskMetadata contains the labels or annotations for an EmbeddedTask diff --git a/pkg/apis/pipeline/v1beta1/pipeline_types_test.go b/pkg/apis/pipeline/v1beta1/pipeline_types_test.go index 9ccf4a1b229..70c3c4550c6 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_types_test.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_types_test.go @@ -460,7 +460,7 @@ func TestPipelineTaskList_Deps(t *testing.T) { }, { Name: "task-2", Params: []Param{{ - Value: ArrayOrString{ + Value: ParamValue{ Type: "string", StringVal: "$(tasks.task-1.results.result)", }}, @@ -476,7 +476,7 @@ func TestPipelineTaskList_Deps(t *testing.T) { }, { Name: "task-2", Matrix: []Param{{ - Value: ArrayOrString{ + Value: ParamValue{ Type: ParamTypeArray, ArrayVal: []string{ "$(tasks.task-1.results.result)", @@ -520,7 +520,7 @@ func TestPipelineTaskList_Deps(t *testing.T) { Name: "task-4", RunAfter: []string{"task-1"}, Params: []Param{{ - Value: ArrayOrString{ + Value: ParamValue{ Type: "string", StringVal: "$(tasks.task-3.results.result)", }}, @@ -537,7 +537,7 @@ func TestPipelineTaskList_Deps(t *testing.T) { Name: "task-6", RunAfter: []string{"task-1"}, Matrix: []Param{{ - Value: ArrayOrString{ + Value: ParamValue{ Type: ParamTypeArray, ArrayVal: []string{ "$(tasks.task-2.results.result)", @@ -576,11 +576,11 @@ func TestPipelineTaskList_Deps(t *testing.T) { }}, }, Params: []Param{{ - Value: ArrayOrString{ + Value: ParamValue{ Type: "string", StringVal: "$(tasks.task-2.results.result)", }}, { - Value: ArrayOrString{ + Value: ParamValue{ Type: "string", StringVal: "$(tasks.task-3.results.result)", }}, @@ -594,7 +594,7 @@ func TestPipelineTaskList_Deps(t *testing.T) { }}, }, Params: []Param{{ - Value: ArrayOrString{ + Value: ParamValue{ Type: "string", StringVal: "$(tasks.task-4.results.result)", }}, @@ -617,7 +617,7 @@ func TestPipelineTaskList_Deps(t *testing.T) { }}, }, Params: []Param{{ - Value: ArrayOrString{ + Value: ParamValue{ Type: "string", StringVal: "$(tasks.task-4.results.result)", }}, @@ -632,7 +632,7 @@ func TestPipelineTaskList_Deps(t *testing.T) { Values: []string{"foo"}, }}, Matrix: []Param{{ - Value: ArrayOrString{ + Value: ParamValue{ Type: ParamTypeArray, ArrayVal: []string{ "$(tasks.task-2.results.result)", @@ -757,10 +757,10 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, Params: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }, wantErrs: apis.ErrMultipleOneOf("matrix[foobar]", "params[foobar]"), @@ -769,10 +769,10 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, Params: []Param{{ - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }, }, { @@ -780,9 +780,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeString, StringVal: "foo"}, + Name: "foo", Value: ParamValue{Type: ParamTypeString, StringVal: "foo"}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeString, StringVal: "bar"}, + Name: "bar", Value: ParamValue{Type: ParamTypeString, StringVal: "bar"}, }}, }, wantErrs: &apis.FieldError{ @@ -794,9 +794,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }, }, { @@ -804,7 +804,7 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.foo-task.results.a-result)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.foo-task.results.a-result)"}}, }}, }, }, { @@ -812,9 +812,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "platform", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Name: "platform", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }, { - Name: "browser", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"chrome", "firefox", "safari"}}, + Name: "browser", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"chrome", "firefox", "safari"}}, }}, }, wantErrs: &apis.FieldError{ @@ -826,9 +826,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "platform", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"linux", "mac"}}, + Name: "platform", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"linux", "mac"}}, }, { - Name: "browser", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"chrome", "firefox"}}, + Name: "browser", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"chrome", "firefox"}}, }}, }, }, { @@ -836,9 +836,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }, embeddedStatus: config.FullEmbeddedStatus, @@ -850,9 +850,9 @@ func TestPipelineTask_validateMatrix(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }, embeddedStatus: config.BothEmbeddedStatus, @@ -900,7 +900,7 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo"}}, }}, }, matrixCombinationsCount: 1, @@ -909,9 +909,9 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo"}}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar"}}, + Name: "bar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar"}}, }}, }, matrixCombinationsCount: 1, @@ -920,7 +920,7 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }, matrixCombinationsCount: 2, @@ -929,9 +929,9 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"f", "o", "o"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"f", "o", "o"}}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"b", "a", "r"}}, + Name: "bar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"b", "a", "r"}}, }}, }, matrixCombinationsCount: 9, @@ -940,13 +940,13 @@ func TestPipelineTask_GetMatrixCombinationsCount(t *testing.T) { pt: &PipelineTask{ Name: "task", Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"f", "o", "o"}}, + Name: "foo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"f", "o", "o"}}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"b", "a", "r"}}, + Name: "bar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"b", "a", "r"}}, }, { - Name: "quz", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"q", "u", "x"}}, + Name: "quz", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"q", "u", "x"}}, }, { - Name: "xyzzy", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"x", "y", "z", "z", "y"}}, + Name: "xyzzy", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"x", "y", "z", "z", "y"}}, }}, }, matrixCombinationsCount: 135, diff --git a/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go b/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go index ab5a67ff6fe..a6d25054a56 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_validation_test.go @@ -105,7 +105,7 @@ func TestPipeline_Validate_Success(t *testing.T) { }, Params: []Param{{ Name: "param1", - Value: ArrayOrString{}, + Value: ParamValue{}, }}, Workspaces: []WorkspacePipelineTaskBinding{{ Name: "task-shared-workspace", @@ -117,7 +117,7 @@ func TestPipeline_Validate_Success(t *testing.T) { Name: "param1", Type: ParamType("string"), Description: "this is my param", - Default: &ArrayOrString{ + Default: &ParamValue{ Type: ParamType("string"), StringVal: "pipeline-default", }, @@ -129,7 +129,7 @@ func TestPipeline_Validate_Success(t *testing.T) { Results: []PipelineResult{{ Name: "pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(tasks.my-task.results.my-result)"), + Value: *NewStructuredValues("$(tasks.my-task.results.my-result)"), }}, }, }, @@ -1108,7 +1108,7 @@ func TestValidateParamResults_Success(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.foo) and $(tasks.a-task.results.output)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.foo) and $(tasks.a-task.results.output)"}, }}, }} if err := validateParamResults(tasks); err != nil { @@ -1123,7 +1123,7 @@ func TestValidateParamResults_Failure(t *testing.T) { }, { Name: "b-task", TaskRef: &TaskRef{Name: "b-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.a-task.resultTypo.bResult)"}}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.a-task.resultTypo.bResult)"}}}, }} expectedError := apis.FieldError{ Message: `invalid value: expected all of the expressions [tasks.a-task.resultTypo.bResult] to be result expressions but only [] were`, @@ -1143,11 +1143,11 @@ func TestValidatePipelineResults_Success(t *testing.T) { results := []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(tasks.a-task.results.output)"), + Value: *NewStructuredValues("$(tasks.a-task.results.output)"), }, { Name: "my-pipeline-object-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(tasks.a-task.results.gitrepo.commit)"), + Value: *NewStructuredValues("$(tasks.a-task.results.gitrepo.commit)"), }} if err := validatePipelineResults(results, []PipelineTask{{Name: "a-task"}}, []PipelineTask{}); err != nil { t.Errorf("Pipeline.validatePipelineResults() returned error for valid pipeline: %s: %v", desc, err) @@ -1164,7 +1164,7 @@ func TestValidatePipelineResults_Failure(t *testing.T) { results: []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(tasks.a-task.results.output.key1.extra)"), + Value: *NewStructuredValues("$(tasks.a-task.results.output.key1.extra)"), }}, expectedError: *apis.ErrInvalidValue(`expected all of the expressions [tasks.a-task.results.output.key1.extra] to be result expressions but only [] were`, "results[0].value").Also( apis.ErrInvalidValue("referencing a nonexistent task", "results[0].value")), @@ -1173,7 +1173,7 @@ func TestValidatePipelineResults_Failure(t *testing.T) { results: []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(finally.a-task.results.output.key1.extra)"), + Value: *NewStructuredValues("$(finally.a-task.results.output.key1.extra)"), }}, expectedError: *apis.ErrInvalidValue(`expected all of the expressions [finally.a-task.results.output.key1.extra] to be result expressions but only [] were`, "results[0].value").Also( apis.ErrInvalidValue("referencing a nonexistent task", "results[0].value")), @@ -1182,7 +1182,7 @@ func TestValidatePipelineResults_Failure(t *testing.T) { results: []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("foo.bar"), + Value: *NewStructuredValues("foo.bar"), }}, expectedError: *apis.ErrInvalidValue(`expected pipeline results to be task result expressions but an invalid expressions was found`, "results[0].value").Also( apis.ErrInvalidValue(`expected pipeline results to be task result expressions but no expressions were found`, "results[0].value")).Also( @@ -1192,7 +1192,7 @@ func TestValidatePipelineResults_Failure(t *testing.T) { results: []PipelineResult{{ Name: "my-pipeline-result", Description: "this is my pipeline result", - Value: *NewArrayOrString("$(foo.bar)"), + Value: *NewStructuredValues("$(foo.bar)"), }}, expectedError: *apis.ErrInvalidValue(`expected pipeline results to be task result expressions but an invalid expressions was found`, "results[0].value").Also( apis.ErrInvalidValue("referencing a nonexistent task", "results[0].value")), @@ -1220,7 +1220,7 @@ func TestFinallyTaskResultsToPipelineResults_Success(t *testing.T) { Spec: PipelineSpec{ Results: []PipelineResult{{ Name: "initialized", - Value: *NewArrayOrString("$(tasks.clone-app-repo.results.initialized)"), + Value: *NewStructuredValues("$(tasks.clone-app-repo.results.initialized)"), }}, Tasks: []PipelineTask{{ Name: "clone-app-repo", @@ -1242,7 +1242,7 @@ func TestFinallyTaskResultsToPipelineResults_Success(t *testing.T) { Spec: PipelineSpec{ Results: []PipelineResult{{ Name: "initialized", - Value: *NewArrayOrString("$(finally.check-git-commit.results.init)"), + Value: *NewStructuredValues("$(finally.check-git-commit.results.init)"), }}, Tasks: []PipelineTask{{ Name: "clone-app-repo", @@ -1300,7 +1300,7 @@ func TestFinallyTaskResultsToPipelineResults_Failure(t *testing.T) { Spec: PipelineSpec{ Results: []PipelineResult{{ Name: "initialized", - Value: *NewArrayOrString("$(tasks.check-git-commit.results.init)"), + Value: *NewStructuredValues("$(tasks.check-git-commit.results.init)"), }}, Tasks: []PipelineTask{{ Name: "clone-app-repo", @@ -1339,7 +1339,7 @@ func TestFinallyTaskResultsToPipelineResults_Failure(t *testing.T) { Spec: PipelineSpec{ Results: []PipelineResult{{ Name: "initialized", - Value: *NewArrayOrString("$(finally.nonexistent-task.results.init)"), + Value: *NewStructuredValues("$(finally.nonexistent-task.results.init)"), }}, Tasks: []PipelineTask{{ Name: "clone-app-repo", @@ -1406,7 +1406,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.baz) and $(params.foo-is-baz)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.baz) and $(params.foo-is-baz)"}, }}, }}, }, { @@ -1434,7 +1434,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { params: []ParamSpec{{ Name: "baz", Type: ParamTypeString, }, { - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", @@ -1448,7 +1448,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { }, { name: "valid array parameter variables", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, + Name: "baz", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, }, { Name: "foo-is-baz", Type: ParamTypeArray, }}, @@ -1456,13 +1456,13 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz)", "and", "$(params.foo-is-baz)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz)", "and", "$(params.foo-is-baz)"}}, }}, }}, }, { name: "valid star array parameter variables", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, + Name: "baz", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, }, { Name: "foo-is-baz", Type: ParamTypeArray, }}, @@ -1470,7 +1470,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz[*])", "and", "$(params.foo-is-baz[*])"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz[*])", "and", "$(params.foo-is-baz[*])"}}, }}, }}, }, { @@ -1482,13 +1482,13 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(input.workspace.$(params.baz))"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(input.workspace.$(params.baz))"}, }}, }}, }, { name: "valid array parameter variables in matrix", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, + Name: "baz", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, }, { Name: "foo-is-baz", Type: ParamTypeArray, }}, @@ -1496,13 +1496,13 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz)", "and", "$(params.foo-is-baz)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz)", "and", "$(params.foo-is-baz)"}}, }}, }}, }, { name: "valid star array parameter variables in matrix", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, + Name: "baz", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"some", "default"}}, }, { Name: "foo-is-baz", Type: ParamTypeArray, }}, @@ -1510,7 +1510,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz[*])", "and", "$(params.foo-is-baz[*])"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.baz[*])", "and", "$(params.foo-is-baz[*])"}}, }}, }}, }, { @@ -1523,7 +1523,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param-intended-to-be-array", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myArray[*])"}, + Name: "a-param-intended-to-be-array", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myArray[*])"}, }}, }}, }, { @@ -1540,7 +1540,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-string-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myObject.key1)"}, + Name: "a-string-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myObject.key1)"}, }}, }}, }, { @@ -1557,7 +1557,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-string-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myObject.key1) and $(params.myObject.key2)"}, + Name: "a-string-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myObject.key1) and $(params.myObject.key2)"}, }}, }}, }, { @@ -1574,7 +1574,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "an-array-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.key1)", "another one $(params.myObject.key2)"}}, + Name: "an-array-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.key1)", "another one $(params.myObject.key2)"}}, }}, }}, }, { @@ -1594,7 +1594,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "an-object-param", Value: ArrayOrString{Type: ParamTypeObject, ObjectVal: map[string]string{ + Name: "an-object-param", Value: ParamValue{Type: ParamTypeObject, ObjectVal: map[string]string{ "url": "$(params.myObject.key1)", "commit": "$(params.myString)", }}, @@ -1614,7 +1614,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.key1)", "and", "$(params.myObject.key2)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.key1)", "and", "$(params.myObject.key2)"}}, }}, }}, }, { @@ -1631,7 +1631,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param-intended-to-be-object", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myObject[*])"}, + Name: "a-param-intended-to-be-object", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myObject[*])"}, }}, }}, }, { @@ -1644,7 +1644,7 @@ func TestValidatePipelineParameterVariables_Success(t *testing.T) { "key2": {Type: "string"}, }, }, { - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", @@ -1679,7 +1679,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.does-not-exist)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.does-not-exist)"}, }}, }}, expectedError: apis.FieldError{ @@ -1719,7 +1719,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "invalid string parameter variables in when expression, array reference in input", params: []ParamSpec{{ - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", @@ -1737,7 +1737,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "Invalid array parameter variable in when expression, array reference in input with array notation [*]", params: []ParamSpec{{ - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", @@ -1761,7 +1761,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo-task", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.foo) and $(params.does-not-exist)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.foo) and $(params.does-not-exist)"}, }}, }}, expectedError: apis.FieldError{ @@ -1777,9 +1777,9 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo-task", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.foo)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.foo)"}, }, { - Name: "b-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.does-not-exist)"}, + Name: "b-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.does-not-exist)"}, }}, }}, expectedError: apis.FieldError{ @@ -1802,7 +1802,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "array parameter mismatching default type", params: []ParamSpec{{ - Name: "foo", Type: ParamTypeArray, Default: &ArrayOrString{Type: ParamTypeString, StringVal: "astring"}, + Name: "foo", Type: ParamTypeArray, Default: &ParamValue{Type: ParamTypeString, StringVal: "astring"}, }}, tasks: []PipelineTask{{ Name: "foo", @@ -1815,7 +1815,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "string parameter mismatching default type", params: []ParamSpec{{ - Name: "foo", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "foo", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "foo", @@ -1828,13 +1828,13 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "array parameter used as string", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "baz", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.baz)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.baz)"}, }}, }}, expectedError: apis.FieldError{ @@ -1844,13 +1844,13 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "star array parameter used as string", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "baz", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.baz[*])"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.baz[*])"}, }}, }}, expectedError: apis.FieldError{ @@ -1860,13 +1860,13 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "array parameter string template not isolated", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "baz", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"value: $(params.baz)", "last"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"value: $(params.baz)", "last"}}, }}, }}, expectedError: apis.FieldError{ @@ -1876,13 +1876,13 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { }, { name: "star array parameter string template not isolated", params: []ParamSpec{{ - Name: "baz", Type: ParamTypeString, Default: &ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, + Name: "baz", Type: ParamTypeString, Default: &ParamValue{Type: ParamTypeArray, ArrayVal: []string{"anarray", "elements"}}, }}, tasks: []PipelineTask{{ Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"value: $(params.baz[*])", "last"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"value: $(params.baz[*])", "last"}}, }}, }}, expectedError: apis.FieldError{ @@ -1940,7 +1940,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.does-not-exist)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.does-not-exist)"}}, }}, }}, expectedError: apis.FieldError{ @@ -1956,7 +1956,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo-task", TaskRef: &TaskRef{Name: "foo-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.foo)", "and", "$(params.does-not-exist)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.foo)", "and", "$(params.does-not-exist)"}}, }}, }}, expectedError: apis.FieldError{ @@ -1972,9 +1972,9 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo-task", TaskRef: &TaskRef{Name: "foo-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.foo)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.foo)"}}, }, { - Name: "b-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.does-not-exist)"}}, + Name: "b-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.does-not-exist)"}}, }}, }}, expectedError: apis.FieldError{ @@ -2041,7 +2041,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.non-exist-key)", "last"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.non-exist-key)", "last"}}, }}, }}, expectedError: apis.FieldError{ @@ -2062,7 +2062,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.myObject.non-exist-key)"}, + Name: "a-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.myObject.non-exist-key)"}, }}, }}, expectedError: apis.FieldError{ @@ -2086,7 +2086,7 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "an-object-param", Value: ArrayOrString{Type: ParamTypeObject, ObjectVal: map[string]string{ + Name: "an-object-param", Value: ParamValue{Type: ParamTypeObject, ObjectVal: map[string]string{ "url": "$(params.myObject.non-exist-key)", "commit": "$(params.myString)", }}, @@ -2110,9 +2110,9 @@ func TestValidatePipelineParameterVariables_Failure(t *testing.T) { Name: "foo-task", TaskRef: &TaskRef{Name: "foo-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.key1)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.key1)"}}, }, { - Name: "b-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.non-exist-key)"}}, + Name: "b-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(params.myObject.non-exist-key)"}}, }}, }}, expectedError: apis.FieldError{ @@ -2356,7 +2356,7 @@ func TestValidatePipelineWithFinalTasks_Success(t *testing.T) { Name: "final-task-1", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.non-final-task.results.output)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.non-final-task.results.output)"}, }}, }}, }, @@ -2374,7 +2374,7 @@ func TestValidatePipelineWithFinalTasks_Success(t *testing.T) { Name: "final-task-1", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(context.pipelineRun.name)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(context.pipelineRun.name)"}, }}, }}, }, @@ -2544,7 +2544,7 @@ func TestValidatePipelineWithFinalTasks_Failure(t *testing.T) { Name: "final-task", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "final-param", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(params.foo) and $(params.does-not-exist)"}, + Name: "final-param", Value: ParamValue{Type: ParamTypeString, StringVal: "$(params.foo) and $(params.does-not-exist)"}, }}, }}, }, @@ -2619,7 +2619,7 @@ func TestValidatePipelineWithFinalTasks_Failure(t *testing.T) { Name: "final-task-1", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(context.pipelineRun.missing)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(context.pipelineRun.missing)"}, }}, }}, }, @@ -2737,7 +2737,7 @@ func TestValidateFinalTasks_Failure(t *testing.T) { Name: "final-task-2", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.final-task-1.results.output)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.final-task-1.results.output)"}, }}, }}, expectedError: apis.FieldError{ @@ -2768,7 +2768,7 @@ func TestValidateFinalTasks_Failure(t *testing.T) { Name: "final-task", TaskRef: &TaskRef{Name: "final-task"}, Params: []Param{{ - Name: "param1", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.no-dag-task-1.results.output)"}, + Name: "param1", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.no-dag-task-1.results.output)"}, }}, }}, expectedError: apis.FieldError{ @@ -2799,10 +2799,10 @@ func TestContextValid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipeline.name)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipeline.name)"}, }}, Matrix: []Param{{ - Name: "a-param-mat", Value: ArrayOrString{ArrayVal: []string{"$(context.pipeline.name)"}}, + Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)"}}, }}, }}, }, { @@ -2811,10 +2811,10 @@ func TestContextValid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipelineRun.name)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.name)"}, }}, Matrix: []Param{{ - Name: "a-param-mat", Value: ArrayOrString{ArrayVal: []string{"$(context.pipelineRun.name)"}}, + Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.name)"}}, }}, }}, }, { @@ -2823,10 +2823,10 @@ func TestContextValid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipelineRun.namespace)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.namespace)"}, }}, Matrix: []Param{{ - Name: "a-param-mat", Value: ArrayOrString{ArrayVal: []string{"$(context.pipelineRun.namespace)"}}, + Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.namespace)"}}, }}, }}, }, { @@ -2835,10 +2835,10 @@ func TestContextValid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipelineRun.uid)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.uid)"}, }}, Matrix: []Param{{ - Name: "a-param-mat", Value: ArrayOrString{ArrayVal: []string{"$(context.pipelineRun.uid)"}}, + Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.uid)"}}, }}, }}, }, { @@ -2847,10 +2847,10 @@ func TestContextValid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{ArrayVal: []string{"$(context.pipeline.name)", "and", "$(context.pipelineRun.name)"}}, + Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)", "and", "$(context.pipelineRun.name)"}}, }}, Matrix: []Param{{ - Name: "a-param-mat", Value: ArrayOrString{ArrayVal: []string{"$(context.pipeline.name)", "and", "$(context.pipelineRun.name)"}}, + Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.name)", "and", "$(context.pipelineRun.name)"}}, }}, }}, }, { @@ -2859,10 +2859,10 @@ func TestContextValid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipelineTask.retries)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.retries)"}, }}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipelineTask.retries)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.retries)"}, }}, }}, }, { @@ -2871,10 +2871,10 @@ func TestContextValid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{ArrayVal: []string{"$(context.pipelineTask.retries)"}}, + Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.retries)"}}, }}, Matrix: []Param{{ - Name: "a-param-mat", Value: ArrayOrString{ArrayVal: []string{"$(context.pipelineTask.retries)"}}, + Name: "a-param-mat", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.retries)"}}, }}, }}, }} @@ -2898,10 +2898,10 @@ func TestContextInvalid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipeline.missing)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipeline.missing)"}, }}, Matrix: []Param{{ - Name: "a-param-foo", Value: ArrayOrString{ArrayVal: []string{"$(context.pipeline.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing-foo)"}}, }}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ @@ -2917,10 +2917,10 @@ func TestContextInvalid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipelineRun.missing)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineRun.missing)"}, }}, Matrix: []Param{{ - Name: "a-param-foo", Value: ArrayOrString{ArrayVal: []string{"$(context.pipelineRun.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineRun.missing-foo)"}}, }}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ @@ -2936,10 +2936,10 @@ func TestContextInvalid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{StringVal: "$(context.pipelineTask.missing)"}, + Name: "a-param", Value: ParamValue{StringVal: "$(context.pipelineTask.missing)"}, }}, Matrix: []Param{{ - Name: "a-param-foo", Value: ArrayOrString{ArrayVal: []string{"$(context.pipelineTask.missing-foo)"}}, + Name: "a-param-foo", Value: ParamValue{ArrayVal: []string{"$(context.pipelineTask.missing-foo)"}}, }}, }}, expectedError: *apis.ErrGeneric("").Also(&apis.FieldError{ @@ -2955,10 +2955,10 @@ func TestContextInvalid(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "a-param", Value: ArrayOrString{ArrayVal: []string{"$(context.pipeline.missing)", "$(context.pipelineTask.missing)", "$(context.pipelineRun.missing)"}}, + Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing)", "$(context.pipelineTask.missing)", "$(context.pipelineRun.missing)"}}, }}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{ArrayVal: []string{"$(context.pipeline.missing-foo)", "$(context.pipelineTask.missing-foo)", "$(context.pipelineRun.missing-foo)"}}, + Name: "a-param", Value: ParamValue{ArrayVal: []string{"$(context.pipeline.missing-foo)", "$(context.pipelineTask.missing-foo)", "$(context.pipelineRun.missing-foo)"}}, }}, }}, expectedError: *apis.ErrGeneric(`non-existent variable in "$(context.pipeline.missing)"`, "value"). @@ -2996,9 +2996,9 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "foo-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.foo.status)"}, + Name: "foo-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.foo.status)"}, }, { - Name: "tasks-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.status)"}, + Name: "tasks-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.status)"}, }}, WhenExpressions: WhenExpressions{{ Input: "$(tasks.foo.status)", @@ -3016,7 +3016,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "foo-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.foo.results.status)"}, + Name: "foo-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.foo.results.status)"}, }}, WhenExpressions: WhenExpressions{WhenExpression{ Input: "$(tasks.foo.results.status)", @@ -3033,7 +3033,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "foo-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of foo is $(tasks.foo.status)."}, + Name: "foo-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of foo is $(tasks.foo.status)."}, }}, }}, }, { @@ -3045,7 +3045,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "foo-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of $(tasks.taskname) is $(tasks.foo.status)."}, + Name: "foo-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of $(tasks.taskname) is $(tasks.foo.status)."}, }}, }}, }, { @@ -3054,7 +3054,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "bar-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.bar.status)"}, + Name: "bar-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.bar.status)"}, }}, WhenExpressions: WhenExpressions{WhenExpression{ Input: "$(tasks.bar.status)", @@ -3072,7 +3072,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "tasks-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.status)"}, + Name: "tasks-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.status)"}, }}, }}, expectedError: apis.FieldError{ @@ -3085,7 +3085,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "bar-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of bar is $(tasks.bar.status)"}, + Name: "bar-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of bar is $(tasks.bar.status)"}, }}, }}, expectedError: apis.FieldError{ @@ -3098,7 +3098,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "bar-status", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.bar.status)"}}, + Name: "bar-status", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.bar.status)"}}, }}, }}, expectedError: apis.FieldError{ @@ -3111,7 +3111,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "foo", TaskRef: &TaskRef{Name: "foo-task"}, Params: []Param{{ - Name: "tasks-status", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.status)"}}, + Name: "tasks-status", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.status)"}}, }}, }}, expectedError: apis.FieldError{ @@ -3124,7 +3124,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "notask-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.notask.status)"}, + Name: "notask-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.notask.status)"}, }}, }}, expectedError: apis.FieldError{ @@ -3152,7 +3152,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "notask-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "$(tasks.notask.status)"}, + Name: "notask-status", Value: ParamValue{Type: ParamTypeString, StringVal: "$(tasks.notask.status)"}, }}, }, { Name: "foo", @@ -3173,7 +3173,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "notask-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of notask is $(tasks.notask.status)."}, + Name: "notask-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of notask is $(tasks.notask.status)."}, }}, }}, expectedError: apis.FieldError{ @@ -3186,7 +3186,7 @@ func TestPipelineTasksExecutionStatus(t *testing.T) { Name: "bar", TaskRef: &TaskRef{Name: "bar-task"}, Params: []Param{{ - Name: "notask-status", Value: ArrayOrString{Type: ParamTypeString, StringVal: "Execution status of $(tasks.taskname) is $(tasks.notask.status)."}, + Name: "notask-status", Value: ParamValue{Type: ParamTypeString, StringVal: "Execution status of $(tasks.taskname) is $(tasks.notask.status)."}, }}, }}, expectedError: apis.FieldError{ @@ -3228,7 +3228,7 @@ func TestMatrixIncompatibleAPIVersions(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }}, }, @@ -3244,7 +3244,7 @@ func TestMatrixIncompatibleAPIVersions(t *testing.T) { Name: "b-task", TaskRef: &TaskRef{Name: "b-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }}, }, @@ -3295,10 +3295,10 @@ func Test_validateMatrix(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, Params: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }}, wantErrs: apis.ErrMultipleOneOf("[0].matrix[foobar]", "[0].params[foobar]"), @@ -3308,10 +3308,10 @@ func Test_validateMatrix(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, Params: []Param{{ - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }}, }, { @@ -3320,15 +3320,15 @@ func Test_validateMatrix(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "foo", Value: ArrayOrString{Type: ParamTypeString, StringVal: "foo"}, + Name: "foo", Value: ParamValue{Type: ParamTypeString, StringVal: "foo"}, }, { - Name: "bar", Value: ArrayOrString{Type: ParamTypeString, StringVal: "bar"}, + Name: "bar", Value: ParamValue{Type: ParamTypeString, StringVal: "bar"}, }}, }, { Name: "b-task", TaskRef: &TaskRef{Name: "b-task"}, Matrix: []Param{{ - Name: "baz", Value: ArrayOrString{Type: ParamTypeString, StringVal: "baz"}, + Name: "baz", Value: ParamValue{Type: ParamTypeString, StringVal: "baz"}, }}, }}, wantErrs: &apis.FieldError{ @@ -3341,9 +3341,9 @@ func Test_validateMatrix(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "foobar", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "foobar", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { - Name: "barfoo", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, + Name: "barfoo", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"bar", "foo"}}, }}, }}, }, { @@ -3352,13 +3352,13 @@ func Test_validateMatrix(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.foo-task.results.a-result)"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.foo-task.results.a-result)"}}, }}, }, { Name: "b-task", TaskRef: &TaskRef{Name: "b-task"}, Matrix: []Param{{ - Name: "b-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.bar-task.results.b-result)"}}, + Name: "b-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.bar-task.results.b-result)"}}, }}, }}, }} @@ -3396,13 +3396,13 @@ func Test_validateResultsFromMatrixedPipelineTasksNotConsumed(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }, { Name: "b-task", TaskRef: &TaskRef{Name: "b-task"}, Params: []Param{{ - Name: "b-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.a-task.results.a-result)"}}, + Name: "b-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.a-task.results.a-result)"}}, }}, }}, wantErrs: &apis.FieldError{ @@ -3415,14 +3415,14 @@ func Test_validateResultsFromMatrixedPipelineTasksNotConsumed(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }}, finally: PipelineTaskList{{ Name: "b-task", TaskRef: &TaskRef{Name: "b-task"}, Params: []Param{{ - Name: "b-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.a-task.results.a-result)"}}, + Name: "b-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.a-task.results.a-result)"}}, }}, }}, wantErrs: &apis.FieldError{ @@ -3435,20 +3435,20 @@ func Test_validateResultsFromMatrixedPipelineTasksNotConsumed(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }, { Name: "b-task", TaskRef: &TaskRef{Name: "b-task"}, Params: []Param{{ - Name: "b-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.a-task.results.a-result)"}}, + Name: "b-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.a-task.results.a-result)"}}, }}, }}, finally: PipelineTaskList{{ Name: "c-task", TaskRef: &TaskRef{Name: "c-task"}, Params: []Param{{ - Name: "b-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.a-task.results.a-result)"}}, + Name: "b-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"$(tasks.a-task.results.a-result)"}}, }}, }}, wantErrs: &apis.FieldError{ @@ -3461,7 +3461,7 @@ func Test_validateResultsFromMatrixedPipelineTasksNotConsumed(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }, { Name: "b-task", @@ -3482,7 +3482,7 @@ func Test_validateResultsFromMatrixedPipelineTasksNotConsumed(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }}, finally: PipelineTaskList{{ @@ -3504,7 +3504,7 @@ func Test_validateResultsFromMatrixedPipelineTasksNotConsumed(t *testing.T) { Name: "a-task", TaskRef: &TaskRef{Name: "a-task"}, Matrix: []Param{{ - Name: "a-param", Value: ArrayOrString{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Name: "a-param", Value: ParamValue{Type: ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }}, }, { Name: "b-task", diff --git a/pkg/apis/pipeline/v1beta1/pipelinerun_types.go b/pkg/apis/pipeline/v1beta1/pipelinerun_types.go index 5024e54b5a3..04d771e8bdd 100644 --- a/pkg/apis/pipeline/v1beta1/pipelinerun_types.go +++ b/pkg/apis/pipeline/v1beta1/pipelinerun_types.go @@ -459,7 +459,7 @@ type PipelineRunResult struct { Name string `json:"name"` // Value is the result returned from the execution of this PipelineRun - Value ArrayOrString `json:"value"` + Value ResultValue `json:"value"` } // PipelineRunTaskRunStatus contains the name of the PipelineTask for this TaskRun and the TaskRun's Status diff --git a/pkg/apis/pipeline/v1beta1/pipelinerun_validation_test.go b/pkg/apis/pipeline/v1beta1/pipelinerun_validation_test.go index d6eb2dcbd4f..9794b249aa2 100644 --- a/pkg/apis/pipeline/v1beta1/pipelinerun_validation_test.go +++ b/pkg/apis/pipeline/v1beta1/pipelinerun_validation_test.go @@ -176,7 +176,7 @@ func TestPipelineRun_Validate(t *testing.T) { Name: "echoit", Params: []v1beta1.Param{{ Name: "task-words", - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ ArrayVal: []string{"$(params.pipeline-words)"}, }, }}, diff --git a/pkg/apis/pipeline/v1beta1/result_types.go b/pkg/apis/pipeline/v1beta1/result_types.go index cbdc5404c3e..d71f513c4b3 100644 --- a/pkg/apis/pipeline/v1beta1/result_types.go +++ b/pkg/apis/pipeline/v1beta1/result_types.go @@ -45,16 +45,17 @@ type TaskRunResult struct { Type ResultsType `json:"type,omitempty"` // Value the given value of the result - Value ArrayOrString `json:"value"` + Value ResultValue `json:"value"` } +// ResultValue is a type alias of ParamValue +type ResultValue = ParamValue + // ResultsType indicates the type of a result; // Used to distinguish between a single string and an array of strings. // Note that there is ResultType used to find out whether a // PipelineResourceResult is from a task result or not, which is different from // this ResultsType. -// TODO(#4723): add "array" and "object" support -// TODO(#4723): align ResultsType and ParamType in ArrayOrString type ResultsType string // Valid ResultsType: diff --git a/pkg/apis/pipeline/v1beta1/resultref_test.go b/pkg/apis/pipeline/v1beta1/resultref_test.go index 136d0cdf357..661bf92ab6b 100644 --- a/pkg/apis/pipeline/v1beta1/resultref_test.go +++ b/pkg/apis/pipeline/v1beta1/resultref_test.go @@ -35,7 +35,7 @@ func TestNewResultReference(t *testing.T) { name: "Test valid expression", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask.results.sumResult)"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask", @@ -45,7 +45,7 @@ func TestNewResultReference(t *testing.T) { name: "refer whole array result", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask.results.sumResult[*])"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask.results.sumResult[*])"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask", @@ -55,7 +55,7 @@ func TestNewResultReference(t *testing.T) { name: "Test valid expression with single object result property", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask.results.sumResult.key1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask.results.sumResult.key1)"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask", @@ -66,7 +66,7 @@ func TestNewResultReference(t *testing.T) { name: "refer array indexing result", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask.results.sumResult[1])"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask.results.sumResult[1])"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask", @@ -77,7 +77,7 @@ func TestNewResultReference(t *testing.T) { name: "Test valid expression with multiple object result properties", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask.results.imageresult.digest), and another one $(tasks.sumTask.results.imageresult.tag)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask.results.imageresult.digest), and another one $(tasks.sumTask.results.imageresult.tag)"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask", @@ -92,7 +92,7 @@ func TestNewResultReference(t *testing.T) { name: "substitution within string", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("sum-will-go-here -> $(tasks.sumTask.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("sum-will-go-here -> $(tasks.sumTask.results.sumResult)"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask", @@ -102,7 +102,7 @@ func TestNewResultReference(t *testing.T) { name: "multiple substitution", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask1.results.sumResult) and another $(tasks.sumTask2.results.sumResult), last one $(tasks.sumTask3.results.sumResult.key1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask1.results.sumResult) and another $(tasks.sumTask2.results.sumResult), last one $(tasks.sumTask3.results.sumResult.key1)"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask1", @@ -119,7 +119,7 @@ func TestNewResultReference(t *testing.T) { name: "multiple substitution with param", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(params.param) $(tasks.sumTask1.results.sumResult) and another $(tasks.sumTask2.results.sumResult), last one $(tasks.sumTask3.results.sumResult.key1)"), + Value: *v1beta1.NewStructuredValues("$(params.param) $(tasks.sumTask1.results.sumResult) and another $(tasks.sumTask2.results.sumResult), last one $(tasks.sumTask3.results.sumResult.key1)"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask1", @@ -136,35 +136,35 @@ func TestNewResultReference(t *testing.T) { name: "first separator typo", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(task.sumTasks.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(task.sumTasks.results.sumResult)"), }, want: nil, }, { name: "third separator typo", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTasks.result.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTasks.result.sumResult)"), }, want: nil, }, { name: "more than 5 dot-separated components", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTasks.result.sumResult.key.extra)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTasks.result.sumResult.key.extra)"), }, want: nil, }, { name: "param substitution shouldn't be considered result ref", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(params.paramName)"), + Value: *v1beta1.NewStructuredValues("$(params.paramName)"), }, want: nil, }, { name: "One bad and good result substitution", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("good -> $(tasks.sumTask1.results.sumResult) bad-> $(task.sumTask2.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("good -> $(tasks.sumTask1.results.sumResult) bad-> $(task.sumTask2.results.sumResult)"), }, want: []*v1beta1.ResultRef{{ PipelineTask: "sumTask1", @@ -194,7 +194,7 @@ func TestHasResultReference(t *testing.T) { name: "Test valid expression", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask.results.sumResult)"), }, wantRef: []*v1beta1.ResultRef{{ PipelineTask: "sumTask", @@ -204,7 +204,7 @@ func TestHasResultReference(t *testing.T) { name: "Test valid expression with dashes", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sum-task.results.sum-result)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sum-task.results.sum-result)"), }, wantRef: []*v1beta1.ResultRef{{ PipelineTask: "sum-task", @@ -214,7 +214,7 @@ func TestHasResultReference(t *testing.T) { name: "Test valid expression with underscores", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sum-task.results.sum_result)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sum-task.results.sum_result)"), }, wantRef: []*v1beta1.ResultRef{{ PipelineTask: "sum-task", @@ -224,14 +224,14 @@ func TestHasResultReference(t *testing.T) { name: "Test invalid expression: param substitution shouldn't be considered result ref", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(params.paramName)"), + Value: *v1beta1.NewStructuredValues("$(params.paramName)"), }, wantRef: nil, }, { name: "Test valid expression in array", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask.results.sumResult)", "$(tasks.sumTask2.results.sumResult2)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask.results.sumResult)", "$(tasks.sumTask2.results.sumResult2)"), }, wantRef: []*v1beta1.ResultRef{{ PipelineTask: "sumTask", @@ -244,7 +244,7 @@ func TestHasResultReference(t *testing.T) { name: "Test valid expression in array - no ref in first element", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("1", "$(tasks.sumTask2.results.sumResult2)"), + Value: *v1beta1.NewStructuredValues("1", "$(tasks.sumTask2.results.sumResult2)"), }, wantRef: []*v1beta1.ResultRef{{ PipelineTask: "sumTask2", @@ -301,56 +301,56 @@ func TestLooksLikeResultRef(t *testing.T) { name: "test expression that is a result ref", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTasks.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTasks.results.sumResult)"), }, want: true, }, { name: "test expression: looks like result ref, but typo in 'task' separator", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(task.sumTasks.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(task.sumTasks.results.sumResult)"), }, want: true, }, { name: "test expression: looks like result ref, but typo in 'results' separator", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTasks.result.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTasks.result.sumResult)"), }, want: true, }, { name: "test expression: missing 'task' separator", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(sumTasks.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(sumTasks.results.sumResult)"), }, want: false, }, { name: "test expression: missing variable substitution", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("tasks.sumTasks.results.sumResult"), + Value: *v1beta1.NewStructuredValues("tasks.sumTasks.results.sumResult"), }, want: false, }, { name: "test expression: param substitution shouldn't be considered result ref", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(params.someParam)"), + Value: *v1beta1.NewStructuredValues("$(params.someParam)"), }, want: false, }, { name: "test expression: one good ref, one bad one should return true", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTasks.results.sumResult) $(task.sumTasks.results.sumResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTasks.results.sumResult) $(task.sumTasks.results.sumResult)"), }, want: true, }, { name: "test expression: inside array parameter", param: v1beta1.Param{ Name: "param", - Value: *v1beta1.NewArrayOrString("$(tasks.sumTask.results.sumResult)", "$(tasks.sumTask2.results.sumResult2)"), + Value: *v1beta1.NewStructuredValues("$(tasks.sumTask.results.sumResult)", "$(tasks.sumTask2.results.sumResult2)"), }, want: true, }} { @@ -641,9 +641,9 @@ func TestLooksLikeResultRefWhenExpressionFalse(t *testing.T) { func TestPipelineTaskResultRefs(t *testing.T) { pt := v1beta1.PipelineTask{ Params: []v1beta1.Param{{ - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.r1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.r1)"), }, { - Value: *v1beta1.NewArrayOrString("$(tasks.pt2.results.r2)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt2.results.r2)"), }}, WhenExpressions: []v1beta1.WhenExpression{{ Input: "$(tasks.pt3.results.r3)", @@ -653,9 +653,9 @@ func TestPipelineTaskResultRefs(t *testing.T) { }, }}, Matrix: []v1beta1.Param{{ - Value: *v1beta1.NewArrayOrString("$(tasks.pt5.results.r5)", "$(tasks.pt6.results.r6)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt5.results.r5)", "$(tasks.pt6.results.r6)"), }, { - Value: *v1beta1.NewArrayOrString("$(tasks.pt7.results.r7)", "$(tasks.pt8.results.r8)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt7.results.r7)", "$(tasks.pt8.results.r8)"), }}, } refs := v1beta1.PipelineTaskResultRefs(&pt) @@ -729,7 +729,7 @@ func TestGetVarSubstitutionExpressionsForPipelineResult(t *testing.T) { result: v1beta1.PipelineResult{ Name: "string result", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("$(tasks.task1.results.result1) and $(tasks.task2.results.result2)"), + Value: *v1beta1.NewStructuredValues("$(tasks.task1.results.result1) and $(tasks.task2.results.result2)"), }, want: []string{"tasks.task1.results.result1", "tasks.task2.results.result2"}, }, { @@ -737,7 +737,7 @@ func TestGetVarSubstitutionExpressionsForPipelineResult(t *testing.T) { result: v1beta1.PipelineResult{ Name: "array result", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("$(tasks.task1.results.result1)", "$(tasks.task2.results.result2)"), + Value: *v1beta1.NewStructuredValues("$(tasks.task1.results.result1)", "$(tasks.task2.results.result2)"), }, want: []string{"tasks.task1.results.result1", "tasks.task2.results.result2"}, }, { diff --git a/pkg/apis/pipeline/v1beta1/swagger.json b/pkg/apis/pipeline/v1beta1/swagger.json index 3b7ac02d514..c0ccb877acd 100644 --- a/pkg/apis/pipeline/v1beta1/swagger.json +++ b/pkg/apis/pipeline/v1beta1/swagger.json @@ -307,42 +307,6 @@ } } }, - "v1beta1.ArrayOrString": { - "description": "ArrayOrString is a type that can hold a single string or string array. Used in JSON unmarshalling so that a single JSON field can accept either an individual string or an array of strings. consideration the object case after the community reaches an agreement on it.", - "type": "object", - "required": [ - "type", - "stringVal", - "arrayVal", - "objectVal" - ], - "properties": { - "arrayVal": { - "type": "array", - "items": { - "type": "string", - "default": "" - }, - "x-kubernetes-list-type": "atomic" - }, - "objectVal": { - "type": "object", - "additionalProperties": { - "type": "string", - "default": "" - } - }, - "stringVal": { - "description": "Represents the stored type of ArrayOrString.", - "type": "string", - "default": "" - }, - "type": { - "type": "string", - "default": "" - } - } - }, "v1beta1.ChildStatusReference": { "description": "ChildStatusReference is used to point to the statuses of individual TaskRuns and Runs within this PipelineRun.", "type": "object", @@ -589,7 +553,7 @@ } }, "v1beta1.Param": { - "description": "Param declares an ArrayOrString to use for the parameter called name.", + "description": "Param declares an ParamValues to use for the parameter called name.", "type": "object", "required": [ "name", @@ -602,7 +566,7 @@ }, "value": { "default": {}, - "$ref": "#/definitions/v1beta1.ArrayOrString" + "$ref": "#/definitions/v1beta1.ParamValue" } } }, @@ -615,7 +579,7 @@ "properties": { "default": { "description": "Default is the value a parameter takes if no input value is supplied. If default is set, a Task may be executed without a supplied value for the parameter.", - "$ref": "#/definitions/v1beta1.ArrayOrString" + "$ref": "#/definitions/v1beta1.ParamValue" }, "description": { "description": "Description is a user-facing description of the parameter that may be used to populate a UI.", @@ -640,6 +604,42 @@ } } }, + "v1beta1.ParamValue": { + "description": "ResultValue is a type alias of ParamValue", + "type": "object", + "required": [ + "type", + "stringVal", + "arrayVal", + "objectVal" + ], + "properties": { + "arrayVal": { + "type": "array", + "items": { + "type": "string", + "default": "" + }, + "x-kubernetes-list-type": "atomic" + }, + "objectVal": { + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "stringVal": { + "description": "Represents the stored type of ParamValues.", + "type": "string", + "default": "" + }, + "type": { + "type": "string", + "default": "" + } + } + }, "v1beta1.Pipeline": { "description": "Pipeline describes a list of Tasks to execute. It expresses how outputs of tasks feed into inputs of subsequent tasks.", "type": "object", @@ -815,7 +815,7 @@ "value": { "description": "Value the expression used to retrieve the value", "default": {}, - "$ref": "#/definitions/v1beta1.ArrayOrString" + "$ref": "#/definitions/v1beta1.ParamValue" } } }, @@ -886,7 +886,7 @@ "value": { "description": "Value is the result returned from the execution of this PipelineRun", "default": {}, - "$ref": "#/definitions/v1beta1.ArrayOrString" + "$ref": "#/definitions/v1beta1.ParamValue" } } }, @@ -2447,7 +2447,7 @@ "value": { "description": "Value the given value of the result", "default": {}, - "$ref": "#/definitions/v1beta1.ArrayOrString" + "$ref": "#/definitions/v1beta1.ParamValue" } } }, diff --git a/pkg/apis/pipeline/v1beta1/task_conversion_test.go b/pkg/apis/pipeline/v1beta1/task_conversion_test.go index 0613683a67f..fa0816d3740 100644 --- a/pkg/apis/pipeline/v1beta1/task_conversion_test.go +++ b/pkg/apis/pipeline/v1beta1/task_conversion_test.go @@ -144,7 +144,7 @@ func TestTaskConversion(t *testing.T) { Type: v1beta1.ParamTypeString, Description: "My first param", Properties: map[string]v1beta1.PropertySpec{"foo": {Type: v1beta1.ParamTypeString}}, - Default: v1beta1.NewArrayOrString("bar"), + Default: v1beta1.NewStructuredValues("bar"), }}, Workspaces: []v1beta1.WorkspaceDeclaration{{ Name: "workspace", diff --git a/pkg/apis/pipeline/v1beta1/task_validation.go b/pkg/apis/pipeline/v1beta1/task_validation.go index 4fd2b048efc..9935ceef8b7 100644 --- a/pkg/apis/pipeline/v1beta1/task_validation.go +++ b/pkg/apis/pipeline/v1beta1/task_validation.go @@ -435,7 +435,7 @@ func validateObjectDefault(objectParams []ParamSpec) (errs *apis.FieldError) { } // ValidateObjectKeys validates if object keys defined in properties are all provided in its value provider iff the provider is not nil. -func ValidateObjectKeys(properties map[string]PropertySpec, propertiesProvider *ArrayOrString) (errs *apis.FieldError) { +func ValidateObjectKeys(properties map[string]PropertySpec, propertiesProvider *ParamValue) (errs *apis.FieldError) { if propertiesProvider == nil || propertiesProvider.ObjectVal == nil { return nil } diff --git a/pkg/apis/pipeline/v1beta1/task_validation_test.go b/pkg/apis/pipeline/v1beta1/task_validation_test.go index 4d3127fa953..9794b968209 100644 --- a/pkg/apis/pipeline/v1beta1/task_validation_test.go +++ b/pkg/apis/pipeline/v1beta1/task_validation_test.go @@ -193,7 +193,7 @@ func TestTaskSpecValidate(t *testing.T) { Params: []v1beta1.ParamSpec{{ Name: "task", Description: "param", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }}, Steps: validSteps, }, @@ -204,7 +204,7 @@ func TestTaskSpecValidate(t *testing.T) { Name: "task", Type: v1beta1.ParamTypeString, Description: "param", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }, { Name: "myobj", Type: v1beta1.ParamTypeObject, @@ -535,7 +535,7 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "validparam", Type: v1beta1.ParamTypeString, Description: "parameter", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }}, }, expectedError: apis.FieldError{ @@ -672,12 +672,12 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "foo", Type: v1beta1.ParamTypeString, Description: "parameter", - Default: v1beta1.NewArrayOrString("value1"), + Default: v1beta1.NewStructuredValues("value1"), }, { Name: "foo", Type: v1beta1.ParamTypeString, Description: "parameter", - Default: v1beta1.NewArrayOrString("value2"), + Default: v1beta1.NewStructuredValues("value2"), }}, Steps: validSteps, }, @@ -692,12 +692,12 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "validparam", Type: v1beta1.ParamTypeString, Description: "parameter", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }, { Name: "param-with-invalid-type", Type: "invalidtype", Description: "invalidtypedesc", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }}, Steps: validSteps, }, @@ -712,7 +712,7 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "task", Type: v1beta1.ParamTypeArray, Description: "param", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }}, Steps: validSteps, }, @@ -727,7 +727,7 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "task", Type: v1beta1.ParamTypeString, Description: "param", - Default: v1beta1.NewArrayOrString("default", "array"), + Default: v1beta1.NewStructuredValues("default", "array"), }}, Steps: validSteps, }, @@ -761,7 +761,7 @@ func TestTaskSpecValidateError(t *testing.T) { Type: v1beta1.ParamTypeObject, Description: "param", Properties: map[string]v1beta1.PropertySpec{"key1": {}}, - Default: v1beta1.NewArrayOrString("var"), + Default: v1beta1.NewStructuredValues("var"), }}, Steps: validSteps, }, @@ -826,7 +826,7 @@ func TestTaskSpecValidateError(t *testing.T) { Name: "validparam", Type: v1beta1.ParamTypeString, Description: "parameter", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }}, Steps: []v1beta1.Step{}, }, @@ -972,10 +972,10 @@ func TestTaskSpecValidateError(t *testing.T) { fields: fields{ Params: []v1beta1.ParamSpec{{ Name: "baz", - Default: v1beta1.NewArrayOrString("implied", "array", "type"), + Default: v1beta1.NewStructuredValues("implied", "array", "type"), }, { Name: "foo-is-baz", - Default: v1beta1.NewArrayOrString("implied", "array", "type"), + Default: v1beta1.NewStructuredValues("implied", "array", "type"), }}, Steps: []v1beta1.Step{{ Name: "mystep", @@ -994,10 +994,10 @@ func TestTaskSpecValidateError(t *testing.T) { fields: fields{ Params: []v1beta1.ParamSpec{{ Name: "baz", - Default: v1beta1.NewArrayOrString("implied", "array", "type"), + Default: v1beta1.NewStructuredValues("implied", "array", "type"), }, { Name: "foo-is-baz", - Default: v1beta1.NewArrayOrString("implied", "array", "type"), + Default: v1beta1.NewStructuredValues("implied", "array", "type"), }}, Steps: []v1beta1.Step{{ Name: "mystep", @@ -1106,7 +1106,7 @@ func TestTaskSpecValidateError(t *testing.T) { { Name: "foo", Description: "param", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }, }, Steps: []v1beta1.Step{{ @@ -1127,7 +1127,7 @@ func TestTaskSpecValidateError(t *testing.T) { Params: []v1beta1.ParamSpec{{ Name: "foo", Description: "param", - Default: v1beta1.NewArrayOrString("default"), + Default: v1beta1.NewStructuredValues("default"), }}, Steps: []v1beta1.Step{{ Name: "mystep", diff --git a/pkg/apis/pipeline/v1beta1/taskrun_validation_test.go b/pkg/apis/pipeline/v1beta1/taskrun_validation_test.go index 2792bd34b8c..fa3d729ec6d 100644 --- a/pkg/apis/pipeline/v1beta1/taskrun_validation_test.go +++ b/pkg/apis/pipeline/v1beta1/taskrun_validation_test.go @@ -97,7 +97,7 @@ func TestTaskRun_Validate(t *testing.T) { Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "task-words", - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ ArrayVal: []string{"hello", "task run"}, }, }}, @@ -119,7 +119,7 @@ func TestTaskRun_Validate(t *testing.T) { Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "task-words", - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ ArrayVal: []string{"hello", "task run"}, }, }}, @@ -150,7 +150,7 @@ func TestTaskRun_Validate(t *testing.T) { Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "task-words", - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ ArrayVal: []string{"hello", "task run"}, }, }}, @@ -184,7 +184,7 @@ func TestTaskRun_Validate(t *testing.T) { Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "task-words", - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ ArrayVal: []string{"hello", "task run"}, }, }}, @@ -358,10 +358,10 @@ func TestTaskRunSpec_Invalidate(t *testing.T) { spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "myname", - Value: *v1beta1.NewArrayOrString("value"), + Value: *v1beta1.NewStructuredValues("value"), }, { Name: "myname", - Value: *v1beta1.NewArrayOrString("value"), + Value: *v1beta1.NewStructuredValues("value"), }}, TaskRef: &v1beta1.TaskRef{Name: "mytask"}, }, @@ -371,10 +371,10 @@ func TestTaskRunSpec_Invalidate(t *testing.T) { spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "FOO", - Value: *v1beta1.NewArrayOrString("value"), + Value: *v1beta1.NewStructuredValues("value"), }, { Name: "foo", - Value: *v1beta1.NewArrayOrString("value"), + Value: *v1beta1.NewStructuredValues("value"), }}, TaskRef: &v1beta1.TaskRef{Name: "mytask"}, }, @@ -588,7 +588,7 @@ func TestTaskRunSpec_Validate(t *testing.T) { Timeout: &metav1.Duration{Duration: 0}, Params: []v1beta1.Param{{ Name: "name", - Value: *v1beta1.NewArrayOrString("value"), + Value: *v1beta1.NewStructuredValues("value"), }}, TaskSpec: &v1beta1.TaskSpec{ Steps: []v1beta1.Step{{ diff --git a/pkg/apis/pipeline/v1beta1/zz_generated.deepcopy.go b/pkg/apis/pipeline/v1beta1/zz_generated.deepcopy.go index a793eb3d635..3cd690fef66 100644 --- a/pkg/apis/pipeline/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/pipeline/v1beta1/zz_generated.deepcopy.go @@ -30,34 +30,6 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ArrayOrString) DeepCopyInto(out *ArrayOrString) { - *out = *in - if in.ArrayVal != nil { - in, out := &in.ArrayVal, &out.ArrayVal - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.ObjectVal != nil { - in, out := &in.ObjectVal, &out.ObjectVal - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArrayOrString. -func (in *ArrayOrString) DeepCopy() *ArrayOrString { - if in == nil { - return nil - } - out := new(ArrayOrString) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ChildStatusReference) DeepCopyInto(out *ChildStatusReference) { *out = *in @@ -265,7 +237,7 @@ func (in *ParamSpec) DeepCopyInto(out *ParamSpec) { } if in.Default != nil { in, out := &in.Default, &out.Default - *out = new(ArrayOrString) + *out = new(ParamValue) (*in).DeepCopyInto(*out) } return @@ -281,6 +253,34 @@ func (in *ParamSpec) DeepCopy() *ParamSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ParamValue) DeepCopyInto(out *ParamValue) { + *out = *in + if in.ArrayVal != nil { + in, out := &in.ArrayVal, &out.ArrayVal + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ObjectVal != nil { + in, out := &in.ObjectVal, &out.ObjectVal + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ParamValue. +func (in *ParamValue) DeepCopy() *ParamValue { + if in == nil { + return nil + } + out := new(ParamValue) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Pipeline) DeepCopyInto(out *Pipeline) { *out = *in diff --git a/pkg/entrypoint/entrypointer_test.go b/pkg/entrypoint/entrypointer_test.go index cb9abe44979..b9784a298be 100644 --- a/pkg/entrypoint/entrypointer_test.go +++ b/pkg/entrypoint/entrypointer_test.go @@ -255,26 +255,26 @@ func TestReadResultsFromDisk(t *testing.T) { for _, c := range []struct { desc string results []string - resultContent []v1beta1.ArrayOrString + resultContent []v1beta1.ResultValue want []v1beta1.PipelineResourceResult }{{ desc: "read string result file", results: []string{"results"}, - resultContent: []v1beta1.ArrayOrString{*v1beta1.NewArrayOrString("hello world")}, + resultContent: []v1beta1.ResultValue{*v1beta1.NewStructuredValues("hello world")}, want: []v1beta1.PipelineResourceResult{ {Value: `"hello world"`, ResultType: 1}}, }, { desc: "read array result file", results: []string{"results"}, - resultContent: []v1beta1.ArrayOrString{*v1beta1.NewArrayOrString("hello", "world")}, + resultContent: []v1beta1.ResultValue{*v1beta1.NewStructuredValues("hello", "world")}, want: []v1beta1.PipelineResourceResult{ {Value: `["hello","world"]`, ResultType: 1}}, }, { desc: "read string and array result files", results: []string{"resultsArray", "resultsString"}, - resultContent: []v1beta1.ArrayOrString{*v1beta1.NewArrayOrString("hello", "world"), *v1beta1.NewArrayOrString("hello world")}, + resultContent: []v1beta1.ResultValue{*v1beta1.NewStructuredValues("hello", "world"), *v1beta1.NewStructuredValues("hello world")}, want: []v1beta1.PipelineResourceResult{ {Value: `["hello","world"]`, ResultType: 1}, @@ -324,8 +324,8 @@ func TestReadResultsFromDisk(t *testing.T) { logger, _ := logging.NewLogger("", "status") got, _ := termination.ParseMessage(logger, string(msg)) for _, g := range got { - aos := v1beta1.ArrayOrString{} - aos.UnmarshalJSON([]byte(g.Value)) + v := v1beta1.ResultValue{} + v.UnmarshalJSON([]byte(g.Value)) } if d := cmp.Diff(got, c.want); d != "" { t.Fatalf("Diff(-want,+got): %v", d) diff --git a/pkg/matrix/matrix_test.go b/pkg/matrix/matrix_test.go index fbfb82e1053..5a98458000f 100644 --- a/pkg/matrix/matrix_test.go +++ b/pkg/matrix/matrix_test.go @@ -29,116 +29,116 @@ func Test_FanOut(t *testing.T) { name: "single array in matrix", matrix: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }}, wantCombinations: Combinations{{ MatrixID: "0", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }}, }, { MatrixID: "1", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }}, }, { MatrixID: "2", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }}, }}, }, { name: "multiple arrays in matrix", matrix: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"chrome", "safari", "firefox"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"chrome", "safari", "firefox"}}, }}, wantCombinations: Combinations{{ MatrixID: "0", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, }, { MatrixID: "1", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, }, { MatrixID: "2", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, }, { MatrixID: "3", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, }, { MatrixID: "4", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, }, { MatrixID: "5", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, }, { MatrixID: "6", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, }, { MatrixID: "7", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, }, { MatrixID: "8", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, }}, }} diff --git a/pkg/matrix/matrix_types.go b/pkg/matrix/matrix_types.go index c64b17b51ce..23f019806a3 100644 --- a/pkg/matrix/matrix_types.go +++ b/pkg/matrix/matrix_types.go @@ -67,7 +67,7 @@ func createCombination(i int, name string, value string, parameters []v1beta1.Pa MatrixID: strconv.Itoa(i), Params: append(parameters, v1beta1.Param{ Name: name, - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: value}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: value}, }), } } diff --git a/pkg/matrix/matrix_types_test.go b/pkg/matrix/matrix_types_test.go index 8190d262a35..effd9f5f5d8 100644 --- a/pkg/matrix/matrix_types_test.go +++ b/pkg/matrix/matrix_types_test.go @@ -31,33 +31,33 @@ func Test_ToMap(t *testing.T) { MatrixID: "0", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }}, }, { MatrixID: "1", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }}, }, { MatrixID: "2", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }}, }}, want: map[string][]v1beta1.Param{ "0": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }}, "1": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }}, "2": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }}, }, }, { @@ -66,147 +66,147 @@ func Test_ToMap(t *testing.T) { MatrixID: "0", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, }, { MatrixID: "1", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, }, { MatrixID: "2", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, }, { MatrixID: "3", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, }, { MatrixID: "4", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, }, { MatrixID: "5", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, }, { MatrixID: "6", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, }, { MatrixID: "7", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, }, { MatrixID: "8", Params: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, }}, want: map[string][]v1beta1.Param{ "0": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, "1": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, "2": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "chrome"}, }}, "3": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, "4": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, "5": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "safari"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "safari"}, }}, "6": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "linux"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "linux"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, "7": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "mac"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "mac"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, "8": {{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "windows"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "windows"}, }, { Name: "browser", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeString, StringVal: "firefox"}, }}, }, }} diff --git a/pkg/pod/status.go b/pkg/pod/status.go index 5cddaffb546..74faf6f875d 100644 --- a/pkg/pod/status.go +++ b/pkg/pod/status.go @@ -227,18 +227,15 @@ func filterResultsAndResources(results []v1beta1.PipelineResourceResult) ([]v1be for _, r := range results { switch r.ResultType { case v1beta1.TaskRunResultType: - aos := v1beta1.ArrayOrString{} - err := aos.UnmarshalJSON([]byte(r.Value)) + v := v1beta1.ResultValue{} + err := v.UnmarshalJSON([]byte(r.Value)) if err != nil { continue } - // TODO(#4723): Validate that the type we inferred from aos is matching the - // TaskResult Type before setting it to the taskRunResult. - // TODO(#4723): Validate the taskrun results against taskresults for object val taskRunResult := v1beta1.TaskRunResult{ Name: r.Key, - Type: v1beta1.ResultsType(aos.Type), - Value: aos, + Type: v1beta1.ResultsType(v.Type), + Value: v, } taskResults = append(taskResults, taskRunResult) filteredResults = append(filteredResults, r) diff --git a/pkg/pod/status_test.go b/pkg/pod/status_test.go index e2c8f4e9dee..abb4842badc 100644 --- a/pkg/pod/status_test.go +++ b/pkg/pod/status_test.go @@ -630,7 +630,7 @@ func TestMakeTaskRunStatus(t *testing.T) { TaskRunResults: []v1beta1.TaskRunResult{{ Name: "resultName", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("resultValue"), + Value: *v1beta1.NewStructuredValues("resultValue"), }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, @@ -669,7 +669,7 @@ func TestMakeTaskRunStatus(t *testing.T) { TaskRunResults: []v1beta1.TaskRunResult{{ Name: "resultName", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("resultValue"), + Value: *v1beta1.NewStructuredValues("resultValue"), }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, @@ -717,11 +717,11 @@ func TestMakeTaskRunStatus(t *testing.T) { TaskRunResults: []v1beta1.TaskRunResult{{ Name: "resultNameOne", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("resultValueThree"), + Value: *v1beta1.NewStructuredValues("resultValueThree"), }, { Name: "resultNameTwo", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("resultValueTwo"), + Value: *v1beta1.NewStructuredValues("resultValueTwo"), }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, @@ -811,7 +811,7 @@ func TestMakeTaskRunStatus(t *testing.T) { TaskRunResults: []v1beta1.TaskRunResult{{ Name: "resultNameThree", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString(""), + Value: *v1beta1.NewStructuredValues(""), }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, @@ -850,7 +850,7 @@ func TestMakeTaskRunStatus(t *testing.T) { TaskRunResults: []v1beta1.TaskRunResult{{ Name: "resultNameThree", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString(""), + Value: *v1beta1.NewStructuredValues(""), }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, @@ -1125,7 +1125,7 @@ func TestMakeTaskRunStatusAlpha(t *testing.T) { TaskRunResults: []v1beta1.TaskRunResult{{ Name: "resultName", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString(""), + Value: *v1beta1.NewStructuredValues(""), }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, @@ -1164,7 +1164,7 @@ func TestMakeTaskRunStatusAlpha(t *testing.T) { TaskRunResults: []v1beta1.TaskRunResult{{ Name: "resultName", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("hello"), + Value: *v1beta1.NewStructuredValues("hello"), }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, @@ -1203,7 +1203,7 @@ func TestMakeTaskRunStatusAlpha(t *testing.T) { TaskRunResults: []v1beta1.TaskRunResult{{ Name: "resultName", Type: v1beta1.ResultsTypeArray, - Value: *v1beta1.NewArrayOrString("hello", "world"), + Value: *v1beta1.NewStructuredValues("hello", "world"), }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, diff --git a/pkg/reconciler/pipeline/dag/dag_test.go b/pkg/reconciler/pipeline/dag/dag_test.go index 4c1ba1893fa..dcad79f095d 100644 --- a/pkg/reconciler/pipeline/dag/dag_test.go +++ b/pkg/reconciler/pipeline/dag/dag_test.go @@ -297,7 +297,7 @@ func TestBuild_TaskParamsFromTaskResults(t *testing.T) { Name: "x", Params: []v1beta1.Param{{ Name: "paramX", - Value: *v1beta1.NewArrayOrString("$(tasks.a.results.resultA)"), + Value: *v1beta1.NewStructuredValues("$(tasks.a.results.resultA)"), }}, } yDependsOnBRunsAfterC := v1beta1.PipelineTask{ @@ -305,21 +305,21 @@ func TestBuild_TaskParamsFromTaskResults(t *testing.T) { RunAfter: []string{"c"}, Params: []v1beta1.Param{{ Name: "paramB", - Value: *v1beta1.NewArrayOrString("$(tasks.b.results.resultB)"), + Value: *v1beta1.NewStructuredValues("$(tasks.b.results.resultB)"), }}, } zDependsOnDAndE := v1beta1.PipelineTask{ Name: "z", Params: []v1beta1.Param{{ Name: "paramZ", - Value: *v1beta1.NewArrayOrString("$(tasks.d.results.resultD) $(tasks.e.results.resultE)"), + Value: *v1beta1.NewStructuredValues("$(tasks.d.results.resultD) $(tasks.e.results.resultE)"), }}, } wDependsOnF := v1beta1.PipelineTask{ Name: "w", Params: []v1beta1.Param{{ Name: "paramw", - Value: *v1beta1.NewArrayOrString("$(tasks.f.results.resultF[*])"), + Value: *v1beta1.NewStructuredValues("$(tasks.f.results.resultF[*])"), }}, } @@ -566,7 +566,7 @@ func testGraph(t *testing.T) *dag.Graph { Name: "w", Params: []v1beta1.Param{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.y.results.bar)"), + Value: *v1beta1.NewStructuredValues("$(tasks.y.results.bar)"), }}, RunAfter: []string{"b"}, }, { diff --git a/pkg/reconciler/pipelinerun/resources/apply.go b/pkg/reconciler/pipelinerun/resources/apply.go index 1560f4971f6..6c0b12172e3 100644 --- a/pkg/reconciler/pipelinerun/resources/apply.go +++ b/pkg/reconciler/pipelinerun/resources/apply.go @@ -363,7 +363,7 @@ func ApplyTaskResultsToPipelineResults( // taskResultValue returns the result value for a given pipeline task name and result name in a map of TaskRunResults for // pipeline task names. It returns nil if either the pipeline task name isn't present in the map, or if there is no // result with the result name in the pipeline task name's slice of results. -func taskResultValue(taskName string, resultName string, taskResults map[string][]v1beta1.TaskRunResult) *v1beta1.ArrayOrString { +func taskResultValue(taskName string, resultName string, taskResults map[string][]v1beta1.TaskRunResult) *v1beta1.ResultValue { for _, trResult := range taskResults[taskName] { if trResult.Name == resultName { return &trResult.Value diff --git a/pkg/reconciler/pipelinerun/resources/apply_test.go b/pkg/reconciler/pipelinerun/resources/apply_test.go index 46408dae902..7dab604867b 100644 --- a/pkg/reconciler/pipelinerun/resources/apply_test.go +++ b/pkg/reconciler/pipelinerun/resources/apply_test.go @@ -41,28 +41,28 @@ func TestApplyParameters(t *testing.T) { name: "single parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param)")}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param)")}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("second-value")}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("second-value")}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, @@ -81,7 +81,7 @@ func TestApplyParameters(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewArrayOrString("hello param!")}}, + params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewStructuredValues("hello param!")}}, expected: v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ TaskSpec: &v1beta1.EmbeddedTask{ @@ -111,7 +111,7 @@ func TestApplyParameters(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewArrayOrString("hello", "param", "!!!")}}, + params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewStructuredValues("hello", "param", "!!!")}}, expected: v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ TaskSpec: &v1beta1.EmbeddedTask{ @@ -164,7 +164,7 @@ func TestApplyParameters(t *testing.T) { TaskSpec: v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "HELLO", - Default: v1beta1.NewArrayOrString("default param!"), + Default: v1beta1.NewStructuredValues("default param!"), }}, Steps: []v1beta1.Step{{ Name: "step1", @@ -175,14 +175,14 @@ func TestApplyParameters(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewArrayOrString("pipeline param!")}}, + params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewStructuredValues("pipeline param!")}}, expected: v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ TaskSpec: &v1beta1.EmbeddedTask{ TaskSpec: v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "HELLO", - Default: v1beta1.NewArrayOrString("default param!"), + Default: v1beta1.NewStructuredValues("default param!"), }}, Steps: []v1beta1.Step{{ Name: "step1", @@ -202,7 +202,7 @@ func TestApplyParameters(t *testing.T) { TaskSpec: v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "HELLO", - Default: v1beta1.NewArrayOrString("default", "param!"), + Default: v1beta1.NewStructuredValues("default", "param!"), }}, Steps: []v1beta1.Step{{ Name: "step1", @@ -213,14 +213,14 @@ func TestApplyParameters(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewArrayOrString("pipeline", "param!")}}, + params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewStructuredValues("pipeline", "param!")}}, expected: v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ TaskSpec: &v1beta1.EmbeddedTask{ TaskSpec: v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "HELLO", - Default: v1beta1.NewArrayOrString("default", "param!"), + Default: v1beta1.NewStructuredValues("default", "param!"), }}, Steps: []v1beta1.Step{{ Name: "step1", @@ -237,13 +237,13 @@ func TestApplyParameters(t *testing.T) { original: v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "HELLO", Value: *v1beta1.NewArrayOrString("task", "param!")}, + {Name: "HELLO", Value: *v1beta1.NewStructuredValues("task", "param!")}, }, TaskSpec: &v1beta1.EmbeddedTask{ TaskSpec: v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "HELLO", - Default: v1beta1.NewArrayOrString("default", "param!"), + Default: v1beta1.NewStructuredValues("default", "param!"), }}, Steps: []v1beta1.Step{{ Name: "step1", @@ -254,17 +254,17 @@ func TestApplyParameters(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewArrayOrString("pipeline", "param!")}}, + params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewStructuredValues("pipeline", "param!")}}, expected: v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "HELLO", Value: *v1beta1.NewArrayOrString("task", "param!")}, + {Name: "HELLO", Value: *v1beta1.NewStructuredValues("task", "param!")}, }, TaskSpec: &v1beta1.EmbeddedTask{ TaskSpec: v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "HELLO", - Default: v1beta1.NewArrayOrString("default", "param!"), + Default: v1beta1.NewStructuredValues("default", "param!"), }}, Steps: []v1beta1.Step{{ Name: "step1", @@ -281,13 +281,13 @@ func TestApplyParameters(t *testing.T) { original: v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "HELLO", Value: *v1beta1.NewArrayOrString("task param!")}, + {Name: "HELLO", Value: *v1beta1.NewStructuredValues("task param!")}, }, TaskSpec: &v1beta1.EmbeddedTask{ TaskSpec: v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "HELLO", - Default: v1beta1.NewArrayOrString("default param!"), + Default: v1beta1.NewStructuredValues("default param!"), }}, Steps: []v1beta1.Step{{ Name: "step1", @@ -298,17 +298,17 @@ func TestApplyParameters(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewArrayOrString("pipeline param!")}}, + params: []v1beta1.Param{{Name: "HELLO", Value: *v1beta1.NewStructuredValues("pipeline param!")}}, expected: v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "HELLO", Value: *v1beta1.NewArrayOrString("task param!")}, + {Name: "HELLO", Value: *v1beta1.NewStructuredValues("task param!")}, }, TaskSpec: &v1beta1.EmbeddedTask{ TaskSpec: v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "HELLO", - Default: v1beta1.NewArrayOrString("default param!"), + Default: v1beta1.NewStructuredValues("default param!"), }}, Steps: []v1beta1.Step{{ Name: "step1", @@ -443,7 +443,7 @@ func TestApplyParameters(t *testing.T) { name: "single parameter with when expression", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ @@ -454,10 +454,10 @@ func TestApplyParameters(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ @@ -529,26 +529,26 @@ func TestApplyParameters(t *testing.T) { name: "string pipeline parameter nested inside task parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, - {Name: "second-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, + {Name: "second-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.first-param))")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.second-param))")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.first-param))")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.second-param))")}, }, }}, }, params: nil, // no parameter values. expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, - {Name: "second-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, + {Name: "second-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.default-value)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.default-value)")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.default-value)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.default-value)")}, }, }}, }, @@ -556,28 +556,28 @@ func TestApplyParameters(t *testing.T) { name: "array pipeline parameter nested inside task parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default", "array", "value")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default", "array", "value")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("firstelement", "$(params.first-param)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("firstelement", "$(params.second-param)")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("firstelement", "$(params.first-param)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("firstelement", "$(params.second-param)")}, }, }}, }, params: []v1beta1.Param{ - {Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "array")}, + {Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "array")}, }, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default", "array", "value")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default", "array", "value")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("firstelement", "default", "array", "value")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("firstelement", "second-value", "array")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("firstelement", "default", "array", "value")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("firstelement", "second-value", "array")}, }, }}, }, @@ -600,8 +600,8 @@ func TestApplyParameters(t *testing.T) { }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.myobject.key1))")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.myobject.key2))")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.myobject.key1))")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.myobject.key2))")}, }, }}, }, @@ -623,8 +623,8 @@ func TestApplyParameters(t *testing.T) { }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.val1)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.val2)")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.val1)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.val2)")}, }, }}, }, @@ -632,13 +632,13 @@ func TestApplyParameters(t *testing.T) { name: "parameter evaluation with final tasks", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param)")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param)")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param)")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param)")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.first-param)", @@ -647,16 +647,16 @@ func TestApplyParameters(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("second-value")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("second-value")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "default-value", @@ -669,19 +669,19 @@ func TestApplyParameters(t *testing.T) { name: "parameter evaluation with both tasks and final tasks", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param)")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param)")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param)")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param)")}, }, }}, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param)")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param)")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param)")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param)")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.first-param)", @@ -690,22 +690,22 @@ func TestApplyParameters(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("second-value")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("second-value")}, }, }}, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("second-value")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("second-value")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "default-value", @@ -733,14 +733,14 @@ func TestApplyParameters(t *testing.T) { }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.myobject.key1)")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.myobject.key2)")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.myobject.key1)")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.myobject.key2)")}, }, }}, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.myobject.key1)")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.myobject.key2)")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.myobject.key1)")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.myobject.key2)")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.myobject.key1)", @@ -770,14 +770,14 @@ func TestApplyParameters(t *testing.T) { }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("foo")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("bar")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("foo")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("bar")}, }, }}, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("foo")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("bar")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("foo")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("bar")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "foo", @@ -790,39 +790,39 @@ func TestApplyParameters(t *testing.T) { name: "parameter references with bracket notation and special characters", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first.param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first.param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second/param", Type: v1beta1.ParamTypeString}, - {Name: "third.param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "third.param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "fourth/param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString(`$(params["first.param"])`)}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString(`$(params["second/param"])`)}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString(`$(params['third.param'])`)}, - {Name: "first-task-fourth-param", Value: *v1beta1.NewArrayOrString(`$(params['fourth/param'])`)}, - {Name: "first-task-fifth-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues(`$(params["first.param"])`)}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues(`$(params["second/param"])`)}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues(`$(params['third.param'])`)}, + {Name: "first-task-fourth-param", Value: *v1beta1.NewStructuredValues(`$(params['fourth/param'])`)}, + {Name: "first-task-fifth-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, params: []v1beta1.Param{ - {Name: "second/param", Value: *v1beta1.NewArrayOrString("second-value")}, - {Name: "fourth/param", Value: *v1beta1.NewArrayOrString("fourth-value")}, + {Name: "second/param", Value: *v1beta1.NewStructuredValues("second-value")}, + {Name: "fourth/param", Value: *v1beta1.NewStructuredValues("fourth-value")}, }, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first.param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first.param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second/param", Type: v1beta1.ParamTypeString}, - {Name: "third.param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "third.param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "fourth/param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("second-value")}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "first-task-fourth-param", Value: *v1beta1.NewArrayOrString("fourth-value")}, - {Name: "first-task-fifth-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("second-value")}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "first-task-fourth-param", Value: *v1beta1.NewStructuredValues("fourth-value")}, + {Name: "first-task-fifth-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, @@ -830,13 +830,13 @@ func TestApplyParameters(t *testing.T) { name: "single parameter in workspace subpath", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("static value")}, }, Workspaces: []v1beta1.WorkspacePipelineTaskBinding{ { @@ -847,16 +847,16 @@ func TestApplyParameters(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewArrayOrString("default-value")}, + {Name: "first-param", Type: v1beta1.ParamTypeString, Default: v1beta1.NewStructuredValues("default-value")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("static value")}, }, Workspaces: []v1beta1.WorkspacePipelineTaskBinding{ { @@ -886,8 +886,8 @@ func TestApplyParameters(t *testing.T) { }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.myobject.key1)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.myobject.key1)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("static value")}, }, Workspaces: []v1beta1.WorkspacePipelineTaskBinding{ { @@ -919,8 +919,8 @@ func TestApplyParameters(t *testing.T) { }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("foo")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("foo")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("static value")}, }, Workspaces: []v1beta1.WorkspacePipelineTaskBinding{ { @@ -969,28 +969,28 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { name: "single parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[1])")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[0])")}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[1])")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[0])")}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("default-value-again")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("second-value")}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("default-value-again")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("second-value")}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, @@ -998,7 +998,7 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { name: "single parameter with when expression", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ @@ -1009,10 +1009,10 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ @@ -1027,26 +1027,26 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { name: "pipeline parameter nested inside task parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, - {Name: "second-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, + {Name: "second-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.first-param[0]))")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.second-param[1]))")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.first-param[0]))")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.second-param[1]))")}, }, }}, }, params: nil, // no parameter values. expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, - {Name: "second-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, + {Name: "second-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.default-value)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.default-value-again)")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.default-value)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.default-value-again)")}, }, }}, }, @@ -1054,28 +1054,28 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { name: "array parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default", "array", "value")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default", "array", "value")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("firstelement", "$(params.first-param)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("firstelement", "$(params.second-param[0])")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("firstelement", "$(params.first-param)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("firstelement", "$(params.second-param[0])")}, }, }}, }, params: []v1beta1.Param{ - {Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "array")}, + {Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "array")}, }, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default", "array", "value")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default", "array", "value")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("firstelement", "default", "array", "value")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("firstelement", "second-value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("firstelement", "default", "array", "value")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("firstelement", "second-value")}, }, }}, }, @@ -1083,13 +1083,13 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { name: "parameter evaluation with final tasks", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[0])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[1])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[0])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[1])")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.first-param[0])", @@ -1098,16 +1098,16 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("second-value-again")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("second-value-again")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "default-value", @@ -1120,19 +1120,19 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { name: "parameter evaluation with both tasks and final tasks", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[0])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[1])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[0])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[1])")}, }, }}, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[0])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[1])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[0])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[1])")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.first-param[0])", @@ -1141,22 +1141,22 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("second-value-again")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("second-value-again")}, }, }}, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("second-value-again")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("second-value-again")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "default-value", @@ -1169,39 +1169,39 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { name: "parameter references with bracket notation and special characters", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second/param", Type: v1beta1.ParamTypeArray}, - {Name: "third.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "third.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "fourth/param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString(`$(params["first.param"][0])`)}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString(`$(params["second/param"][0])`)}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString(`$(params['third.param'][1])`)}, - {Name: "first-task-fourth-param", Value: *v1beta1.NewArrayOrString(`$(params['fourth/param'][1])`)}, - {Name: "first-task-fifth-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues(`$(params["first.param"][0])`)}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues(`$(params["second/param"][0])`)}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues(`$(params['third.param'][1])`)}, + {Name: "first-task-fourth-param", Value: *v1beta1.NewStructuredValues(`$(params['fourth/param'][1])`)}, + {Name: "first-task-fifth-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, params: []v1beta1.Param{ - {Name: "second/param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}, - {Name: "fourth/param", Value: *v1beta1.NewArrayOrString("fourth-value", "fourth-value-again")}, + {Name: "second/param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}, + {Name: "fourth/param", Value: *v1beta1.NewStructuredValues("fourth-value", "fourth-value-again")}, }, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second/param", Type: v1beta1.ParamTypeArray}, - {Name: "third.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "third.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "fourth/param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("second-value")}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString("default-value-again")}, - {Name: "first-task-fourth-param", Value: *v1beta1.NewArrayOrString("fourth-value-again")}, - {Name: "first-task-fifth-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("second-value")}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues("default-value-again")}, + {Name: "first-task-fourth-param", Value: *v1beta1.NewStructuredValues("fourth-value-again")}, + {Name: "first-task-fifth-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, @@ -1209,13 +1209,13 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { name: "single parameter in workspace subpath", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[0])")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[0])")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("static value")}, }, Workspaces: []v1beta1.WorkspacePipelineTaskBinding{ { @@ -1226,16 +1226,16 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("default-value")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("default-value")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("static value")}, }, Workspaces: []v1beta1.WorkspacePipelineTaskBinding{ { @@ -1273,7 +1273,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { }{{ name: "Test result substitution on minimal variable substitution expression - params", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "a.Result", @@ -1286,7 +1286,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results["a.Result"])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results["a.Result"])`), }}, }, }}, @@ -1296,14 +1296,14 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), }}, }, }}, }, { name: "Test array indexing result substitution on minimal variable substitution expression - params", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "a.Result", @@ -1316,7 +1316,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results["a.Result"][1])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results["a.Result"][1])`), }}, }, }}, @@ -1326,14 +1326,14 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueTwo"), }}, }, }}, }, { name: "Test array indexing result substitution out of bound - params", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "a.Result", @@ -1346,7 +1346,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results["a.Result"][3])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results["a.Result"][3])`), }}, }, }}, @@ -1357,14 +1357,14 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { Params: []v1beta1.Param{{ Name: "bParam", // index validation is done in ResolveResultRefs() before ApplyTaskResults() - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results["a.Result"][3])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results["a.Result"][3])`), }}, }, }}, }, { name: "Test array result substitution on minimal variable substitution expression - params", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "a.Result", @@ -1377,7 +1377,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{`$(tasks.aTask.results["a.Result"][*])`}, }, }}, @@ -1389,7 +1389,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), }}, }, }}, @@ -1412,7 +1412,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results.resultName[*])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results.resultName[*])`), }}, }, }}, @@ -1449,7 +1449,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results.resultName.key1)`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results.resultName.key1)`), }}, }, }}, @@ -1460,14 +1460,14 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { Params: []v1beta1.Param{{ Name: "bParam", // index validation is done in ResolveResultRefs() before ApplyTaskResults() - Value: *v1beta1.NewArrayOrString("val1"), + Value: *v1beta1.NewStructuredValues("val1"), }}, }, }}, }, { name: "Test result substitution on minimal variable substitution expression - matrix", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "a.Result", @@ -1480,7 +1480,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results["a.Result"])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results["a.Result"])`), }}, }, }}, @@ -1490,14 +1490,14 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), }}, }, }}, }, { name: "Test array indexing result substitution on minimal variable substitution expression - matrix", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "a.Result", @@ -1510,7 +1510,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results["a.Result"][1])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results["a.Result"][1])`), }}, }, }}, @@ -1520,14 +1520,14 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueTwo"), }}, }, }}, }, { name: "Test array indexing result substitution out of bound - matrix", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "a.Result", @@ -1540,7 +1540,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results["a.Result"][3])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results["a.Result"][3])`), }}, }, }}, @@ -1550,14 +1550,14 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString(`$(tasks.aTask.results["a.Result"][3])`), + Value: *v1beta1.NewStructuredValues(`$(tasks.aTask.results["a.Result"][3])`), }}, }, }}, }, { name: "Test array result substitution on minimal variable substitution expression - when expressions", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1590,7 +1590,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { }, { name: "Test result substitution on minimal variable substitution expression - when expressions", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1622,7 +1622,7 @@ func TestApplyTaskResults_MinimalExpression(t *testing.T) { }, { name: "Test array indexing result substitution on minimal variable substitution expression - when expressions", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1670,7 +1670,7 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { }{{ name: "Test result substitution on embedded variable substitution expression - params", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1683,7 +1683,7 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("Result value --> $(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("Result value --> $(tasks.aTask.results.aResult)"), }}, }, }}, @@ -1693,14 +1693,14 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("Result value --> aResultValue"), + Value: *v1beta1.NewStructuredValues("Result value --> aResultValue"), }}, }, }}, }, { name: "Test array indexing result substitution on embedded variable substitution expression - params", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1713,7 +1713,7 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("Result value --> $(tasks.aTask.results.aResult[0])"), + Value: *v1beta1.NewStructuredValues("Result value --> $(tasks.aTask.results.aResult[0])"), }}, }, }}, @@ -1723,14 +1723,14 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("Result value --> arrayResultValueOne"), + Value: *v1beta1.NewStructuredValues("Result value --> arrayResultValueOne"), }}, }, }}, }, { name: "Test result substitution on embedded variable substitution expression - matrix", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1743,7 +1743,7 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("Result value --> $(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("Result value --> $(tasks.aTask.results.aResult)"), }}, }, }}, @@ -1753,14 +1753,14 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("Result value --> aResultValue"), + Value: *v1beta1.NewStructuredValues("Result value --> aResultValue"), }}, }, }}, }, { name: "Test array indexing result substitution on embedded variable substitution expression - matrix", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1773,7 +1773,7 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("Result value --> $(tasks.aTask.results.aResult[0])"), + Value: *v1beta1.NewStructuredValues("Result value --> $(tasks.aTask.results.aResult[0])"), }}, }, }}, @@ -1783,14 +1783,14 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Matrix: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("Result value --> arrayResultValueOne"), + Value: *v1beta1.NewStructuredValues("Result value --> arrayResultValueOne"), }}, }, }}, }, { name: "Test result substitution on embedded variable substitution expression - when expressions", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1824,7 +1824,7 @@ func TestApplyTaskResults_EmbeddedExpression(t *testing.T) { }, { name: "Test array indexing result substitution on embedded variable substitution expression - when expressions", resolvedResultRefs: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultValueOne", "arrayResultValueTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultValueOne", "arrayResultValueTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -1877,50 +1877,50 @@ func TestContext(t *testing.T) { pr: &v1beta1.PipelineRun{ ObjectMeta: metav1.ObjectMeta{Name: "name"}, }, - original: v1beta1.Param{Value: *v1beta1.NewArrayOrString("$(context.pipeline.name)-1")}, - expected: v1beta1.Param{Value: *v1beta1.NewArrayOrString("test-pipeline-1")}, + original: v1beta1.Param{Value: *v1beta1.NewStructuredValues("$(context.pipeline.name)-1")}, + expected: v1beta1.Param{Value: *v1beta1.NewStructuredValues("test-pipeline-1")}, }, { description: "context.pipelineRun.name defined", pr: &v1beta1.PipelineRun{ ObjectMeta: metav1.ObjectMeta{Name: "name"}, }, - original: v1beta1.Param{Value: *v1beta1.NewArrayOrString("$(context.pipelineRun.name)-1")}, - expected: v1beta1.Param{Value: *v1beta1.NewArrayOrString("name-1")}, + original: v1beta1.Param{Value: *v1beta1.NewStructuredValues("$(context.pipelineRun.name)-1")}, + expected: v1beta1.Param{Value: *v1beta1.NewStructuredValues("name-1")}, }, { description: "context.pipelineRun.name undefined", pr: &v1beta1.PipelineRun{ ObjectMeta: metav1.ObjectMeta{Name: ""}, }, - original: v1beta1.Param{Value: *v1beta1.NewArrayOrString("$(context.pipelineRun.name)-1")}, - expected: v1beta1.Param{Value: *v1beta1.NewArrayOrString("-1")}, + original: v1beta1.Param{Value: *v1beta1.NewStructuredValues("$(context.pipelineRun.name)-1")}, + expected: v1beta1.Param{Value: *v1beta1.NewStructuredValues("-1")}, }, { description: "context.pipelineRun.namespace defined", pr: &v1beta1.PipelineRun{ ObjectMeta: metav1.ObjectMeta{Namespace: "namespace"}, }, - original: v1beta1.Param{Value: *v1beta1.NewArrayOrString("$(context.pipelineRun.namespace)-1")}, - expected: v1beta1.Param{Value: *v1beta1.NewArrayOrString("namespace-1")}, + original: v1beta1.Param{Value: *v1beta1.NewStructuredValues("$(context.pipelineRun.namespace)-1")}, + expected: v1beta1.Param{Value: *v1beta1.NewStructuredValues("namespace-1")}, }, { description: "context.pipelineRun.namespace undefined", pr: &v1beta1.PipelineRun{ ObjectMeta: metav1.ObjectMeta{Namespace: ""}, }, - original: v1beta1.Param{Value: *v1beta1.NewArrayOrString("$(context.pipelineRun.namespace)-1")}, - expected: v1beta1.Param{Value: *v1beta1.NewArrayOrString("-1")}, + original: v1beta1.Param{Value: *v1beta1.NewStructuredValues("$(context.pipelineRun.namespace)-1")}, + expected: v1beta1.Param{Value: *v1beta1.NewStructuredValues("-1")}, }, { description: "context.pipelineRun.uid defined", pr: &v1beta1.PipelineRun{ ObjectMeta: metav1.ObjectMeta{UID: "UID"}, }, - original: v1beta1.Param{Value: *v1beta1.NewArrayOrString("$(context.pipelineRun.uid)-1")}, - expected: v1beta1.Param{Value: *v1beta1.NewArrayOrString("UID-1")}, + original: v1beta1.Param{Value: *v1beta1.NewStructuredValues("$(context.pipelineRun.uid)-1")}, + expected: v1beta1.Param{Value: *v1beta1.NewStructuredValues("UID-1")}, }, { description: "context.pipelineRun.uid undefined", pr: &v1beta1.PipelineRun{ ObjectMeta: metav1.ObjectMeta{UID: ""}, }, - original: v1beta1.Param{Value: *v1beta1.NewArrayOrString("$(context.pipelineRun.uid)-1")}, - expected: v1beta1.Param{Value: *v1beta1.NewArrayOrString("-1")}, + original: v1beta1.Param{Value: *v1beta1.NewStructuredValues("$(context.pipelineRun.uid)-1")}, + expected: v1beta1.Param{Value: *v1beta1.NewStructuredValues("-1")}, }} { t.Run(tc.description, func(t *testing.T) { orig := &v1beta1.Pipeline{ @@ -1954,22 +1954,22 @@ func TestApplyPipelineTaskContexts(t *testing.T) { Retries: 5, Params: []v1beta1.Param{{ Name: "retries", - Value: *v1beta1.NewArrayOrString("$(context.pipelineTask.retries)"), + Value: *v1beta1.NewStructuredValues("$(context.pipelineTask.retries)"), }}, Matrix: []v1beta1.Param{{ Name: "retries", - Value: *v1beta1.NewArrayOrString("$(context.pipelineTask.retries)"), + Value: *v1beta1.NewStructuredValues("$(context.pipelineTask.retries)"), }}, }, want: v1beta1.PipelineTask{ Retries: 5, Params: []v1beta1.Param{{ Name: "retries", - Value: *v1beta1.NewArrayOrString("5"), + Value: *v1beta1.NewStructuredValues("5"), }}, Matrix: []v1beta1.Param{{ Name: "retries", - Value: *v1beta1.NewArrayOrString("5"), + Value: *v1beta1.NewStructuredValues("5"), }}, }, }, { @@ -1977,21 +1977,21 @@ func TestApplyPipelineTaskContexts(t *testing.T) { pt: v1beta1.PipelineTask{ Params: []v1beta1.Param{{ Name: "retries", - Value: *v1beta1.NewArrayOrString("$(context.pipelineTask.retries)"), + Value: *v1beta1.NewStructuredValues("$(context.pipelineTask.retries)"), }}, Matrix: []v1beta1.Param{{ Name: "retries", - Value: *v1beta1.NewArrayOrString("$(context.pipelineTask.retries)"), + Value: *v1beta1.NewStructuredValues("$(context.pipelineTask.retries)"), }}, }, want: v1beta1.PipelineTask{ Params: []v1beta1.Param{{ Name: "retries", - Value: *v1beta1.NewArrayOrString("0"), + Value: *v1beta1.NewStructuredValues("0"), }}, Matrix: []v1beta1.Param{{ Name: "retries", - Value: *v1beta1.NewArrayOrString("0"), + Value: *v1beta1.NewStructuredValues("0"), }}, }, }} { @@ -2035,7 +2035,7 @@ func TestApplyWorkspaces(t *testing.T) { t.Run(tc.description, func(t *testing.T) { p1 := v1beta1.PipelineSpec{ Tasks: []v1beta1.PipelineTask{{ - Params: []v1beta1.Param{{Value: *v1beta1.NewArrayOrString(tc.variableUsage)}}, + Params: []v1beta1.Param{{Value: *v1beta1.NewStructuredValues(tc.variableUsage)}}, }}, Workspaces: tc.declarations, } @@ -2068,43 +2068,43 @@ func TestApplyFinallyResultsToPipelineResults(t *testing.T) { description: "single-string-result-single-successful-task", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(finally.pt1.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(finally.pt1.results.foo)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do"), + Value: *v1beta1.NewStructuredValues("do"), }, }, }, expected: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("do"), + Value: *v1beta1.NewStructuredValues("do"), }}, }, { description: "single-array-result-single-successful-task", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(finally.pt1.results.foo[*])"), + Value: *v1beta1.NewStructuredValues("$(finally.pt1.results.foo[*])"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do", "rae"), + Value: *v1beta1.NewStructuredValues("do", "rae"), }, }, }, expected: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("do", "rae"), + Value: *v1beta1.NewStructuredValues("do", "rae"), }}, }, { description: "multiple-results-custom-and-normal-tasks", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(finally.customtask.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(finally.customtask.results.foo)"), }}, runResults: map[string][]v1alpha1.RunResult{ "customtask": { @@ -2116,13 +2116,13 @@ func TestApplyFinallyResultsToPipelineResults(t *testing.T) { }, expected: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("do"), + Value: *v1beta1.NewStructuredValues("do"), }}, }, { description: "apply-object-results", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(finally.pt1.results.foo[*])"), + Value: *v1beta1.NewStructuredValues("$(finally.pt1.results.foo[*])"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { @@ -2147,13 +2147,13 @@ func TestApplyFinallyResultsToPipelineResults(t *testing.T) { description: "referencing-invalid-finally-task", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(finally.pt2.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(finally.pt2.results.foo)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do"), + Value: *v1beta1.NewStructuredValues("do"), }, }, }, @@ -2182,13 +2182,13 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "non-reference-results", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("resultName"), + Value: *v1beta1.NewStructuredValues("resultName"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }, }, }, @@ -2197,13 +2197,13 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "array-index-out-of-bound", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo[4])"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo[4])"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }, }, }, @@ -2213,7 +2213,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "object-reference-key-not-exist", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo.key3)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo.key3)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { @@ -2232,7 +2232,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "object-results-resultname-not-exist", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.bar.key1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.bar.key1)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { @@ -2251,43 +2251,43 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "apply-array-results", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo[*])"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo[*])"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }, }, }, expectedResults: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }}, }, { description: "apply-array-indexing-results", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo[1])"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo[1])"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }, }, }, expectedResults: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("rae"), + Value: *v1beta1.NewStructuredValues("rae"), }}, }, { description: "apply-object-results", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo[*])"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo[*])"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { @@ -2329,7 +2329,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { "pt2": { { Name: "bar", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }, }, }, @@ -2344,7 +2344,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "array-results-from-array-indexing-and-object-element", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo.key1)", "$(tasks.pt2.results.bar[1])"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo.key1)", "$(tasks.pt2.results.bar[1])"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { @@ -2359,19 +2359,19 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { "pt2": { { Name: "bar", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }, }, }, expectedResults: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("val1", "rae"), + Value: *v1beta1.NewStructuredValues("val1", "rae"), }}, }, { description: "apply-object-element", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo.key1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo.key1)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { @@ -2386,37 +2386,37 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { }, expectedResults: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("val1"), + Value: *v1beta1.NewStructuredValues("val1"), }}, }, { description: "multiple-array-results-multiple-successful-tasks ", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo[*])"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo[*])"), }, { Name: "pipeline-result-2", - Value: *v1beta1.NewArrayOrString("$(tasks.pt2.results.bar[*])"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt2.results.bar[*])"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do", "rae"), + Value: *v1beta1.NewStructuredValues("do", "rae"), }, }, "pt2": { { Name: "bar", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }, }, }, expectedResults: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("do", "rae"), + Value: *v1beta1.NewStructuredValues("do", "rae"), }, { Name: "pipeline-result-2", - Value: *v1beta1.NewArrayOrString("do", "rae", "mi"), + Value: *v1beta1.NewStructuredValues("do", "rae", "mi"), }}, }, { description: "no-pipeline-results-no-returned-results", @@ -2424,7 +2424,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": {{ Name: "foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }}, }, expectedResults: nil, @@ -2432,12 +2432,12 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "invalid-result-variable-no-returned-result", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1_results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1_results.foo)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": {{ Name: "foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }}, }, expectedResults: nil, @@ -2446,7 +2446,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "no-taskrun-results-no-returned-results", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": {}, @@ -2457,12 +2457,12 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "invalid-taskrun-name-no-returned-result", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "definitely-not-pt1": {{ Name: "foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }}, }, expectedResults: nil, @@ -2470,12 +2470,12 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "invalid-result-name-no-returned-result", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": {{ Name: "definitely-not-foo", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }}, }, expectedResults: nil, @@ -2484,7 +2484,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "unsuccessful-taskrun-no-returned-result", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{}, expectedResults: nil, @@ -2492,58 +2492,58 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "mixed-success-tasks-some-returned-results", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo)"), }, { Name: "bar", - Value: *v1beta1.NewArrayOrString("$(tasks.pt2.results.bar)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt2.results.bar)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt2": {{ Name: "bar", - Value: *v1beta1.NewArrayOrString("rae"), + Value: *v1beta1.NewStructuredValues("rae"), }}, }, expectedResults: []v1beta1.PipelineRunResult{{ Name: "bar", - Value: *v1beta1.NewArrayOrString("rae"), + Value: *v1beta1.NewStructuredValues("rae"), }}, expectedError: fmt.Errorf("invalid pipelineresults [foo], the referred results don't exist"), }, { description: "multiple-results-multiple-successful-tasks ", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo)"), }, { Name: "pipeline-result-2", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.foo), $(tasks.pt2.results.baz), $(tasks.pt1.results.bar), $(tasks.pt2.results.baz), $(tasks.pt1.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.foo), $(tasks.pt2.results.baz), $(tasks.pt1.results.bar), $(tasks.pt2.results.baz), $(tasks.pt1.results.foo)"), }}, taskResults: map[string][]v1beta1.TaskRunResult{ "pt1": { { Name: "foo", - Value: *v1beta1.NewArrayOrString("do"), + Value: *v1beta1.NewStructuredValues("do"), }, { Name: "bar", - Value: *v1beta1.NewArrayOrString("mi"), + Value: *v1beta1.NewStructuredValues("mi"), }, }, "pt2": {{ Name: "baz", - Value: *v1beta1.NewArrayOrString("rae"), + Value: *v1beta1.NewStructuredValues("rae"), }}, }, expectedResults: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("do"), + Value: *v1beta1.NewStructuredValues("do"), }, { Name: "pipeline-result-2", - Value: *v1beta1.NewArrayOrString("do, rae, mi, rae, do"), + Value: *v1beta1.NewStructuredValues("do, rae, mi, rae, do"), }}, }, { description: "no-run-results-no-returned-results", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.customtask.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.customtask.results.foo)"), }}, runResults: map[string][]v1alpha1.RunResult{}, expectedResults: nil, @@ -2551,7 +2551,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "wrong-customtask-name-no-returned-result", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.customtask.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.customtask.results.foo)"), }}, runResults: map[string][]v1alpha1.RunResult{ "differentcustomtask": {{ @@ -2565,7 +2565,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "right-customtask-name-wrong-result-name-no-returned-result", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.customtask.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.customtask.results.foo)"), }}, runResults: map[string][]v1alpha1.RunResult{ "customtask": {{ @@ -2579,7 +2579,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "unsuccessful-run-no-returned-result", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.customtask.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.customtask.results.foo)"), }}, runResults: map[string][]v1alpha1.RunResult{ "customtask": {}, @@ -2590,7 +2590,7 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "wrong-result-reference-expression", results: []v1beta1.PipelineResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("$(tasks.task.results.foo.foo.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.task.results.foo.foo.foo)"), }}, runResults: map[string][]v1alpha1.RunResult{ "customtask": {}, @@ -2601,10 +2601,10 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { description: "multiple-results-custom-and-normal-tasks", results: []v1beta1.PipelineResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("$(tasks.customtask.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.customtask.results.foo)"), }, { Name: "pipeline-result-2", - Value: *v1beta1.NewArrayOrString("$(tasks.customtask.results.foo), $(tasks.normaltask.results.baz), $(tasks.customtask.results.bar), $(tasks.normaltask.results.baz), $(tasks.customtask.results.foo)"), + Value: *v1beta1.NewStructuredValues("$(tasks.customtask.results.foo), $(tasks.normaltask.results.baz), $(tasks.customtask.results.bar), $(tasks.normaltask.results.baz), $(tasks.customtask.results.foo)"), }}, runResults: map[string][]v1alpha1.RunResult{ "customtask": { @@ -2620,15 +2620,15 @@ func TestApplyTaskResultsToPipelineResults(t *testing.T) { taskResults: map[string][]v1beta1.TaskRunResult{ "normaltask": {{ Name: "baz", - Value: *v1beta1.NewArrayOrString("rae"), + Value: *v1beta1.NewStructuredValues("rae"), }}, }, expectedResults: []v1beta1.PipelineRunResult{{ Name: "pipeline-result-1", - Value: *v1beta1.NewArrayOrString("do"), + Value: *v1beta1.NewStructuredValues("do"), }, { Name: "pipeline-result-2", - Value: *v1beta1.NewArrayOrString("do, rae, mi, rae, do"), + Value: *v1beta1.NewStructuredValues("do, rae, mi, rae, do"), }}, }} { t.Run(tc.description, func(t *testing.T) { @@ -2657,10 +2657,10 @@ func TestApplyTaskRunContext(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "task"}, Params: []v1beta1.Param{{ Name: "task1", - Value: *v1beta1.NewArrayOrString("$(tasks.task1.status)"), + Value: *v1beta1.NewStructuredValues("$(tasks.task1.status)"), }, { Name: "task3", - Value: *v1beta1.NewArrayOrString("$(tasks.task3.status)"), + Value: *v1beta1.NewStructuredValues("$(tasks.task3.status)"), }}, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(tasks.task1.status)", @@ -2675,10 +2675,10 @@ func TestApplyTaskRunContext(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "task"}, Params: []v1beta1.Param{{ Name: "task1", - Value: *v1beta1.NewArrayOrString("succeeded"), + Value: *v1beta1.NewStructuredValues("succeeded"), }, { Name: "task3", - Value: *v1beta1.NewArrayOrString("none"), + Value: *v1beta1.NewStructuredValues("none"), }}, WhenExpressions: v1beta1.WhenExpressions{{ Input: "succeeded", diff --git a/pkg/reconciler/pipelinerun/resources/pipelinerunresolution_test.go b/pkg/reconciler/pipelinerun/resources/pipelinerunresolution_test.go index 02a2f14819d..7be6bbbb9c4 100644 --- a/pkg/reconciler/pipelinerun/resources/pipelinerunresolution_test.go +++ b/pkg/reconciler/pipelinerun/resources/pipelinerunresolution_test.go @@ -120,18 +120,18 @@ var pts = []v1beta1.PipelineTask{{ }, { Name: "mytask15", TaskRef: &v1beta1.TaskRef{Name: "taskWithReferenceToTaskResult"}, - Params: []v1beta1.Param{{Name: "param1", Value: *v1beta1.NewArrayOrString("$(tasks.mytask1.results.result1)")}}, + Params: []v1beta1.Param{{Name: "param1", Value: *v1beta1.NewStructuredValues("$(tasks.mytask1.results.result1)")}}, }, { Name: "mytask16", Matrix: []v1beta1.Param{{ Name: "browser", - Value: v1beta1.ArrayOrString{ArrayVal: []string{"safari", "chrome"}}, + Value: v1beta1.ParamValue{ArrayVal: []string{"safari", "chrome"}}, }}, }, { Name: "mytask17", Matrix: []v1beta1.Param{{ Name: "browser", - Value: v1beta1.ArrayOrString{ArrayVal: []string{"safari", "chrome"}}, + Value: v1beta1.ParamValue{ArrayVal: []string{"safari", "chrome"}}, }}, }, { Name: "mytask18", @@ -139,21 +139,21 @@ var pts = []v1beta1.PipelineTask{{ Retries: 1, Matrix: []v1beta1.Param{{ Name: "browser", - Value: v1beta1.ArrayOrString{ArrayVal: []string{"safari", "chrome"}}, + Value: v1beta1.ParamValue{ArrayVal: []string{"safari", "chrome"}}, }}, }, { Name: "mytask19", TaskRef: &v1beta1.TaskRef{APIVersion: "example.dev/v0", Kind: "Example", Name: "customtask"}, Matrix: []v1beta1.Param{{ Name: "browser", - Value: v1beta1.ArrayOrString{ArrayVal: []string{"safari", "chrome"}}, + Value: v1beta1.ParamValue{ArrayVal: []string{"safari", "chrome"}}, }}, }, { Name: "mytask20", TaskRef: &v1beta1.TaskRef{APIVersion: "example.dev/v0", Kind: "Example", Name: "customtask"}, Matrix: []v1beta1.Param{{ Name: "browser", - Value: v1beta1.ArrayOrString{ArrayVal: []string{"safari", "chrome"}}, + Value: v1beta1.ParamValue{ArrayVal: []string{"safari", "chrome"}}, }}, }, { Name: "mytask21", @@ -161,7 +161,7 @@ var pts = []v1beta1.PipelineTask{{ Retries: 2, Matrix: []v1beta1.Param{{ Name: "browser", - Value: v1beta1.ArrayOrString{ArrayVal: []string{"safari", "chrome"}}, + Value: v1beta1.ParamValue{ArrayVal: []string{"safari", "chrome"}}, }}, }} @@ -234,7 +234,7 @@ var matrixedPipelineTask = &v1beta1.PipelineTask{ Name: "task", Matrix: []v1beta1.Param{{ Name: "browser", - Value: v1beta1.ArrayOrString{ArrayVal: []string{"safari", "chrome"}}, + Value: v1beta1.ParamValue{ArrayVal: []string{"safari", "chrome"}}, }}, } @@ -1069,7 +1069,7 @@ func TestIsSkipped(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "task"}, Params: []v1beta1.Param{{ Name: "commit", - Value: *v1beta1.NewArrayOrString("$(tasks.mytask11.results.missingResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.mytask11.results.missingResult)"), }}, }, TaskRunName: "pipelinerun-resource-dependent-task-1", @@ -2059,10 +2059,10 @@ func TestResolvePipelineRun_TaskDoesntExist(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "task"}, Matrix: []v1beta1.Param{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("f", "o", "o"), + Value: *v1beta1.NewStructuredValues("f", "o", "o"), }, { Name: "bar", - Value: *v1beta1.NewArrayOrString("b", "a", "r"), + Value: *v1beta1.NewStructuredValues("b", "a", "r"), }}, }} providedResources := map[string]*resourcev1alpha1.PipelineResource{} @@ -2778,7 +2778,7 @@ func TestResolvedPipelineRunTask_IsFinallySkipped(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "commit", - Value: *v1beta1.NewArrayOrString("SHA2"), + Value: *v1beta1.NewStructuredValues("SHA2"), }}, }, }, @@ -2797,7 +2797,7 @@ func TestResolvedPipelineRunTask_IsFinallySkipped(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "task"}, Params: []v1beta1.Param{{ Name: "commit", - Value: *v1beta1.NewArrayOrString("$(tasks.dag-task.results.commit)"), + Value: *v1beta1.NewStructuredValues("$(tasks.dag-task.results.commit)"), }}, }, }, { @@ -2806,7 +2806,7 @@ func TestResolvedPipelineRunTask_IsFinallySkipped(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "task"}, Params: []v1beta1.Param{{ Name: "commit", - Value: *v1beta1.NewArrayOrString("$(tasks.dag-task.results.missingResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.dag-task.results.missingResult)"), }}, }, }, { @@ -3037,7 +3037,7 @@ func TestResolvedPipelineRunTask_IsFinalTask(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "commit", - Value: *v1beta1.NewArrayOrString("SHA2"), + Value: *v1beta1.NewStructuredValues("SHA2"), }}, }, }, @@ -3056,7 +3056,7 @@ func TestResolvedPipelineRunTask_IsFinalTask(t *testing.T) { TaskRef: &v1beta1.TaskRef{Name: "task"}, Params: []v1beta1.Param{{ Name: "commit", - Value: *v1beta1.NewArrayOrString("$(tasks.dag-task.results.commit)"), + Value: *v1beta1.NewStructuredValues("$(tasks.dag-task.results.commit)"), }}, }, }, @@ -3358,7 +3358,7 @@ func TestIsMatrixed(t *testing.T) { }, Matrix: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }}, }, want: true, @@ -3379,7 +3379,7 @@ func TestIsMatrixed(t *testing.T) { }, Matrix: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }}, }, want: true, @@ -3446,7 +3446,7 @@ func TestResolvePipelineRunTask_WithMatrix(t *testing.T) { }, Matrix: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }}, }, { Name: "pipelinetask", @@ -3455,10 +3455,10 @@ func TestResolvePipelineRunTask_WithMatrix(t *testing.T) { }, Matrix: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }, { Name: "browsers", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"chrome", "safari", "firefox"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"chrome", "safari", "firefox"}}, }}, }} @@ -3553,7 +3553,7 @@ func TestResolvePipelineRunTask_WithMatrixedCustomTask(t *testing.T) { }, Matrix: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }}, }, { Name: "pipelinetask", @@ -3564,10 +3564,10 @@ func TestResolvePipelineRunTask_WithMatrixedCustomTask(t *testing.T) { }, Matrix: []v1beta1.Param{{ Name: "platform", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"linux", "mac", "windows"}}, }, { Name: "browsers", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"chrome", "safari", "firefox"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"chrome", "safari", "firefox"}}, }}, }} diff --git a/pkg/reconciler/pipelinerun/resources/pipelinerunstate_test.go b/pkg/reconciler/pipelinerun/resources/pipelinerunstate_test.go index b934d74a54d..b164c222cfc 100644 --- a/pkg/reconciler/pipelinerun/resources/pipelinerunstate_test.go +++ b/pkg/reconciler/pipelinerun/resources/pipelinerunstate_test.go @@ -1423,7 +1423,7 @@ func buildPipelineStateWithLargeDepencyGraph(t *testing.T) PipelineRunState { for alpha = 'a'; alpha <= 'j'; alpha++ { params = append(params, v1beta1.Param{ Name: fmt.Sprintf("%c", alpha), - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ Type: v1beta1.ParamTypeString, StringVal: fmt.Sprintf("$(tasks.t%d.results.%c)", dependFrom, alpha), }, @@ -2567,10 +2567,10 @@ func TestPipelineRunState_GetResultsFuncs(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("oof"), + Value: *v1beta1.NewStructuredValues("oof"), }, { Name: "bar", - Value: *v1beta1.NewArrayOrString("rab"), + Value: *v1beta1.NewStructuredValues("rab"), }}, }, }, @@ -2603,7 +2603,7 @@ func TestPipelineRunState_GetResultsFuncs(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "fail-foo", - Value: *v1beta1.NewArrayOrString("fail-oof"), + Value: *v1beta1.NewStructuredValues("fail-oof"), }}, }, }, @@ -2622,7 +2622,7 @@ func TestPipelineRunState_GetResultsFuncs(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "unknown-foo", - Value: *v1beta1.NewArrayOrString("unknown-oof"), + Value: *v1beta1.NewStructuredValues("unknown-oof"), }}, }, }, @@ -2730,10 +2730,10 @@ func TestPipelineRunState_GetResultsFuncs(t *testing.T) { }, Matrix: []v1beta1.Param{{ Name: "foobar", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { Name: "quxbaz", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, }}, }, TaskRuns: []*v1beta1.TaskRun{{ @@ -2792,10 +2792,10 @@ func TestPipelineRunState_GetResultsFuncs(t *testing.T) { }, Matrix: []v1beta1.Param{{ Name: "foobar", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { Name: "quxbaz", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, }}, }, Runs: []*v1alpha1.Run{{ @@ -2876,10 +2876,10 @@ func TestPipelineRunState_GetResultsFuncs(t *testing.T) { expectedTaskResults := map[string][]v1beta1.TaskRunResult{ "successful-task-with-results-1": {{ Name: "foo", - Value: *v1beta1.NewArrayOrString("oof"), + Value: *v1beta1.NewStructuredValues("oof"), }, { Name: "bar", - Value: *v1beta1.NewArrayOrString("rab"), + Value: *v1beta1.NewStructuredValues("rab"), }}, "successful-task-without-results-1": nil, } @@ -3086,10 +3086,10 @@ func TestPipelineRunState_GetChildReferences(t *testing.T) { }}, Matrix: []v1beta1.Param{{ Name: "foobar", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { Name: "quxbaz", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, }}, }, TaskRuns: []*v1beta1.TaskRun{nil, nil, nil, nil}, @@ -3114,10 +3114,10 @@ func TestPipelineRunState_GetChildReferences(t *testing.T) { }}, Matrix: []v1beta1.Param{{ Name: "foobar", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { Name: "quxbaz", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, }}, }, TaskRuns: []*v1beta1.TaskRun{{ @@ -3200,10 +3200,10 @@ func TestPipelineRunState_GetChildReferences(t *testing.T) { }}, Matrix: []v1beta1.Param{{ Name: "foobar", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { Name: "quxbaz", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, }}, }, CustomTask: true, @@ -3226,10 +3226,10 @@ func TestPipelineRunState_GetChildReferences(t *testing.T) { }}, Matrix: []v1beta1.Param{{ Name: "foobar", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"foo", "bar"}}, }, { Name: "quxbaz", - Value: v1beta1.ArrayOrString{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, + Value: v1beta1.ParamValue{Type: v1beta1.ParamTypeArray, ArrayVal: []string{"qux", "baz"}}, }}, }, CustomTask: true, diff --git a/pkg/reconciler/pipelinerun/resources/resultrefresolution.go b/pkg/reconciler/pipelinerun/resources/resultrefresolution.go index 73d41f64c81..2549aadf922 100644 --- a/pkg/reconciler/pipelinerun/resources/resultrefresolution.go +++ b/pkg/reconciler/pipelinerun/resources/resultrefresolution.go @@ -31,7 +31,7 @@ type ResolvedResultRefs []*ResolvedResultRef // If the value is from a Result, then the ResultReference will be populated to point to the ResultReference // which resulted in the value type ResolvedResultRef struct { - Value v1beta1.ArrayOrString + Value v1beta1.ResultValue ResultReference v1beta1.ResultRef FromTaskRun string FromRun string @@ -151,12 +151,12 @@ func resolveResultRef(pipelineState PipelineRunState, resultRef *v1beta1.ResultR } var runName, runValue, taskRunName string - var resultValue v1beta1.ArrayOrString + var resultValue v1beta1.ResultValue var err error if referencedPipelineTask.IsCustomTask() { runName = referencedPipelineTask.Run.Name runValue, err = findRunResultForParam(referencedPipelineTask.Run, resultRef) - resultValue = *v1beta1.NewArrayOrString(runValue) + resultValue = *v1beta1.NewStructuredValues(runValue) if err != nil { return nil, resultRef.PipelineTask, err } @@ -186,14 +186,14 @@ func findRunResultForParam(run *v1alpha1.Run, reference *v1beta1.ResultRef) (str return "", fmt.Errorf("Could not find result with name %s for task %s", reference.Result, reference.PipelineTask) } -func findTaskResultForParam(taskRun *v1beta1.TaskRun, reference *v1beta1.ResultRef) (v1beta1.ArrayOrString, error) { +func findTaskResultForParam(taskRun *v1beta1.TaskRun, reference *v1beta1.ResultRef) (v1beta1.ResultValue, error) { results := taskRun.Status.TaskRunStatusFields.TaskRunResults for _, result := range results { if result.Name == reference.Result { return result.Value, nil } } - return v1beta1.ArrayOrString{}, fmt.Errorf("Could not find result with name %s for task %s", reference.Result, reference.PipelineTask) + return v1beta1.ResultValue{}, fmt.Errorf("Could not find result with name %s for task %s", reference.Result, reference.PipelineTask) } func (rs ResolvedResultRefs) getStringReplacements() map[string]string { diff --git a/pkg/reconciler/pipelinerun/resources/resultrefresolution_test.go b/pkg/reconciler/pipelinerun/resources/resultrefresolution_test.go index 0b2990aea3c..77ff8eaff86 100644 --- a/pkg/reconciler/pipelinerun/resources/resultrefresolution_test.go +++ b/pkg/reconciler/pipelinerun/resources/resultrefresolution_test.go @@ -43,7 +43,7 @@ var pipelineRunState = PipelineRunState{{ TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "aResult", - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), }}, }, }, @@ -58,7 +58,7 @@ var pipelineRunState = PipelineRunState{{ TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult)"), }}, }, }, { @@ -87,7 +87,7 @@ var pipelineRunState = PipelineRunState{{ TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.missingResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.missingResult)"), }}, }, }, { @@ -117,7 +117,7 @@ var pipelineRunState = PipelineRunState{{ TaskRef: &v1beta1.TaskRef{Name: "bTask"}, Params: []v1beta1.Param{{ Name: "bParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aCustomPipelineTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aCustomPipelineTask.results.aResult)"), }}, }, }, { @@ -133,7 +133,7 @@ var pipelineRunState = PipelineRunState{{ TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "cResult", - Value: *v1beta1.NewArrayOrString("arrayResultOne", "arrayResultTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultOne", "arrayResultTwo"), }}, }, }, @@ -143,7 +143,7 @@ var pipelineRunState = PipelineRunState{{ TaskRef: &v1beta1.TaskRef{Name: "cTask"}, Params: []v1beta1.Param{{ Name: "cParam", - Value: *v1beta1.NewArrayOrString("$(tasks.cTask.results.cResult[1])"), + Value: *v1beta1.NewStructuredValues("$(tasks.cTask.results.cResult[1])"), }}, }, }, { @@ -159,7 +159,7 @@ var pipelineRunState = PipelineRunState{{ TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "dResult", - Value: *v1beta1.NewArrayOrString("arrayResultOne", "arrayResultTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultOne", "arrayResultTwo"), }}, }, }, @@ -169,7 +169,7 @@ var pipelineRunState = PipelineRunState{{ TaskRef: &v1beta1.TaskRef{Name: "dTask"}, Params: []v1beta1.Param{{ Name: "dParam", - Value: *v1beta1.NewArrayOrString("$(tasks.dTask.results.dResult[3])"), + Value: *v1beta1.NewStructuredValues("$(tasks.dTask.results.dResult[3])"), }}, }, }} @@ -194,7 +194,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("explicitValueNoResultReference"), + Value: *v1beta1.NewStructuredValues("explicitValueNoResultReference"), }, want: nil, wantErr: false, @@ -211,7 +211,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "aResult", - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), }}, }, }, @@ -223,10 +223,10 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult)"), }, want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -247,7 +247,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "aResult", - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), }}, }, }, @@ -267,7 +267,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "bResult", - Value: *v1beta1.NewArrayOrString("bResultValue"), + Value: *v1beta1.NewStructuredValues("bResultValue"), }}, }, }, @@ -279,17 +279,17 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.aResult) $(tasks.bTask.results.bResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult) $(tasks.bTask.results.bResult)"), }, want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", }, FromTaskRun: "aTaskRun", }, { - Value: *v1beta1.NewArrayOrString("bResultValue"), + Value: *v1beta1.NewStructuredValues("bResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "bTask", Result: "bResult", @@ -310,7 +310,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { TaskRunStatusFields: v1beta1.TaskRunStatusFields{ TaskRunResults: []v1beta1.TaskRunResult{{ Name: "aResult", - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), }}, }, }, @@ -322,10 +322,10 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.aResult) $(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult) $(tasks.aTask.results.aResult)"), }, want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -352,7 +352,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult)"), }, want: nil, wantErr: true, @@ -361,7 +361,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { pipelineRunState: PipelineRunState{}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult)"), }, want: nil, wantErr: true, @@ -375,7 +375,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult)"), }, want: nil, wantErr: true, @@ -398,7 +398,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult)"), }, want: nil, wantErr: true, @@ -428,10 +428,10 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aCustomPipelineTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aCustomPipelineTask.results.aResult)"), }, want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aCustomPipelineTask", Result: "aResult", @@ -459,7 +459,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) { }}, param: v1beta1.Param{ Name: "targetParam", - Value: *v1beta1.NewArrayOrString("$(tasks.aCustomPipelineTask.results.aResult)"), + Value: *v1beta1.NewStructuredValues("$(tasks.aCustomPipelineTask.results.aResult)"), }, want: nil, wantErr: true, @@ -523,7 +523,7 @@ func TestResolveResultRefs(t *testing.T) { pipelineRunState[1], }, want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -538,7 +538,7 @@ func TestResolveResultRefs(t *testing.T) { pipelineRunState[7], }, want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("arrayResultOne", "arrayResultTwo"), + Value: *v1beta1.NewStructuredValues("arrayResultOne", "arrayResultTwo"), ResultReference: v1beta1.ResultRef{ PipelineTask: "cTask", Result: "cResult", @@ -562,7 +562,7 @@ func TestResolveResultRefs(t *testing.T) { pipelineRunState[2], }, want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -603,7 +603,7 @@ func TestResolveResultRefs(t *testing.T) { pipelineRunState[6], }, want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aCustomPipelineTask", Result: "aResult", @@ -641,7 +641,7 @@ func TestResolveResultRef(t *testing.T) { pipelineRunState: pipelineRunState, target: pipelineRunState[1], want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -654,7 +654,7 @@ func TestResolveResultRef(t *testing.T) { pipelineRunState: pipelineRunState, target: pipelineRunState[2], want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aTask", Result: "aResult", @@ -687,7 +687,7 @@ func TestResolveResultRef(t *testing.T) { pipelineRunState: pipelineRunState, target: pipelineRunState[6], want: ResolvedResultRefs{{ - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), ResultReference: v1beta1.ResultRef{ PipelineTask: "aCustomPipelineTask", Result: "aResult", diff --git a/pkg/reconciler/pipelinerun/resources/validate_dependencies_test.go b/pkg/reconciler/pipelinerun/resources/validate_dependencies_test.go index 41358dacf4d..fbabfd11020 100644 --- a/pkg/reconciler/pipelinerun/resources/validate_dependencies_test.go +++ b/pkg/reconciler/pipelinerun/resources/validate_dependencies_test.go @@ -38,7 +38,7 @@ func TestValidatePipelineTaskResults_ValidStates(t *testing.T) { Name: "pt1", Params: []v1beta1.Param{{ Name: "p1", - Value: *v1beta1.NewArrayOrString("foo"), + Value: *v1beta1.NewStructuredValues("foo"), }}, }, }}, @@ -61,7 +61,7 @@ func TestValidatePipelineTaskResults_ValidStates(t *testing.T) { Name: "pt2", Params: []v1beta1.Param{{ Name: "p", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.result)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.result)"), }}, }, }}, @@ -84,7 +84,7 @@ func TestValidatePipelineTaskResults_ValidStates(t *testing.T) { Name: "pt2", Matrix: []v1beta1.Param{{ Name: "p", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.result)", "foo"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.result)", "foo"), }}, }, }}, @@ -101,7 +101,7 @@ func TestValidatePipelineTaskResults_ValidStates(t *testing.T) { Name: "pt2", Params: []v1beta1.Param{{ Name: "p", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.a-dynamic-custom-task-result)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.a-dynamic-custom-task-result)"), }}, }, }}, @@ -128,7 +128,7 @@ func TestValidatePipelineTaskResults_IncorrectTaskName(t *testing.T) { Name: "pt1", Params: []v1beta1.Param{{ Name: "p1", - Value: *v1beta1.NewArrayOrString(missingPipelineTaskVariable), + Value: *v1beta1.NewStructuredValues(missingPipelineTaskVariable), }}, }, }}, @@ -139,7 +139,7 @@ func TestValidatePipelineTaskResults_IncorrectTaskName(t *testing.T) { Name: "pt1", Params: []v1beta1.Param{{ Name: "p1", - Value: *v1beta1.NewArrayOrString(missingPipelineTaskVariable, "foo"), + Value: *v1beta1.NewStructuredValues(missingPipelineTaskVariable, "foo"), }}, }, }}, @@ -193,7 +193,7 @@ func TestValidatePipelineTaskResults_IncorrectResultName(t *testing.T) { Name: "pt2", Params: []v1beta1.Param{{ Name: "p1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.result1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.result1)"), }}, }, }}, @@ -204,7 +204,7 @@ func TestValidatePipelineTaskResults_IncorrectResultName(t *testing.T) { Name: "pt2", Matrix: []v1beta1.Param{{ Name: "p1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.result1)", "$(tasks.pt1.results.result2)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.result1)", "$(tasks.pt1.results.result2)"), }}, }, }}, @@ -249,7 +249,7 @@ func TestValidatePipelineTaskResults_MissingTaskSpec(t *testing.T) { Name: "pt2", Params: []v1beta1.Param{{ Name: "p1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.result1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.result1)"), }}, }, }, { @@ -257,7 +257,7 @@ func TestValidatePipelineTaskResults_MissingTaskSpec(t *testing.T) { Name: "pt3", Matrix: []v1beta1.Param{{ Name: "p1", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.result1)", "$(tasks.pt1.results.result2)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.result1)", "$(tasks.pt1.results.result2)"), }}, }, }} @@ -279,7 +279,7 @@ func TestValidatePipelineResults_ValidStates(t *testing.T) { spec: &v1beta1.PipelineSpec{ Results: []v1beta1.PipelineResult{{ Name: "foo-result", - Value: *v1beta1.NewArrayOrString("just a text pipeline result"), + Value: *v1beta1.NewStructuredValues("just a text pipeline result"), }}, }, state: nil, @@ -288,7 +288,7 @@ func TestValidatePipelineResults_ValidStates(t *testing.T) { spec: &v1beta1.PipelineSpec{ Results: []v1beta1.PipelineResult{{ Name: "foo-result", - Value: *v1beta1.NewArrayOrString("test $(tasks.pt1.results.result1) 123"), + Value: *v1beta1.NewStructuredValues("test $(tasks.pt1.results.result1) 123"), }}, }, state: PipelineRunState{{ @@ -319,7 +319,7 @@ func TestValidatePipelineResults_IncorrectTaskName(t *testing.T) { spec := &v1beta1.PipelineSpec{ Results: []v1beta1.PipelineResult{{ Name: "foo-result", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.result1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.result1)"), }}, } state := PipelineRunState{} @@ -335,7 +335,7 @@ func TestValidatePipelineResults_IncorrectResultName(t *testing.T) { spec := &v1beta1.PipelineSpec{ Results: []v1beta1.PipelineResult{{ Name: "foo-result", - Value: *v1beta1.NewArrayOrString("$(tasks.pt1.results.result1)"), + Value: *v1beta1.NewStructuredValues("$(tasks.pt1.results.result1)"), }}, } state := PipelineRunState{{ diff --git a/pkg/reconciler/pipelinerun/resources/validate_params_test.go b/pkg/reconciler/pipelinerun/resources/validate_params_test.go index 570bc4d0a7f..09cd0be834c 100644 --- a/pkg/reconciler/pipelinerun/resources/validate_params_test.go +++ b/pkg/reconciler/pipelinerun/resources/validate_params_test.go @@ -31,8 +31,8 @@ import ( func TestValidateParamTypesMatching_Valid(t *testing.T) { - stringValue := *v1beta1.NewArrayOrString("stringValue") - arrayValue := *v1beta1.NewArrayOrString("arrayValue", "arrayValue") + stringValue := *v1beta1.NewStructuredValues("stringValue") + arrayValue := *v1beta1.NewStructuredValues("arrayValue", "arrayValue") for _, tc := range []struct { name string @@ -70,8 +70,8 @@ func TestValidateParamTypesMatching_Valid(t *testing.T) { func TestValidateParamTypesMatching_Invalid(t *testing.T) { - stringValue := *v1beta1.NewArrayOrString("stringValue") - arrayValue := *v1beta1.NewArrayOrString("arrayValue", "arrayValue") + stringValue := *v1beta1.NewStructuredValues("stringValue") + arrayValue := *v1beta1.NewStructuredValues("arrayValue", "arrayValue") for _, tc := range []struct { name string @@ -119,8 +119,8 @@ func TestValidateParamTypesMatching_Invalid(t *testing.T) { func TestValidateRequiredParametersProvided_Valid(t *testing.T) { - stringValue := *v1beta1.NewArrayOrString("stringValue") - arrayValue := *v1beta1.NewArrayOrString("arrayValue", "arrayValue") + stringValue := *v1beta1.NewStructuredValues("stringValue") + arrayValue := *v1beta1.NewStructuredValues("arrayValue", "arrayValue") for _, tc := range []struct { name string @@ -162,8 +162,8 @@ func TestValidateRequiredParametersProvided_Valid(t *testing.T) { func TestValidateRequiredParametersProvided_Invalid(t *testing.T) { - stringValue := *v1beta1.NewArrayOrString("stringValue") - arrayValue := *v1beta1.NewArrayOrString("arrayValue", "arrayValue") + stringValue := *v1beta1.NewStructuredValues("stringValue") + arrayValue := *v1beta1.NewStructuredValues("arrayValue", "arrayValue") for _, tc := range []struct { name string @@ -315,23 +315,23 @@ func TestValidateParamArrayIndex_valid(t *testing.T) { name: "single parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[1])")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[0])")}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[1])")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[0])")}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, }, { name: "single parameter with when expression", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ @@ -342,18 +342,18 @@ func TestValidateParamArrayIndex_valid(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, }, { name: "pipeline parameter nested inside task parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, - {Name: "second-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, + {Name: "second-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.first-param[0]))")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.second-param[1]))")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.first-param[0]))")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.second-param[1]))")}, }, }}, }, @@ -362,30 +362,30 @@ func TestValidateParamArrayIndex_valid(t *testing.T) { name: "array parameter", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default", "array", "value")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default", "array", "value")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("firstelement", "$(params.first-param)")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("firstelement", "$(params.second-param[0])")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("firstelement", "$(params.first-param)")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("firstelement", "$(params.second-param[0])")}, }, }}, }, params: []v1beta1.Param{ - {Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "array")}, + {Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "array")}, }, }, { name: "parameter evaluation with final tasks", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[0])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[1])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[0])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[1])")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.first-param[0])", @@ -394,24 +394,24 @@ func TestValidateParamArrayIndex_valid(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, }, { name: "parameter evaluation with both tasks and final tasks", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[0])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[1])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[0])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[1])")}, }, }}, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[0])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[1])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[0])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[1])")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.first-param[0])", @@ -420,41 +420,41 @@ func TestValidateParamArrayIndex_valid(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, }, { name: "parameter references with bracket notation and special characters", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second/param", Type: v1beta1.ParamTypeArray}, - {Name: "third.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "third.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "fourth/param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString(`$(params["first.param"][0])`)}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString(`$(params["second/param"][0])`)}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString(`$(params['third.param'][1])`)}, - {Name: "first-task-fourth-param", Value: *v1beta1.NewArrayOrString(`$(params['fourth/param'][1])`)}, - {Name: "first-task-fifth-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues(`$(params["first.param"][0])`)}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues(`$(params["second/param"][0])`)}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues(`$(params['third.param'][1])`)}, + {Name: "first-task-fourth-param", Value: *v1beta1.NewStructuredValues(`$(params['fourth/param'][1])`)}, + {Name: "first-task-fifth-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, params: []v1beta1.Param{ - {Name: "second/param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}, - {Name: "fourth/param", Value: *v1beta1.NewArrayOrString("fourth-value", "fourth-value-again")}, + {Name: "second/param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}, + {Name: "fourth/param", Value: *v1beta1.NewStructuredValues("fourth-value", "fourth-value-again")}, }, }, { name: "single parameter in workspace subpath", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[0])")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[0])")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("static value")}, }, Workspaces: []v1beta1.WorkspacePipelineTaskBinding{ { @@ -465,7 +465,7 @@ func TestValidateParamArrayIndex_valid(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, }, } { tt := tt // capture range variable @@ -498,24 +498,24 @@ func TestValidateParamArrayIndex_invalid(t *testing.T) { name: "single parameter reference out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[2])")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[2])")}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[2])")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[2])")}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: fmt.Errorf("non-existent param references:[$(params.first-param[2]) $(params.second-param[2])]"), }, { name: "single parameter reference with when expression out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeString}, }, Tasks: []v1beta1.PipelineTask{{ @@ -526,19 +526,19 @@ func TestValidateParamArrayIndex_invalid(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: fmt.Errorf("non-existent param references:[$(params.first-param[2]) $(params.second-param[2])]"), }, { name: "pipeline parameter reference nested inside task parameter out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, - {Name: "second-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, + {Name: "second-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.first-param[2]))")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("$(input.workspace.$(params.second-param[2]))")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.first-param[2]))")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("$(input.workspace.$(params.second-param[2]))")}, }, }}, }, @@ -548,25 +548,25 @@ func TestValidateParamArrayIndex_invalid(t *testing.T) { name: "array parameter reference out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default", "array", "value")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default", "array", "value")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("firstelement", "$(params.first-param[3])")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("firstelement", "$(params.second-param[4])")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("firstelement", "$(params.first-param[3])")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("firstelement", "$(params.second-param[4])")}, }, }}, }, params: []v1beta1.Param{ - {Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "array")}, + {Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "array")}, }, expected: fmt.Errorf("non-existent param references:[$(params.first-param[3]) $(params.second-param[4])]"), }, { name: "object parameter reference out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default", "array", "value")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default", "array", "value")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ @@ -579,20 +579,20 @@ func TestValidateParamArrayIndex_invalid(t *testing.T) { }}, }, params: []v1beta1.Param{ - {Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "array")}, + {Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "array")}, }, expected: fmt.Errorf("non-existent param references:[$(params.first-param[4]) $(params.second-param[4])]"), }, { name: "parameter evaluation with final tasks reference out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[2])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[2])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[2])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[2])")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.first-param[0])", @@ -601,25 +601,25 @@ func TestValidateParamArrayIndex_invalid(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: fmt.Errorf("non-existent param references:[$(params.first-param[2]) $(params.second-param[2])]"), }, { name: "parameter evaluation with both tasks and final tasks reference out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[2])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[2])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[2])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[2])")}, }, }}, Finally: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "final-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[3])")}, - {Name: "final-task-second-param", Value: *v1beta1.NewArrayOrString("$(params.second-param[3])")}, + {Name: "final-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[3])")}, + {Name: "final-task-second-param", Value: *v1beta1.NewStructuredValues("$(params.second-param[3])")}, }, WhenExpressions: v1beta1.WhenExpressions{{ Input: "$(params.first-param[2])", @@ -628,43 +628,43 @@ func TestValidateParamArrayIndex_invalid(t *testing.T) { }}, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: fmt.Errorf("non-existent param references:[$(params.first-param[2]) $(params.first-param[3]) $(params.second-param[2]) $(params.second-param[3])]"), }, { name: "parameter references with bracket notation and special characters reference out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second/param", Type: v1beta1.ParamTypeArray}, - {Name: "third.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "third.param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "fourth/param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString(`$(params["first.param"][2])`)}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString(`$(params["second/param"][2])`)}, - {Name: "first-task-third-param", Value: *v1beta1.NewArrayOrString(`$(params['third.param'][2])`)}, - {Name: "first-task-fourth-param", Value: *v1beta1.NewArrayOrString(`$(params['fourth/param'][2])`)}, - {Name: "first-task-fifth-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues(`$(params["first.param"][2])`)}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues(`$(params["second/param"][2])`)}, + {Name: "first-task-third-param", Value: *v1beta1.NewStructuredValues(`$(params['third.param'][2])`)}, + {Name: "first-task-fourth-param", Value: *v1beta1.NewStructuredValues(`$(params['fourth/param'][2])`)}, + {Name: "first-task-fifth-param", Value: *v1beta1.NewStructuredValues("static value")}, }, }}, }, params: []v1beta1.Param{ - {Name: "second/param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}, - {Name: "fourth/param", Value: *v1beta1.NewArrayOrString("fourth-value", "fourth-value-again")}, + {Name: "second/param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}, + {Name: "fourth/param", Value: *v1beta1.NewStructuredValues("fourth-value", "fourth-value-again")}, }, expected: fmt.Errorf("non-existent param references:[$(params[\"first.param\"][2]) $(params[\"second/param\"][2]) $(params['fourth/param'][2]) $(params['third.param'][2])]"), }, { name: "single parameter in workspace subpath reference out of bound", original: v1beta1.PipelineSpec{ Params: []v1beta1.ParamSpec{ - {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewArrayOrString("default-value", "default-value-again")}, + {Name: "first-param", Type: v1beta1.ParamTypeArray, Default: v1beta1.NewStructuredValues("default-value", "default-value-again")}, {Name: "second-param", Type: v1beta1.ParamTypeArray}, }, Tasks: []v1beta1.PipelineTask{{ Params: []v1beta1.Param{ - {Name: "first-task-first-param", Value: *v1beta1.NewArrayOrString("$(params.first-param[2])")}, - {Name: "first-task-second-param", Value: *v1beta1.NewArrayOrString("static value")}, + {Name: "first-task-first-param", Value: *v1beta1.NewStructuredValues("$(params.first-param[2])")}, + {Name: "first-task-second-param", Value: *v1beta1.NewStructuredValues("static value")}, }, Workspaces: []v1beta1.WorkspacePipelineTaskBinding{ { @@ -675,7 +675,7 @@ func TestValidateParamArrayIndex_invalid(t *testing.T) { }, }}, }, - params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewArrayOrString("second-value", "second-value-again")}}, + params: []v1beta1.Param{{Name: "second-param", Value: *v1beta1.NewStructuredValues("second-value", "second-value-again")}}, expected: fmt.Errorf("non-existent param references:[$(params.first-param[2]) $(params.second-param[3])]"), }, } { diff --git a/pkg/reconciler/taskrun/resources/apply_test.go b/pkg/reconciler/taskrun/resources/apply_test.go index ab4d6634e6e..5855a532675 100644 --- a/pkg/reconciler/taskrun/resources/apply_test.go +++ b/pkg/reconciler/taskrun/resources/apply_test.go @@ -609,7 +609,7 @@ var ( Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "array-param", - Value: v1beta1.ArrayOrString{ + Value: v1beta1.ParamValue{ Type: v1beta1.ParamTypeArray, ArrayVal: []string{}, }}, @@ -621,7 +621,7 @@ var ( Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "array-param", - Value: *v1beta1.NewArrayOrString("foo"), + Value: *v1beta1.NewStructuredValues("foo"), }}, }, } @@ -630,7 +630,7 @@ var ( Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "array-param", - Value: *v1beta1.NewArrayOrString("foo", "bar", "third"), + Value: *v1beta1.NewStructuredValues("foo", "bar", "third"), }}, }, } @@ -639,10 +639,10 @@ var ( Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "array-param", - Value: *v1beta1.NewArrayOrString("foo", "bar", "third"), + Value: *v1beta1.NewStructuredValues("foo", "bar", "third"), }, { Name: "another-array-param", - Value: *v1beta1.NewArrayOrString("part1", "part2"), + Value: *v1beta1.NewStructuredValues("part1", "part2"), }}, }, } @@ -651,10 +651,10 @@ var ( Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "array-param", - Value: *v1beta1.NewArrayOrString("middlefirst", "middlesecond"), + Value: *v1beta1.NewStructuredValues("middlefirst", "middlesecond"), }, { Name: "normal-param", - Value: *v1beta1.NewArrayOrString("foo"), + Value: *v1beta1.NewStructuredValues("foo"), }}, }, } @@ -663,7 +663,7 @@ var ( Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "array-param", - Value: *v1beta1.NewArrayOrString("middlefirst", "middlesecond"), + Value: *v1beta1.NewStructuredValues("middlefirst", "middlesecond"), }, { Name: "myObject", Value: *v1beta1.NewObject(map[string]string{ @@ -678,16 +678,16 @@ var ( Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "array-param1", - Value: *v1beta1.NewArrayOrString("1-param1", "2-param1", "3-param1", "4-param1"), + Value: *v1beta1.NewStructuredValues("1-param1", "2-param1", "3-param1", "4-param1"), }, { Name: "array-param2", - Value: *v1beta1.NewArrayOrString("1-param2", "2-param2", "2-param3"), + Value: *v1beta1.NewStructuredValues("1-param2", "2-param2", "2-param3"), }, { Name: "string-param1", - Value: *v1beta1.NewArrayOrString("foo"), + Value: *v1beta1.NewStructuredValues("foo"), }, { Name: "string-param2", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }}, }, } @@ -696,10 +696,10 @@ var ( Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "array-param1", - Value: *v1beta1.NewArrayOrString("1-param1", "2-param1", "3-param1", "4-param1"), + Value: *v1beta1.NewStructuredValues("1-param1", "2-param1", "3-param1", "4-param1"), }, { Name: "array-param2", - Value: *v1beta1.NewArrayOrString("1-param2", "2-param2", "3-param3"), + Value: *v1beta1.NewStructuredValues("1-param2", "2-param2", "3-param3"), }, { Name: "myObject", Value: *v1beta1.NewObject(map[string]string{ @@ -862,7 +862,7 @@ func TestApplyArrayParameters(t *testing.T) { tr: &v1beta1.TaskRun{}, dp: []v1beta1.ParamSpec{{ Name: "array-param", - Default: v1beta1.NewArrayOrString("defaulted", "value!"), + Default: v1beta1.NewStructuredValues("defaulted", "value!"), }}, }, want: applyMutation(arrayParamTaskSpec, func(spec *v1beta1.TaskSpec) { @@ -884,19 +884,19 @@ func TestApplyParameters(t *testing.T) { Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "myimage", - Value: *v1beta1.NewArrayOrString("bar"), + Value: *v1beta1.NewStructuredValues("bar"), }, { Name: "FOO", - Value: *v1beta1.NewArrayOrString("world"), + Value: *v1beta1.NewStructuredValues("world"), }}, }, } dp := []v1beta1.ParamSpec{{ Name: "something", - Default: v1beta1.NewArrayOrString("mydefault"), + Default: v1beta1.NewStructuredValues("mydefault"), }, { Name: "somethingelse", - Default: v1beta1.NewArrayOrString(""), + Default: v1beta1.NewStructuredValues(""), }} want := applyMutation(simpleTaskSpec, func(spec *v1beta1.TaskSpec) { spec.StepTemplate.Env[0].Value = "world" @@ -953,19 +953,19 @@ func TestApplyParameters_ArrayIndexing(t *testing.T) { Spec: v1beta1.TaskRunSpec{ Params: []v1beta1.Param{{ Name: "myimage", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }, { Name: "FOO", - Value: *v1beta1.NewArrayOrString("hello", "world"), + Value: *v1beta1.NewStructuredValues("hello", "world"), }}, }, } dp := []v1beta1.ParamSpec{{ Name: "something", - Default: v1beta1.NewArrayOrString("mydefault", "mydefault2"), + Default: v1beta1.NewStructuredValues("mydefault", "mydefault2"), }, { Name: "somethingelse", - Default: v1beta1.NewArrayOrString(""), + Default: v1beta1.NewStructuredValues(""), }} want := applyMutation(simpleTaskSpec, func(spec *v1beta1.TaskSpec) { spec.StepTemplate.Env[0].Value = "world" diff --git a/pkg/reconciler/taskrun/taskrun_test.go b/pkg/reconciler/taskrun/taskrun_test.go index a98304ddd59..7dcef127f9e 100644 --- a/pkg/reconciler/taskrun/taskrun_test.go +++ b/pkg/reconciler/taskrun/taskrun_test.go @@ -229,12 +229,12 @@ var ( { Name: "myarghasdefault", Type: v1beta1.ParamTypeString, - Default: v1beta1.NewArrayOrString("dont see me"), + Default: v1beta1.NewStructuredValues("dont see me"), }, { Name: "myarghasdefault2", Type: v1beta1.ParamTypeString, - Default: v1beta1.NewArrayOrString("thedefault"), + Default: v1beta1.NewStructuredValues("thedefault"), }, { Name: "configmapname", diff --git a/pkg/reconciler/taskrun/validate_resources.go b/pkg/reconciler/taskrun/validate_resources.go index d519fdbb421..804739affa0 100644 --- a/pkg/reconciler/taskrun/validate_resources.go +++ b/pkg/reconciler/taskrun/validate_resources.go @@ -146,7 +146,7 @@ func wrongTypeParamsNames(params []v1beta1.Param, matrix []v1beta1.Param, needed } // This is needed to support array replacements in params. Users want to use $(tasks.taskName.results.resultname[*]) // to pass array result to array param, yet in yaml format this will be - // unmarshalled to string for ArrayOrString. So we need to check and skip this validation. + // unmarshalled to string for ParamValues. So we need to check and skip this validation. // Please refer issue #4879 for more details and examples. if param.Value.Type == v1beta1.ParamTypeString && (neededParamsTypes[param.Name] == v1beta1.ParamTypeArray || neededParamsTypes[param.Name] == v1beta1.ParamTypeObject) && v1beta1.VariableSubstitutionRegex.MatchString(param.Value.StringVal) { continue diff --git a/pkg/reconciler/taskrun/validate_resources_test.go b/pkg/reconciler/taskrun/validate_resources_test.go index 6ce77adf604..0ec9cd1a9df 100644 --- a/pkg/reconciler/taskrun/validate_resources_test.go +++ b/pkg/reconciler/taskrun/validate_resources_test.go @@ -164,13 +164,13 @@ func TestValidateResolvedTaskResources_ValidParams(t *testing.T) { } p := []v1beta1.Param{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("somethinggood"), + Value: *v1beta1.NewStructuredValues("somethinggood"), }, { Name: "bar", - Value: *v1beta1.NewArrayOrString("somethinggood"), + Value: *v1beta1.NewStructuredValues("somethinggood"), }, { Name: "arrayResultRef", - Value: *v1beta1.NewArrayOrString("$(results.resultname[*])"), + Value: *v1beta1.NewStructuredValues("$(results.resultname[*])"), }, { Name: "myobj", Value: *v1beta1.NewObject(map[string]string{ @@ -181,7 +181,7 @@ func TestValidateResolvedTaskResources_ValidParams(t *testing.T) { }} m := []v1beta1.Param{{ Name: "zoo", - Value: *v1beta1.NewArrayOrString("a", "b", "c"), + Value: *v1beta1.NewStructuredValues("a", "b", "c"), }} if err := ValidateResolvedTaskResources(ctx, p, m, rtr); err != nil { t.Fatalf("Did not expect to see error when validating TaskRun with correct params but saw %v", err) @@ -191,11 +191,11 @@ func TestValidateResolvedTaskResources_ValidParams(t *testing.T) { ctx := config.ToContext(ctx, &config.Config{FeatureFlags: &config.FeatureFlags{EnableAPIFields: "alpha"}}) extra := v1beta1.Param{ Name: "extra", - Value: *v1beta1.NewArrayOrString("i am an extra param"), + Value: *v1beta1.NewStructuredValues("i am an extra param"), } extraarray := v1beta1.Param{ Name: "extraarray", - Value: *v1beta1.NewArrayOrString("i", "am", "an", "extra", "array", "param"), + Value: *v1beta1.NewStructuredValues("i", "am", "an", "extra", "array", "param"), } if err := ValidateResolvedTaskResources(ctx, append(p, extra), append(m, extraarray), rtr); err != nil { t.Fatalf("Did not expect to see error when validating TaskRun with correct params but saw %v", err) @@ -243,11 +243,11 @@ func TestValidateResolvedTaskResources_InvalidParams(t *testing.T) { }, params: []v1beta1.Param{{ Name: "foobar", - Value: *v1beta1.NewArrayOrString("somethingfun"), + Value: *v1beta1.NewStructuredValues("somethingfun"), }}, matrix: []v1beta1.Param{{ Name: "barfoo", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }}, }, { name: "invalid-type-in-params", @@ -256,7 +256,7 @@ func TestValidateResolvedTaskResources_InvalidParams(t *testing.T) { }, params: []v1beta1.Param{{ Name: "foo", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }}, }, { name: "invalid-type-in-matrix", @@ -265,7 +265,7 @@ func TestValidateResolvedTaskResources_InvalidParams(t *testing.T) { }, matrix: []v1beta1.Param{{ Name: "bar", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }}, }, { name: "missing object param keys", @@ -595,12 +595,12 @@ func TestValidateResult(t *testing.T) { { Name: "string-result", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("hello"), + Value: *v1beta1.NewStructuredValues("hello"), }, { Name: "array-result", Type: v1beta1.ResultsTypeArray, - Value: *v1beta1.NewArrayOrString("hello", "world"), + Value: *v1beta1.NewStructuredValues("hello", "world"), }, { Name: "object-result", @@ -642,12 +642,12 @@ func TestValidateResult(t *testing.T) { { Name: "string-result", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("hello"), + Value: *v1beta1.NewStructuredValues("hello"), }, { Name: "array-result", Type: v1beta1.ResultsTypeArray, - Value: *v1beta1.NewArrayOrString("hello", "world"), + Value: *v1beta1.NewStructuredValues("hello", "world"), }, { Name: "object-result", @@ -690,7 +690,7 @@ func TestValidateResult(t *testing.T) { { Name: "string-result", Type: v1beta1.ResultsTypeArray, - Value: *v1beta1.NewArrayOrString("hello", "world"), + Value: *v1beta1.NewStructuredValues("hello", "world"), }, { Name: "array-result", @@ -700,7 +700,7 @@ func TestValidateResult(t *testing.T) { { Name: "object-result", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("hello"), + Value: *v1beta1.NewStructuredValues("hello"), }, }, }, @@ -724,7 +724,7 @@ func TestValidateResult(t *testing.T) { { Name: "string-result", Type: v1beta1.ResultsTypeArray, - Value: *v1beta1.NewArrayOrString("hello", "world"), + Value: *v1beta1.NewStructuredValues("hello", "world"), }, { Name: "array-result", @@ -734,7 +734,7 @@ func TestValidateResult(t *testing.T) { { Name: "object-result", Type: v1beta1.ResultsTypeString, - Value: *v1beta1.NewArrayOrString("hello"), + Value: *v1beta1.NewStructuredValues("hello"), }, }, }, @@ -849,12 +849,12 @@ func TestValidateParamArrayIndex(t *testing.T) { name: "steps reference invalid", params: []v1beta1.Param{{ Name: "array-params", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }}, taskspec: &v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "array-params", - Default: v1beta1.NewArrayOrString("bar", "foo"), + Default: v1beta1.NewStructuredValues("bar", "foo"), }}, Steps: []v1beta1.Step{{ Name: "$(params.array-params[10])", @@ -905,12 +905,12 @@ func TestValidateParamArrayIndex(t *testing.T) { name: "stepTemplate reference invalid", params: []v1beta1.Param{{ Name: "array-params", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }}, taskspec: &v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "array-params", - Default: v1beta1.NewArrayOrString("bar", "foo"), + Default: v1beta1.NewStructuredValues("bar", "foo"), }}, StepTemplate: &v1beta1.StepTemplate{ Image: "$(params.array-params[3])", @@ -921,12 +921,12 @@ func TestValidateParamArrayIndex(t *testing.T) { name: "volumes reference invalid", params: []v1beta1.Param{{ Name: "array-params", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }}, taskspec: &v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "array-params", - Default: v1beta1.NewArrayOrString("bar", "foo"), + Default: v1beta1.NewStructuredValues("bar", "foo"), }}, Volumes: []v1.Volume{{ Name: "$(params.array-params[10])", @@ -983,12 +983,12 @@ func TestValidateParamArrayIndex(t *testing.T) { name: "workspaces reference invalid", params: []v1beta1.Param{{ Name: "array-params", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }}, taskspec: &v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "array-params", - Default: v1beta1.NewArrayOrString("bar", "foo"), + Default: v1beta1.NewStructuredValues("bar", "foo"), }}, Workspaces: []v1beta1.WorkspaceDeclaration{{ MountPath: "$(params.array-params[3])", @@ -999,12 +999,12 @@ func TestValidateParamArrayIndex(t *testing.T) { name: "sidecar reference invalid", params: []v1beta1.Param{{ Name: "array-params", - Value: *v1beta1.NewArrayOrString("bar", "foo"), + Value: *v1beta1.NewStructuredValues("bar", "foo"), }}, taskspec: &v1beta1.TaskSpec{ Params: []v1beta1.ParamSpec{{ Name: "array-params", - Default: v1beta1.NewArrayOrString("bar", "foo"), + Default: v1beta1.NewStructuredValues("bar", "foo"), }}, Sidecars: []v1beta1.Sidecar{{ Script: "$(params.array-params[3])", diff --git a/test/custom_task_test.go b/test/custom_task_test.go index 5d7607a08e9..f216e6316ff 100644 --- a/test/custom_task_test.go +++ b/test/custom_task_test.go @@ -235,9 +235,9 @@ spec: // Validate the task's result reference to the custom task's result was resolved. expectedTaskRunParams := []v1beta1.Param{{ - Name: "input-result-from-custom-task-ref", Value: *v1beta1.NewArrayOrString("aResultValue"), + Name: "input-result-from-custom-task-ref", Value: *v1beta1.NewStructuredValues("aResultValue"), }, { - Name: "input-result-from-custom-task-spec", Value: *v1beta1.NewArrayOrString("aResultValue"), + Name: "input-result-from-custom-task-spec", Value: *v1beta1.NewStructuredValues("aResultValue"), }} if d := cmp.Diff(expectedTaskRunParams, taskRun.Spec.Params); d != "" { @@ -248,10 +248,10 @@ spec: expectedPipelineResults := []v1beta1.PipelineRunResult{{ Name: "prResult-ref", - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), }, { Name: "prResult-spec", - Value: *v1beta1.NewArrayOrString("aResultValue"), + Value: *v1beta1.NewStructuredValues("aResultValue"), }} if len(pr.Status.PipelineResults) != 2 {