Skip to content

Commit 1add8ec

Browse files
committed
refactor: standardize template data conversion to lowercase keys for ArgoCD and Terraform Cloud dispatchers
1 parent 97d35b6 commit 1add8ec

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

apps/workspace-engine/pkg/workspace/jobdispatch/argocd.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
}

apps/workspace-engine/pkg/workspace/jobdispatch/terraformcloud.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,14 @@ func (d *TerraformCloudDispatcher) generateWorkspace(job *oapi.TemplatableJob, t
199199
return nil, fmt.Errorf("failed to parse template: %w", err)
200200
}
201201

202+
// Convert to map for lowercase template keys (consistent with CEL and verification providers)
203+
templateData, err := structToMap(job)
204+
if err != nil {
205+
return nil, fmt.Errorf("failed to convert job to template data: %w", err)
206+
}
207+
202208
var buf bytes.Buffer
203-
if err := t.Execute(&buf, job); err != nil {
209+
if err := t.Execute(&buf, templateData); err != nil {
204210
return nil, fmt.Errorf("failed to execute template: %w", err)
205211
}
206212

apps/workspace-engine/pkg/workspace/releasemanager/policy/evaluator/versionselector/versionselector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func (e *Evaluator) Evaluate(ctx context.Context, scope evaluator.EvaluatorScope
110110

111111
// evaluateCEL evaluates a CEL-based selector
112112
func (e *Evaluator) evaluateCEL(
113-
ctx context.Context,
113+
_ context.Context,
114114
scope evaluator.EvaluatorScope,
115115
deployment *oapi.Deployment,
116116
resource *oapi.Resource,

0 commit comments

Comments
 (0)