diff --git a/examples/build-using-dockerfile/main.go b/examples/build-using-dockerfile/main.go index 464b8dbc1..2ddde7088 100644 --- a/examples/build-using-dockerfile/main.go +++ b/examples/build-using-dockerfile/main.go @@ -107,7 +107,8 @@ func action(clicontext *cli.Context) error { c = cn } // not using shared context to not disrupt display but let is finish reporting errors - return progressui.DisplaySolveStatus(context.TODO(), "", c, os.Stdout, ch) + _, err = progressui.DisplaySolveStatus(context.TODO(), "", c, os.Stdout, ch) + return err }) eg.Go(func() error { if err := loadDockerTar(pipeR); err != nil { diff --git a/util/progress/progressui/display.go b/util/progress/progressui/display.go index c6c723fee..13af8e38c 100644 --- a/util/progress/progressui/display.go +++ b/util/progress/progressui/display.go @@ -21,7 +21,7 @@ import ( "golang.org/x/time/rate" ) -func DisplaySolveStatus(ctx context.Context, phase string, c console.Console, w io.Writer, ch chan *client.SolveStatus) error { +func DisplaySolveStatus(ctx context.Context, phase string, c console.Console, w io.Writer, ch chan *client.SolveStatus) ([]client.VertexWarning, error) { modeConsole := c != nil disp := &display{c: c, phase: phase} @@ -57,7 +57,7 @@ func DisplaySolveStatus(ctx context.Context, phase string, c console.Console, w for { select { case <-ctx.Done(): - return ctx.Err() + return nil, ctx.Err() case <-ticker.C: case ss, ok := <-ch: if ok { @@ -72,7 +72,7 @@ func DisplaySolveStatus(ctx context.Context, phase string, c console.Console, w if done { disp.print(t.displayInfo(), width, height, true) t.printErrorLogs(c) - return nil + return t.warnings(), nil } else if displayLimiter.Allow() { ticker.Stop() ticker = time.NewTicker(tickerTimeout) @@ -83,7 +83,7 @@ func DisplaySolveStatus(ctx context.Context, phase string, c console.Console, w printer.print(t) if done { t.printErrorLogs(w) - return nil + return t.warnings(), nil } ticker.Stop() ticker = time.NewTicker(tickerTimeout) @@ -172,6 +172,14 @@ func newTrace(w io.Writer, modeConsole bool) *trace { } } +func (t *trace) warnings() []client.VertexWarning { + var out []client.VertexWarning + for _, v := range t.vertexes { + out = append(out, v.warnings...) + } + return out +} + func (t *trace) triggerVertexEvent(v *client.Vertex) { if v.Started == nil { return diff --git a/util/progress/progresswriter/printer.go b/util/progress/progresswriter/printer.go index 037123dfc..c96c4525a 100644 --- a/util/progress/progresswriter/printer.go +++ b/util/progress/progresswriter/printer.go @@ -87,7 +87,7 @@ func NewPrinter(ctx context.Context, out console.File, mode string) (Writer, err go func() { // not using shared context to not disrupt display but let is finish reporting errors - pw.err = progressui.DisplaySolveStatus(ctx, "", c, out, statusCh) + _, pw.err = progressui.DisplaySolveStatus(ctx, "", c, out, statusCh) close(doneCh) }() return pw, nil