From 0dd89f602922851a3159976972832728aafa0bd3 Mon Sep 17 00:00:00 2001 From: Kohei Tokunaga Date: Fri, 13 Oct 2023 11:36:14 +0900 Subject: [PATCH] monitor: print error information before launching monitor Signed-off-by: Kohei Tokunaga --- commands/build.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/commands/build.go b/commands/build.go index 59950281..fb910de8 100644 --- a/commands/build.go +++ b/commands/build.go @@ -391,6 +391,11 @@ func runControllerBuild(ctx context.Context, dockerCli command.Cli, opts *contro } if options.invokeConfig != nil && options.invokeConfig.needsDebug(retErr) { + // Print errors before launching monitor + if err := printError(retErr, printer); err != nil { + logrus.Warnf("failed to print error information: %v", err) + } + pr2, pw2 := io.Pipe() f.SetWriter(pw2, func() io.WriteCloser { pw2.Close() // propagate EOF @@ -412,6 +417,18 @@ func runControllerBuild(ctx context.Context, dockerCli command.Cli, opts *contro return resp, retErr } +func printError(err error, printer *progress.Printer) error { + if err := printer.Pause(); err != nil { + return err + } + defer printer.Unpause() + for _, s := range errdefs.Sources(err) { + s.Print(os.Stderr) + } + fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) + return nil +} + func newDebuggableBuild(dockerCli command.Cli, rootOpts *rootOptions) debug.DebuggableCmd { return &debuggableBuild{dockerCli: dockerCli, rootOpts: rootOpts} }