@@ -15,10 +15,12 @@ import (
1515 "github.com/google/go-containerregistry/pkg/registry"
1616 v1 "github.com/google/go-containerregistry/pkg/v1"
1717 "github.com/google/go-containerregistry/pkg/v1/layout"
18+ "github.com/google/go-containerregistry/pkg/v1/match"
1819 "github.com/google/go-containerregistry/pkg/v1/mutate"
1920 "github.com/google/go-containerregistry/pkg/v1/random"
2021 "github.com/google/go-containerregistry/pkg/v1/remote"
2122 "github.com/google/go-containerregistry/pkg/v1/tarball"
23+ "github.com/google/go-containerregistry/pkg/v1/types"
2224 "github.com/stretchr/testify/require"
2325 "github.com/stretchr/testify/suite"
2426)
@@ -389,6 +391,68 @@ func (s *TaskSuite) TestImageArgs() {
389391 }
390392}
391393
394+ func (s * TaskSuite ) TestImageArgsWithOCIImages () {
395+ imagesDir , err := os .MkdirTemp ("" , "preload-images" )
396+ s .NoError (err )
397+
398+ defer os .RemoveAll (imagesDir )
399+
400+ firstImage := s .randomImageIndex (1024 , 2 , "linux" , "amd64" )
401+ firstPath := filepath .Join (imagesDir , "first" )
402+ _ , err = layout .Write (firstPath , firstImage )
403+ s .NoError (err )
404+
405+ secondImage := s .randomImageIndex (1024 , 2 , "linux" , "amd64" )
406+ secondPath := filepath .Join (imagesDir , "second" )
407+ _ , err = layout .Write (secondPath , secondImage )
408+ s .NoError (err )
409+
410+ s .req .Config .ContextDir = "testdata/image-args"
411+ s .req .Config .AdditionalTargets = []string {"first" }
412+ s .req .Config .ImageArgs = []string {
413+ "first_image=" + firstPath ,
414+ "second_image=" + secondPath ,
415+ }
416+
417+ err = os .Mkdir (s .outputPath ("first" ), 0755 )
418+ s .NoError (err )
419+
420+ _ , err = s .build ()
421+ s .NoError (err )
422+
423+ firstBuiltImage , err := layout .FromPath (s .outputPath ("first" , "image" ))
424+ s .NoError (err )
425+ _ , err = firstBuiltImage .ImageIndex ()
426+ s .NoError (err )
427+
428+ secondBuiltImage , err := layout .FromPath (s .outputPath ("image" , "image" ))
429+ s .NoError (err )
430+ _ , err = secondBuiltImage .ImageIndex ()
431+ s .NoError (err )
432+
433+ // for image, builtImage := range map[v1.ImageIndex]v1.ImageIndex{
434+ // firstImage: firstBuiltIndex,
435+ // secondImage: secondBuiltIndex,
436+ // } {
437+ // layers, err := image.Layers()
438+ // s.NoError(err)
439+
440+ // builtLayers, err := builtImage.Layers()
441+ // s.NoError(err)
442+ // s.Len(builtLayers, len(layers)+1)
443+
444+ // for i := 0; i < len(layers); i++ {
445+ // digest, err := layers[i].Digest()
446+ // s.NoError(err)
447+
448+ // builtDigest, err := builtLayers[i].Digest()
449+ // s.NoError(err)
450+
451+ // s.Equal(digest, builtDigest)
452+ // }
453+ // }
454+ }
455+
392456func (s * TaskSuite ) TestImageArgsWithUppercaseName () {
393457 imagesDir , err := os .MkdirTemp ("" , "preload-images" )
394458 s .NoError (err )
@@ -673,6 +737,38 @@ func (s *TaskSuite) randomImage(byteSize, layers int64, os, arch string) v1.Imag
673737 return image
674738}
675739
740+ func (s * TaskSuite ) randomImageIndex (byteSize , layers int64 , os , arch string ) v1.ImageIndex {
741+ index , err := random .Index (byteSize , layers , 1 )
742+ s .NoError (err )
743+ manifest , err := index .IndexManifest ()
744+ s .NoError (err )
745+
746+ var image v1.Image
747+ for _ , m := range manifest .Manifests {
748+ if m .MediaType .IsImage () {
749+ image , err = index .Image (m .Digest )
750+ s .NoError (err )
751+ break
752+ }
753+ }
754+
755+ mutate .RemoveManifests (index , match .MediaTypes (string (types .OCIManifestSchema1 ), string (types .DockerManifestSchema2 )))
756+
757+ cf , err := image .ConfigFile ()
758+ s .NoError (err )
759+
760+ cf = cf .DeepCopy ()
761+ cf .OS = os
762+ cf .Architecture = arch
763+
764+ image , err = mutate .ConfigFile (image , cf )
765+ s .NoError (err )
766+
767+ index = mutate .AppendManifests (index , mutate.IndexAddendum {Add : image })
768+
769+ return index
770+ }
771+
676772func TestSuite (t * testing.T ) {
677773 suite .Run (t , & TaskSuite {
678774 Assertions : require .New (t ),
0 commit comments