From bfce6556c486cf71d66b985ac5fe5e387fcb45e2 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 4 Aug 2025 20:46:30 +0200 Subject: [PATCH] client: use stdlib errors Signed-off-by: Sebastiaan van Stijn --- client/build_prune.go | 6 +++--- client/client.go | 5 +++-- client/container_logs.go | 6 +++--- client/go.mod | 1 - client/go.sum | 2 -- client/hijack.go | 5 ++--- client/image_tag.go | 7 ++++--- client/image_tag_test.go | 8 ++++---- client/options.go | 10 +++++----- client/plugin_install.go | 7 ++++--- client/plugin_upgrade.go | 4 ++-- client/request.go | 18 +++++++++--------- client/request_test.go | 4 ++-- client/service_create.go | 6 +++--- client/service_logs.go | 4 ++-- .../github.com/moby/moby/client/build_prune.go | 6 +++--- vendor/github.com/moby/moby/client/client.go | 5 +++-- .../moby/moby/client/container_logs.go | 6 +++--- vendor/github.com/moby/moby/client/hijack.go | 5 ++--- .../github.com/moby/moby/client/image_tag.go | 7 ++++--- vendor/github.com/moby/moby/client/options.go | 10 +++++----- .../moby/moby/client/plugin_install.go | 7 ++++--- .../moby/moby/client/plugin_upgrade.go | 4 ++-- vendor/github.com/moby/moby/client/request.go | 18 +++++++++--------- .../moby/moby/client/service_create.go | 6 +++--- .../moby/moby/client/service_logs.go | 4 ++-- 26 files changed, 86 insertions(+), 85 deletions(-) diff --git a/client/build_prune.go b/client/build_prune.go index dae1bd1577..c82cea06ef 100644 --- a/client/build_prune.go +++ b/client/build_prune.go @@ -3,12 +3,12 @@ package client import ( "context" "encoding/json" + "fmt" "net/url" "strconv" "github.com/moby/moby/api/types/build" "github.com/moby/moby/api/types/filters" - "github.com/pkg/errors" ) // BuildCachePrune requests the daemon to delete unused cache data. @@ -36,7 +36,7 @@ func (cli *Client) BuildCachePrune(ctx context.Context, opts build.CachePruneOpt } f, err := filters.ToJSON(opts.Filters) if err != nil { - return nil, errors.Wrap(err, "prune could not marshal filters option") + return nil, fmt.Errorf("prune could not marshal filters option: %w", err) } query.Set("filters", f) @@ -49,7 +49,7 @@ func (cli *Client) BuildCachePrune(ctx context.Context, opts build.CachePruneOpt report := build.CachePruneReport{} if err := json.NewDecoder(resp.Body).Decode(&report); err != nil { - return nil, errors.Wrap(err, "error retrieving disk usage") + return nil, fmt.Errorf("error retrieving disk usage: %w", err) } return &report, nil diff --git a/client/client.go b/client/client.go index e17dfb67c9..81139d19ce 100644 --- a/client/client.go +++ b/client/client.go @@ -44,6 +44,8 @@ package client import ( "context" "crypto/tls" + "errors" + "fmt" "net" "net/http" "net/url" @@ -56,7 +58,6 @@ import ( "github.com/docker/go-connections/sockets" "github.com/moby/moby/api/types" "github.com/moby/moby/api/types/versions" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) @@ -421,7 +422,7 @@ func (cli *Client) HTTPClient() *http.Client { func ParseHostURL(host string) (*url.URL, error) { proto, addr, ok := strings.Cut(host, "://") if !ok || addr == "" { - return nil, errors.Errorf("unable to parse docker host `%s`", host) + return nil, fmt.Errorf("unable to parse docker host `%s`", host) } var basePath string diff --git a/client/container_logs.go b/client/container_logs.go index 1f71c21d12..693f830b63 100644 --- a/client/container_logs.go +++ b/client/container_logs.go @@ -2,13 +2,13 @@ package client import ( "context" + "fmt" "io" "net/url" "time" "github.com/moby/moby/api/types/container" timetypes "github.com/moby/moby/api/types/time" - "github.com/pkg/errors" ) // ContainerLogs returns the logs generated by a container in an [io.ReadCloser]. @@ -55,7 +55,7 @@ func (cli *Client) ContainerLogs(ctx context.Context, containerID string, option if options.Since != "" { ts, err := timetypes.GetTimestamp(options.Since, time.Now()) if err != nil { - return nil, errors.Wrap(err, `invalid value for "since"`) + return nil, fmt.Errorf(`invalid value for "since": %w`, err) } query.Set("since", ts) } @@ -63,7 +63,7 @@ func (cli *Client) ContainerLogs(ctx context.Context, containerID string, option if options.Until != "" { ts, err := timetypes.GetTimestamp(options.Until, time.Now()) if err != nil { - return nil, errors.Wrap(err, `invalid value for "until"`) + return nil, fmt.Errorf(`invalid value for "until": %w`, err) } query.Set("until", ts) } diff --git a/client/go.mod b/client/go.mod index fc355b7790..fe339dc254 100644 --- a/client/go.mod +++ b/client/go.mod @@ -13,7 +13,6 @@ require ( github.com/moby/term v0.5.2 github.com/opencontainers/go-digest v1.0.0 github.com/opencontainers/image-spec v1.1.1 - github.com/pkg/errors v0.9.1 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 go.opentelemetry.io/otel/trace v1.35.0 gotest.tools/v3 v3.5.2 diff --git a/client/go.sum b/client/go.sum index 99e04cb434..bba9bf3918 100644 --- a/client/go.sum +++ b/client/go.sum @@ -35,8 +35,6 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= diff --git a/client/hijack.go b/client/hijack.go index 037a9c26d0..46608d93cb 100644 --- a/client/hijack.go +++ b/client/hijack.go @@ -10,7 +10,6 @@ import ( "time" "github.com/moby/moby/api/types/versions" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) @@ -56,11 +55,11 @@ func setupHijackConn(dialer func(context.Context) (net.Conn, error), req *http.R conn, err := dialer(ctx) if err != nil { - return nil, "", errors.Wrap(err, "cannot connect to the Docker daemon. Is 'docker daemon' running on this host?") + return nil, "", fmt.Errorf("cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: %w", err) } defer func() { if retErr != nil { - conn.Close() + _ = conn.Close() } }() diff --git a/client/image_tag.go b/client/image_tag.go index 2bfafc51cd..2d9fc2a80a 100644 --- a/client/image_tag.go +++ b/client/image_tag.go @@ -2,21 +2,22 @@ package client import ( "context" + "errors" + "fmt" "net/url" "github.com/distribution/reference" - "github.com/pkg/errors" ) // ImageTag tags an image in the docker host func (cli *Client) ImageTag(ctx context.Context, source, target string) error { if _, err := reference.ParseAnyReference(source); err != nil { - return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", source) + return fmt.Errorf("error parsing reference: %q is not a valid repository/tag: %w", source, err) } ref, err := reference.ParseNormalizedNamed(target) if err != nil { - return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", target) + return fmt.Errorf("error parsing reference: %q is not a valid repository/tag: %w", target, err) } if _, isCanonical := ref.(reference.Canonical); isCanonical { diff --git a/client/image_tag_test.go b/client/image_tag_test.go index 6a931769a2..c8a6b51f45 100644 --- a/client/image_tag_test.go +++ b/client/image_tag_test.go @@ -32,7 +32,7 @@ func TestImageTagInvalidReference(t *testing.T) { } err := client.ImageTag(context.Background(), "image_id", "aa/asdf$$^/aa") - assert.Check(t, is.Error(err, `Error parsing reference: "aa/asdf$$^/aa" is not a valid repository/tag: invalid reference format`)) + assert.Check(t, is.Error(err, `error parsing reference: "aa/asdf$$^/aa" is not a valid repository/tag: invalid reference format`)) } // Ensure we don't allow the use of invalid repository names or tags; these tag operations should fail. @@ -65,19 +65,19 @@ func TestImageTagInvalidSourceImageName(t *testing.T) { t.Run("test repository name begin with '-'", func(t *testing.T) { t.Parallel() err := client.ImageTag(ctx, "busybox:latest", "-busybox:test") - assert.Check(t, is.ErrorContains(err, "Error parsing reference")) + assert.Check(t, is.ErrorContains(err, "error parsing reference")) }) t.Run("test namespace name begin with '-'", func(t *testing.T) { t.Parallel() err := client.ImageTag(ctx, "busybox:latest", "-test/busybox:test") - assert.Check(t, is.ErrorContains(err, "Error parsing reference")) + assert.Check(t, is.ErrorContains(err, "error parsing reference")) }) t.Run("test index name begin with '-'", func(t *testing.T) { t.Parallel() err := client.ImageTag(ctx, "busybox:latest", "-index:5000/busybox:test") - assert.Check(t, is.ErrorContains(err, "Error parsing reference")) + assert.Check(t, is.ErrorContains(err, "error parsing reference")) }) } diff --git a/client/options.go b/client/options.go index 1aa89e45ed..2df970f822 100644 --- a/client/options.go +++ b/client/options.go @@ -2,6 +2,7 @@ package client import ( "context" + "fmt" "net" "net/http" "os" @@ -11,7 +12,6 @@ import ( "github.com/docker/go-connections/sockets" "github.com/docker/go-connections/tlsconfig" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.opentelemetry.io/otel/trace" ) @@ -55,7 +55,7 @@ func WithDialContext(dialContext func(ctx context.Context, network, addr string) transport.DialContext = dialContext return nil } - return errors.Errorf("cannot apply dialer to transport: %T", c.client.Transport) + return fmt.Errorf("cannot apply dialer to transport: %T", c.client.Transport) } } @@ -73,7 +73,7 @@ func WithHost(host string) Opt { if transport, ok := c.client.Transport.(*http.Transport); ok { return sockets.ConfigureTransport(transport, c.proto, c.addr) } - return errors.Errorf("cannot apply host to transport: %T", c.client.Transport) + return fmt.Errorf("cannot apply host to transport: %T", c.client.Transport) } } @@ -140,7 +140,7 @@ func WithTLSClientConfig(cacertPath, certPath, keyPath string) Opt { return func(c *Client) error { transport, ok := c.client.Transport.(*http.Transport) if !ok { - return errors.Errorf("cannot apply tls config to transport: %T", c.client.Transport) + return fmt.Errorf("cannot apply tls config to transport: %T", c.client.Transport) } config, err := tlsconfig.Client(tlsconfig.Options{ CAFile: cacertPath, @@ -149,7 +149,7 @@ func WithTLSClientConfig(cacertPath, certPath, keyPath string) Opt { ExclusiveRootPools: true, }) if err != nil { - return errors.Wrap(err, "failed to create tls config") + return fmt.Errorf("failed to create tls config: %w", err) } transport.TLSClientConfig = config return nil diff --git a/client/plugin_install.go b/client/plugin_install.go index e78577c49a..0dfbc8e7fd 100644 --- a/client/plugin_install.go +++ b/client/plugin_install.go @@ -3,6 +3,8 @@ package client import ( "context" "encoding/json" + "errors" + "fmt" "io" "net/http" "net/url" @@ -11,7 +13,6 @@ import ( "github.com/distribution/reference" "github.com/moby/moby/api/types" "github.com/moby/moby/api/types/registry" - "github.com/pkg/errors" ) // PluginInstallOptions holds parameters to install a plugin. @@ -36,7 +37,7 @@ type PluginInstallOptions struct { func (cli *Client) PluginInstall(ctx context.Context, name string, options PluginInstallOptions) (_ io.ReadCloser, retErr error) { query := url.Values{} if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil { - return nil, errors.Wrap(err, "invalid remote reference") + return nil, fmt.Errorf("invalid remote reference: %w", err) } query.Set("remote", options.RemoteRef) @@ -128,7 +129,7 @@ func (cli *Client) checkPluginPermissions(ctx context.Context, query url.Values, return nil, err } if !accept { - return nil, errors.Errorf("permission denied while installing plugin %s", options.RemoteRef) + return nil, errors.New("permission denied while installing plugin " + options.RemoteRef) } } return privileges, nil diff --git a/client/plugin_upgrade.go b/client/plugin_upgrade.go index 6397a14f21..6aad776392 100644 --- a/client/plugin_upgrade.go +++ b/client/plugin_upgrade.go @@ -2,6 +2,7 @@ package client import ( "context" + "fmt" "io" "net/http" "net/url" @@ -9,7 +10,6 @@ import ( "github.com/distribution/reference" "github.com/moby/moby/api/types" "github.com/moby/moby/api/types/registry" - "github.com/pkg/errors" ) // PluginUpgrade upgrades a plugin @@ -24,7 +24,7 @@ func (cli *Client) PluginUpgrade(ctx context.Context, name string, options Plugi } query := url.Values{} if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil { - return nil, errors.Wrap(err, "invalid remote reference") + return nil, fmt.Errorf("invalid remote reference: %w", err) } query.Set("remote", options.RemoteRef) diff --git a/client/request.go b/client/request.go index aad8ad18f8..4b2f86d424 100644 --- a/client/request.go +++ b/client/request.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "io" "net" @@ -14,7 +15,6 @@ import ( "strings" "github.com/moby/moby/api/types" - "github.com/pkg/errors" ) // head sends an http request to the docker API using the method HEAD. @@ -144,7 +144,7 @@ func (cli *Client) doRequest(req *http.Request) (*http.Response, error) { } if cli.scheme == "https" && strings.Contains(err.Error(), "bad certificate") { - return nil, errConnectionFailed{errors.Wrap(err, "the server probably has client authentication (--tlsverify) enabled; check your TLS client certification settings")} + return nil, errConnectionFailed{fmt.Errorf("the server probably has client authentication (--tlsverify) enabled; check your TLS client certification settings: %w", err)} } // Don't decorate context sentinel errors; users may be comparing to @@ -162,11 +162,11 @@ func (cli *Client) doRequest(req *http.Request) (*http.Response, error) { // Unwrap the error to remove request errors ("Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.51/version"), // which are irrelevant if we weren't able to connect. err = errors.Unwrap(err) - return nil, errConnectionFailed{errors.Wrapf(err, "failed to connect to the docker API at %v; check if the path is correct and if the daemon is running", cli.host)} + return nil, errConnectionFailed{fmt.Errorf("failed to connect to the docker API at %v; check if the path is correct and if the daemon is running: %w", cli.host, err)} } var dnsErr *net.DNSError if errors.As(err, &dnsErr) { - return nil, errConnectionFailed{errors.Wrapf(dnsErr, "failed to connect to the docker API at %v", cli.host)} + return nil, errConnectionFailed{fmt.Errorf("failed to connect to the docker API at %v: %w", cli.host, dnsErr)} } var nErr net.Error @@ -193,14 +193,14 @@ func (cli *Client) doRequest(req *http.Request) (*http.Response, error) { if strings.Contains(err.Error(), `open //./pipe/docker_engine`) { // Checks if client is running with elevated privileges if f, elevatedErr := os.Open(`\\.\PHYSICALDRIVE0`); elevatedErr != nil { - err = errors.Wrap(err, "in the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect") + err = fmt.Errorf("in the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect: %w", err) } else { _ = f.Close() - err = errors.Wrap(err, "this error may indicate that the docker daemon is not running") + err = fmt.Errorf("this error may indicate that the docker daemon is not running: %w", err) } } - return nil, errConnectionFailed{errors.Wrap(err, "error during connect")} + return nil, errConnectionFailed{fmt.Errorf("error during connect: %w", err)} } func (cli *Client) checkResponseErr(serverResp *http.Response) (retErr error) { @@ -252,7 +252,7 @@ func (cli *Client) checkResponseErr(serverResp *http.Response) (retErr error) { if serverResp.Header.Get("Content-Type") == "application/json" { var errorResponse types.ErrorResponse if err := json.Unmarshal(body, &errorResponse); err != nil { - return errors.Wrap(err, "Error reading JSON") + return fmt.Errorf("error reading JSON: %w", err) } if errorResponse.Message == "" { // Error-message is empty, which means that we successfully parsed the @@ -285,7 +285,7 @@ func (cli *Client) checkResponseErr(serverResp *http.Response) (retErr error) { // situations where a proxy is involved, returning a HTML response. daemonErr = errors.New(strings.TrimSpace(string(body))) } - return errors.Wrap(daemonErr, "Error response from daemon") + return fmt.Errorf("Error response from daemon: %w", daemonErr) } func (cli *Client) addHeaders(req *http.Request, headers http.Header) *http.Request { diff --git a/client/request_test.go b/client/request_test.go index fc6d624438..8fdf9bdcca 100644 --- a/client/request_test.go +++ b/client/request_test.go @@ -153,7 +153,7 @@ func TestResponseErrors(t *testing.T) { doc: "malformed JSON", contentType: "application/json", response: `{"message":"Some error occurred`, - expected: `Error reading JSON: unexpected end of JSON input`, + expected: `error reading JSON: unexpected end of JSON input`, }, { // Server response that's valid JSON, but not the expected (types.ErrorResponse) scheme @@ -204,7 +204,7 @@ func TestResponseErrors(t *testing.T) {

If this problem persists, please contact support.

`, - expected: `Error reading JSON: invalid character '<' looking for beginning of value`, + expected: `error reading JSON: invalid character '<' looking for beginning of value`, }, } for _, tc := range tests { diff --git a/client/service_create.go b/client/service_create.go index 73342c3002..e593ab91f2 100644 --- a/client/service_create.go +++ b/client/service_create.go @@ -3,6 +3,7 @@ package client import ( "context" "encoding/json" + "errors" "fmt" "net/http" "strings" @@ -12,7 +13,6 @@ import ( "github.com/moby/moby/api/types/swarm" "github.com/moby/moby/api/types/versions" "github.com/opencontainers/go-digest" - "github.com/pkg/errors" ) // ServiceCreate creates a new service. @@ -200,11 +200,11 @@ func validateAPIVersion(c swarm.ServiceSpec, apiVersion string) error { for _, m := range c.TaskTemplate.ContainerSpec.Mounts { if m.BindOptions != nil { if m.BindOptions.NonRecursive && versions.LessThan(apiVersion, "1.40") { - return errors.Errorf("bind-recursive=disabled requires API v1.40 or later") + return errors.New("bind-recursive=disabled requires API v1.40 or later") } // ReadOnlyNonRecursive can be safely ignored when API < 1.44 if m.BindOptions.ReadOnlyForceRecursive && versions.LessThan(apiVersion, "1.44") { - return errors.Errorf("bind-recursive=readonly requires API v1.44 or later") + return errors.New("bind-recursive=readonly requires API v1.44 or later") } } } diff --git a/client/service_logs.go b/client/service_logs.go index e6400342c7..5214aebfe6 100644 --- a/client/service_logs.go +++ b/client/service_logs.go @@ -2,13 +2,13 @@ package client import ( "context" + "fmt" "io" "net/url" "time" "github.com/moby/moby/api/types/container" timetypes "github.com/moby/moby/api/types/time" - "github.com/pkg/errors" ) // ServiceLogs returns the logs generated by a service in an [io.ReadCloser]. @@ -31,7 +31,7 @@ func (cli *Client) ServiceLogs(ctx context.Context, serviceID string, options co if options.Since != "" { ts, err := timetypes.GetTimestamp(options.Since, time.Now()) if err != nil { - return nil, errors.Wrap(err, `invalid value for "since"`) + return nil, fmt.Errorf(`invalid value for "since": %w`, err) } query.Set("since", ts) } diff --git a/vendor/github.com/moby/moby/client/build_prune.go b/vendor/github.com/moby/moby/client/build_prune.go index dae1bd1577..c82cea06ef 100644 --- a/vendor/github.com/moby/moby/client/build_prune.go +++ b/vendor/github.com/moby/moby/client/build_prune.go @@ -3,12 +3,12 @@ package client import ( "context" "encoding/json" + "fmt" "net/url" "strconv" "github.com/moby/moby/api/types/build" "github.com/moby/moby/api/types/filters" - "github.com/pkg/errors" ) // BuildCachePrune requests the daemon to delete unused cache data. @@ -36,7 +36,7 @@ func (cli *Client) BuildCachePrune(ctx context.Context, opts build.CachePruneOpt } f, err := filters.ToJSON(opts.Filters) if err != nil { - return nil, errors.Wrap(err, "prune could not marshal filters option") + return nil, fmt.Errorf("prune could not marshal filters option: %w", err) } query.Set("filters", f) @@ -49,7 +49,7 @@ func (cli *Client) BuildCachePrune(ctx context.Context, opts build.CachePruneOpt report := build.CachePruneReport{} if err := json.NewDecoder(resp.Body).Decode(&report); err != nil { - return nil, errors.Wrap(err, "error retrieving disk usage") + return nil, fmt.Errorf("error retrieving disk usage: %w", err) } return &report, nil diff --git a/vendor/github.com/moby/moby/client/client.go b/vendor/github.com/moby/moby/client/client.go index e17dfb67c9..81139d19ce 100644 --- a/vendor/github.com/moby/moby/client/client.go +++ b/vendor/github.com/moby/moby/client/client.go @@ -44,6 +44,8 @@ package client import ( "context" "crypto/tls" + "errors" + "fmt" "net" "net/http" "net/url" @@ -56,7 +58,6 @@ import ( "github.com/docker/go-connections/sockets" "github.com/moby/moby/api/types" "github.com/moby/moby/api/types/versions" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) @@ -421,7 +422,7 @@ func (cli *Client) HTTPClient() *http.Client { func ParseHostURL(host string) (*url.URL, error) { proto, addr, ok := strings.Cut(host, "://") if !ok || addr == "" { - return nil, errors.Errorf("unable to parse docker host `%s`", host) + return nil, fmt.Errorf("unable to parse docker host `%s`", host) } var basePath string diff --git a/vendor/github.com/moby/moby/client/container_logs.go b/vendor/github.com/moby/moby/client/container_logs.go index 1f71c21d12..693f830b63 100644 --- a/vendor/github.com/moby/moby/client/container_logs.go +++ b/vendor/github.com/moby/moby/client/container_logs.go @@ -2,13 +2,13 @@ package client import ( "context" + "fmt" "io" "net/url" "time" "github.com/moby/moby/api/types/container" timetypes "github.com/moby/moby/api/types/time" - "github.com/pkg/errors" ) // ContainerLogs returns the logs generated by a container in an [io.ReadCloser]. @@ -55,7 +55,7 @@ func (cli *Client) ContainerLogs(ctx context.Context, containerID string, option if options.Since != "" { ts, err := timetypes.GetTimestamp(options.Since, time.Now()) if err != nil { - return nil, errors.Wrap(err, `invalid value for "since"`) + return nil, fmt.Errorf(`invalid value for "since": %w`, err) } query.Set("since", ts) } @@ -63,7 +63,7 @@ func (cli *Client) ContainerLogs(ctx context.Context, containerID string, option if options.Until != "" { ts, err := timetypes.GetTimestamp(options.Until, time.Now()) if err != nil { - return nil, errors.Wrap(err, `invalid value for "until"`) + return nil, fmt.Errorf(`invalid value for "until": %w`, err) } query.Set("until", ts) } diff --git a/vendor/github.com/moby/moby/client/hijack.go b/vendor/github.com/moby/moby/client/hijack.go index 037a9c26d0..46608d93cb 100644 --- a/vendor/github.com/moby/moby/client/hijack.go +++ b/vendor/github.com/moby/moby/client/hijack.go @@ -10,7 +10,6 @@ import ( "time" "github.com/moby/moby/api/types/versions" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) @@ -56,11 +55,11 @@ func setupHijackConn(dialer func(context.Context) (net.Conn, error), req *http.R conn, err := dialer(ctx) if err != nil { - return nil, "", errors.Wrap(err, "cannot connect to the Docker daemon. Is 'docker daemon' running on this host?") + return nil, "", fmt.Errorf("cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: %w", err) } defer func() { if retErr != nil { - conn.Close() + _ = conn.Close() } }() diff --git a/vendor/github.com/moby/moby/client/image_tag.go b/vendor/github.com/moby/moby/client/image_tag.go index 2bfafc51cd..2d9fc2a80a 100644 --- a/vendor/github.com/moby/moby/client/image_tag.go +++ b/vendor/github.com/moby/moby/client/image_tag.go @@ -2,21 +2,22 @@ package client import ( "context" + "errors" + "fmt" "net/url" "github.com/distribution/reference" - "github.com/pkg/errors" ) // ImageTag tags an image in the docker host func (cli *Client) ImageTag(ctx context.Context, source, target string) error { if _, err := reference.ParseAnyReference(source); err != nil { - return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", source) + return fmt.Errorf("error parsing reference: %q is not a valid repository/tag: %w", source, err) } ref, err := reference.ParseNormalizedNamed(target) if err != nil { - return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", target) + return fmt.Errorf("error parsing reference: %q is not a valid repository/tag: %w", target, err) } if _, isCanonical := ref.(reference.Canonical); isCanonical { diff --git a/vendor/github.com/moby/moby/client/options.go b/vendor/github.com/moby/moby/client/options.go index 1aa89e45ed..2df970f822 100644 --- a/vendor/github.com/moby/moby/client/options.go +++ b/vendor/github.com/moby/moby/client/options.go @@ -2,6 +2,7 @@ package client import ( "context" + "fmt" "net" "net/http" "os" @@ -11,7 +12,6 @@ import ( "github.com/docker/go-connections/sockets" "github.com/docker/go-connections/tlsconfig" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.opentelemetry.io/otel/trace" ) @@ -55,7 +55,7 @@ func WithDialContext(dialContext func(ctx context.Context, network, addr string) transport.DialContext = dialContext return nil } - return errors.Errorf("cannot apply dialer to transport: %T", c.client.Transport) + return fmt.Errorf("cannot apply dialer to transport: %T", c.client.Transport) } } @@ -73,7 +73,7 @@ func WithHost(host string) Opt { if transport, ok := c.client.Transport.(*http.Transport); ok { return sockets.ConfigureTransport(transport, c.proto, c.addr) } - return errors.Errorf("cannot apply host to transport: %T", c.client.Transport) + return fmt.Errorf("cannot apply host to transport: %T", c.client.Transport) } } @@ -140,7 +140,7 @@ func WithTLSClientConfig(cacertPath, certPath, keyPath string) Opt { return func(c *Client) error { transport, ok := c.client.Transport.(*http.Transport) if !ok { - return errors.Errorf("cannot apply tls config to transport: %T", c.client.Transport) + return fmt.Errorf("cannot apply tls config to transport: %T", c.client.Transport) } config, err := tlsconfig.Client(tlsconfig.Options{ CAFile: cacertPath, @@ -149,7 +149,7 @@ func WithTLSClientConfig(cacertPath, certPath, keyPath string) Opt { ExclusiveRootPools: true, }) if err != nil { - return errors.Wrap(err, "failed to create tls config") + return fmt.Errorf("failed to create tls config: %w", err) } transport.TLSClientConfig = config return nil diff --git a/vendor/github.com/moby/moby/client/plugin_install.go b/vendor/github.com/moby/moby/client/plugin_install.go index e78577c49a..0dfbc8e7fd 100644 --- a/vendor/github.com/moby/moby/client/plugin_install.go +++ b/vendor/github.com/moby/moby/client/plugin_install.go @@ -3,6 +3,8 @@ package client import ( "context" "encoding/json" + "errors" + "fmt" "io" "net/http" "net/url" @@ -11,7 +13,6 @@ import ( "github.com/distribution/reference" "github.com/moby/moby/api/types" "github.com/moby/moby/api/types/registry" - "github.com/pkg/errors" ) // PluginInstallOptions holds parameters to install a plugin. @@ -36,7 +37,7 @@ type PluginInstallOptions struct { func (cli *Client) PluginInstall(ctx context.Context, name string, options PluginInstallOptions) (_ io.ReadCloser, retErr error) { query := url.Values{} if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil { - return nil, errors.Wrap(err, "invalid remote reference") + return nil, fmt.Errorf("invalid remote reference: %w", err) } query.Set("remote", options.RemoteRef) @@ -128,7 +129,7 @@ func (cli *Client) checkPluginPermissions(ctx context.Context, query url.Values, return nil, err } if !accept { - return nil, errors.Errorf("permission denied while installing plugin %s", options.RemoteRef) + return nil, errors.New("permission denied while installing plugin " + options.RemoteRef) } } return privileges, nil diff --git a/vendor/github.com/moby/moby/client/plugin_upgrade.go b/vendor/github.com/moby/moby/client/plugin_upgrade.go index 6397a14f21..6aad776392 100644 --- a/vendor/github.com/moby/moby/client/plugin_upgrade.go +++ b/vendor/github.com/moby/moby/client/plugin_upgrade.go @@ -2,6 +2,7 @@ package client import ( "context" + "fmt" "io" "net/http" "net/url" @@ -9,7 +10,6 @@ import ( "github.com/distribution/reference" "github.com/moby/moby/api/types" "github.com/moby/moby/api/types/registry" - "github.com/pkg/errors" ) // PluginUpgrade upgrades a plugin @@ -24,7 +24,7 @@ func (cli *Client) PluginUpgrade(ctx context.Context, name string, options Plugi } query := url.Values{} if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil { - return nil, errors.Wrap(err, "invalid remote reference") + return nil, fmt.Errorf("invalid remote reference: %w", err) } query.Set("remote", options.RemoteRef) diff --git a/vendor/github.com/moby/moby/client/request.go b/vendor/github.com/moby/moby/client/request.go index aad8ad18f8..4b2f86d424 100644 --- a/vendor/github.com/moby/moby/client/request.go +++ b/vendor/github.com/moby/moby/client/request.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "io" "net" @@ -14,7 +15,6 @@ import ( "strings" "github.com/moby/moby/api/types" - "github.com/pkg/errors" ) // head sends an http request to the docker API using the method HEAD. @@ -144,7 +144,7 @@ func (cli *Client) doRequest(req *http.Request) (*http.Response, error) { } if cli.scheme == "https" && strings.Contains(err.Error(), "bad certificate") { - return nil, errConnectionFailed{errors.Wrap(err, "the server probably has client authentication (--tlsverify) enabled; check your TLS client certification settings")} + return nil, errConnectionFailed{fmt.Errorf("the server probably has client authentication (--tlsverify) enabled; check your TLS client certification settings: %w", err)} } // Don't decorate context sentinel errors; users may be comparing to @@ -162,11 +162,11 @@ func (cli *Client) doRequest(req *http.Request) (*http.Response, error) { // Unwrap the error to remove request errors ("Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.51/version"), // which are irrelevant if we weren't able to connect. err = errors.Unwrap(err) - return nil, errConnectionFailed{errors.Wrapf(err, "failed to connect to the docker API at %v; check if the path is correct and if the daemon is running", cli.host)} + return nil, errConnectionFailed{fmt.Errorf("failed to connect to the docker API at %v; check if the path is correct and if the daemon is running: %w", cli.host, err)} } var dnsErr *net.DNSError if errors.As(err, &dnsErr) { - return nil, errConnectionFailed{errors.Wrapf(dnsErr, "failed to connect to the docker API at %v", cli.host)} + return nil, errConnectionFailed{fmt.Errorf("failed to connect to the docker API at %v: %w", cli.host, dnsErr)} } var nErr net.Error @@ -193,14 +193,14 @@ func (cli *Client) doRequest(req *http.Request) (*http.Response, error) { if strings.Contains(err.Error(), `open //./pipe/docker_engine`) { // Checks if client is running with elevated privileges if f, elevatedErr := os.Open(`\\.\PHYSICALDRIVE0`); elevatedErr != nil { - err = errors.Wrap(err, "in the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect") + err = fmt.Errorf("in the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect: %w", err) } else { _ = f.Close() - err = errors.Wrap(err, "this error may indicate that the docker daemon is not running") + err = fmt.Errorf("this error may indicate that the docker daemon is not running: %w", err) } } - return nil, errConnectionFailed{errors.Wrap(err, "error during connect")} + return nil, errConnectionFailed{fmt.Errorf("error during connect: %w", err)} } func (cli *Client) checkResponseErr(serverResp *http.Response) (retErr error) { @@ -252,7 +252,7 @@ func (cli *Client) checkResponseErr(serverResp *http.Response) (retErr error) { if serverResp.Header.Get("Content-Type") == "application/json" { var errorResponse types.ErrorResponse if err := json.Unmarshal(body, &errorResponse); err != nil { - return errors.Wrap(err, "Error reading JSON") + return fmt.Errorf("error reading JSON: %w", err) } if errorResponse.Message == "" { // Error-message is empty, which means that we successfully parsed the @@ -285,7 +285,7 @@ func (cli *Client) checkResponseErr(serverResp *http.Response) (retErr error) { // situations where a proxy is involved, returning a HTML response. daemonErr = errors.New(strings.TrimSpace(string(body))) } - return errors.Wrap(daemonErr, "Error response from daemon") + return fmt.Errorf("Error response from daemon: %w", daemonErr) } func (cli *Client) addHeaders(req *http.Request, headers http.Header) *http.Request { diff --git a/vendor/github.com/moby/moby/client/service_create.go b/vendor/github.com/moby/moby/client/service_create.go index 73342c3002..e593ab91f2 100644 --- a/vendor/github.com/moby/moby/client/service_create.go +++ b/vendor/github.com/moby/moby/client/service_create.go @@ -3,6 +3,7 @@ package client import ( "context" "encoding/json" + "errors" "fmt" "net/http" "strings" @@ -12,7 +13,6 @@ import ( "github.com/moby/moby/api/types/swarm" "github.com/moby/moby/api/types/versions" "github.com/opencontainers/go-digest" - "github.com/pkg/errors" ) // ServiceCreate creates a new service. @@ -200,11 +200,11 @@ func validateAPIVersion(c swarm.ServiceSpec, apiVersion string) error { for _, m := range c.TaskTemplate.ContainerSpec.Mounts { if m.BindOptions != nil { if m.BindOptions.NonRecursive && versions.LessThan(apiVersion, "1.40") { - return errors.Errorf("bind-recursive=disabled requires API v1.40 or later") + return errors.New("bind-recursive=disabled requires API v1.40 or later") } // ReadOnlyNonRecursive can be safely ignored when API < 1.44 if m.BindOptions.ReadOnlyForceRecursive && versions.LessThan(apiVersion, "1.44") { - return errors.Errorf("bind-recursive=readonly requires API v1.44 or later") + return errors.New("bind-recursive=readonly requires API v1.44 or later") } } } diff --git a/vendor/github.com/moby/moby/client/service_logs.go b/vendor/github.com/moby/moby/client/service_logs.go index e6400342c7..5214aebfe6 100644 --- a/vendor/github.com/moby/moby/client/service_logs.go +++ b/vendor/github.com/moby/moby/client/service_logs.go @@ -2,13 +2,13 @@ package client import ( "context" + "fmt" "io" "net/url" "time" "github.com/moby/moby/api/types/container" timetypes "github.com/moby/moby/api/types/time" - "github.com/pkg/errors" ) // ServiceLogs returns the logs generated by a service in an [io.ReadCloser]. @@ -31,7 +31,7 @@ func (cli *Client) ServiceLogs(ctx context.Context, serviceID string, options co if options.Since != "" { ts, err := timetypes.GetTimestamp(options.Since, time.Now()) if err != nil { - return nil, errors.Wrap(err, `invalid value for "since"`) + return nil, fmt.Errorf(`invalid value for "since": %w`, err) } query.Set("since", ts) }