From f5fc2de5876d6687dfe73139e0d7cbb61c8eddeb Mon Sep 17 00:00:00 2001 From: Yongxuan Zhang Date: Wed, 10 Aug 2022 18:22:24 +0000 Subject: [PATCH] Rename ArrayOrString to ParamValues This commit fixes issue #4858. With the implementation of Tep75, ArrayOrString contains object type and it would be confusing if still use the same name. This commit renames it to ParamValues and type alias ResultValues to ParamValues. Also use type alias to make sure dependant libraries can still use ArrayOrString and NewArrayOrString. --- docs/api-spec.md | 11 +- docs/pipeline-api.md | 1343 ++++++++++++++--- pkg/apis/pipeline/v1/openapi_generated.go | 145 +- pkg/apis/pipeline/v1/param_types.go | 102 +- pkg/apis/pipeline/v1/param_types_test.go | 136 +- .../pipeline/v1/pipeline_defaults_test.go | 4 +- pkg/apis/pipeline/v1/pipeline_types.go | 2 +- pkg/apis/pipeline/v1/pipeline_types_test.go | 54 +- .../pipeline/v1/pipeline_validation_test.go | 124 +- pkg/apis/pipeline/v1/result_types.go | 6 +- pkg/apis/pipeline/v1/resultref_test.go | 66 +- pkg/apis/pipeline/v1/swagger.json | 81 +- pkg/apis/pipeline/v1/task_validation.go | 2 +- pkg/apis/pipeline/v1/task_validation_test.go | 34 +- pkg/apis/pipeline/v1/zz_generated.deepcopy.go | 58 +- pkg/apis/pipeline/v1alpha1/run_types_test.go | 18 +- .../pipeline/v1alpha1/run_validation_test.go | 8 +- .../pipeline/v1beta1/openapi_generated.go | 149 +- pkg/apis/pipeline/v1beta1/param_conversion.go | 28 +- pkg/apis/pipeline/v1beta1/param_types.go | 108 +- pkg/apis/pipeline/v1beta1/param_types_test.go | 167 +- .../pipeline/v1beta1/pipeline_conversion.go | 4 +- .../v1beta1/pipeline_conversion_test.go | 8 +- .../v1beta1/pipeline_defaults_test.go | 4 +- pkg/apis/pipeline/v1beta1/pipeline_types.go | 2 +- .../pipeline/v1beta1/pipeline_types_test.go | 72 +- .../v1beta1/pipeline_validation_test.go | 248 +-- .../pipeline/v1beta1/pipelinerun_types.go | 2 +- .../v1beta1/pipelinerun_validation_test.go | 2 +- pkg/apis/pipeline/v1beta1/result_types.go | 6 +- pkg/apis/pipeline/v1beta1/resultref_test.go | 66 +- pkg/apis/pipeline/v1beta1/swagger.json | 83 +- .../pipeline/v1beta1/task_conversion_test.go | 2 +- pkg/apis/pipeline/v1beta1/task_validation.go | 2 +- .../pipeline/v1beta1/task_validation_test.go | 34 +- .../v1beta1/taskrun_validation_test.go | 18 +- .../pipeline/v1beta1/zz_generated.deepcopy.go | 58 +- pkg/entrypoint/entrypointer_test.go | 12 +- pkg/matrix/matrix_test.go | 48 +- pkg/matrix/matrix_types.go | 2 +- pkg/matrix/matrix_types_test.go | 84 +- pkg/pod/status.go | 11 +- pkg/pod/status_test.go | 18 +- pkg/reconciler/pipeline/dag/dag_test.go | 10 +- pkg/reconciler/pipelinerun/resources/apply.go | 2 +- .../pipelinerun/resources/apply_test.go | 608 ++++---- .../resources/pipelinerunresolution_test.go | 48 +- .../resources/pipelinerunstate_test.go | 38 +- .../resources/resultrefresolution.go | 10 +- .../resources/resultrefresolution_test.go | 68 +- .../resources/validate_dependencies_test.go | 28 +- .../resources/validate_params_test.go | 172 +-- .../taskrun/resources/apply_test.go | 46 +- pkg/reconciler/taskrun/taskrun_test.go | 4 +- pkg/reconciler/taskrun/validate_resources.go | 2 +- .../taskrun/validate_resources_test.go | 56 +- test/custom_task_test.go | 8 +- 57 files changed, 2745 insertions(+), 1787 deletions(-) diff --git a/docs/api-spec.md b/docs/api-spec.md index 409f9a0c32d..0a2814bda08 100644 --- a/docs/api-spec.md +++ b/docs/api-spec.md @@ -14,7 +14,7 @@ - [Status Signalling](#status-signalling) - [Listing Resources](#listing-resources) - [Detailed Resource Types - v1beta1](#detailed-resource-types---v1beta1) - * [`ArrayOrString`](#arrayorstring) + * [`ParamValue`](#paramvalue) * [`ContainerStateRunning`](#containerstaterunning) * [`ContainerStateWaiting`](#containerstatewaiting) * [`ContainerStateTerminated`](#containerstateterminated) @@ -186,13 +186,14 @@ List responses have the following fields (based on [`meta.v1/ListMeta`](https:// ## Detailed Resource Types - v1beta1 -### `ArrayOrString` +### `ParamValue` | Field Name | Field Type | Requirement | |-------------|------------|-------------| -| `type` | Enum:
- `"string"` (default)
- `"array"` | REQUIRED | +| `type` | Enum:
- `"string"` (default)
- `"array"`
- `"object"` | REQUIRED | | `stringVal` | string | REQUIRED | | `arrayVal` | []string | REQUIRED | +| `objectVal` | map | REQUIRED | ### `ContainerStateRunning` @@ -235,7 +236,7 @@ List responses have the following fields (based on [`meta.v1/ListMeta`](https:// | Field Name | Field Type | Requirement | |------------|-----------------|-------------| | `name` | string | REQUIRED | -| `value` | `ArrayOrString` | REQUIRED | +| `value` | `ParamValue` | REQUIRED | ### `ParamSpec` @@ -244,7 +245,7 @@ List responses have the following fields (based on [`meta.v1/ListMeta`](https:// | `name` | string | REQUIRED | | `description` | string | REQUIRED | | `type` | Enum:
- `"string"` (default)
- `"array"` | REQUIRED | -| `default` | `ArrayOrString` | REQUIRED | +| `default` | `ParamValue` | REQUIRED | ### `Step` diff --git a/docs/pipeline-api.md b/docs/pipeline-api.md index 61552f0e3b9..afae98af153 100644 --- a/docs/pipeline-api.md +++ b/docs/pipeline-api.md @@ -24,8 +24,160 @@ weight: 1000 Resource Types: +

Pipeline +

+
+

Pipeline describes a list of Tasks to execute. It expresses how outputs +of tasks feed into inputs of subsequent tasks.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+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

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+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

+
+

Task

@@ -205,17 +357,13 @@ the steps start and end after the steps complete.

-

ArrayOrString +

EmbeddedTask

-(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.

@@ -227,53 +375,625 @@ consideration the object case after the community reaches an agreement on it.

+ + + + + + + + + +
-type
+spec
- -ParamType +k8s.io/apimachinery/pkg/runtime.RawExtension + +
+(Optional) +

Spec is a specification of a custom task

+
+
+ + + + + + + + + +
+-
+ +[]byte + +
+

Raw is the underlying serialization of this object.

+

TODO: Determine how to detect ContentType and ContentEncoding of ‘Raw’ data.

+
+-
+ +k8s.io/apimachinery/pkg/runtime.Object + +
+

Object can hold a representation of this extension - useful for working with versioned +structs.

+
+
+metadata
+ + +PipelineTaskMetadata + + +
+(Optional) +
+TaskSpec
+ + +TaskSpec
+

+(Members of TaskSpec are embedded into this type.) +

+(Optional) +

TaskSpec is a specification of a task

+

Param +

+

+(Appears on:PipelineTask) +

+
+

Param declares an ParamValues to use for the parameter called name.

+
+ + + + + + + + + + + +
FieldDescription
-stringVal
+name
string
-

Represents the stored type of ArrayOrString.

-arrayVal
+value
-[]string + +ParamValue + + +
+
+

ParamSpec +

+

+(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.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+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.

+
+

ParamType +(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.

+
+ + + + + + + + + + + + + + +
ValueDescription

"array"

"object"

"string"

+

ParamValue +

+

+(Appears on:Param, ParamSpec, PipelineResult, TaskRunResult) +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+type
+ + +ParamType + + +
+
+stringVal
+ +string + +
+

Represents the stored type of ParamValues.

+
+arrayVal
+ +[]string + +
+
+objectVal
+ +map[string]string + +
+
+

PipelineResult +

+

+(Appears on:PipelineSpec) +

+
+

PipelineResult used to describe the results of a pipeline

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+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

+
+

PipelineSpec +

+

+(Appears on:Pipeline) +

+
+

PipelineSpec defines the desired state of Pipeline.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+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

+
+

PipelineTask +

+

+(Appears on:PipelineSpec) +

+
+

PipelineTask defines a task in a Pipeline, passing inputs from both +Params and from the output of previous tasks.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+name
+ +string + +
+

Name is the name of this task within the context of a Pipeline. Name is +used as a coordinate with the from and runAfter fields to establish +the execution order of tasks relative to one another.

+
+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

-

Param +

PipelineTaskMetadata

+

+(Appears on:EmbeddedTask) +

-

Param declares an ArrayOrString to use for the parameter called name.

+

PipelineTaskMetadata contains the labels or annotations for an EmbeddedTask

@@ -285,37 +1005,32 @@ map[string]string
-name
+labels
-string +map[string]string
+(Optional)
-value
+annotations
- -ArrayOrString - +map[string]string
+(Optional)
-

ParamSpec +

PipelineTaskParam

-

-(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.

@@ -333,95 +1048,25 @@ 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
+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.

-

ParamType -(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.

-
- - - - - - - - - - - - - - -
ValueDescription

"array"

"object"

"string"

PipelineWorkspaceDeclaration

+

+(Appears on:PipelineSpec) +

WorkspacePipelineDeclaration creates a named slot in a Pipeline that a PipelineRun is expected to populate with a workspace binding. @@ -557,6 +1202,9 @@ passed to the resolver.

ResolverRef

+

+(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 +1252,72 @@ the chosen resolver.

+

ResultRef +

+
+

ResultRef is a type that represents a reference to a task run result

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+pipelineTask
+ +string + +
+
+result
+ +string + +
+
+resultsIndex
+ +int + +
+
+property
+ +string + +
+

ResultsType (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.

@@ -1547,34 +2248,124 @@ Cannot be updated.

+ + + + + + + +
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/

+
+

TaskKind +(string alias)

+

+(Appears on:TaskRef) +

+
+

TaskKind defines the type of Task used by the pipeline.

+
+ + + + + + + + + + +
ValueDescription

"Task"

NamespacedTaskKind indicates that the task type has a namespaced scope.

+
+

TaskRef +

+

+(Appears on:PipelineTask) +

+
+

TaskRef can be used to refer to a specific instance of a task.

+
+ + + + + + + + + + + + + + + + + + @@ -1692,8 +2483,8 @@ is currently “string” and will support “array” in follow @@ -1706,7 +2497,7 @@ ArrayOrString

TaskSpec

-(Appears on:Task) +(Appears on:Task, EmbeddedTask)

TaskSpec defines the desired state of Task.

@@ -1832,6 +2623,65 @@ the steps start and end after the steps complete.

FieldDescription
+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
+

WhenExpression +

+
+

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

+
+ + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+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

+
+

WhenExpressions +([]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.

+

WorkspaceBinding

@@ -2024,6 +2874,9 @@ this field is false and so declared workspaces are required.

WorkspacePipelineTaskBinding

+

+(Appears on:PipelineTask) +

WorkspacePipelineTaskBinding describes how a workspace passed into the pipeline should be mapped to a task’s declared workspace.

@@ -2246,6 +3099,20 @@ RunSpecStatus +statusMessage
+ + +RunSpecStatusMessage + + + + +(Optional) +

Status message for cancellation.

+ + + + retries
int @@ -2605,6 +3472,20 @@ RunSpecStatus +statusMessage
+ + +RunSpecStatusMessage + + + + +(Optional) +

Status message for cancellation.

+ + + + retries
int @@ -2679,6 +3560,14 @@ Refer Go’s ParseDuration documentation for expected format: RunSpecStatusMessage +(string alias) +

+(Appears on:RunSpec) +

+
+

RunSpecStatusMessage defines human readable status messages for the TaskRun.

+

PipelineResourceSpec

@@ -4066,6 +4955,20 @@ TaskRunSpecStatus +statusMessage
+ + +TaskRunSpecStatusMessage + + + + +(Optional) +

Status message for cancellation.

+ + + + timeout
@@ -4172,71 +5075,6 @@ TaskRunStatus -

ArrayOrString -

-

-(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.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
FieldDescription
-type
- - -ParamType - - -
-
-stringVal
- -string - -
-

Represents the stored type of ArrayOrString.

-
-arrayVal
- -[]string - -
-
-objectVal
- -map[string]string - -
-

ChildStatusReference

@@ -4573,7 +5411,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.

@@ -4597,8 +5435,8 @@ string @@ -4682,8 +5520,8 @@ map[string]github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1.PropertySpec @@ -4699,7 +5537,7 @@ parameter.

ParamType (string alias)

-(Appears on:ArrayOrString, ParamSpec, PropertySpec) +(Appears on:ParamSpec, ParamValue, PropertySpec)

ParamType indicates the type of an input parameter; @@ -4720,6 +5558,66 @@ Used to distinguish between a single string and an array of strings.

value
- -ArrayOrString + +ParamValue
default
- -ArrayOrString + +ParamValue
+

ParamValue +

+

+(Appears on:Param, ParamSpec, PipelineResult, PipelineRunResult, TaskRunResult) +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+type
+ + +ParamType + + +
+
+stringVal
+ +string + +
+

Represents the stored type of ParamValues.

+
+arrayVal
+ +[]string + +
+
+objectVal
+ +map[string]string + +
+

PipelineDeclaredResource

@@ -5076,8 +5974,8 @@ string value
- -ArrayOrString + +ParamValue @@ -5170,8 +6068,8 @@ string value
- -ArrayOrString + +ParamValue @@ -6570,9 +7468,7 @@ Note that ResultsType is another type which is used to define the data type 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.

@@ -8677,8 +9573,8 @@ is currently “string” and will support “array” in follow @@ -8839,6 +9735,20 @@ TaskRunSpecStatus + + + +
value
- -ArrayOrString + +ParamValue
+statusMessage
+ + +TaskRunSpecStatusMessage + + +
+(Optional) +

Status message for cancellation.

+
timeout
@@ -8937,6 +9847,27 @@ Kubernetes core/v1.ResourceRequirements

TaskRunSpecStatus defines the taskrun spec status the user can provide

+

TaskRunSpecStatusMessage +(string alias)

+

+(Appears on:TaskRunSpec) +

+
+

TaskRunSpecStatusMessage defines human readable status messages for the TaskRun.

+
+ + + + + + + + + + +
ValueDescription

"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.

+

TaskRunStatus

diff --git a/pkg/apis/pipeline/v1/openapi_generated.go b/pkg/apis/pipeline/v1/openapi_generated.go index 33b9b69f48a..96305468357 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,69 @@ 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{ + 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 +772,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 +780,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 +2194,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 +2202,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..d5431d780c6 100644 --- a/pkg/apis/pipeline/v1/result_types.go +++ b/pkg/apis/pipeline/v1/result_types.go @@ -45,16 +45,16 @@ type TaskRunResult struct { Type ResultsType `json:"type,omitempty"` // Value the given value of the result - Value ArrayOrString `json:"value"` + Value ResultValue `json:"value"` } +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..4f6e28e0dff 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,41 @@ } } }, + "v1.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 +386,7 @@ "value": { "description": "Value the expression used to retrieve the value", "default": {}, - "$ref": "#/definitions/v1.ArrayOrString" + "$ref": "#/definitions/v1.ParamValue" } } }, @@ -1153,7 +1152,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..262b18f6c1b 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,69 @@ 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{ + 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 +1293,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 +1301,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 +1419,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 +1427,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 +4362,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 +4370,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..28aa27be19a 100644 --- a/pkg/apis/pipeline/v1beta1/result_types.go +++ b/pkg/apis/pipeline/v1beta1/result_types.go @@ -45,16 +45,16 @@ type TaskRunResult struct { Type ResultsType `json:"type,omitempty"` // Value the given value of the result - Value ArrayOrString `json:"value"` + Value ResultValue `json:"value"` } +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..c5f6c6a9304 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,41 @@ } } }, + "v1beta1.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 +814,7 @@ "value": { "description": "Value the expression used to retrieve the value", "default": {}, - "$ref": "#/definitions/v1beta1.ArrayOrString" + "$ref": "#/definitions/v1beta1.ParamValue" } } }, @@ -886,7 +885,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 +2446,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..36e4ec5e0e2 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.ParamValue{} + 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..16f2769ad07 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.ParamValue 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.ParamValue 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.ParamValue, 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.ParamValue{}, 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 {