diff --git a/cmd/compose/compose.go b/cmd/compose/compose.go index a382f39ac78..1e1377194d7 100644 --- a/cmd/compose/compose.go +++ b/cmd/compose/compose.go @@ -69,6 +69,8 @@ const ( ComposeEnvFiles = "COMPOSE_ENV_FILES" // ComposeMenu defines if the navigation menu should be rendered. Can be also set via --menu ComposeMenu = "COMPOSE_MENU" + // ComposeProgress defines type of progress output, if --progress isn't used + ComposeProgress = "COMPOSE_PROGRESS" ) // rawEnv load a dot env file using docker/cli key=value parser, without attempt to interpolate or evaluate values @@ -228,7 +230,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", string(buildkit.AutoMode), fmt.Sprintf(`Set type of progress output (%s)`, strings.Join(printerModes, ", "))) + f.StringVar(&o.Progress, "progress", defaultStringVar(ComposeProgress, string(buildkit.AutoMode)), 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") } @@ -240,6 +242,14 @@ 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 diff --git a/pkg/e2e/compose_run_test.go b/pkg/e2e/compose_run_test.go index fa8fda686a6..acf1bdf8172 100644 --- a/pkg/e2e/compose_run_test.go +++ b/pkg/e2e/compose_run_test.go @@ -170,6 +170,18 @@ func TestLocalComposeRun(t *testing.T) { assert.Assert(t, strings.Contains(res.Combined(), "Pulled"), res.Combined()) }) + t.Run("COMPOSE_PROGRESS quiet", func(t *testing.T) { + res := c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/quiet-pull.yaml", "down", "--remove-orphans", "--rmi", "all") + res.Assert(t, icmd.Success) + + cmd := c.NewDockerComposeCmd(t, "-f", "./fixtures/run-test/quiet-pull.yaml", "run", "backend") + res = icmd.RunCmd(cmd, func(c *icmd.Cmd) { + c.Env = append(c.Env, "COMPOSE_PROGRESS=quiet") + }) + assert.Assert(t, !strings.Contains(res.Combined(), "Pull complete"), res.Combined()) + assert.Assert(t, !strings.Contains(res.Combined(), "Pulled"), res.Combined()) + }) + t.Run("--pull", func(t *testing.T) { res := c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/pull.yaml", "down", "--remove-orphans", "--rmi", "all") res.Assert(t, icmd.Success)