@@ -15,10 +15,12 @@ import (
15
15
"github.com/google/go-containerregistry/pkg/registry"
16
16
v1 "github.com/google/go-containerregistry/pkg/v1"
17
17
"github.com/google/go-containerregistry/pkg/v1/layout"
18
+ "github.com/google/go-containerregistry/pkg/v1/match"
18
19
"github.com/google/go-containerregistry/pkg/v1/mutate"
19
20
"github.com/google/go-containerregistry/pkg/v1/random"
20
21
"github.com/google/go-containerregistry/pkg/v1/remote"
21
22
"github.com/google/go-containerregistry/pkg/v1/tarball"
23
+ "github.com/google/go-containerregistry/pkg/v1/types"
22
24
"github.com/stretchr/testify/require"
23
25
"github.com/stretchr/testify/suite"
24
26
)
@@ -389,6 +391,68 @@ func (s *TaskSuite) TestImageArgs() {
389
391
}
390
392
}
391
393
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
+
392
456
func (s * TaskSuite ) TestImageArgsWithUppercaseName () {
393
457
imagesDir , err := os .MkdirTemp ("" , "preload-images" )
394
458
s .NoError (err )
@@ -673,6 +737,38 @@ func (s *TaskSuite) randomImage(byteSize, layers int64, os, arch string) v1.Imag
673
737
return image
674
738
}
675
739
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
+ index = 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
+
676
772
func TestSuite (t * testing.T ) {
677
773
suite .Run (t , & TaskSuite {
678
774
Assertions : require .New (t ),
0 commit comments