@@ -30,57 +30,69 @@ func Decorate(ctx context.Context, src, dest string, runxConfig, runxDoc []byte)
3030 return fmt .Errorf ("could not create runx image: %w" , err )
3131 }
3232
33- desc , err = remote .Get (ref , remoteOpts ... )
34- if err != nil {
35- return fmt .Errorf ("could not get image %s: %w" , src , err )
36- }
37-
38- if desc .MediaType .IsImage () {
39- img , err := remote .Image (ref , remoteOpts ... )
40- if err != nil {
41- return fmt .Errorf ("could not get image %s: %w" , src , err )
42- }
43- configFile , _ := img .ConfigFile ()
44- imgDesc := desc .Descriptor
45- imgDesc .Platform = configFile .Platform ()
46-
33+ if src == "scratch" {
4734 index = // create a manifest
4835 mutate .AppendManifests (
4936 // as an index
5037 mutate .IndexMediaType (empty .Index , types .OCIImageIndex ),
51- // with the referenced image
52- mutate.IndexAddendum {
53- Add : img ,
54- Descriptor : imgDesc ,
55- },
5638 // and the new runx image
5739 mutate.IndexAddendum {
5840 Add : runxImage ,
5941 Descriptor : * runxDesc ,
6042 })
61- } else if desc . MediaType . IsIndex () {
62- index , err = remote .Index (ref , remoteOpts ... )
43+ } else {
44+ desc , err = remote .Get (ref , remoteOpts ... )
6345 if err != nil {
64- return fmt .Errorf ("could not get image index %s: %w" , src , err )
46+ return fmt .Errorf ("could not get image %s: %w" , src , err )
6547 }
6648
67- // remove existing runx manifest
68- manifests , _ := index .IndexManifest ()
69- for _ , manifest := range manifests .Manifests {
70- if _ , ok := manifest .Annotations [runkit .RunxManifestType ]; ok {
71- index = mutate .RemoveManifests (index , match .Digests (manifest .Digest ))
49+ if desc .MediaType .IsImage () {
50+ img , err := remote .Image (ref , remoteOpts ... )
51+ if err != nil {
52+ return fmt .Errorf ("could not get image %s: %w" , src , err )
7253 }
73- }
54+ configFile , _ := img .ConfigFile ()
55+ imgDesc := desc .Descriptor
56+ imgDesc .Platform = configFile .Platform ()
7457
75- // add the new runx manifest
76- index = mutate .AppendManifests (
77- index ,
78- mutate.IndexAddendum {
79- Add : runxImage ,
80- Descriptor : * runxDesc ,
81- })
82- } else {
83- return fmt .Errorf ("unsupported media type %s" , desc .MediaType )
58+ index = // create a manifest
59+ mutate .AppendManifests (
60+ // as an index
61+ mutate .IndexMediaType (empty .Index , types .OCIImageIndex ),
62+ // with the referenced image
63+ mutate.IndexAddendum {
64+ Add : img ,
65+ Descriptor : imgDesc ,
66+ },
67+ // and the new runx image
68+ mutate.IndexAddendum {
69+ Add : runxImage ,
70+ Descriptor : * runxDesc ,
71+ })
72+ } else if desc .MediaType .IsIndex () {
73+ index , err = remote .Index (ref , remoteOpts ... )
74+ if err != nil {
75+ return fmt .Errorf ("could not get image index %s: %w" , src , err )
76+ }
77+
78+ // remove existing runx manifest
79+ manifests , _ := index .IndexManifest ()
80+ for _ , manifest := range manifests .Manifests {
81+ if _ , ok := manifest .Annotations [runkit .RunxManifestType ]; ok {
82+ index = mutate .RemoveManifests (index , match .Digests (manifest .Digest ))
83+ }
84+ }
85+
86+ // add the new runx manifest
87+ index = mutate .AppendManifests (
88+ index ,
89+ mutate.IndexAddendum {
90+ Add : runxImage ,
91+ Descriptor : * runxDesc ,
92+ })
93+ } else {
94+ return fmt .Errorf ("unsupported media type %s" , desc .MediaType )
95+ }
8496 }
8597
8698 err = remote .WriteIndex (destRef , index , remoteOpts ... )
0 commit comments