diff --git a/e2e/tests/build/build.go b/e2e/tests/build/build.go index 9258902483..be27214d2b 100644 --- a/e2e/tests/build/build.go +++ b/e2e/tests/build/build.go @@ -5,13 +5,14 @@ import ( "context" "errors" "fmt" - "github.com/onsi/ginkgo/v2" "io" "os" "os/exec" "strings" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/image" + "github.com/onsi/ginkgo/v2" + "github.com/docker/docker/api/types/container" "github.com/loft-sh/devspace/cmd" @@ -63,7 +64,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) found := false @@ -102,7 +103,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) found := false @@ -139,7 +140,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) found := false @@ -186,7 +187,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) found := false @@ -242,7 +243,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) for _, image := range imageList { @@ -286,7 +287,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) for _, image := range imageList { @@ -338,7 +339,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) for _, image := range imageList { @@ -373,7 +374,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) imageName := "my-docker-username/helloworld-dockerignore:latest" for _, image := range imageList { @@ -393,7 +394,7 @@ var _ = DevSpaceDescribe("build", func() { }, nil, nil, nil, "") framework.ExpectNoError(err) - err = dockerClient.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}) + err = dockerClient.ContainerStart(ctx, resp.ID, container.StartOptions{}) framework.ExpectNoError(err) statusCh, errCh := dockerClient.ContainerWait(ctx, resp.ID, container.WaitConditionNotRunning) @@ -403,7 +404,7 @@ var _ = DevSpaceDescribe("build", func() { case <-statusCh: } - out, err := dockerClient.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) + out, err := dockerClient.ContainerLogs(ctx, resp.ID, container.LogsOptions{ShowStdout: true}) framework.ExpectNoError(err) stdout := &bytes.Buffer{} @@ -438,7 +439,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) imageName := "my-docker-username/helloworld-dockerignore-rel-path:latest" for _, image := range imageList { @@ -458,7 +459,7 @@ var _ = DevSpaceDescribe("build", func() { }, nil, nil, nil, "") framework.ExpectNoError(err) - err = dockerClient.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}) + err = dockerClient.ContainerStart(ctx, resp.ID, container.StartOptions{}) framework.ExpectNoError(err) statusCh, errCh := dockerClient.ContainerWait(ctx, resp.ID, container.WaitConditionNotRunning) @@ -468,7 +469,7 @@ var _ = DevSpaceDescribe("build", func() { case <-statusCh: } - out, err := dockerClient.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) + out, err := dockerClient.ContainerLogs(ctx, resp.ID, container.LogsOptions{ShowStdout: true}) framework.ExpectNoError(err) stdout := &bytes.Buffer{} @@ -503,7 +504,7 @@ var _ = DevSpaceDescribe("build", func() { framework.ExpectNoError(err) dockerClient := devspaceDockerClient.DockerAPIClient() - imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{}) + imageList, err := dockerClient.ImageList(ctx, image.ListOptions{}) framework.ExpectNoError(err) imageName := "my-docker-username/helloworld-dockerignore-context:latest" for _, image := range imageList { @@ -523,7 +524,7 @@ var _ = DevSpaceDescribe("build", func() { }, nil, nil, nil, "") framework.ExpectNoError(err) - err = dockerClient.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}) + err = dockerClient.ContainerStart(ctx, resp.ID, container.StartOptions{}) framework.ExpectNoError(err) statusCh, errCh := dockerClient.ContainerWait(ctx, resp.ID, container.WaitConditionNotRunning) @@ -533,7 +534,7 @@ var _ = DevSpaceDescribe("build", func() { case <-statusCh: } - out, err := dockerClient.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) + out, err := dockerClient.ContainerLogs(ctx, resp.ID, container.LogsOptions{ShowStdout: true}) framework.ExpectNoError(err) stdout := &bytes.Buffer{} diff --git a/pkg/devspace/build/builder/docker/docker.go b/pkg/devspace/build/builder/docker/docker.go index 36609a4e0e..5743d40a6d 100644 --- a/pkg/devspace/build/builder/docker/docker.go +++ b/pkg/devspace/build/builder/docker/docker.go @@ -8,6 +8,7 @@ import ( "github.com/docker/cli/cli/streams" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/types/image" dockerregistry "github.com/docker/docker/api/types/registry" "github.com/loft-sh/devspace/pkg/devspace/build/builder/helper" "github.com/loft-sh/devspace/pkg/devspace/config/versions/latest" @@ -17,7 +18,6 @@ import ( "github.com/loft-sh/devspace/pkg/devspace/pullsecrets" command2 "github.com/loft-sh/utils/pkg/command" - "github.com/docker/docker/api/types" "github.com/pkg/errors" "github.com/docker/docker/pkg/jsonmessage" @@ -207,7 +207,7 @@ func (b *Builder) pushImage(ctx context.Context, writer io.Writer, imageName str return err } - out, err := b.client.ImagePush(ctx, reference.FamiliarString(ref), types.ImagePushOptions{ + out, err := b.client.ImagePush(ctx, reference.FamiliarString(ref), image.PushOptions{ RegistryAuth: encodedAuth, }) if err != nil { diff --git a/pkg/devspace/build/builder/helper/helper.go b/pkg/devspace/build/builder/helper/helper.go index 8e66430e56..a93907bd1f 100644 --- a/pkg/devspace/build/builder/helper/helper.go +++ b/pkg/devspace/build/builder/helper/helper.go @@ -1,7 +1,13 @@ package helper import ( + "io" + "os" + "path/filepath" + "strings" + "github.com/docker/cli/cli/streams" + "github.com/docker/docker/api/types/image" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/progress" "github.com/docker/docker/pkg/streamformatter" @@ -10,10 +16,6 @@ import ( logpkg "github.com/loft-sh/devspace/pkg/util/log" dockerterm "github.com/moby/term" "github.com/sirupsen/logrus" - "io" - "os" - "path/filepath" - "strings" "github.com/docker/cli/cli/command/image/build" "github.com/docker/docker/api/types" @@ -243,7 +245,7 @@ func (b *BuildHelper) IsImageAvailableLocally(ctx devspacecontext.Context, docke imageName := imageCache.ResolveImage() + ":" + imageCache.Tag dockerAPIClient := dockerClient.DockerAPIClient() - imageList, err := dockerAPIClient.ImageList(ctx.Context(), types.ImageListOptions{}) + imageList, err := dockerAPIClient.ImageList(ctx.Context(), image.ListOptions{}) if err != nil { return false, err } diff --git a/pkg/devspace/build/builder/helper/helper_test.go b/pkg/devspace/build/builder/helper/helper_test.go index e7a4741fa2..0be381f831 100644 --- a/pkg/devspace/build/builder/helper/helper_test.go +++ b/pkg/devspace/build/builder/helper/helper_test.go @@ -5,6 +5,7 @@ import ( "os/exec" "testing" + "github.com/docker/docker/api/types/image" "github.com/loft-sh/devspace/pkg/devspace/config" "github.com/loft-sh/devspace/pkg/devspace/config/localcache" "github.com/loft-sh/devspace/pkg/devspace/config/remotecache" @@ -15,7 +16,6 @@ import ( "github.com/loft-sh/devspace/pkg/devspace/docker" "gotest.tools/assert" - "github.com/docker/docker/api/types" dockerclient "github.com/docker/docker/client" ) @@ -31,8 +31,8 @@ type fakeDockerAPIClient struct { dockerclient.CommonAPIClient } -func (c *fakeDockerAPIClient) ImageList(ctx context.Context, options types.ImageListOptions) ([]types.ImageSummary, error) { - return []types.ImageSummary{ +func (c *fakeDockerAPIClient) ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error) { + return []image.Summary{ { RepoTags: []string{"image1:dbysxsH"}, }, diff --git a/pkg/devspace/docker/auth_test.go b/pkg/devspace/docker/auth_test.go index d1d0a60e62..8f24709df6 100644 --- a/pkg/devspace/docker/auth_test.go +++ b/pkg/devspace/docker/auth_test.go @@ -8,7 +8,9 @@ import ( "testing" "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/image" dockerregistry "github.com/docker/docker/api/types/registry" + "github.com/docker/docker/api/types/system" dockerclient "github.com/docker/docker/client" "github.com/loft-sh/devspace/pkg/util/fsutil" "gopkg.in/yaml.v3" @@ -20,8 +22,8 @@ type fakeDockerClient struct { dockerclient.Client } -func (f *fakeDockerClient) Info(ctx context.Context) (types.Info, error) { - return types.Info{ +func (f *fakeDockerClient) Info(ctx context.Context) (system.Info, error) { + return system.Info{ IndexServerAddress: "IndexServerAddress", }, nil } @@ -40,16 +42,16 @@ func (f *fakeDockerClient) RegistryLogin(ctx context.Context, auth dockerregistr }, nil } -func (f *fakeDockerClient) ImageList(ctx context.Context, options types.ImageListOptions) ([]types.ImageSummary, error) { - return []types.ImageSummary{ +func (f *fakeDockerClient) ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error) { + return []image.Summary{ { ID: "deleteThis", }, }, nil } -func (f *fakeDockerClient) ImageRemove(ctx context.Context, image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) { - return []types.ImageDeleteResponseItem{ +func (f *fakeDockerClient) ImageRemove(ctx context.Context, img string, options image.RemoveOptions) ([]image.DeleteResponse, error) { + return []image.DeleteResponse{ { Deleted: "deleteThis", Untagged: "deleteThis", diff --git a/pkg/devspace/docker/client.go b/pkg/devspace/docker/client.go index 361521512f..a07b49c550 100644 --- a/pkg/devspace/docker/client.go +++ b/pkg/devspace/docker/client.go @@ -9,6 +9,7 @@ import ( "path/filepath" "strings" + "github.com/docker/docker/api/types/image" dockerregistry "github.com/docker/docker/api/types/registry" "github.com/loft-sh/utils/pkg/command" "mvdan.cc/sh/v3/expand" @@ -33,15 +34,15 @@ type Client interface { ImageBuild(ctx context.Context, context io.Reader, options dockertypes.ImageBuildOptions) (dockertypes.ImageBuildResponse, error) ImageBuildCLI(ctx context.Context, workingDir string, environ expand.Environ, useBuildkit bool, context io.Reader, writer io.Writer, additionalArgs []string, options dockertypes.ImageBuildOptions, log log.Logger) error - ImagePush(ctx context.Context, ref string, options dockertypes.ImagePushOptions) (io.ReadCloser, error) + ImagePush(ctx context.Context, ref string, options image.PushOptions) (io.ReadCloser, error) Login(ctx context.Context, registryURL, user, password string, checkCredentialsStore, saveAuthConfig, relogin bool) (*dockerregistry.AuthConfig, error) GetAuthConfig(ctx context.Context, registryURL string, checkCredentialsStore bool) (*dockerregistry.AuthConfig, error) ParseProxyConfig(buildArgs map[string]*string) map[string]*string - DeleteImageByName(ctx context.Context, imageName string, log log.Logger) ([]dockertypes.ImageDeleteResponseItem, error) - DeleteImageByFilter(ctx context.Context, filter filters.Args, log log.Logger) ([]dockertypes.ImageDeleteResponseItem, error) + DeleteImageByName(ctx context.Context, imageName string, log log.Logger) ([]image.DeleteResponse, error) + DeleteImageByFilter(ctx context.Context, filter filters.Args, log log.Logger) ([]image.DeleteResponse, error) DockerAPIClient() dockerclient.CommonAPIClient } diff --git a/pkg/devspace/docker/images.go b/pkg/devspace/docker/images.go index 53a366eb24..d6ddcd8387 100644 --- a/pkg/devspace/docker/images.go +++ b/pkg/devspace/docker/images.go @@ -4,29 +4,29 @@ import ( "context" "strings" + "github.com/docker/docker/api/types/image" "github.com/loft-sh/devspace/pkg/util/log" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" ) // DeleteImageByName deletes an image by name -func (c *client) DeleteImageByName(ctx context.Context, imageName string, log log.Logger) ([]types.ImageDeleteResponseItem, error) { +func (c *client) DeleteImageByName(ctx context.Context, imageName string, log log.Logger) ([]image.DeleteResponse, error) { return c.DeleteImageByFilter(ctx, filters.NewArgs(filters.Arg("reference", strings.TrimSpace(imageName))), log) } // DeleteImageByFilter deletes an image by filter -func (c *client) DeleteImageByFilter(ctx context.Context, filter filters.Args, log log.Logger) ([]types.ImageDeleteResponseItem, error) { - summary, err := c.ImageList(ctx, types.ImageListOptions{ +func (c *client) DeleteImageByFilter(ctx context.Context, filter filters.Args, log log.Logger) ([]image.DeleteResponse, error) { + summaries, err := c.ImageList(ctx, image.ListOptions{ Filters: filter, }) if err != nil { return nil, err } - responseItems := make([]types.ImageDeleteResponseItem, 0, 128) - for _, image := range summary { - deleteResponse, err := c.ImageRemove(ctx, image.ID, types.ImageRemoveOptions{ + responseItems := make([]image.DeleteResponse, 0, 128) + for _, summary := range summaries { + deleteResponse, err := c.ImageRemove(ctx, summary.ID, image.RemoveOptions{ PruneChildren: true, Force: true, }) diff --git a/pkg/devspace/docker/images_test.go b/pkg/devspace/docker/images_test.go index 36e4b5ff3f..d359677fa3 100644 --- a/pkg/devspace/docker/images_test.go +++ b/pkg/devspace/docker/images_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/image" log "github.com/loft-sh/devspace/pkg/util/log/testing" "gopkg.in/yaml.v3" "gotest.tools/assert" @@ -14,7 +14,7 @@ type deleteImageTestCase struct { name string deletedImageName string - expectedResponse []types.ImageDeleteResponseItem + expectedResponse []image.DeleteResponse expectedErr bool } @@ -23,7 +23,7 @@ func TestDeleteImage(t *testing.T) { { name: "Delete by name", deletedImageName: "deleteThis", - expectedResponse: []types.ImageDeleteResponseItem{ + expectedResponse: []image.DeleteResponse{ { Deleted: "deleteThis", Untagged: "deleteThis", @@ -34,7 +34,7 @@ func TestDeleteImage(t *testing.T) { for _, testCase := range testCases { var ( - response []types.ImageDeleteResponseItem + response []image.DeleteResponse err error ) diff --git a/pkg/devspace/docker/testing/fake.go b/pkg/devspace/docker/testing/fake.go index d4545c5967..5be5ede99e 100644 --- a/pkg/devspace/docker/testing/fake.go +++ b/pkg/devspace/docker/testing/fake.go @@ -8,6 +8,7 @@ import ( dockertypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/image" dockerregistry "github.com/docker/docker/api/types/registry" "github.com/loft-sh/devspace/pkg/util/log" ) @@ -44,7 +45,7 @@ func (client *FakeClient) ImageBuild(ctx context.Context, context io.Reader, opt } // ImagePush is a fake implementation -func (client *FakeClient) ImagePush(ctx context.Context, ref string, options dockertypes.ImagePushOptions) (io.ReadCloser, error) { +func (client *FakeClient) ImagePush(ctx context.Context, ref string, options image.PushOptions) (io.ReadCloser, error) { return io.NopCloser(bytes.NewBufferString("")), nil } @@ -54,13 +55,13 @@ func (client *FakeClient) Login(registryURL, user, password string, checkCredent } // DeleteImageByName is a fake implementation -func (client *FakeClient) DeleteImageByName(imageName string, log log.Logger) ([]dockertypes.ImageDeleteResponseItem, error) { +func (client *FakeClient) DeleteImageByName(imageName string, log log.Logger) ([]image.DeleteResponse, error) { return client.DeleteImageByFilter(filters.NewArgs(filters.Arg("reference", strings.TrimSpace(imageName))), log) } // DeleteImageByFilter is a fake implementation -func (client *FakeClient) DeleteImageByFilter(filter filters.Args, log log.Logger) ([]dockertypes.ImageDeleteResponseItem, error) { - return []dockertypes.ImageDeleteResponseItem{}, nil +func (client *FakeClient) DeleteImageByFilter(filter filters.Args, log log.Logger) ([]image.DeleteResponse, error) { + return []image.DeleteResponse{}, nil } // GetAuthConfig is a fake implementation