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  }