Skip to content

Commit

Permalink
feat:support to extract failed task results
Browse files Browse the repository at this point in the history
  • Loading branch information
cugykw committed Nov 14, 2022
1 parent d310355 commit 5df7cff
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 4 deletions.
2 changes: 1 addition & 1 deletion pkg/pod/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ func setTaskRunStatusBasedOnStepStatus(logger *zap.SugaredLogger, stepStatuses [
merr = multierror.Append(merr, err)
}
taskResults, pipelineResourceResults, filteredResults := filterResultsAndResources(results)
if tr.IsSuccessful() {
if tr.IsDone() {
trs.TaskRunResults = append(trs.TaskRunResults, taskResults...)
trs.ResourcesResult = append(trs.ResourcesResult, pipelineResourceResults...)
}
Expand Down
34 changes: 34 additions & 0 deletions pkg/pod/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -727,6 +727,40 @@ func TestMakeTaskRunStatus(t *testing.T) {
CompletionTime: &metav1.Time{Time: time.Now()},
},
},
}, {
desc: "the failed task show task results",
podStatus: corev1.PodStatus{
Phase: corev1.PodFailed,
ContainerStatuses: []corev1.ContainerStatus{{
Name: "step-task-result",
State: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
Message: `[{"key":"resultName","value":"resultValue", "type":1}]`,
},
},
}},
},
want: v1beta1.TaskRunStatus{
Status: statusFailure(v1beta1.TaskRunReasonFailed.String(), "build failed for unspecified reasons."),
TaskRunStatusFields: v1beta1.TaskRunStatusFields{
Steps: []v1beta1.StepState{{
ContainerState: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
Message: `[{"key":"resultName","value":"resultValue","type":1}]`,
},
},
Name: "task-result",
ContainerName: "step-task-result",
}},
Sidecars: []v1beta1.SidecarState{},
CompletionTime: &metav1.Time{Time: time.Now()},
TaskRunResults: []v1beta1.TaskRunResult{{
Name: "resultName",
Type: v1beta1.ResultsTypeString,
Value: *v1beta1.NewStructuredValues("resultValue"),
}},
},
},
}, {
desc: "taskrun status set to failed if task fails",
podStatus: corev1.PodStatus{
Expand Down
26 changes: 26 additions & 0 deletions pkg/reconciler/pipelinerun/pipelinerun_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6844,13 +6844,22 @@ spec:
operator: in
values:
- aResultValue
- name: final-task-7
params:
- name: finalParam
value: $(tasks.dag-task-3.results.aResult)
taskRef:
name: final-task
tasks:
- name: dag-task-1
taskRef:
name: dag-task
- name: dag-task-2
taskRef:
name: dag-task
- name: dag-task-3
taskRef:
name: dag-task
`)}

prs := []*v1beta1.PipelineRun{parse.MustParseV1beta1PipelineRun(t, `
Expand Down Expand Up @@ -6911,6 +6920,23 @@ status:
- lastTransitionTime: null
status: "False"
type: Succeeded
`),
mustParseTaskRunWithObjectMeta(t,
taskRunObjectMeta("test-pipeline-run-final-task-results-dag-task-3-xxyyy", "foo",
"test-pipeline-run-final-task-results", "test-pipeline", "dag-task-3", false),
`
spec:
serviceAccountName: test-sa
taskRef:
name: hello-world
status:
conditions:
- lastTransitionTime: null
status: "False"
type: Succeeded
taskResults:
- name: aResult
value: aResultValue
`),
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/reconciler/pipelinerun/resources/resultrefresolution.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,8 @@ func resolveResultRef(pipelineState PipelineRunState, resultRef *v1beta1.ResultR
if referencedPipelineTask == nil {
return nil, resultRef.PipelineTask, fmt.Errorf("could not find task %q referenced by result", resultRef.PipelineTask)
}
if !referencedPipelineTask.isSuccessful() {
return nil, resultRef.PipelineTask, fmt.Errorf("task %q referenced by result was not successful", referencedPipelineTask.PipelineTask.Name)
if !referencedPipelineTask.isSuccessful() && !referencedPipelineTask.isFailure() {
return nil, resultRef.PipelineTask, fmt.Errorf("task %q referenced by result was not successful and not failure", referencedPipelineTask.PipelineTask.Name)
}

var runName, runValue, taskRunName string
Expand Down
38 changes: 37 additions & 1 deletion pkg/reconciler/pipelinerun/resources/resultrefresolution_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) {
want: nil,
wantErr: true,
}, {
name: "failed resolution: using result reference to a failed task",
name: "failed resolution: using result reference to a failed task with no results",
pipelineRunState: PipelineRunState{{
TaskRunName: "aTaskRun",
TaskRun: &v1beta1.TaskRun{
Expand Down Expand Up @@ -463,6 +463,42 @@ func TestTaskParamResolver_ResolveResultRefs(t *testing.T) {
},
want: nil,
wantErr: true,
}, {
name: "successful resolution: using result reference to a failed task with some results",
pipelineRunState: PipelineRunState{{
TaskRunName: "aTaskRun",
TaskRun: &v1beta1.TaskRun{
ObjectMeta: metav1.ObjectMeta{Name: "aTaskRun"},
Status: v1beta1.TaskRunStatus{
Status: duckv1beta1.Status{
Conditions: duckv1beta1.Conditions{failedCondition},
},
TaskRunStatusFields: v1beta1.TaskRunStatusFields{
TaskRunResults: []v1beta1.TaskRunResult{{
Name: "aResult",
Value: *v1beta1.NewStructuredValues("aResultValue"),
}},
},
},
},
PipelineTask: &v1beta1.PipelineTask{
Name: "aTask",
TaskRef: &v1beta1.TaskRef{Name: "aTask"},
},
}},
param: v1beta1.Param{
Name: "targetParam",
Value: *v1beta1.NewStructuredValues("$(tasks.aTask.results.aResult)"),
},
want: ResolvedResultRefs{{
Value: *v1beta1.NewStructuredValues("aResultValue"),
ResultReference: v1beta1.ResultRef{
PipelineTask: "aTask",
Result: "aResult",
},
FromTaskRun: "aTaskRun",
}},
wantErr: false,
}} {
t.Run(tt.name, func(t *testing.T) {
t.Logf("test name: %s\n", tt.name)
Expand Down

0 comments on commit 5df7cff

Please sign in to comment.