From 6412d887033c0159c7c3eb65ac489ef2bc15cd96 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 2 Mar 2021 09:14:09 +0100 Subject: [PATCH] introduce build --progress Signed-off-by: Nicolas De Loof --- api/compose/api.go | 2 ++ cli/cmd/compose/build.go | 11 +++++++---- local/compose/build.go | 11 ++++++----- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/api/compose/api.go b/api/compose/api.go index 78bd52610..6c29a982e 100644 --- a/api/compose/api.go +++ b/api/compose/api.go @@ -69,6 +69,8 @@ type Service interface { type BuildOptions struct { // Pull always attempt to pull a newer version of the image Pull bool + // Progress set type of progress output ("auto", "plain", "tty") + Progress string } // CreateOptions group options of the Create API diff --git a/cli/cmd/compose/build.go b/cli/cmd/compose/build.go index a112f9789..b81c17100 100644 --- a/cli/cmd/compose/build.go +++ b/cli/cmd/compose/build.go @@ -18,20 +18,21 @@ package compose import ( "context" - "github.com/docker/compose-cli/api/compose" "os" "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" ) type buildOptions struct { *projectOptions composeOptions - quiet bool - pull bool + quiet bool + pull bool + progress string } func buildCommand(p *projectOptions) *cobra.Command { @@ -54,6 +55,7 @@ func buildCommand(p *projectOptions) *cobra.Command { } cmd.Flags().BoolVarP(&opts.quiet, "quiet", "q", false, "Don't print anything to STDOUT") cmd.Flags().BoolVar(&opts.pull, "pull", false, "Always attempt to pull a newer version of the image.") + cmd.Flags().StringVar(&opts.progress, "progress", "auto", `Set type of progress output ("auto", "plain", "tty")`) return cmd } @@ -70,7 +72,8 @@ func runBuild(ctx context.Context, opts buildOptions, services []string) error { _, err = progress.Run(ctx, func(ctx context.Context) (string, error) { return "", c.ComposeService().Build(ctx, project, compose.BuildOptions{ - Pull: opts.pull, + Pull: opts.pull, + Progress: opts.progress, }) }) return err diff --git a/local/compose/build.go b/local/compose/build.go index 3fd14e5d4..80e8ae991 100644 --- a/local/compose/build.go +++ b/local/compose/build.go @@ -19,11 +19,12 @@ package compose import ( "context" "fmt" - "github.com/docker/compose-cli/api/compose" "os" "path" "strings" + "github.com/docker/compose-cli/api/compose" + "github.com/compose-spec/compose-go/types" "github.com/docker/buildx/build" "github.com/docker/buildx/driver" @@ -46,7 +47,7 @@ func (s *composeService) Build(ctx context.Context, project *types.Project, opti } } - err := s.build(ctx, project, opts) + err := s.build(ctx, project, opts, options.Progress) if err == nil { displayScanSuggestMsg(ctx, imagesToBuild) } @@ -96,7 +97,7 @@ func (s *composeService) ensureImagesExists(ctx context.Context, project *types. } - err := s.build(ctx, project, opts) + err := s.build(ctx, project, opts, "auto") if err == nil { displayScanSuggestMsg(ctx, imagesToBuild) } @@ -114,7 +115,7 @@ func (s *composeService) localImagePresent(ctx context.Context, imageName string return true, nil } -func (s *composeService) build(ctx context.Context, project *types.Project, opts map[string]build.Options) error { +func (s *composeService) build(ctx context.Context, project *types.Project, opts map[string]build.Options, mode string) error { if len(opts) == 0 { return nil } @@ -135,7 +136,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opts // build and will lock progressCtx, cancel := context.WithCancel(context.Background()) defer cancel() - w := progress.NewPrinter(progressCtx, os.Stdout, "auto") + w := progress.NewPrinter(progressCtx, os.Stdout, mode) // We rely on buildx "docker" builder integrated in docker engine, so don't need a DockerAPI here _, err = build.Build(ctx, driverInfo, opts, nil, nil, w)