From c8cece29608d314af398c8161b18a0227b31b4c2 Mon Sep 17 00:00:00 2001 From: Joao Pereira Date: Fri, 16 Feb 2024 15:01:34 -0600 Subject: [PATCH] Fix DiffID check when layers do not have them Signed-off-by: Joao Pereira --- pkg/imgpkg/imagedesc/image_ref_descriptors.go | 14 ++++++++---- test/e2e/assets/helm-chart.tar | Bin 0 -> 7680 bytes test/e2e/copy_from_image_test.go | 20 ++++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 test/e2e/assets/helm-chart.tar diff --git a/pkg/imgpkg/imagedesc/image_ref_descriptors.go b/pkg/imgpkg/imagedesc/image_ref_descriptors.go index 99b66da85..36240ddc5 100644 --- a/pkg/imgpkg/imagedesc/image_ref_descriptors.go +++ b/pkg/imgpkg/imagedesc/image_ref_descriptors.go @@ -222,10 +222,16 @@ func (ids *ImageRefDescriptors) buildImage(ref Metadata) (ImageDescriptor, error if err != nil { return td, err } - layerDiffID, err := layer.DiffID() - if err != nil { - return td, err + + layerDiffID := "" + if layerMediaType.IsLayer() { + lDiffID, err := layer.DiffID() + if err != nil { + return td, err + } + layerDiffID = lDiffID.String() } + layerSize, err := layer.Size() if err != nil { return td, err @@ -234,7 +240,7 @@ func (ids *ImageRefDescriptors) buildImage(ref Metadata) (ImageDescriptor, error layerTD := ImageLayerDescriptor{ MediaType: string(layerMediaType), Digest: layerDigest.String(), - DiffID: layerDiffID.String(), + DiffID: layerDiffID, Size: layerSize, } diff --git a/test/e2e/assets/helm-chart.tar b/test/e2e/assets/helm-chart.tar new file mode 100644 index 0000000000000000000000000000000000000000..e554d0f8c1d72fa64b4271e32e2a116ac12c3f1e GIT binary patch literal 7680 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 z I_!|uT52=XDGynhq literal 0 HcmV?d00001 diff --git a/test/e2e/copy_from_image_test.go b/test/e2e/copy_from_image_test.go index 0a1e0ce6b..fb2e8da7f 100644 --- a/test/e2e/copy_from_image_test.go +++ b/test/e2e/copy_from_image_test.go @@ -365,6 +365,26 @@ func TestCopyRepoToTarAndThenCopyFromTarToRepo(t *testing.T) { }) } +func TestCopyImageWithLayersThatDoNotFollowSpec(t *testing.T) { + const helmChartSHA = "sha256:f247f3b9467b611bc970d14d890b0f65b1128786f1bbb4712bc02fa59f58f9f8" + env := helpers.BuildEnv(t) + imgpkg := helpers.Imgpkg{T: t, L: helpers.Logger{}, ImgpkgPath: env.ImgpkgPath} + defer env.Cleanup() + + logger := helpers.Logger{} + tag := time.Now().UnixNano() + + logger.Section(fmt.Sprintf("Copy tar of helm chart to the registry '%d'", tag), func() { + imgpkg.Run([]string{"copy", "--tar", "./assets/helm-chart.tar", + "--to-repo", env.RelocationRepo}) + }) + + logger.Section("Copy Image using the Tag", func() { + imgpkg.Run([]string{"copy", "--image", fmt.Sprintf("%s@%v", env.RelocationRepo, helmChartSHA), + "--to-repo", env.RelocationRepo + "-1"}) + }) +} + func TestCopyErrors(t *testing.T) { logger := helpers.Logger{} t.Run("When copying an Image using the -b flag", func(t *testing.T) {