Skip to content

Commit ecde336

Browse files
authored
Merge pull request #6537 from tonistiigi/add-v0.28-sourcemeta-caps
gateway: add caps for source metadata extensions
2 parents 373d0ad + 8d58a58 commit ecde336

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

frontend/gateway/grpcclient/client.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -472,14 +472,20 @@ func (c *grpcClient) Solve(ctx context.Context, creq client.SolveRequest) (res *
472472
}
473473

474474
func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.SourceOp, opt sourceresolver.Opt) (*sourceresolver.MetaResponse, error) {
475+
requiresImageAttestationResolve := opt.ImageOpt != nil && (opt.ImageOpt.AttestationChain || len(opt.ImageOpt.ResolveAttestations) > 0)
476+
requiresHTTPChecksumRequest := opt.HTTPOpt != nil && opt.HTTPOpt.ChecksumReq != nil
477+
475478
if c.caps.Supports(pb.CapSourceMetaResolver) != nil {
479+
if requiresImageAttestationResolve {
480+
return nil, errors.New("image attestation resolution requires source metadata resolver support")
481+
}
476482
var ref string
477483
if v, ok := strings.CutPrefix(op.Identifier, "docker-image://"); ok {
478484
ref = v
479485
} else if v, ok := strings.CutPrefix(op.Identifier, "oci-layout://"); ok {
480486
ref = v
481487
} else {
482-
if opt.HTTPOpt != nil && opt.HTTPOpt.ChecksumReq != nil {
488+
if requiresHTTPChecksumRequest {
483489
return nil, errors.New("http checksum request requires source metadata resolver support")
484490
}
485491
return &sourceresolver.MetaResponse{Op: op}, nil
@@ -503,6 +509,17 @@ func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.Source
503509
}, nil
504510
}
505511

512+
if requiresImageAttestationResolve {
513+
if err := c.caps.Supports(pb.CapSourceMetaResolverImageAttestations); err != nil {
514+
return nil, errors.Wrap(err, "image attestation resolution requires additional source metadata resolver support")
515+
}
516+
}
517+
if requiresHTTPChecksumRequest {
518+
if err := c.caps.Supports(pb.CapSourceMetaResolverHTTPChecksumRequest); err != nil {
519+
return nil, errors.Wrap(err, "http checksum request requires additional source metadata resolver support")
520+
}
521+
}
522+
506523
var platform *ocispecs.Platform
507524
if imgOpt := opt.ImageOpt; imgOpt != nil && imgOpt.Platform != nil {
508525
platform = imgOpt.Platform
@@ -544,7 +561,7 @@ func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.Source
544561
ReturnObject: opt.GitOpt.ReturnObject,
545562
}
546563
}
547-
if opt.HTTPOpt != nil && opt.HTTPOpt.ChecksumReq != nil {
564+
if requiresHTTPChecksumRequest {
548565
algo, err := toPBHTTPChecksumAlgo(opt.HTTPOpt.ChecksumReq.Algo)
549566
if err != nil {
550567
return nil, err
@@ -598,7 +615,7 @@ func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.Source
598615
}
599616
}
600617
}
601-
if opt.HTTPOpt != nil && opt.HTTPOpt.ChecksumReq != nil {
618+
if requiresHTTPChecksumRequest {
602619
if resp.HTTP == nil || resp.HTTP.ChecksumResponse == nil {
603620
return nil, errors.New("http checksum request was sent but response did not include checksum response")
604621
}

frontend/gateway/pb/caps.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ const (
7676
// CapSourceMetaResolver is the capability to indicates support for ResolveSourceMetadata
7777
// function in gateway API
7878
CapSourceMetaResolver apicaps.CapID = "source.metaresolver"
79+
// CapSourceMetaResolverImageAttestations is the capability to indicate support
80+
// for attestation resolution fields in ResolveSourceMeta image requests.
81+
CapSourceMetaResolverImageAttestations apicaps.CapID = "source.metaresolver.image.attestations"
82+
// CapSourceMetaResolverHTTPChecksumRequest is the capability to indicate support
83+
// for custom checksum request fields in ResolveSourceMeta http requests.
84+
CapSourceMetaResolverHTTPChecksumRequest apicaps.CapID = "source.metaresolver.http.checksumrequest"
7985
)
8086

8187
func init() {
@@ -253,4 +259,18 @@ func init() {
253259
Enabled: true,
254260
Status: apicaps.CapStatusExperimental,
255261
})
262+
263+
Caps.Init(apicaps.Cap{
264+
ID: CapSourceMetaResolverImageAttestations,
265+
Name: "source meta resolver image attestations",
266+
Enabled: true,
267+
Status: apicaps.CapStatusExperimental,
268+
})
269+
270+
Caps.Init(apicaps.Cap{
271+
ID: CapSourceMetaResolverHTTPChecksumRequest,
272+
Name: "source meta resolver http checksum request",
273+
Enabled: true,
274+
Status: apicaps.CapStatusExperimental,
275+
})
256276
}

0 commit comments

Comments
 (0)