@@ -3,10 +3,7 @@ package workflows
33import (
44 "context"
55 "encoding/json"
6- "errors"
76 "fmt"
8- "io"
9- "strings"
107 "time"
118
129 "github.com/render-oss/cli/pkg/client"
@@ -49,43 +46,39 @@ func (t *WorkflowLoader) CreateTaskRun(ctx context.Context, input TaskRunInput)
4946 return t .taskRepo .RunTask (ctx , input .TaskID , inputData )
5047}
5148
52- func unmarshalInputData (input string ) ([]interface {}, error ) {
53- var parsedInputs []interface {}
54-
49+ func unmarshalInputData (input string ) (* workflows.TaskData , error ) {
5550 if len (input ) == 0 {
5651 return nil , fmt .Errorf ("Task input is required." )
5752 }
5853
5954 inputRaw := []byte (input )
6055
61- if err := json .Unmarshal (inputRaw , & parsedInputs ); err != nil {
62- var syntaxErr * json.SyntaxError
63- var unmarshaltypeErr * json.UnmarshalTypeError
64- if errors .As (err , & syntaxErr ) || errors .Is (err , io .ErrUnexpectedEOF ) {
65- return nil , fmt .Errorf ("The task input has invalid JSON." )
66- } else if errors .As (err , & unmarshaltypeErr ) {
67- actualType := friendlyTypeName (unmarshaltypeErr .Value )
68- return nil , fmt .Errorf ("Expected type array for task input, received type %s." , actualType )
69- } else {
70- return nil , err
71- }
56+ // Validate that the input is valid JSON
57+ if ! json .Valid (inputRaw ) {
58+ return nil , fmt .Errorf ("The task input has invalid JSON." )
7259 }
7360
74- return parsedInputs , nil
75- }
61+ var taskData workflows.TaskData
7662
77- // friendlyTypeName converts type names from Go's json.UnmarshalTypeError to user-friendly names
78- func friendlyTypeName (typeName string ) string {
79- typeName = strings .TrimSpace (typeName )
63+ // Try to parse as array (TaskData0 contains positional arguments)
64+ var arrayInput workflows.TaskData0
65+ if err := json .Unmarshal (inputRaw , & arrayInput ); err == nil {
66+ if err := taskData .FromTaskData0 (arrayInput ); err != nil {
67+ return nil , fmt .Errorf ("failed to convert input to TaskData: %w" , err )
68+ }
69+ return & taskData , nil
70+ }
8071
81- switch typeName {
82- case "[]interface {}" :
83- return "array"
84- case "bool" :
85- return "boolean"
86- default :
87- return typeName
72+ // Try to parse as object (TaskData1 contains named parameters)
73+ var objectInput workflows. TaskData1
74+ if err := json . Unmarshal ( inputRaw , & objectInput ); err == nil {
75+ if err := taskData . FromTaskData1 ( objectInput ); err != nil {
76+ return nil , fmt . Errorf ( "failed to convert input to TaskData: %w" , err )
77+ }
78+ return & taskData , nil
8879 }
80+
81+ return nil , fmt .Errorf ("Task input must be a JSON array or object." )
8982}
9083
9184func (w * WorkflowLoader ) LoadVersionList (ctx context.Context , input VersionListInput , cur client.Cursor ) (client.Cursor , []* wfclient.WorkflowVersion , error ) {
0 commit comments