Skip to content

Commit 103678e

Browse files
committed
fix: fix compatibility for output
Signed-off-by: FogDong <[email protected]>
1 parent d8a85b2 commit 103678e

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

pkg/hooks/data_passing.go

+8
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ func Output(ctx wfContext.Context, taskValue cue.Value, step v1alpha1.WorkflowSt
6464
SetAdditionalNameInStatus(stepStatus, step.Name, step.Properties, status)
6565
for _, output := range step.Outputs {
6666
v, err := value.LookupValueByScript(taskValue, output.ValueFrom)
67+
if err != nil && strings.Contains(err.Error(), "not exist") && !strings.Contains(output.ValueFrom, "$returns.") {
68+
parts := strings.Split(output.ValueFrom, ".")
69+
if len(parts) > 1 {
70+
v, err = value.LookupValueByScript(taskValue, fmt.Sprintf("%s.$returns.%s", parts[0], strings.Join(parts[1:], ".")))
71+
} else {
72+
v, err = value.LookupValueByScript(taskValue, fmt.Sprintf("%s.$returns", output.ValueFrom))
73+
}
74+
}
6775
// if the error is not nil and the step is not skipped, return the error
6876
if err != nil && status.Phase != v1alpha1.WorkflowStepPhaseSkipped {
6977
errMsg += fmt.Sprintf("failed to get output from %s: %s\n", output.ValueFrom, err.Error())

pkg/hooks/data_passing_test.go

+47
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,53 @@ func TestOutput(t *testing.T) {
114114
r.NoError(err)
115115
r.Equal(int(resultInt), 99)
116116
r.Equal(stepStatus["mystep"].Phase, v1alpha1.WorkflowStepPhaseSucceeded)
117+
118+
taskValue = cuectx.CompileString(`output: $returns: score: 99`)
119+
stepStatus = make(map[string]v1alpha1.StepStatus)
120+
err = Output(wfCtx, taskValue, v1alpha1.WorkflowStep{
121+
WorkflowStepBase: v1alpha1.WorkflowStepBase{
122+
Properties: &runtime.RawExtension{
123+
Raw: []byte("{\"name\":\"mystep\"}"),
124+
},
125+
Outputs: v1alpha1.StepOutputs{{
126+
ValueFrom: "output.$returns.score",
127+
Name: "myscore2",
128+
}},
129+
},
130+
}, v1alpha1.StepStatus{
131+
Phase: v1alpha1.WorkflowStepPhaseSucceeded,
132+
}, stepStatus)
133+
r.NoError(err)
134+
result, err = wfCtx.GetVar("myscore2")
135+
r.NoError(err)
136+
resultInt, err = result.Int64()
137+
r.NoError(err)
138+
r.Equal(int(resultInt), 99)
139+
r.Equal(stepStatus["mystep"].Phase, v1alpha1.WorkflowStepPhaseSucceeded)
140+
141+
142+
taskValue = cuectx.CompileString(`output: $returns: score: 99`)
143+
stepStatus = make(map[string]v1alpha1.StepStatus)
144+
err = Output(wfCtx, taskValue, v1alpha1.WorkflowStep{
145+
WorkflowStepBase: v1alpha1.WorkflowStepBase{
146+
Properties: &runtime.RawExtension{
147+
Raw: []byte("{\"name\":\"mystep\"}"),
148+
},
149+
Outputs: v1alpha1.StepOutputs{{
150+
ValueFrom: "output.score",
151+
Name: "myscore3",
152+
}},
153+
},
154+
}, v1alpha1.StepStatus{
155+
Phase: v1alpha1.WorkflowStepPhaseSucceeded,
156+
}, stepStatus)
157+
r.NoError(err)
158+
result, err = wfCtx.GetVar("myscore3")
159+
r.NoError(err)
160+
resultInt, err = result.Int64()
161+
r.NoError(err)
162+
r.Equal(int(resultInt), 99)
163+
r.Equal(stepStatus["mystep"].Phase, v1alpha1.WorkflowStepPhaseSucceeded)
117164
}
118165

119166
func mockContext(t *testing.T) wfContext.Context {

0 commit comments

Comments
 (0)