From 61742f7e91b32f0b1c9ee637dd2532cb052d305f Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Mon, 5 Jun 2023 09:19:07 -0700 Subject: [PATCH] Surface better error messages in crane index If we're trying to do things to a non-index, we should fail earlier. --- cmd/crane/cmd/index.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/cmd/crane/cmd/index.go b/cmd/crane/cmd/index.go index 8d4b425da..a1c388bc8 100644 --- a/cmd/crane/cmd/index.go +++ b/cmd/crane/cmd/index.go @@ -70,10 +70,17 @@ func NewCmdIndexFilter(options *[]crane.Option) *cobra.Command { if err != nil { return err } - base, err := remote.Index(ref, o.Remote...) + desc, err := remote.Get(ref, o.Remote...) if err != nil { return fmt.Errorf("pulling %s: %w", baseRef, err) } + if !desc.MediaType.IsIndex() { + return fmt.Errorf("expected %s to be an index, got %q", baseRef, desc.MediaType) + } + base, err := desc.ImageIndex() + if err != nil { + return nil + } idx := filterIndex(base, platforms.platforms) @@ -153,10 +160,17 @@ The platform for appended manifests is inferred from the config file or omitted if err != nil { return err } - base, err = remote.Index(ref, o.Remote...) + desc, err := remote.Get(ref, o.Remote...) if err != nil { return fmt.Errorf("pulling %s: %w", baseRef, err) } + if !desc.MediaType.IsIndex() { + return fmt.Errorf("expected %s to be an index, got %q", baseRef, desc.MediaType) + } + base, err = desc.ImageIndex() + if err != nil { + return err + } } adds := make([]mutate.IndexAddendum, 0, len(newManifests))