From 76587bddc2c74d1529b40a1e178ad92741528ecc Mon Sep 17 00:00:00 2001 From: Brendan Smith Date: Mon, 21 Jul 2025 22:36:40 -0400 Subject: [PATCH] fix(build): Show logs when build fails in prebuild phases Fixes #95. When builds fail during prebuild phases (INSTALL, PRE_BUILD, etc.), users now see the relevant error logs instead of just a spinner. This helps users understand failures like malformed app.json or apppack.toml files. The implementation checks CodeBuild status (FAILED, STOPPED, TIMED_OUT) during prebuild phases and streams logs when failures are detected. This preserves existing UX for successful builds while providing error visibility for failures. --- cmd/build.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/build.go b/cmd/build.go index 5ebca7d..619deda 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -409,6 +409,14 @@ func watchBuildPhase(a *app.App, buildStatus *app.BuildStatus) error { go StreamEvents(a.Session, buildStatus.Build.Logs, aws.String("build"), stopTailing) } } else if *build.CurrentPhase == "SUBMITTED" || *build.CurrentPhase == "QUEUED" || *build.CurrentPhase == "PROVISIONING" || *build.CurrentPhase == "DOWNLOAD_SOURCE" || *build.CurrentPhase == "INSTALL" || *build.CurrentPhase == "PRE_BUILD" { + if build.BuildStatus != nil && (*build.BuildStatus == "FAILED" || *build.BuildStatus == "STOPPED" || *build.BuildStatus == "TIMED_OUT") { + ui.Spinner.Stop() + fmt.Printf("Build failed during %s phase, showing logs:\n", strings.ToLower(strings.ReplaceAll(*build.CurrentPhase, "_", " "))) + if strings.HasPrefix(buildStatus.Build.Logs, "s3://") { + return S3Log(a.Session, buildStatus.Build.Logs) + } + return StreamEvents(a.Session, buildStatus.Build.Logs, nil, nil) + } ui.StartSpinner() caser := cases.Title(language.English) ui.Spinner.Suffix = fmt.Sprintf(" CodeBuild phase: %s", caser.String(strings.ToLower(strings.ReplaceAll(*build.CurrentPhase, "_", " "))))