From 7172f062fb03a609b7d6524c183fa012c1f8a150 Mon Sep 17 00:00:00 2001 From: Dean Chen <862469039@qq.com> Date: Mon, 24 Aug 2026 14:39:52 +0500 Subject: [PATCH] commands: print lint warnings after --call output --call outline writes to stdout while vertex warnings were dumped on stderr from the progress printer's OnClose, which races with that output. Keep warnings on stderr, but print them after the call result. Fixes #2973 Signed-off-by: Dean Chen <862469039@qq.com> --- commands/bake.go | 16 +++++++++++++++- commands/build.go | 8 ++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/commands/bake.go b/commands/bake.go index 6fcde330d1fd..7c1392dd0d48 100644 --- a/commands/bake.go +++ b/commands/bake.go @@ -186,6 +186,7 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba progressMode := progressui.DisplayMode(cFlags.progress) var printer *progress.Printer + printWarningsOnClose := true defer func() { if printer != nil { printer.Wait() @@ -198,7 +199,9 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba progress.WithDesc(progressTextDesc, progressConsoleDesc), progress.WithMetrics(mp, attributes), progress.WithOnClose(func() { - printWarnings(os.Stderr, printer.Warnings(), progressMode) + if printWarningsOnClose { + printWarnings(os.Stderr, printer.Warnings(), progressMode) + } }), ) return err @@ -334,6 +337,13 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba } } + for _, opt := range bo { + if opt.CallFunc != nil { + printWarningsOnClose = false + break + } + } + exp, err := ent.Validate(bo) if err != nil { return err @@ -499,6 +509,10 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba } } + if !printWarningsOnClose { + printWarnings(os.Stderr, printer.Warnings(), progressMode) + } + if exitCode != 0 { return cobrautil.ExitCodeError(exitCode) } diff --git a/commands/build.go b/commands/build.go index 04d20bea6e41..de759a5ac1a1 100644 --- a/commands/build.go +++ b/commands/build.go @@ -408,7 +408,9 @@ func runBuild(ctx context.Context, dockerCli command.Cli, debugOpts debuggerOpti ), progress.WithMetrics(mp, attributes), progress.WithOnClose(func() { - printWarnings(os.Stderr, printer.Warnings(), progressMode) + if opts.CallFunc == nil { + printWarnings(os.Stderr, printer.Warnings(), progressMode) + } }), ) if err != nil { @@ -450,7 +452,9 @@ func runBuild(ctx context.Context, dockerCli command.Cli, debugOpts debuggerOpti } } if opts.CallFunc != nil { - if exitCode, err := printResult(dockerCli.Out(), opts.CallFunc, resp.ExporterResponse, options.target, inputs); err != nil { + exitCode, err := printResult(dockerCli.Out(), opts.CallFunc, resp.ExporterResponse, options.target, inputs) + printWarnings(os.Stderr, printer.Warnings(), progressMode) + if err != nil { return err } else if exitCode != 0 { return cobrautil.ExitCodeError(exitCode)