Skip to content

Commit e58ca13

Browse files
zregvarttekton-robot
authored andcommitted
Refine check if the result is from a matrix task
Given a matrix run of a TaskRun with cardinality of 1, the result from it will not be converted to an array but kept as a string, i.e. as if the TaskRun was not configured to run with matrix. This causes issues for consumers of the TaskRun's results as they will be configured to consume array results. As a result making the passed value equal to expression value instead. Resolves: #8157
1 parent 95fbf31 commit e58ca13

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

pkg/reconciler/pipelinerun/resources/resultrefresolution.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ func convertToResultRefs(pipelineRunState PipelineRunState, target *ResolvedPipe
132132
resolvedResultRefs = append(resolvedResultRefs, resolved)
133133
default:
134134
// Matrixed referenced Pipeline Task
135-
if len(referencedPipelineTask.TaskRuns) > 1 {
135+
if referencedPipelineTask.PipelineTask.IsMatrixed() {
136136
arrayValues, err := findResultValuesForMatrix(referencedPipelineTask, resultRef)
137137
if err != nil {
138138
return nil, resultRef.PipelineTask, err

pkg/reconciler/pipelinerun/resources/resultrefresolution_test.go

+53
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,42 @@ var pipelineRunState = PipelineRunState{{
363363
Value: *v1.NewStructuredValues("$(tasks.lTask.results.aResult)"),
364364
}},
365365
},
366+
}, {
367+
TaskRunNames: []string{"nTaskRun"},
368+
TaskRuns: []*v1.TaskRun{{
369+
ObjectMeta: metav1.ObjectMeta{
370+
Name: "nTaskRun",
371+
},
372+
Status: v1.TaskRunStatus{
373+
Status: duckv1.Status{
374+
Conditions: duckv1.Conditions{successCondition},
375+
},
376+
TaskRunStatusFields: v1.TaskRunStatusFields{
377+
Results: []v1.TaskRunResult{{
378+
Name: "nResult",
379+
Value: *v1.NewStructuredValues("one"),
380+
}},
381+
},
382+
},
383+
}},
384+
PipelineTask: &v1.PipelineTask{
385+
Name: "nTask",
386+
TaskRef: &v1.TaskRef{Name: "nTask"},
387+
Matrix: &v1.Matrix{
388+
Include: v1.IncludeParamsList{v1.IncludeParams{}},
389+
},
390+
},
391+
}, {
392+
TaskRunNames: []string{"oTaskRun"},
393+
TaskRuns: []*v1.TaskRun{},
394+
PipelineTask: &v1.PipelineTask{
395+
Name: "oTask",
396+
TaskRef: &v1.TaskRef{Name: "oTask"},
397+
Params: []v1.Param{{
398+
Name: "oParam",
399+
Value: *v1.NewStructuredValues("$(tasks.nTask.results.nResult)"),
400+
}},
401+
},
366402
}}
367403

368404
func TestResolveResultRefs(t *testing.T) {
@@ -551,6 +587,23 @@ func TestResolveResultRefs(t *testing.T) {
551587
},
552588
wantPt: "kTask",
553589
wantErr: true,
590+
}, {
591+
name: "Test result lookup single element matrix",
592+
pipelineRunState: pipelineRunState,
593+
targets: PipelineRunState{
594+
pipelineRunState[21],
595+
},
596+
want: ResolvedResultRefs{{
597+
Value: v1.ParamValue{
598+
Type: v1.ParamTypeArray,
599+
ArrayVal: []string{"one"},
600+
},
601+
ResultReference: v1.ResultRef{
602+
PipelineTask: "nTask",
603+
Result: "nResult",
604+
},
605+
FromTaskRun: "nTaskRun",
606+
}},
554607
}} {
555608
t.Run(tt.name, func(t *testing.T) {
556609
got, pt, err := ResolveResultRefs(tt.pipelineRunState, tt.targets)

0 commit comments

Comments
 (0)