@@ -472,14 +472,20 @@ func (c *grpcClient) Solve(ctx context.Context, creq client.SolveRequest) (res *
472472}
473473
474474func (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 }
0 commit comments