From 74028f19f891a682eb126cfe3e0fe82edbc16884 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 21 Jul 2025 14:29:05 +0200 Subject: [PATCH 1/2] pkg/compose: remove uses of moby/errdefs Signed-off-by: Sebastiaan van Stijn --- .golangci.yml | 2 ++ pkg/compose/down_test.go | 4 ++-- pkg/compose/up.go | 5 +---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index d00a1f9f734..1d8ae0bb3e8 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -30,6 +30,8 @@ linters: deny: - pkg: io/ioutil desc: io/ioutil package has been deprecated + - pkg: github.com/docker/docker/errdefs + desc: use github.com/containerd/errdefs instead. - pkg: golang.org/x/exp/maps desc: use stdlib maps package - pkg: golang.org/x/exp/slices diff --git a/pkg/compose/down_test.go b/pkg/compose/down_test.go index faeb0a81d4c..58c1ec0b14c 100644 --- a/pkg/compose/down_test.go +++ b/pkg/compose/down_test.go @@ -24,13 +24,13 @@ import ( "testing" "github.com/compose-spec/compose-go/v2/types" + "github.com/containerd/errdefs" "github.com/docker/cli/cli/streams" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/volume" - "github.com/docker/docker/errdefs" "go.uber.org/mock/gomock" "gotest.tools/v3/assert" @@ -326,7 +326,7 @@ func TestDownRemoveImages(t *testing.T) { if exists { resp.RepoTags = []string{img} } else { - err = errdefs.NotFound(fmt.Errorf("test specified that image %q should not exist", img)) + err = errdefs.ErrNotFound.WithMessage(fmt.Sprintf("test specified that image %q should not exist", img)) } api.EXPECT().ImageInspect(gomock.Any(), img). diff --git a/pkg/compose/up.go b/pkg/compose/up.go index 51ea55c2f1a..e8d81c3f833 100644 --- a/pkg/compose/up.go +++ b/pkg/compose/up.go @@ -18,7 +18,6 @@ package compose import ( "context" - "errors" "fmt" "os" "os/signal" @@ -32,7 +31,6 @@ import ( "github.com/docker/compose/v2/internal/tracing" "github.com/docker/compose/v2/pkg/api" "github.com/docker/compose/v2/pkg/progress" - "github.com/docker/docker/errdefs" "github.com/eiannone/keyboard" "github.com/hashicorp/go-multierror" "github.com/sirupsen/logrus" @@ -222,8 +220,7 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options Follow: true, Since: ctr.State.StartedAt, }) - var notImplErr errdefs.ErrNotImplemented - if errors.As(err, ¬ImplErr) { + if cerrdefs.IsNotImplemented(err) { // container may be configured with logging_driver: none // as container already started, we might miss the very first logs. But still better than none return s.doAttachContainer(ctx, event.Service, event.ID, event.Source, printer.HandleEvent) From 2a547f9d264a124042b17ac94b516c4642a9540e Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 21 Jul 2025 14:34:04 +0200 Subject: [PATCH 2/2] remove import aliases for containerd/errdefs Signed-off-by: Sebastiaan van Stijn --- pkg/bridge/convert.go | 4 ++-- pkg/compose/create.go | 8 ++++---- pkg/compose/down.go | 22 +++++++++++----------- pkg/compose/image_pruner.go | 4 ++-- pkg/compose/images.go | 4 ++-- pkg/compose/up.go | 6 +++--- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pkg/bridge/convert.go b/pkg/bridge/convert.go index 6bd34f5a90f..d62153e9e05 100644 --- a/pkg/bridge/convert.go +++ b/pkg/bridge/convert.go @@ -26,7 +26,7 @@ import ( "strconv" "github.com/compose-spec/compose-go/v2/types" - cerrdefs "github.com/containerd/errdefs" + "github.com/containerd/errdefs" "github.com/docker/cli/cli/command" cli "github.com/docker/cli/cli/command/container" "github.com/docker/compose/v2/pkg/api" @@ -198,7 +198,7 @@ func loadFileObject(conf types.FileObjectConfig) (types.FileObjectConfig, error) func inspectWithPull(ctx context.Context, dockerCli command.Cli, imageName string) (image.InspectResponse, error) { inspect, err := dockerCli.Client().ImageInspect(ctx, imageName) - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { var stream io.ReadCloser stream, err = dockerCli.Client().ImagePull(ctx, imageName, image.PullOptions{}) if err != nil { diff --git a/pkg/compose/create.go b/pkg/compose/create.go index b8b0afea4bd..04c887a7ebd 100644 --- a/pkg/compose/create.go +++ b/pkg/compose/create.go @@ -30,7 +30,7 @@ import ( "github.com/compose-spec/compose-go/v2/paths" "github.com/compose-spec/compose-go/v2/types" - cerrdefs "github.com/containerd/errdefs" + "github.com/containerd/errdefs" "github.com/docker/docker/api/types/blkiodev" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" @@ -1262,7 +1262,7 @@ func (s *composeService) ensureNetwork(ctx context.Context, project *types.Proje } id, err := s.resolveOrCreateNetwork(ctx, project, name, n) - if cerrdefs.IsConflict(err) { + if errdefs.IsConflict(err) { // Maybe another execution of `docker compose up|run` created same network // let's retry once return s.resolveOrCreateNetwork(ctx, project, name, n) @@ -1497,7 +1497,7 @@ func (s *composeService) resolveExternalNetwork(ctx context.Context, n *types.Ne sn, err := s.apiClient().NetworkInspect(ctx, n.Name, network.InspectOptions{}) if err == nil { networks = append(networks, sn) - } else if !cerrdefs.IsNotFound(err) { + } else if !errdefs.IsNotFound(err) { return "", err } @@ -1534,7 +1534,7 @@ func (s *composeService) resolveExternalNetwork(ctx context.Context, n *types.Ne func (s *composeService) ensureVolume(ctx context.Context, name string, volume types.VolumeConfig, project *types.Project, assumeYes bool) (string, error) { inspected, err := s.apiClient().VolumeInspect(ctx, volume.Name) if err != nil { - if !cerrdefs.IsNotFound(err) { + if !errdefs.IsNotFound(err) { return "", err } if volume.External { diff --git a/pkg/compose/down.go b/pkg/compose/down.go index b64258dff69..e9619fbe652 100644 --- a/pkg/compose/down.go +++ b/pkg/compose/down.go @@ -23,7 +23,7 @@ import ( "time" "github.com/compose-spec/compose-go/v2/types" - cerrdefs "github.com/containerd/errdefs" + "github.com/containerd/errdefs" "github.com/docker/compose/v2/pkg/api" "github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/utils" @@ -219,7 +219,7 @@ func (s *composeService) removeNetwork(ctx context.Context, composeNetworkName s continue } nw, err := s.apiClient().NetworkInspect(ctx, net.ID, network.InspectOptions{}) - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { w.Event(progress.NewEvent(eventName, progress.Warning, "No resource found to remove")) return nil } @@ -233,7 +233,7 @@ func (s *composeService) removeNetwork(ctx context.Context, composeNetworkName s } if err := s.apiClient().NetworkRemove(ctx, net.ID); err != nil { - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { continue } w.Event(progress.ErrorEvent(eventName)) @@ -261,11 +261,11 @@ func (s *composeService) removeImage(ctx context.Context, image string, w progre w.Event(progress.NewEvent(id, progress.Done, "Removed")) return nil } - if cerrdefs.IsConflict(err) { + if errdefs.IsConflict(err) { w.Event(progress.NewEvent(id, progress.Warning, "Resource is still in use")) return nil } - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { w.Event(progress.NewEvent(id, progress.Done, "Warning: No resource found to remove")) return nil } @@ -276,7 +276,7 @@ func (s *composeService) removeVolume(ctx context.Context, id string, w progress resource := fmt.Sprintf("Volume %s", id) _, err := s.apiClient().VolumeInspect(ctx, id) - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { // Already gone return nil } @@ -287,11 +287,11 @@ func (s *composeService) removeVolume(ctx context.Context, id string, w progress w.Event(progress.NewEvent(resource, progress.Done, "Removed")) return nil } - if cerrdefs.IsConflict(err) { + if errdefs.IsConflict(err) { w.Event(progress.NewEvent(resource, progress.Warning, "Resource is still in use")) return nil } - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { w.Event(progress.NewEvent(resource, progress.Done, "Warning: No resource found to remove")) return nil } @@ -311,7 +311,7 @@ func (s *composeService) stopContainer( err := s.runHook(ctx, ctr, *service, hook, listener) if err != nil { // Ignore errors indicating that some containers were already stopped or removed. - if cerrdefs.IsNotFound(err) || cerrdefs.IsConflict(err) { + if errdefs.IsNotFound(err) || errdefs.IsConflict(err) { return nil } return err @@ -357,7 +357,7 @@ func (s *composeService) stopAndRemoveContainer(ctx context.Context, ctr contain w := progress.ContextWriter(ctx) eventName := getContainerProgressName(ctr) err := s.stopContainer(ctx, w, service, ctr, timeout, nil) - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { w.Event(progress.RemovedEvent(eventName)) return nil } @@ -369,7 +369,7 @@ func (s *composeService) stopAndRemoveContainer(ctx context.Context, ctr contain Force: true, RemoveVolumes: volumes, }) - if err != nil && !cerrdefs.IsNotFound(err) && !cerrdefs.IsConflict(err) { + if err != nil && !errdefs.IsNotFound(err) && !errdefs.IsConflict(err) { w.Event(progress.ErrorMessageEvent(eventName, "Error while Removing")) return err } diff --git a/pkg/compose/image_pruner.go b/pkg/compose/image_pruner.go index ea6ed6c57d7..bb4d0bc47d6 100644 --- a/pkg/compose/image_pruner.go +++ b/pkg/compose/image_pruner.go @@ -23,7 +23,7 @@ import ( "sync" "github.com/compose-spec/compose-go/v2/types" - cerrdefs "github.com/containerd/errdefs" + "github.com/containerd/errdefs" "github.com/distribution/reference" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/image" @@ -204,7 +204,7 @@ func (p *ImagePruner) filterImagesByExistence(ctx context.Context, imageNames [] for _, img := range imageNames { eg.Go(func() error { _, err := p.client.ImageInspect(ctx, img) - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { // err on the side of caution: only skip if we successfully // queried the API and got back a definitive "not exists" return nil diff --git a/pkg/compose/images.go b/pkg/compose/images.go index 4db0362669f..a91d6159f4b 100644 --- a/pkg/compose/images.go +++ b/pkg/compose/images.go @@ -23,7 +23,7 @@ import ( "strings" "sync" - cerrdefs "github.com/containerd/errdefs" + "github.com/containerd/errdefs" "github.com/containerd/platforms" "github.com/distribution/reference" "github.com/docker/docker/api/types/container" @@ -121,7 +121,7 @@ func (s *composeService) getImageSummaries(ctx context.Context, repoTags []strin eg.Go(func() error { inspect, err := s.apiClient().ImageInspect(ctx, repoTag) if err != nil { - if cerrdefs.IsNotFound(err) { + if errdefs.IsNotFound(err) { return nil } return fmt.Errorf("unable to get image '%s': %w", repoTag, err) diff --git a/pkg/compose/up.go b/pkg/compose/up.go index e8d81c3f833..124976b4873 100644 --- a/pkg/compose/up.go +++ b/pkg/compose/up.go @@ -25,7 +25,7 @@ import ( "syscall" "github.com/compose-spec/compose-go/v2/types" - cerrdefs "github.com/containerd/errdefs" + "github.com/containerd/errdefs" "github.com/docker/cli/cli" "github.com/docker/compose/v2/cmd/formatter" "github.com/docker/compose/v2/internal/tracing" @@ -142,7 +142,7 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options All: true, }) // Ignore errors indicating that some of the containers were already stopped or removed. - if cerrdefs.IsNotFound(err) || cerrdefs.IsConflict(err) { + if errdefs.IsNotFound(err) || errdefs.IsConflict(err) { return nil } @@ -220,7 +220,7 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options Follow: true, Since: ctr.State.StartedAt, }) - if cerrdefs.IsNotImplemented(err) { + if errdefs.IsNotImplemented(err) { // container may be configured with logging_driver: none // as container already started, we might miss the very first logs. But still better than none return s.doAttachContainer(ctx, event.Service, event.ID, event.Source, printer.HandleEvent)