From 466e1d31975670fc839c7d6c8ae08ea62ee7152d Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Thu, 25 May 2023 15:33:43 +0200 Subject: [PATCH] prevent buildkt's progress to render `Building` when no built is needed Signed-off-by: Nicolas De Loof --- pkg/compose/build.go | 31 +++++++++++++++++++------------ pkg/compose/build_test.go | 8 ++++---- pkg/compose/watch.go | 2 +- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/pkg/compose/build.go b/pkg/compose/build.go index 5fc5aec6b..d6f5a1e92 100644 --- a/pkg/compose/build.go +++ b/pkg/compose/build.go @@ -68,6 +68,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti // build and will lock progressCtx, cancel := context.WithCancel(context.Background()) defer cancel() + w, err := xprogress.NewPrinter(progressCtx, s.stdout(), os.Stdout, options.Progress) if err != nil { return nil, err @@ -175,20 +176,24 @@ func (s *composeService) ensureImagesExists(ctx context.Context, project *types. mode = xprogress.PrinterModeQuiet } - err = s.prepareProjectForBuild(project, images) - if err != nil { - return err - } - builtImages, err := s.build(ctx, project, api.BuildOptions{ - Progress: mode, - }) + buildRequired, err := s.prepareProjectForBuild(project, images) if err != nil { return err } - for name, digest := range builtImages { - images[name] = digest + if buildRequired { + builtImages, err := s.build(ctx, project, api.BuildOptions{ + Progress: mode, + }) + if err != nil { + return err + } + + for name, digest := range builtImages { + images[name] = digest + } } + // set digest as com.docker.compose.image label so we can detect outdated containers for i, service := range project.Services { image := api.GetImageNameOrDefault(service, project.Name) @@ -203,10 +208,11 @@ func (s *composeService) ensureImagesExists(ctx context.Context, project *types. return nil } -func (s *composeService) prepareProjectForBuild(project *types.Project, images map[string]string) error { +func (s *composeService) prepareProjectForBuild(project *types.Project, images map[string]string) (bool, error) { + buildRequired := false err := api.BuildOptions{}.Apply(project) if err != nil { - return err + return false, err } for i, service := range project.Services { if service.Build == nil { @@ -227,8 +233,9 @@ func (s *composeService) prepareProjectForBuild(project *types.Project, images m service.Build.Platforms = []string{service.Platform} } project.Services[i] = service + buildRequired = true } - return nil + return buildRequired, nil } func (s *composeService) getLocalImagesDigests(ctx context.Context, project *types.Project) (map[string]string, error) { diff --git a/pkg/compose/build_test.go b/pkg/compose/build_test.go index 145118a5c..d71c710f0 100644 --- a/pkg/compose/build_test.go +++ b/pkg/compose/build_test.go @@ -44,7 +44,7 @@ func TestPrepareProjectForBuild(t *testing.T) { } s := &composeService{} - err := s.prepareProjectForBuild(&project, nil) + _, err := s.prepareProjectForBuild(&project, nil) assert.NilError(t, err) assert.DeepEqual(t, project.Services[0].Build.Platforms, types.StringList{"alice/32"}) }) @@ -70,7 +70,7 @@ func TestPrepareProjectForBuild(t *testing.T) { } s := &composeService{} - err := s.prepareProjectForBuild(&project, nil) + _, err := s.prepareProjectForBuild(&project, nil) assert.NilError(t, err) assert.DeepEqual(t, project.Services[0].Build.Platforms, types.StringList{"linux/amd64"}) }) @@ -89,7 +89,7 @@ func TestPrepareProjectForBuild(t *testing.T) { } s := &composeService{} - err := s.prepareProjectForBuild(&project, map[string]string{"foo": "exists"}) + _, err := s.prepareProjectForBuild(&project, map[string]string{"foo": "exists"}) assert.NilError(t, err) assert.Check(t, project.Services[0].Build == nil) }) @@ -115,7 +115,7 @@ func TestPrepareProjectForBuild(t *testing.T) { } s := &composeService{} - err := s.prepareProjectForBuild(&project, nil) + _, err := s.prepareProjectForBuild(&project, nil) assert.Check(t, err != nil) }) } diff --git a/pkg/compose/watch.go b/pkg/compose/watch.go index 682f14d95..24b2350ee 100644 --- a/pkg/compose/watch.go +++ b/pkg/compose/watch.go @@ -79,7 +79,7 @@ func (s *composeService) Watch(ctx context.Context, project *types.Project, serv needRebuild := make(chan fileMapping) needSync := make(chan fileMapping) - err := s.prepareProjectForBuild(project, nil) + _, err := s.prepareProjectForBuild(project, nil) if err != nil { return err }