in pkg/signature/manifest.go [107:145]
func GetDigest(manifest Manifest, domain Domain) (digest [32]byte, yml []byte, err error) {
var query *gojq.Query
_, excludes, err := GetMetadataInformation(manifest, domain)
if err != nil {
return [32]byte{}, nil, err
}
renderedQuery := &bytes.Buffer{}
err = GojqTemplate.Execute(renderedQuery, GojqParams{
append(excludes, AlwaysExcluded...),
domain,
})
if err != nil {
return [32]byte{}, nil, err
}
query, err = gojq.Parse(renderedQuery.String())
if err != nil {
return [32]byte{}, nil, err
}
// gojq requires running on raw types, marshal and unmarshall to allow it.
asjson, _ := json.Marshal(manifest)
var unmarshalled interface{}
_ = json.Unmarshal(asjson, &unmarshalled)
jsonIt := query.Run(unmarshalled)
filtered, remaining := jsonIt.Next()
if remaining {
second, rem := jsonIt.Next()
if second != nil && !rem {
return [32]byte{}, nil, errors.New("multiple result from the query should never happen")
}
}
yml, err = yaml.Marshal(filtered)
if err != nil {
return [32]byte{}, nil, errors.New("manifest could not be marshaled to yaml")
}
digest = sha256.Sum256(yml)
return digest, yml, err
}