From 693b9ef07898715c1abf8787f1371558e32fd192 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Mon, 2 Jun 2025 10:40:41 +0200 Subject: [PATCH] fix support for BUILDKIT_PROGRESS Signed-off-by: Nicolas De Loof --- cmd/compose/build.go | 3 +-- cmd/compose/compose.go | 14 ++-------- docs/reference/compose.md | 2 +- docs/reference/docker_compose.yaml | 1 - docs/reference/docker_compose_build.yaml | 1 - pkg/progress/writer.go | 34 +++++++++++++----------- 6 files changed, 22 insertions(+), 33 deletions(-) diff --git a/cmd/compose/build.go b/cmd/compose/build.go index 9393745e0..f33689338 100644 --- a/cmd/compose/build.go +++ b/cmd/compose/build.go @@ -27,7 +27,6 @@ import ( "github.com/docker/cli/cli/command" cliopts "github.com/docker/cli/opts" ui "github.com/docker/compose/v2/pkg/progress" - buildkit "github.com/moby/buildkit/util/progress/progressui" "github.com/spf13/cobra" "github.com/docker/compose/v2/pkg/api" @@ -137,7 +136,7 @@ func buildCommand(p *ProjectOptions, dockerCli command.Cli, backend api.Service) flags.Bool("no-rm", false, "Do not remove intermediate containers after a successful build. DEPRECATED") flags.MarkHidden("no-rm") //nolint:errcheck flags.VarP(&opts.memory, "memory", "m", "Set memory limit for the build container. Not supported by BuildKit.") - flags.StringVar(&p.Progress, "progress", string(buildkit.AutoMode), fmt.Sprintf(`Set type of ui output (%s)`, strings.Join(printerModes, ", "))) + flags.StringVar(&p.Progress, "progress", "", fmt.Sprintf(`Set type of ui output (%s)`, strings.Join(printerModes, ", "))) flags.MarkHidden("progress") //nolint:errcheck flags.BoolVar(&opts.print, "print", false, "Print equivalent bake file") flags.BoolVar(&opts.check, "check", false, "Check build configuration") diff --git a/cmd/compose/compose.go b/cmd/compose/compose.go index 4b8396974..10b53e53f 100644 --- a/cmd/compose/compose.go +++ b/cmd/compose/compose.go @@ -47,7 +47,6 @@ import ( ui "github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/remote" "github.com/docker/compose/v2/pkg/utils" - buildkit "github.com/moby/buildkit/util/progress/progressui" "github.com/morikuni/aec" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -230,7 +229,7 @@ func (o *ProjectOptions) addProjectFlags(f *pflag.FlagSet) { f.StringVar(&o.ProjectDir, "project-directory", "", "Specify an alternate working directory\n(default: the path of the, first specified, Compose file)") f.StringVar(&o.WorkDir, "workdir", "", "DEPRECATED! USE --project-directory INSTEAD.\nSpecify an alternate working directory\n(default: the path of the, first specified, Compose file)") f.BoolVar(&o.Compatibility, "compatibility", false, "Run compose in backward compatibility mode") - f.StringVar(&o.Progress, "progress", defaultStringVar(ComposeProgress, string(buildkit.AutoMode)), fmt.Sprintf(`Set type of progress output (%s)`, strings.Join(printerModes, ", "))) + f.StringVar(&o.Progress, "progress", os.Getenv(ComposeProgress), fmt.Sprintf(`Set type of progress output (%s)`, strings.Join(printerModes, ", "))) f.BoolVar(&o.All, "all-resources", false, "Include all resources, even those not used by services") _ = f.MarkHidden("workdir") } @@ -242,14 +241,6 @@ func defaultStringArrayVar(env string) []string { }) } -// get default value for a command line flag from the env variable, if the env variable is not set, it returns the provided default value 'def' -func defaultStringVar(env, def string) string { - if v, ok := os.LookupEnv(env); ok { - return v - } - return def -} - func (o *ProjectOptions) projectOrName(ctx context.Context, dockerCli command.Cli, services ...string) (*types.Project, string, error) { name := o.ProjectName var project *types.Project @@ -516,8 +507,7 @@ func RootCommand(dockerCli command.Cli, backend Backend) *cobra.Command { //noli } switch opts.Progress { - case ui.ModeAuto: - ui.Mode = ui.ModeAuto + case "", ui.ModeAuto: if ansi == "never" { ui.Mode = ui.ModePlain } diff --git a/docs/reference/compose.md b/docs/reference/compose.md index 74a300571..391bf1a97 100644 --- a/docs/reference/compose.md +++ b/docs/reference/compose.md @@ -59,7 +59,7 @@ Define and run multi-container applications with Docker | `-f`, `--file` | `stringArray` | | Compose configuration files | | `--parallel` | `int` | `-1` | Control max parallelism, -1 for unlimited | | `--profile` | `stringArray` | | Specify a profile to enable | -| `--progress` | `string` | `auto` | Set type of progress output (auto, tty, plain, json, quiet) | +| `--progress` | `string` | | Set type of progress output (auto, tty, plain, json, quiet) | | `--project-directory` | `string` | | Specify an alternate working directory
(default: the path of the, first specified, Compose file) | | `-p`, `--project-name` | `string` | | Project name | diff --git a/docs/reference/docker_compose.yaml b/docs/reference/docker_compose.yaml index ad7c99e59..93332702c 100644 --- a/docs/reference/docker_compose.yaml +++ b/docs/reference/docker_compose.yaml @@ -169,7 +169,6 @@ options: swarm: false - option: progress value_type: string - default_value: auto description: Set type of progress output (auto, tty, plain, json, quiet) deprecated: false hidden: false diff --git a/docs/reference/docker_compose_build.yaml b/docs/reference/docker_compose_build.yaml index 1197d5314..6d1446a51 100644 --- a/docs/reference/docker_compose_build.yaml +++ b/docs/reference/docker_compose_build.yaml @@ -118,7 +118,6 @@ options: swarm: false - option: progress value_type: string - default_value: auto description: Set type of ui output (auto, tty, plain, json, quiet) deprecated: false hidden: true diff --git a/pkg/progress/writer.go b/pkg/progress/writer.go index 3f4a74f56..793adb762 100644 --- a/pkg/progress/writer.go +++ b/pkg/progress/writer.go @@ -18,6 +18,7 @@ package progress import ( "context" + "fmt" "io" "sync" @@ -121,29 +122,30 @@ func NewWriter(ctx context.Context, out *streams.Out, progressTitle string) (Wri if !ok { dryRun = false } - if Mode == ModeQuiet { + switch Mode { + case ModeQuiet: return quiet{}, nil - } - - tty := Mode == ModeTTY - if Mode == ModeAuto && isTerminal { - tty = true - } - if tty { - return newTTYWriter(out, dryRun, progressTitle) - } - if Mode == ModeJSON { + case ModeJSON: return &jsonWriter{ out: out, done: make(chan bool), dryRun: dryRun, }, nil + case ModeTTY: + return newTTYWriter(out, dryRun, progressTitle) + case ModeAuto, "": + if isTerminal { + return newTTYWriter(out, dryRun, progressTitle) + } + fallthrough + case ModePlain: + return &plainWriter{ + out: out, + done: make(chan bool), + dryRun: dryRun, + }, nil } - return &plainWriter{ - out: out, - done: make(chan bool), - dryRun: dryRun, - }, nil + return nil, fmt.Errorf("unknown progress mode: %s", Mode) } func newTTYWriter(out io.Writer, dryRun bool, progressTitle string) (Writer, error) {