Merge pull request #3248 from jsternberg/printer-bake-wait-fix

progress: ensure bake waits for progress to finish printing on error conditions
This commit is contained in:
Tõnis Tiigi
2025-06-16 10:52:50 -07:00
committed by GitHub
2 changed files with 17 additions and 10 deletions
+6
View File
@@ -162,7 +162,13 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba
attributes := bakeMetricAttributes(dockerCli, driverType, url, cmdContext, targets, &in)
progressMode := progressui.DisplayMode(cFlags.progress)
var printer *progress.Printer
defer func() {
if printer != nil {
printer.Wait()
}
}()
makePrinter := func() error {
var err error
+11 -10
View File
@@ -51,8 +51,8 @@ type Printer struct {
func (p *Printer) Wait() error {
p.closeOnce.Do(func() {
close(p.status)
<-p.done
})
<-p.done
return p.err
}
@@ -144,6 +144,7 @@ func NewPrinter(ctx context.Context, out console.File, mode progressui.DisplayMo
interrupt: make(chan interruptRequest),
state: printerStateRunning,
done: make(chan struct{}),
metrics: opt.mw,
}
go pw.run(ctx, d)
@@ -155,21 +156,21 @@ func (p *Printer) run(ctx context.Context, d progressui.Display) {
defer close(p.interrupt)
var ss []*client.SolveStatus
for p.state != printerStateDone {
for {
switch p.state {
case printerStatePaused:
ss, p.err = p.bufferDisplay(ctx, ss)
case printerStateRunning:
var warnings []client.VertexWarning
warnings, ss, p.err = p.updateDisplay(ctx, d, ss)
p.warnings = append(p.warnings, warnings...)
d, _ = p.newDisplay()
p.warnings, ss, p.err = p.updateDisplay(ctx, d, ss)
if p.opt.onclose != nil {
p.opt.onclose()
}
}
}
if p.opt.onclose != nil {
p.opt.onclose()
if p.state == printerStateDone {
break
}
d, _ = p.newDisplay()
}
}