@@ -100,6 +100,14 @@ func (d *ArgoCDDispatcher) DispatchJob(ctx context.Context, job *oapi.Job) error
100100 return fmt .Errorf ("failed to get templatable job with release: %w" , err )
101101 }
102102
103+ // Convert to map for lowercase template keys (consistent with CEL and verification providers)
104+ templateData , err := structToMap (templatableJobWithRelease )
105+ if err != nil {
106+ span .RecordError (err )
107+ span .SetStatus (codes .Error , "failed to convert job to template data" )
108+ return fmt .Errorf ("failed to convert job to template data: %w" , err )
109+ }
110+
103111 span .SetAttributes (attribute .String ("cfg" , fmt .Sprintf ("%+v" , cfg )))
104112 span .SetAttributes (attribute .String ("argocd.server_url" , cfg .ServerUrl ))
105113 t , err := template .New ("argoCDAgentConfig" ).Funcs (sprig .TxtFuncMap ()).Option ("missingkey=zero" ).Parse (cfg .Template )
@@ -110,7 +118,7 @@ func (d *ArgoCDDispatcher) DispatchJob(ctx context.Context, job *oapi.Job) error
110118 }
111119
112120 var buf bytes.Buffer
113- if err := t .Execute (& buf , templatableJobWithRelease ); err != nil {
121+ if err := t .Execute (& buf , templateData ); err != nil {
114122 span .RecordError (err )
115123 span .SetStatus (codes .Error , "failed to execute template" )
116124 return fmt .Errorf ("failed to execute template: %w" , err )
@@ -343,3 +351,18 @@ func (d *ArgoCDDispatcher) startArgoApplicationVerification(
343351 span .SetStatus (codes .Ok , "verification started" )
344352 return nil
345353}
354+
355+ // structToMap converts a struct to a map using JSON marshaling.
356+ // This ensures template keys use lowercase names (from json tags),
357+ // consistent with CEL selectors and verification providers.
358+ func structToMap (v any ) (map [string ]any , error ) {
359+ data , err := json .Marshal (v )
360+ if err != nil {
361+ return nil , err
362+ }
363+ var result map [string ]any
364+ if err := json .Unmarshal (data , & result ); err != nil {
365+ return nil , err
366+ }
367+ return result , nil
368+ }
0 commit comments