Skip to content

Commit

Permalink
Merge pull request #10620 from ndeloof/Building
Browse files Browse the repository at this point in the history
do not render `Building` when no build is needed
  • Loading branch information
glours committed Jun 8, 2023
2 parents 955784c + 466e1d3 commit 32cf776
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 17 deletions.
31 changes: 19 additions & 12 deletions pkg/compose/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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 {
Expand All @@ -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) {
Expand Down
8 changes: 4 additions & 4 deletions pkg/compose/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"})
})
Expand All @@ -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"})
})
Expand All @@ -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)
})
Expand All @@ -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)
})
}
2 changes: 1 addition & 1 deletion pkg/compose/watch.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down

0 comments on commit 32cf776

Please sign in to comment.