Browse Source

DIsplay progress of starting containers when not attaching to logs (compose up, start)

Signed-off-by: Guillaume Tardif <[email protected]>
Guillaume Tardif 4 years ago
parent
commit
11950efa77
2 changed files with 20 additions and 12 deletions
  1. 9 7
      cli/cmd/compose/start.go
  2. 11 5
      cli/cmd/compose/up.go

+ 9 - 7
cli/cmd/compose/start.go

@@ -23,7 +23,7 @@ import (
 	"github.com/spf13/cobra"
 
 	"github.com/docker/compose-cli/api/client"
-	"github.com/docker/compose-cli/api/compose"
+	"github.com/docker/compose-cli/api/progress"
 	"github.com/docker/compose-cli/cli/formatter"
 )
 
@@ -54,11 +54,6 @@ func runStart(ctx context.Context, opts startOptions, services []string) error {
 		return err
 	}
 
-	var consumer compose.LogConsumer
-	if !opts.Detach {
-		consumer = formatter.NewLogConsumer(ctx, os.Stdout)
-	}
-
 	project, err := opts.toProject()
 	if err != nil {
 		return err
@@ -69,5 +64,12 @@ func runStart(ctx context.Context, opts startOptions, services []string) error {
 		return err
 	}
 
-	return c.ComposeService().Start(ctx, project, consumer)
+	if opts.Detach {
+		_, err = progress.Run(ctx, func(ctx context.Context) (string, error) {
+			return "", c.ComposeService().Start(ctx, project, nil)
+		})
+		return err
+	}
+
+	return c.ComposeService().Start(ctx, project, formatter.NewLogConsumer(ctx, os.Stdout))
 }

+ 11 - 5
cli/cmd/compose/up.go

@@ -119,21 +119,27 @@ func runCreateStart(ctx context.Context, opts upOptions, services []string) erro
 	}
 
 	_, err = progress.Run(ctx, func(ctx context.Context) (string, error) {
-		return "", c.ComposeService().Create(ctx, project, compose.CreateOptions{
+		err := c.ComposeService().Create(ctx, project, compose.CreateOptions{
 			RemoveOrphans: opts.removeOrphans,
 			Recreate:      opts.recreateStrategy(),
 		})
+		if err != nil {
+			return "", err
+		}
+		if opts.Detach {
+			err = c.ComposeService().Start(ctx, project, nil)
+		}
+		return "", err
 	})
 	if err != nil {
 		return err
 	}
 
-	var consumer compose.LogConsumer
-	if !opts.Detach {
-		consumer = formatter.NewLogConsumer(ctx, os.Stdout)
+	if opts.Detach {
+		return nil
 	}
 
-	err = c.ComposeService().Start(ctx, project, consumer)
+	err = c.ComposeService().Start(ctx, project, formatter.NewLogConsumer(ctx, os.Stdout))
 	if errors.Is(ctx.Err(), context.Canceled) {
 		fmt.Println("Gracefully stopping...")
 		ctx = context.Background()