Skip to content

Commit e49bd71

Browse files
chore: show job level verifications
1 parent 01436c5 commit e49bd71

File tree

14 files changed

+150
-43
lines changed

14 files changed

+150
-43
lines changed

apps/web/app/routes/ws/deployments/_components/release-targets/EnvironmentReleaseTargetsGroup.tsx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -290,13 +290,13 @@ const VerificationStatusConfig: Record<
290290

291291
function VerificationStatusBadge({
292292
summaries,
293-
verification,
293+
verifications,
294294
}: {
295295
summaries: MetricSummary[];
296-
verification?: ReleaseVerification;
296+
verifications: ReleaseVerification[];
297297
}) {
298298
const status = getOverallVerificationStatus(summaries);
299-
if (status === "none" || verification == null) return null;
299+
if (status === "none" || verifications.length === 0) return null;
300300

301301
const config = VerificationStatusConfig[status];
302302
return (
@@ -312,9 +312,13 @@ function VerificationStatusBadge({
312312
<DialogHeader>
313313
<DialogTitle>Verifications</DialogTitle>
314314
</DialogHeader>
315-
316-
{verification.metrics.map((metric) => (
317-
<MetricDisplay key={metric.name} metric={metric} />
315+
{verifications.map((verification) => (
316+
<Fragment key={verification.id}>
317+
<div className="text-sm font-medium">{verification.message}</div>
318+
{verification.metrics.map((metric) => (
319+
<MetricDisplay key={metric.name} metric={metric} />
320+
))}
321+
</Fragment>
318322
))}
319323
</DialogContent>
320324
</Dialog>
@@ -326,9 +330,8 @@ function ReleaseTargetRow({
326330
state,
327331
resource,
328332
}: ReleaseTargetRowProps) {
329-
const desiredState = state.desiredRelease;
330-
const verification = desiredState?.verification;
331-
const summaries = verification ? verificationSummary(verification) : [];
333+
const verifications = state.latestJob?.verifications ?? [];
334+
const summaries = verifications.map(verificationSummary).flat();
332335

333336
return (
334337
<TableRow key={releaseTarget.resourceId}>
@@ -349,7 +352,7 @@ function ReleaseTargetRow({
349352
/>
350353
<VerificationStatusBadge
351354
summaries={summaries}
352-
verification={verification}
355+
verifications={verifications}
353356
/>
354357
</div>
355358
</TableCell>

apps/workspace-engine/oapi/openapi.json

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,27 @@
10671067
],
10681068
"type": "object"
10691069
},
1070+
"JobWithVerifications": {
1071+
"additionalProperties": false,
1072+
"allOf": [
1073+
{
1074+
"$ref": "#/components/schemas/Job"
1075+
},
1076+
{
1077+
"properties": {
1078+
"verifications": {
1079+
"items": {
1080+
"$ref": "#/components/schemas/ReleaseVerification"
1081+
},
1082+
"type": "array"
1083+
}
1084+
},
1085+
"required": [
1086+
"verifications"
1087+
]
1088+
}
1089+
]
1090+
},
10701091
"JsonSelector": {
10711092
"properties": {
10721093
"json": {
@@ -1565,7 +1586,7 @@
15651586
"$ref": "#/components/schemas/Release"
15661587
},
15671588
"latestJob": {
1568-
"$ref": "#/components/schemas/Job"
1589+
"$ref": "#/components/schemas/JobWithVerifications"
15691590
}
15701591
},
15711592
"type": "object"

apps/workspace-engine/oapi/spec/schemas/entities.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ local openapi = import '../lib/openapi.libsonnet';
206206
properties: {
207207
desiredRelease: openapi.schemaRef('Release'),
208208
currentRelease: openapi.schemaRef('Release'),
209-
latestJob: openapi.schemaRef('Job'),
209+
latestJob: openapi.schemaRef('JobWithVerifications'),
210210
},
211211
},
212212

apps/workspace-engine/oapi/spec/schemas/jobs.jsonnet

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ local JobPropertyKeys = std.objectFields(Job.properties);
5353
],
5454
},
5555

56+
JobWithVerifications: {
57+
allOf: [
58+
openapi.schemaRef('Job'),
59+
{
60+
required: ['verifications'],
61+
properties: {
62+
verifications: {
63+
type: 'array',
64+
items: openapi.schemaRef('ReleaseVerification'),
65+
},
66+
},
67+
},
68+
],
69+
additionalProperties: false,
70+
},
71+
5672
JobWithRelease: {
5773
type: 'object',
5874
required: ['job', 'release'],

apps/workspace-engine/pkg/oapi/oapi.gen.go

Lines changed: 21 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ func (d *ArgoCDDispatcher) startArgoApplicationVerification(
324324
},
325325
}
326326

327-
if err := d.verification.StartVerification(ctx, &jobWithRelease.Release, metrics); err != nil {
327+
if err := d.verification.StartVerification(ctx, &jobWithRelease.Release, &jobWithRelease.Job, metrics); err != nil {
328328
span.RecordError(err)
329329
span.SetStatus(codes.Error, "failed to start verification")
330330
return err

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ func (d *TerraformCloudDispatcher) syncVariables(ctx context.Context, client *tf
272272
return nil
273273
}
274274

275-
func (d *TerraformCloudDispatcher) createRunVerification(ctx context.Context, release *oapi.Release, config oapi.FullTerraformCloudJobAgentConfig, runId string) error {
275+
func (d *TerraformCloudDispatcher) createRunVerification(ctx context.Context, release *oapi.Release, job *oapi.Job, config oapi.FullTerraformCloudJobAgentConfig, runId string) error {
276276
provider := oapi.MetricProvider{}
277277
err := provider.FromTerraformCloudRunMetricProvider(oapi.TerraformCloudRunMetricProvider{
278278
Address: config.Address,
@@ -295,7 +295,7 @@ func (d *TerraformCloudDispatcher) createRunVerification(ctx context.Context, re
295295
},
296296
}
297297

298-
return d.verification.StartVerification(ctx, release, metrics)
298+
return d.verification.StartVerification(ctx, release, job, metrics)
299299
}
300300

301301
func (d *TerraformCloudDispatcher) getKafkaProducer() (messaging.Producer, error) {
@@ -481,7 +481,7 @@ func (d *TerraformCloudDispatcher) DispatchJob(ctx context.Context, job *oapi.Jo
481481
return err
482482
}
483483

484-
if err := d.createRunVerification(ctx, &templatableJob.Release.Release, cfg, run.ID); err != nil {
484+
if err := d.createRunVerification(ctx, &templatableJob.Release.Release, job, cfg, run.ID); err != nil {
485485
span.RecordError(err)
486486
span.SetStatus(codes.Error, "failed to create run verification")
487487
return err

apps/workspace-engine/pkg/workspace/releasemanager/action/verification/verification.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (v *VerificationAction) Execute(
5757
span.SetAttributes(attribute.Int("metric_count", len(metrics)))
5858

5959
// Create verification synchronously
60-
if err := v.verificationManager.StartVerification(ctx, actx.Release, metrics); err != nil {
60+
if err := v.verificationManager.StartVerification(ctx, actx.Release, actx.Job, metrics); err != nil {
6161
span.RecordError(err)
6262
span.SetStatus(codes.Error, "failed to create verification")
6363
log.Error("Failed to create verification",

apps/workspace-engine/pkg/workspace/releasemanager/state_cache.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,35 @@ func (sc *StateCache) Invalidate(releaseTarget *oapi.ReleaseTarget) {
8080
sc.cache.Del(releaseTarget.Key())
8181
}
8282

83+
func (sc *StateCache) getJobWithVerifications(job *oapi.Job) *oapi.JobWithVerifications {
84+
if job == nil {
85+
return nil
86+
}
87+
verifications := sc.store.ReleaseVerifications.GetByJobId(job.Id)
88+
verificationsSlice := make([]oapi.ReleaseVerification, 0, len(verifications))
89+
for _, verification := range verifications {
90+
if verification == nil {
91+
continue
92+
}
93+
verificationsSlice = append(verificationsSlice, *verification)
94+
}
95+
return &oapi.JobWithVerifications{
96+
CreatedAt: job.CreatedAt,
97+
ExternalId: job.ExternalId,
98+
Id: job.Id,
99+
JobAgentConfig: job.JobAgentConfig,
100+
JobAgentId: job.JobAgentId,
101+
Message: job.Message,
102+
Metadata: job.Metadata,
103+
ReleaseId: job.ReleaseId,
104+
StartedAt: job.StartedAt,
105+
Status: job.Status,
106+
TraceToken: job.TraceToken,
107+
UpdatedAt: job.UpdatedAt,
108+
Verifications: verificationsSlice,
109+
}
110+
}
111+
83112
// compute computes the release target state from scratch and caches it.
84113
// This involves gathering current release and job information.
85114
// Callers can provide already-known information via options to avoid redundant queries.
@@ -143,10 +172,11 @@ func (sc *StateCache) compute(ctx context.Context, releaseTarget *oapi.ReleaseTa
143172
latestJob, _ = sc.store.ReleaseTargets.GetLatestJob(ctx, releaseTarget)
144173
}
145174

175+
latestJobWithVerifications := sc.getJobWithVerifications(latestJob)
146176
rts = &oapi.ReleaseTargetState{
147177
DesiredRelease: desiredRelease,
148178
CurrentRelease: currentRelease,
149-
LatestJob: latestJob,
179+
LatestJob: latestJobWithVerifications,
150180
}
151181

152182
sc.Set(releaseTarget, rts)

apps/workspace-engine/pkg/workspace/releasemanager/verification/manager.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ func (m *Manager) Restore(ctx context.Context) error {
9292
func (m *Manager) StartVerification(
9393
ctx context.Context,
9494
release *oapi.Release,
95+
job *oapi.Job,
9596
metrics []oapi.VerificationMetricSpec,
9697
) error {
9798
ctx, span := tracer.Start(ctx, "StartVerification",
@@ -131,6 +132,10 @@ func (m *Manager) StartVerification(
131132
CreatedAt: time.Now(),
132133
}
133134

135+
if job != nil {
136+
verificationRecord.JobId = &job.Id
137+
}
138+
134139
// Store the verification
135140
m.store.ReleaseVerifications.Upsert(ctx, verificationRecord)
136141

0 commit comments

Comments
 (0)