mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package result
 | 
						|
 | 
						|
import (
 | 
						|
	pb "github.com/moby/buildkit/frontend/gateway/pb"
 | 
						|
	digest "github.com/opencontainers/go-digest"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	AttestationReasonKey     = "reason"
 | 
						|
	AttestationSBOMCore      = "sbom-core"
 | 
						|
	AttestationInlineOnlyKey = "inline-only"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	AttestationReasonSBOM       = "sbom"
 | 
						|
	AttestationReasonProvenance = "provenance"
 | 
						|
)
 | 
						|
 | 
						|
type Attestation[T any] struct {
 | 
						|
	Kind pb.AttestationKind
 | 
						|
 | 
						|
	Metadata map[string][]byte
 | 
						|
 | 
						|
	Ref         T
 | 
						|
	Path        string
 | 
						|
	ContentFunc func() ([]byte, error)
 | 
						|
 | 
						|
	InToto InTotoAttestation
 | 
						|
}
 | 
						|
 | 
						|
type InTotoAttestation struct {
 | 
						|
	PredicateType string
 | 
						|
	Subjects      []InTotoSubject
 | 
						|
}
 | 
						|
 | 
						|
type InTotoSubject struct {
 | 
						|
	Kind pb.InTotoSubjectKind
 | 
						|
 | 
						|
	Name   string
 | 
						|
	Digest []digest.Digest
 | 
						|
}
 | 
						|
 | 
						|
func ToDigestMap(ds ...digest.Digest) map[string]string {
 | 
						|
	m := map[string]string{}
 | 
						|
	for _, d := range ds {
 | 
						|
		m[d.Algorithm().String()] = d.Encoded()
 | 
						|
	}
 | 
						|
	return m
 | 
						|
}
 | 
						|
 | 
						|
func FromDigestMap(m map[string]string) []digest.Digest {
 | 
						|
	var ds []digest.Digest
 | 
						|
	for k, v := range m {
 | 
						|
		ds = append(ds, digest.NewDigestFromEncoded(digest.Algorithm(k), v))
 | 
						|
	}
 | 
						|
	return ds
 | 
						|
}
 | 
						|
 | 
						|
func ConvertAttestation[U comparable, V comparable](a *Attestation[U], fn func(U) (V, error)) (*Attestation[V], error) {
 | 
						|
	var zero U
 | 
						|
 | 
						|
	var ref V
 | 
						|
	if a.Ref != zero {
 | 
						|
		var err error
 | 
						|
		ref, err = fn(a.Ref)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return &Attestation[V]{
 | 
						|
		Kind:        a.Kind,
 | 
						|
		Metadata:    a.Metadata,
 | 
						|
		Ref:         ref,
 | 
						|
		Path:        a.Path,
 | 
						|
		ContentFunc: a.ContentFunc,
 | 
						|
		InToto:      a.InToto,
 | 
						|
	}, nil
 | 
						|
}
 |