Skip to content

Commit 39dc02b

Browse files
committed
return failed step in the reason
1 parent 12bb10e commit 39dc02b

File tree

26 files changed

+483
-235
lines changed

26 files changed

+483
-235
lines changed

packages/api/internal/api/spec.gen.go

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

packages/api/internal/api/types.gen.go

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

packages/api/internal/cache/templates/cache.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package templatecache
33
import (
44
"context"
55
"database/sql"
6+
"encoding/json"
67
"errors"
78
"fmt"
89
"net/http"
@@ -154,7 +155,7 @@ type TemplateBuildInfo struct {
154155
TeamID uuid.UUID
155156
TemplateID string
156157
BuildStatus envbuild.Status
157-
Reason *string
158+
Reason *api.BuildStatusReason
158159

159160
ClusterID *uuid.UUID
160161
ClusterNodeID *string
@@ -182,7 +183,7 @@ func NewTemplateBuildCache(db *db.DB) *TemplatesBuildCache {
182183
}
183184
}
184185

185-
func (c *TemplatesBuildCache) SetStatus(buildID uuid.UUID, status envbuild.Status, reason *string) {
186+
func (c *TemplatesBuildCache) SetStatus(buildID uuid.UUID, status envbuild.Status, reason *api.BuildStatusReason) {
186187
c.mx.Lock()
187188
defer c.mx.Unlock()
188189

@@ -197,7 +198,6 @@ func (c *TemplatesBuildCache) SetStatus(buildID uuid.UUID, status envbuild.Statu
197198
logger.WithBuildID(buildID.String()),
198199
zap.String("to_status", status.String()),
199200
zap.String("from_status", item.BuildStatus.String()),
200-
zap.Stringp("reason", reason),
201201
)
202202

203203
_ = c.cache.Set(
@@ -239,13 +239,33 @@ func (c *TemplatesBuildCache) Get(ctx context.Context, buildID uuid.UUID, templa
239239
return TemplateBuildInfo{}, fmt.Errorf("failed to get template build '%s': %w", buildID, envBuildDBErr)
240240
}
241241

242+
dbReason := ""
243+
if envBuildDB.Reason != nil {
244+
dbReason = *envBuildDB.Reason
245+
}
246+
247+
var parsedReason *api.BuildStatusReason
248+
err := json.Unmarshal([]byte(dbReason), &parsedReason)
249+
if err != nil {
250+
zap.L().Warn("Failed to parse build status reason from DB",
251+
logger.WithBuildID(buildID.String()),
252+
zap.String("reason", dbReason),
253+
zap.Error(err),
254+
)
255+
// If parsing fails, we just store the raw reason as a message
256+
parsedReason = &api.BuildStatusReason{
257+
Step: "",
258+
Message: dbReason,
259+
}
260+
}
261+
242262
item = c.cache.Set(
243263
buildID,
244264
TemplateBuildInfo{
245265
TeamID: envDB.TeamID,
246266
TemplateID: envDB.ID,
247267
BuildStatus: envBuildDB.Status,
248-
Reason: envBuildDB.Reason,
268+
Reason: parsedReason,
249269

250270
ClusterID: envDB.ClusterID,
251271
ClusterNodeID: envBuildDB.ClusterNodeID,

packages/api/internal/template-manager/create_template.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,14 @@ func (tm *TemplateManager) CreateTemplate(
5454

5555
// Report build failur status on any error while creating the template
5656
telemetry.ReportCriticalError(ctx, "build failed", e, telemetry.WithTemplateID(templateID))
57-
msg := fmt.Sprintf("error when building env: %s", e)
5857
err := tm.SetStatus(
5958
ctx,
6059
templateID,
6160
buildID,
6261
envbuild.StatusFailed,
63-
&msg,
62+
&templatemanagergrpc.TemplateBuildStatusReason{
63+
Message: fmt.Sprintf("error when building env: %s", e),
64+
},
6465
)
6566
if err != nil {
6667
e = errors.Join(e, fmt.Errorf("failed to set build status to failed: %w", err))

packages/api/internal/template-manager/template_manager_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type fakeTemplateManagerClient struct {
2020
getStatusErr error
2121
}
2222

23-
func (f fakeTemplateManagerClient) SetStatus(ctx context.Context, templateID string, buildID uuid.UUID, status envbuild.Status, reason *string) error {
23+
func (f fakeTemplateManagerClient) SetStatus(ctx context.Context, templateID string, buildID uuid.UUID, status envbuild.Status, reason *templatemanagergrpc.TemplateBuildStatusReason) error {
2424
return f.setStatusError
2525
}
2626

@@ -35,7 +35,7 @@ func (f fakeTemplateManagerClient) GetStatus(ctx context.Context, buildID uuid.U
3535
func TestPollBuildStatus_setStatus(t *testing.T) {
3636
type fields struct {
3737
buildID uuid.UUID
38-
templateManagerClient *fakeTemplateManagerClient
38+
templateManagerClient templateManagerClient
3939
}
4040

4141
tests := []struct {
@@ -120,7 +120,7 @@ func TestPollBuildStatus_setStatus(t *testing.T) {
120120

121121
func TestPollBuildStatus_dispatchBasedOnStatus(t *testing.T) {
122122
type fields struct {
123-
templateManagerClient *fakeTemplateManagerClient
123+
templateManagerClient templateManagerClient
124124
}
125125
type args struct {
126126
status *templatemanagergrpc.TemplateBuildStatusResponse
@@ -272,7 +272,7 @@ func TestPollBuildStatus_dispatchBasedOnStatus(t *testing.T) {
272272
logger: zap.NewNop(),
273273
}
274274

275-
err, completed := c.dispatchBasedOnStatus(context.TODO(), tt.args.status)
275+
completed, err := c.dispatchBasedOnStatus(context.TODO(), tt.args.status)
276276
if tt.wantErr {
277277
if err == nil {
278278
t.Errorf("Expected error, got no error")

0 commit comments

Comments
 (0)