func()

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
}