Skip to content

Commit 8de82bc

Browse files
committed
Call debugger on composeUp errors
1 parent acb6918 commit 8de82bc

File tree

3 files changed

+32
-27
lines changed

3 files changed

+32
-27
lines changed

src/cmd/cli/command/compose.go

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func makeComposeUpCmd() *cobra.Command {
8989
}
9090

9191
track.Evt("Debug Prompted", P("loadErr", loadErr))
92-
return cli.InteractiveDebugForLoadError(ctx, client, project, loadErr)
92+
return cli.InteractiveDebugForClientError(ctx, client, project, loadErr)
9393
}
9494

9595
provider, err := newProvider(ctx, loader)
@@ -152,23 +152,28 @@ func makeComposeUpCmd() *cobra.Command {
152152
}
153153

154154
deploy, project, err := cli.ComposeUp(ctx, project, client, provider, upload, mode.Value())
155-
156155
if err != nil {
157-
if !nonInteractive && strings.Contains(err.Error(), "maximum number of projects") {
158-
if projectName, err2 := provider.RemoteProjectName(cmd.Context()); err2 == nil {
159-
term.Error("Error:", prettyError(err))
160-
if _, err := cli.InteractiveComposeDown(cmd.Context(), provider, projectName); err != nil {
161-
term.Debug("ComposeDown failed:", err)
162-
printDefangHint("To deactivate a project, do:", "compose down --project-name "+projectName)
163-
} else {
164-
printDefangHint("To try deployment again, do:", "compose up")
165-
}
166-
return nil
167-
}
168-
}
169156
if errors.Is(err, types.ErrComposeFileNotFound) {
170157
printDefangHint("To start a new project, do:", "new")
171158
}
159+
if !nonInteractive {
160+
if strings.Contains(err.Error(), "maximum number of projects") {
161+
if projectName, err2 := provider.RemoteProjectName(cmd.Context()); err2 == nil {
162+
term.Error("Error:", prettyError(err))
163+
if _, err := cli.InteractiveComposeDown(cmd.Context(), provider, projectName); err != nil {
164+
term.Debug("ComposeDown failed:", err)
165+
printDefangHint("To deactivate a project, do:", "compose down --project-name "+projectName)
166+
} else {
167+
printDefangHint("To try deployment again, do:", "compose up")
168+
}
169+
return nil
170+
}
171+
return err
172+
}
173+
term.Error("Error:", prettyError(err))
174+
track.Evt("Debug Prompted", P("composeErr", err))
175+
return cli.InteractiveDebugForClientError(ctx, client, project, err)
176+
}
172177
return err
173178
}
174179

@@ -438,7 +443,7 @@ func makeComposeConfigCmd() *cobra.Command {
438443
}
439444

440445
track.Evt("Debug Prompted", P("loadErr", loadErr))
441-
return cli.InteractiveDebugForLoadError(ctx, client, project, loadErr)
446+
return cli.InteractiveDebugForClientError(ctx, client, project, loadErr)
442447
}
443448

444449
provider, err := newProvider(ctx, loader)

src/pkg/cli/client/byoc/baseclient.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ func topologicalSort(nodes map[string]*Node) []*defangv1.ServiceInfo {
207207
// This function was based on update function from Fabric controller and slightly modified to work with BYOC
208208
func (b *ByocBaseClient) update(ctx context.Context, projectName, delegateDomain string, service composeTypes.ServiceConfig) (*defangv1.ServiceInfo, error) {
209209
if err := compose.ValidateService(&service); err != nil {
210-
return nil, fmt.Errorf("service %q: %w", service.Name, err)
210+
return nil, err // caller prepends service name
211211
}
212212

213213
pkg.Ensure(projectName != "", "ProjectName not set")
@@ -257,7 +257,7 @@ func (b *ByocBaseClient) update(ctx context.Context, projectName, delegateDomain
257257

258258
if siUpdater, ok := b.projectBackend.(ServiceInfoUpdater); ok {
259259
if err := siUpdater.UpdateServiceInfo(ctx, si, projectName, delegateDomain, service); err != nil {
260-
return nil, fmt.Errorf("service %q: %w", service.Name, err)
260+
return nil, err // caller prepends service name
261261
}
262262
}
263263

src/pkg/cli/debug.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,27 +72,27 @@ func InteractiveDebugDeployment(ctx context.Context, client client.FabricClient,
7272
return interactiveDebug(ctx, client, debugConfig, nil)
7373
}
7474

75-
func InteractiveDebugForLoadError(ctx context.Context, client client.FabricClient, project *compose.Project, loadErr error) error {
76-
return interactiveDebug(ctx, client, DebugConfig{Project: project}, loadErr)
75+
func InteractiveDebugForClientError(ctx context.Context, client client.FabricClient, project *compose.Project, clientErr error) error {
76+
return interactiveDebug(ctx, client, DebugConfig{Project: project}, clientErr)
7777
}
7878

79-
func interactiveDebug(ctx context.Context, client client.FabricClient, debugConfig DebugConfig, loadError error) error {
79+
func interactiveDebug(ctx context.Context, client client.FabricClient, debugConfig DebugConfig, clientErr error) error {
8080
var aiDebug bool
8181
if err := survey.AskOne(&survey.Confirm{
8282
Message: "Would you like to debug the deployment with AI?",
8383
Help: "This will send logs and artifacts to our backend and attempt to diagnose the issue and provide a solution.",
8484
}, &aiDebug, survey.WithStdio(term.DefaultTerm.Stdio())); err != nil {
85-
track.Evt("Debug Prompt Failed", P("etag", debugConfig.Deployment), P("reason", err), P("loadErr", loadError))
85+
track.Evt("Debug Prompt Failed", P("etag", debugConfig.Deployment), P("reason", err), P("loadErr", clientErr))
8686
return err
8787
} else if !aiDebug {
88-
track.Evt("Debug Prompt Skipped", P("etag", debugConfig.Deployment), P("loadErr", loadError))
88+
track.Evt("Debug Prompt Skipped", P("etag", debugConfig.Deployment), P("loadErr", clientErr))
8989
return ErrDebugSkipped
9090
}
9191

92-
track.Evt("Debug Prompt Accepted", P("etag", debugConfig.Deployment), P("loadErr", loadError))
92+
track.Evt("Debug Prompt Accepted", P("etag", debugConfig.Deployment), P("loadErr", clientErr))
9393

94-
if loadError != nil {
95-
if err := debugComposeFileLoadError(ctx, client, debugConfig.Project, loadError); err != nil {
94+
if clientErr != nil {
95+
if err := debugComposeFileLoadError(ctx, client, debugConfig.Project, clientErr); err != nil {
9696
term.Warnf("Failed to debug compose file load: %v", err)
9797
return err
9898
}
@@ -110,9 +110,9 @@ func interactiveDebug(ctx context.Context, client client.FabricClient, debugConf
110110
Message: "Was the debugging helpful?",
111111
Help: "Please provide feedback to help us improve the debugging experience.",
112112
}, &goodBad); err != nil {
113-
track.Evt("Debug Feedback Prompt Failed", P("etag", debugConfig.Deployment), P("reason", err), P("loadErr", loadError))
113+
track.Evt("Debug Feedback Prompt Failed", P("etag", debugConfig.Deployment), P("reason", err), P("loadErr", clientErr))
114114
} else {
115-
track.Evt("Debug Feedback Prompt Answered", P("etag", debugConfig.Deployment), P("feedback", goodBad), P("loadErr", loadError))
115+
track.Evt("Debug Feedback Prompt Answered", P("etag", debugConfig.Deployment), P("feedback", goodBad), P("loadErr", clientErr))
116116
}
117117
return nil
118118
}

0 commit comments

Comments
 (0)