zotregistry.dev/zot@v1.4.4-0.20240314164342-eec277e14d20/pkg/extensions/search/convert/oci.go (about) 1 package convert 2 3 import ( 4 "strconv" 5 6 ispec "github.com/opencontainers/image-spec/specs-go/v1" 7 8 zerr "zotregistry.dev/zot/errors" 9 "zotregistry.dev/zot/pkg/extensions/search/gql_generated" 10 ) 11 12 func getLayersSummaries(manifestContent ispec.Manifest) []*gql_generated.LayerSummary { 13 layers := make([]*gql_generated.LayerSummary, 0, len(manifestContent.Layers)) 14 15 for _, layer := range manifestContent.Layers { 16 size := strconv.FormatInt(layer.Size, 10) 17 digest := layer.Digest.String() 18 19 layers = append(layers, &gql_generated.LayerSummary{ 20 Size: &size, 21 Digest: &digest, 22 }) 23 } 24 25 return layers 26 } 27 28 func getAllHistory(manifestContent ispec.Manifest, configContent ispec.Image) ( 29 []*gql_generated.LayerHistory, error, 30 ) { 31 allHistory := []*gql_generated.LayerHistory{} 32 layerSummaries := getLayersSummaries(manifestContent) 33 34 history := configContent.History 35 if len(history) == 0 { 36 // We don't have any image history metadata 37 // let's make due with just the layer metadata 38 for _, layer := range layerSummaries { 39 allHistory = append(allHistory, &gql_generated.LayerHistory{ 40 Layer: layer, 41 HistoryDescription: &gql_generated.HistoryDescription{}, 42 }) 43 } 44 45 return allHistory, nil 46 } 47 48 // Iterator over manifest layers 49 var layersIterator int 50 // Since we are appending pointers, it is important to iterate with an index over slice 51 for i := range history { 52 allHistory = append(allHistory, &gql_generated.LayerHistory{ 53 HistoryDescription: &gql_generated.HistoryDescription{ 54 Created: history[i].Created, 55 CreatedBy: &history[i].CreatedBy, 56 Author: &history[i].Author, 57 Comment: &history[i].Comment, 58 EmptyLayer: &history[i].EmptyLayer, 59 }, 60 }) 61 62 if history[i].EmptyLayer { 63 continue 64 } 65 66 if layersIterator+1 > len(manifestContent.Layers) { 67 return allHistory, zerr.ErrBadLayerCount 68 } 69 70 allHistory[i].Layer = layerSummaries[layersIterator] 71 72 layersIterator++ 73 } 74 75 return allHistory, nil 76 }