package operator import ( "mstore/app/descr" "mstore/pkg/auxtool" "mstore/pkg/auxuuid" ocidigest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) func descrsFromManifest(name, reference string, manifest *ocispec.Manifest, rawManifest []byte) (descr.Manifest, []descr.Blob, error) { var err error manifestDescr := descr.Manifest{} //configDescr := descr.Blob{} blobDescrs := make([]descr.Blob, 0) timestamp := auxtool.TimeNow() // Make manifest descriptor manifestDigest := ocidigest.SHA256.FromBytes(rawManifest).String() manifestDescr = descr.Manifest{ ID: auxuuid.NewUUID(), Name: name, Reference: reference, Digest: manifestDigest, ContentType: manifest.MediaType, Payload: string(rawManifest), CreatedAt: timestamp, UpdatedAt: timestamp, } // Make config descriptor ociConfig := manifest.Config configDescr := descr.Blob{ ID: auxuuid.NewUUID(), Name: name, Reference: reference, MediaType: ociConfig.MediaType, Digest: string(ociConfig.Digest), Size: ociConfig.Size, CreatedAt: timestamp, UpdatedAt: timestamp, } blobDescrs = append(blobDescrs, configDescr) // Make blob descriptions layerMap := make(map[string]bool) for _, layer := range manifest.Layers { blobDescr := descr.Blob{ ID: auxuuid.NewUUID(), Name: name, Reference: reference, MediaType: layer.MediaType, Digest: string(layer.Digest), Size: layer.Size, CreatedAt: timestamp, UpdatedAt: timestamp, } _, alreadyAdded := layerMap[string(layer.Digest)] if !alreadyAdded { blobDescrs = append(blobDescrs, blobDescr) layerMap[string(layer.Digest)] = true } } return manifestDescr, blobDescrs, err }