in container/go/pkg/oci/image.go [89:136]
func (i *ociImage) buildManifest() error {
rawConfig, err := i.RawConfigFile()
if err != nil {
return errors.Wrap(err, "unable to get the raw config of image")
}
configDigest, err := i.ConfigName()
if err != nil {
return errors.Wrap(err, "unable to get the digest of the image config")
}
i.manifest = &v1.Manifest{
SchemaVersion: 2,
MediaType: types.OCIManifestSchema1,
Config: v1.Descriptor{
MediaType: types.OCIConfigJSON,
Size: int64(len(rawConfig)),
Digest: configDigest,
},
}
for _, l := range i.layers {
m, err := l.MediaType()
if err != nil {
return errors.Wrap(err, "unable to get the media type of layer")
}
d, err := l.Digest()
if err != nil {
return errors.Wrap(err, "unable to get the layer digest")
}
size, err := l.Size()
if err != nil {
return errors.Wrap(err, "unable to get the layer size")
}
i.manifest.Layers = append(i.manifest.Layers, v1.Descriptor{
MediaType: m,
Digest: d,
Size: size,
})
}
rawManifest, err := json.Marshal(i.manifest)
if err != nil {
return errors.Wrap(err, "unable to encode manifest to JSON")
}
i.rawManifest = rawManifest
i.digest = v1.Hash{
Algorithm: "sha256",
Hex: sha256Digest(i.rawManifest),
}
return nil
}