From adbe04b5fc2e65a7a8e3af22ea58d9758f81f022 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 11 Aug 2025 14:45:56 +0200 Subject: [PATCH] cli/manifest, cli/command/manifest: use stdlib errors Signed-off-by: Sebastiaan van Stijn --- cli/command/manifest/annotate.go | 7 +++---- cli/command/manifest/create_list.go | 6 +++--- cli/command/manifest/inspect.go | 13 ++++++------- cli/command/manifest/push.go | 25 +++++++++++-------------- cli/manifest/store/store.go | 4 ++-- cli/manifest/types/types.go | 6 +++--- 6 files changed, 28 insertions(+), 33 deletions(-) diff --git a/cli/command/manifest/annotate.go b/cli/command/manifest/annotate.go index 4ad382062..a99714785 100644 --- a/cli/command/manifest/annotate.go +++ b/cli/command/manifest/annotate.go @@ -12,7 +12,6 @@ import ( registryclient "github.com/docker/cli/cli/registry/client" "github.com/moby/moby/api/types/registry" ocispec "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -86,11 +85,11 @@ func newAnnotateCommand(dockerCli command.Cli) *cobra.Command { func runManifestAnnotate(dockerCLI command.Cli, opts annotateOptions) error { targetRef, err := normalizeReference(opts.target) if err != nil { - return errors.Wrapf(err, "annotate: error parsing name for manifest list %s", opts.target) + return fmt.Errorf("annotate: error parsing name for manifest list %s: %w", opts.target, err) } imgRef, err := normalizeReference(opts.image) if err != nil { - return errors.Wrapf(err, "annotate: error parsing name for manifest %s", opts.image) + return fmt.Errorf("annotate: error parsing name for manifest %s: %w", opts.image, err) } manifestStore := newManifestStore(dockerCLI) @@ -123,7 +122,7 @@ func runManifestAnnotate(dockerCLI command.Cli, opts annotateOptions) error { } if !isValidOSArch(imageManifest.Descriptor.Platform.OS, imageManifest.Descriptor.Platform.Architecture) { - return errors.Errorf("manifest entry for image has unsupported os/arch combination: %s/%s", opts.os, opts.arch) + return fmt.Errorf("manifest entry for image has unsupported os/arch combination: %s/%s", opts.os, opts.arch) } return manifestStore.Save(targetRef, imgRef, imageManifest) } diff --git a/cli/command/manifest/create_list.go b/cli/command/manifest/create_list.go index 58c18124d..feee2bb38 100644 --- a/cli/command/manifest/create_list.go +++ b/cli/command/manifest/create_list.go @@ -2,12 +2,12 @@ package manifest import ( "context" + "errors" "fmt" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/manifest/store" - "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -38,7 +38,7 @@ func createManifestList(ctx context.Context, dockerCLI command.Cli, args []strin newRef := args[0] targetRef, err := normalizeReference(newRef) if err != nil { - return errors.Wrapf(err, "error parsing name for manifest list %s", newRef) + return fmt.Errorf("error parsing name for manifest list %s: %w", newRef, err) } manifestStore := newManifestStore(dockerCLI) @@ -49,7 +49,7 @@ func createManifestList(ctx context.Context, dockerCLI command.Cli, args []strin case err != nil: return err case !opts.amend: - return errors.Errorf("refusing to amend an existing manifest list with no --amend flag") + return errors.New("refusing to amend an existing manifest list with no --amend flag") } // Now create the local manifest list transaction by looking up the manifest schemas diff --git a/cli/command/manifest/inspect.go b/cli/command/manifest/inspect.go index 217383a07..bde77c4bd 100644 --- a/cli/command/manifest/inspect.go +++ b/cli/command/manifest/inspect.go @@ -11,7 +11,6 @@ import ( "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/manifest/types" "github.com/docker/distribution/manifest/manifestlist" - "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -99,14 +98,14 @@ func printManifest(dockerCli command.Cli, manifest types.ImageManifest, opts ins if err := json.Indent(buffer, raw, "", "\t"); err != nil { return err } - fmt.Fprintln(dockerCli.Out(), buffer.String()) + _, _ = fmt.Fprintln(dockerCli.Out(), buffer.String()) return nil } jsonBytes, err := json.MarshalIndent(manifest, "", "\t") if err != nil { return err } - dockerCli.Out().Write(append(jsonBytes, '\n')) + _, _ = dockerCli.Out().Write(append(jsonBytes, '\n')) return nil } @@ -114,12 +113,12 @@ func printManifestList(dockerCli command.Cli, namedRef reference.Named, list []t if !opts.verbose { targetRepo := reference.TrimNamed(namedRef) - manifests := []manifestlist.ManifestDescriptor{} + manifests := make([]manifestlist.ManifestDescriptor, 0, len(list)) // More than one response. This is a manifest list. for _, img := range list { mfd, err := buildManifestDescriptor(targetRepo, img) if err != nil { - return errors.Wrap(err, "failed to assemble ManifestDescriptor") + return fmt.Errorf("failed to assemble ManifestDescriptor: %w", err) } manifests = append(manifests, mfd) } @@ -131,13 +130,13 @@ func printManifestList(dockerCli command.Cli, namedRef reference.Named, list []t if err != nil { return err } - fmt.Fprintln(dockerCli.Out(), string(jsonBytes)) + _, _ = fmt.Fprintln(dockerCli.Out(), string(jsonBytes)) return nil } jsonBytes, err := json.MarshalIndent(list, "", "\t") if err != nil { return err } - dockerCli.Out().Write(append(jsonBytes, '\n')) + _, _ = dockerCli.Out().Write(append(jsonBytes, '\n')) return nil } diff --git a/cli/command/manifest/push.go b/cli/command/manifest/push.go index ccfa84cd6..63174c068 100644 --- a/cli/command/manifest/push.go +++ b/cli/command/manifest/push.go @@ -15,7 +15,6 @@ import ( "github.com/docker/distribution/manifest/manifestlist" "github.com/docker/distribution/manifest/ocischema" "github.com/docker/distribution/manifest/schema2" - "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -73,7 +72,7 @@ func runPush(ctx context.Context, dockerCli command.Cli, opts pushOpts) error { return err } if len(manifests) == 0 { - return errors.Errorf("%s not found", targetRef) + return fmt.Errorf("%s not found", targetRef) } req, err := buildPushRequest(manifests, targetRef, opts.insecure) @@ -123,13 +122,12 @@ func buildPushRequest(manifests []types.ImageManifest, targetRef reference.Named func buildManifestList(manifests []types.ImageManifest, targetRef reference.Named) (*manifestlist.DeserializedManifestList, error) { targetRepo := reference.TrimNamed(targetRef) - descriptors := []manifestlist.ManifestDescriptor{} + descriptors := make([]manifestlist.ManifestDescriptor, 0, len(manifests)) for _, imageManifest := range manifests { if imageManifest.Descriptor.Platform == nil || imageManifest.Descriptor.Platform.Architecture == "" || imageManifest.Descriptor.Platform.OS == "" { - return nil, errors.Errorf( - "manifest %s must have an OS and Architecture to be pushed to a registry", imageManifest.Ref) + return nil, fmt.Errorf("manifest %s must have an OS and Architecture to be pushed to a registry", imageManifest.Ref) } descriptor, err := buildManifestDescriptor(targetRepo, imageManifest) if err != nil { @@ -145,7 +143,7 @@ func buildManifestDescriptor(targetRepo reference.Named, imageManifest types.Ima manifestRepoHostname := reference.Domain(reference.TrimNamed(imageManifest.Ref)) targetRepoHostname := reference.Domain(reference.TrimNamed(targetRepo)) if manifestRepoHostname != targetRepoHostname { - return manifestlist.ManifestDescriptor{}, errors.Errorf("cannot use source images from a different registry than the target image: %s != %s", manifestRepoHostname, targetRepoHostname) + return manifestlist.ManifestDescriptor{}, fmt.Errorf("cannot use source images from a different registry than the target image: %s != %s", manifestRepoHostname, targetRepoHostname) } manifest := manifestlist.ManifestDescriptor{ @@ -162,8 +160,7 @@ func buildManifestDescriptor(targetRepo reference.Named, imageManifest types.Ima } if err := manifest.Descriptor.Digest.Validate(); err != nil { - return manifestlist.ManifestDescriptor{}, errors.Wrapf(err, - "digest parse of image %q failed", imageManifest.Ref) + return manifestlist.ManifestDescriptor{}, fmt.Errorf("digest parse of image %q failed: %w", imageManifest.Ref, err) } return manifest, nil @@ -215,7 +212,7 @@ func buildPutManifestRequest(imageManifest types.ImageManifest, targetRef refere dig := imageManifest.Descriptor.Digest if dig2 := dig.Algorithm().FromBytes(dt); dig != dig2 { - return mountRequest{}, errors.Errorf("internal digest mismatch for %s: expected %s, got %s", imageManifest.Ref, dig, dig2) + return mountRequest{}, fmt.Errorf("internal digest mismatch for %s: expected %s, got %s", imageManifest.Ref, dig, dig2) } var manifest schema2.DeserializedManifest @@ -234,7 +231,7 @@ func buildPutManifestRequest(imageManifest types.ImageManifest, targetRef refere dig := imageManifest.Descriptor.Digest if dig2 := dig.Algorithm().FromBytes(dt); dig != dig2 { - return mountRequest{}, errors.Errorf("internal digest mismatch for %s: expected %s, got %s", imageManifest.Ref, dig, dig2) + return mountRequest{}, fmt.Errorf("internal digest mismatch for %s: expected %s, got %s", imageManifest.Ref, dig, dig2) } var manifest ocischema.DeserializedManifest @@ -248,15 +245,15 @@ func buildPutManifestRequest(imageManifest types.ImageManifest, targetRef refere } func pushList(ctx context.Context, dockerCLI command.Cli, req pushRequest) error { - rclient := newRegistryClient(dockerCLI, req.insecure) + registryClient := newRegistryClient(dockerCLI, req.insecure) - if err := mountBlobs(ctx, rclient, req.targetRef, req.manifestBlobs); err != nil { + if err := mountBlobs(ctx, registryClient, req.targetRef, req.manifestBlobs); err != nil { return err } - if err := pushReferences(ctx, dockerCLI.Out(), rclient, req.mountRequests); err != nil { + if err := pushReferences(ctx, dockerCLI.Out(), registryClient, req.mountRequests); err != nil { return err } - dgst, err := rclient.PutManifest(ctx, req.targetRef, req.list) + dgst, err := registryClient.PutManifest(ctx, req.targetRef, req.list) if err != nil { return err } diff --git a/cli/manifest/store/store.go b/cli/manifest/store/store.go index e97e8628f..cfd0b2e50 100644 --- a/cli/manifest/store/store.go +++ b/cli/manifest/store/store.go @@ -2,6 +2,7 @@ package store import ( "encoding/json" + "fmt" "os" "path/filepath" "strings" @@ -11,7 +12,6 @@ import ( "github.com/docker/distribution/manifest/manifestlist" "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pkg/errors" ) // Store manages local storage of image distribution manifests @@ -72,7 +72,7 @@ func (*fsStore) getFromFilename(ref reference.Reference, filename string) (types return types.ImageManifest{}, err } if dgst := digest.FromBytes(raw); dgst != manifestInfo.Digest { - return types.ImageManifest{}, errors.Errorf("invalid manifest file %v: image manifest digest mismatch (%v != %v)", filename, manifestInfo.Digest, dgst) + return types.ImageManifest{}, fmt.Errorf("invalid manifest file %v: image manifest digest mismatch (%v != %v)", filename, manifestInfo.Digest, dgst) } manifestInfo.ImageManifest.Descriptor = ocispec.Descriptor{ Digest: manifestInfo.Digest, diff --git a/cli/manifest/types/types.go b/cli/manifest/types/types.go index e098928de..b901c263f 100644 --- a/cli/manifest/types/types.go +++ b/cli/manifest/types/types.go @@ -2,6 +2,7 @@ package types import ( "encoding/json" + "fmt" "github.com/distribution/reference" "github.com/docker/distribution" @@ -10,7 +11,6 @@ import ( "github.com/docker/distribution/manifest/schema2" "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pkg/errors" ) // ImageManifest contains info to output for a manifest object. @@ -82,7 +82,7 @@ func (i ImageManifest) Payload() (string, []byte, error) { case i.OCIManifest != nil: return i.OCIManifest.Payload() default: - return "", nil, errors.Errorf("%s has no payload", i.Ref) + return "", nil, fmt.Errorf("%s has no payload", i.Ref) } } @@ -141,7 +141,7 @@ type SerializableNamed struct { func (s *SerializableNamed) UnmarshalJSON(b []byte) error { var raw string if err := json.Unmarshal(b, &raw); err != nil { - return errors.Wrapf(err, "invalid named reference bytes: %s", b) + return fmt.Errorf("invalid named reference bytes: %s: %w", b, err) } var err error s.Named, err = reference.ParseNamed(raw)