diff --git a/util/progress/printer.go b/util/progress/printer.go index ec627191..e2014d68 100644 --- a/util/progress/printer.go +++ b/util/progress/printer.go @@ -2,6 +2,8 @@ package progress import ( "context" + "io" + "io/ioutil" "os" "github.com/containerd/console" @@ -9,6 +11,13 @@ import ( "github.com/moby/buildkit/util/progress/progressui" ) +const ( + PrinterModeAuto = "auto" + PrinterModeTty = "tty" + PrinterModePlain = "plain" + PrinterModeQuiet = "quiet" +) + type Printer struct { status chan *client.SolveStatus done <-chan struct{} @@ -34,17 +43,23 @@ func NewPrinter(ctx context.Context, out console.File, mode string) *Printer { done: doneCh, } - if v := os.Getenv("BUILDKIT_PROGRESS"); v != "" && mode == "auto" { + if v := os.Getenv("BUILDKIT_PROGRESS"); v != "" && mode == PrinterModeAuto { mode = v } go func() { var c console.Console - if cons, err := console.ConsoleFromFile(out); err == nil && (mode == "auto" || mode == "tty") { - c = cons + var w io.Writer = out + switch mode { + case PrinterModeQuiet: + w = ioutil.Discard + case PrinterModeAuto, PrinterModeTty: + if cons, err := console.ConsoleFromFile(out); err == nil { + c = cons + } } // 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, w, statusCh) close(doneCh) }() return pw