Skip to content

Commit 08ebcb0

Browse files
committed
feat: allow to decorate scratch
Just creates an index with only runx related image Signed-off-by: Yves Brissaud <yves.brissaud@gmail.com>
1 parent d5e5b0f commit 08ebcb0

File tree

1 file changed

+49
-37
lines changed

1 file changed

+49
-37
lines changed

runkit/decorate.go

Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)