Skip to content

Commit 249d69a

Browse files
committed
fix: JSON output for workflow update execute/result commands
- Return structured JSON error output when update fails in JSON mode instead of returning a plain error that breaks -o json output - Respect --no-json-shorthand-payloads flag when printing update results: decode payloads with DefaultDataConverter when shorthand is enabled, use MarshalProtoJSON for raw payloads when disabled Fixes #952 Signed-off-by: wucm667 <stevenwucongmin@gmail.com>
1 parent a6a4f86 commit 249d69a

1 file changed

Lines changed: 38 additions & 4 deletions

File tree

internal/temporalcli/commands.workflow.go

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -485,15 +485,49 @@ func workflowUpdateHelper(cctx *CommandContext,
485485
var valuePtr interface{}
486486
err = updateHandle.Get(cctx, &valuePtr)
487487
if err != nil {
488+
if cctx.JSONOutput {
489+
return cctx.Printer.PrintStructured(
490+
struct {
491+
Name string `json:"name"`
492+
UpdateID string `json:"updateId"`
493+
Error string `json:"error"`
494+
}{Name: updateStartOpts.Name, UpdateID: updateHandle.UpdateID(), Error: err.Error()},
495+
printer.StructuredOptions{})
496+
}
488497
return fmt.Errorf("unable to update workflow: %w", err)
489498
}
490499

500+
// Handle result serialization based on JSONShorthandPayloads
501+
var resultJSON json.RawMessage
502+
if cctx.JSONShorthandPayloads {
503+
// Decode payloads to native Go value
504+
if payloads, ok := valuePtr.(*common.Payloads); ok {
505+
var decoded any
506+
if err := converter.GetDefaultDataConverter().FromPayloads(payloads, &decoded); err != nil {
507+
return fmt.Errorf("failed decoding result: %w", err)
508+
}
509+
resultJSON, err = json.Marshal(decoded)
510+
} else {
511+
resultJSON, err = json.Marshal(valuePtr)
512+
}
513+
} else {
514+
// Marshal raw payloads as proto JSON
515+
if payloads, ok := valuePtr.(*common.Payloads); ok {
516+
resultJSON, err = cctx.MarshalProtoJSON(payloads)
517+
} else {
518+
resultJSON, err = json.Marshal(valuePtr)
519+
}
520+
}
521+
if err != nil {
522+
return fmt.Errorf("failed marshaling result: %w", err)
523+
}
524+
491525
return cctx.Printer.PrintStructured(
492526
struct {
493-
Name string `json:"name"`
494-
UpdateID string `json:"updateId"`
495-
Result interface{} `json:"result"`
496-
}{Name: updateStartOpts.Name, UpdateID: updateHandle.UpdateID(), Result: valuePtr},
527+
Name string `json:"name"`
528+
UpdateID string `json:"updateId"`
529+
Result json.RawMessage `json:"result"`
530+
}{Name: updateStartOpts.Name, UpdateID: updateHandle.UpdateID(), Result: resultJSON},
497531
printer.StructuredOptions{})
498532
}
499533

0 commit comments

Comments
 (0)