mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-09 21:17:09 +08:00
vendor: github.com/moby/buildkit db304eb93126 (v0.13.0-dev)
full diff: d6e142600e...db304eb931
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
4
vendor/github.com/moby/buildkit/frontend/dockerui/build.go
generated
vendored
4
vendor/github.com/moby/buildkit/frontend/dockerui/build.go
generated
vendored
@ -7,14 +7,14 @@ import (
|
||||
|
||||
"github.com/containerd/containerd/platforms"
|
||||
"github.com/moby/buildkit/exporter/containerimage/exptypes"
|
||||
"github.com/moby/buildkit/exporter/containerimage/image"
|
||||
"github.com/moby/buildkit/frontend/gateway/client"
|
||||
dockerspec "github.com/moby/docker-image-spec/specs-go/v1"
|
||||
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
"github.com/pkg/errors"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
type BuildFunc func(ctx context.Context, platform *ocispecs.Platform, idx int) (client.Reference, *image.Image, error)
|
||||
type BuildFunc func(ctx context.Context, platform *ocispecs.Platform, idx int) (client.Reference, *dockerspec.DockerOCIImage, error)
|
||||
|
||||
func (bc *Client) Build(ctx context.Context, fn BuildFunc) (*ResultBuilder, error) {
|
||||
res := client.NewResult()
|
||||
|
4
vendor/github.com/moby/buildkit/frontend/dockerui/config.go
generated
vendored
4
vendor/github.com/moby/buildkit/frontend/dockerui/config.go
generated
vendored
@ -13,11 +13,11 @@ import (
|
||||
"github.com/distribution/reference"
|
||||
controlapi "github.com/moby/buildkit/api/services/control"
|
||||
"github.com/moby/buildkit/client/llb"
|
||||
"github.com/moby/buildkit/exporter/containerimage/image"
|
||||
"github.com/moby/buildkit/frontend/attestations"
|
||||
"github.com/moby/buildkit/frontend/gateway/client"
|
||||
"github.com/moby/buildkit/solver/pb"
|
||||
"github.com/moby/buildkit/util/flightcontrol"
|
||||
dockerspec "github.com/moby/docker-image-spec/specs-go/v1"
|
||||
"github.com/moby/patternmatcher/ignorefile"
|
||||
digest "github.com/opencontainers/go-digest"
|
||||
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
@ -460,7 +460,7 @@ func (bc *Client) MainContext(ctx context.Context, opts ...llb.LocalOption) (*ll
|
||||
return &st, nil
|
||||
}
|
||||
|
||||
func (bc *Client) NamedContext(ctx context.Context, name string, opt ContextOpt) (*llb.State, *image.Image, error) {
|
||||
func (bc *Client) NamedContext(ctx context.Context, name string, opt ContextOpt) (*llb.State, *dockerspec.DockerOCIImage, error) {
|
||||
named, err := reference.ParseNormalizedNamed(name)
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrapf(err, "invalid context name %s", name)
|
||||
|
52
vendor/github.com/moby/buildkit/frontend/dockerui/namedcontext.go
generated
vendored
52
vendor/github.com/moby/buildkit/frontend/dockerui/namedcontext.go
generated
vendored
@ -10,11 +10,12 @@ import (
|
||||
|
||||
"github.com/distribution/reference"
|
||||
"github.com/moby/buildkit/client/llb"
|
||||
"github.com/moby/buildkit/client/llb/sourceresolver"
|
||||
"github.com/moby/buildkit/exporter/containerimage/exptypes"
|
||||
"github.com/moby/buildkit/exporter/containerimage/image"
|
||||
"github.com/moby/buildkit/frontend/gateway/client"
|
||||
"github.com/moby/buildkit/solver/pb"
|
||||
"github.com/moby/buildkit/util/imageutil"
|
||||
dockerspec "github.com/moby/docker-image-spec/specs-go/v1"
|
||||
"github.com/moby/patternmatcher/ignorefile"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
@ -25,13 +26,14 @@ const (
|
||||
maxContextRecursion = 10
|
||||
)
|
||||
|
||||
func (bc *Client) namedContext(ctx context.Context, name string, nameWithPlatform string, opt ContextOpt) (*llb.State, *image.Image, error) {
|
||||
func (bc *Client) namedContext(ctx context.Context, name string, nameWithPlatform string, opt ContextOpt) (*llb.State, *dockerspec.DockerOCIImage, error) {
|
||||
return bc.namedContextRecursive(ctx, name, nameWithPlatform, opt, 0)
|
||||
}
|
||||
|
||||
func (bc *Client) namedContextRecursive(ctx context.Context, name string, nameWithPlatform string, opt ContextOpt, count int) (*llb.State, *image.Image, error) {
|
||||
func (bc *Client) namedContextRecursive(ctx context.Context, name string, nameWithPlatform string, opt ContextOpt, count int) (*llb.State, *dockerspec.DockerOCIImage, error) {
|
||||
opts := bc.bopts.Opts
|
||||
v, ok := opts[contextPrefix+nameWithPlatform]
|
||||
contextKey := contextPrefix + nameWithPlatform
|
||||
v, ok := opts[contextKey]
|
||||
if !ok {
|
||||
return nil, nil, nil
|
||||
}
|
||||
@ -71,21 +73,28 @@ func (bc *Client) namedContextRecursive(ctx context.Context, name string, nameWi
|
||||
|
||||
named = reference.TagNameOnly(named)
|
||||
|
||||
ref, dgst, data, err := bc.client.ResolveImageConfig(ctx, named.String(), llb.ResolveImageConfigOpt{
|
||||
Platform: opt.Platform,
|
||||
ResolveMode: opt.ResolveMode,
|
||||
LogName: fmt.Sprintf("[context %s] load metadata for %s", nameWithPlatform, ref),
|
||||
ResolverType: llb.ResolverTypeRegistry,
|
||||
ref, dgst, data, err := bc.client.ResolveImageConfig(ctx, named.String(), sourceresolver.Opt{
|
||||
LogName: fmt.Sprintf("[context %s] load metadata for %s", nameWithPlatform, ref),
|
||||
Platform: opt.Platform,
|
||||
ImageOpt: &sourceresolver.ResolveImageOpt{
|
||||
ResolveMode: opt.ResolveMode,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
e := &imageutil.ResolveToNonImageError{}
|
||||
if errors.As(err, &e) {
|
||||
return bc.namedContextRecursive(ctx, e.Updated, name, opt, count+1)
|
||||
before, after, ok := strings.Cut(e.Updated, "://")
|
||||
if !ok {
|
||||
return nil, nil, errors.Errorf("could not parse ref: %s", e.Updated)
|
||||
}
|
||||
|
||||
bc.bopts.Opts[contextKey] = before + ":" + after
|
||||
return bc.namedContextRecursive(ctx, name, nameWithPlatform, opt, count+1)
|
||||
}
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
var img image.Image
|
||||
var img dockerspec.DockerOCIImage
|
||||
if err := json.Unmarshal(data, &img); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@ -139,22 +148,21 @@ func (bc *Client) namedContextRecursive(ctx context.Context, name string, nameWi
|
||||
return nil, nil, errors.Wrapf(err, "could not wrap %q with digest", name)
|
||||
}
|
||||
|
||||
// TODO: How should source policy be handled here with a dummy ref?
|
||||
_, dgst, data, err := bc.client.ResolveImageConfig(ctx, dummyRef.String(), llb.ResolveImageConfigOpt{
|
||||
Platform: opt.Platform,
|
||||
ResolveMode: opt.ResolveMode,
|
||||
LogName: fmt.Sprintf("[context %s] load metadata for %s", nameWithPlatform, dummyRef.String()),
|
||||
ResolverType: llb.ResolverTypeOCILayout,
|
||||
Store: llb.ResolveImageConfigOptStore{
|
||||
SessionID: bc.bopts.SessionID,
|
||||
StoreID: named.Name(),
|
||||
_, dgst, data, err := bc.client.ResolveImageConfig(ctx, dummyRef.String(), sourceresolver.Opt{
|
||||
LogName: fmt.Sprintf("[context %s] load metadata for %s", nameWithPlatform, dummyRef.String()),
|
||||
Platform: opt.Platform,
|
||||
OCILayoutOpt: &sourceresolver.ResolveOCILayoutOpt{
|
||||
Store: sourceresolver.ResolveImageConfigOptStore{
|
||||
SessionID: bc.bopts.SessionID,
|
||||
StoreID: named.Name(),
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
var img image.Image
|
||||
var img dockerspec.DockerOCIImage
|
||||
if err := json.Unmarshal(data, &img); err != nil {
|
||||
return nil, nil, errors.Wrap(err, "could not parse oci-layout image config")
|
||||
}
|
||||
@ -239,7 +247,7 @@ func (bc *Client) namedContextRecursive(ctx context.Context, name string, nameWi
|
||||
if err := json.Unmarshal([]byte(md), &m); err != nil {
|
||||
return nil, nil, errors.Wrapf(err, "failed to parse input metadata %s", md)
|
||||
}
|
||||
var img *image.Image
|
||||
var img *dockerspec.DockerOCIImage
|
||||
if dtic, ok := m[exptypes.ExporterImageConfigKey]; ok {
|
||||
st, err = st.WithImageConfig(dtic)
|
||||
if err != nil {
|
||||
|
4
vendor/github.com/moby/buildkit/frontend/gateway/client/client.go
generated
vendored
4
vendor/github.com/moby/buildkit/frontend/gateway/client/client.go
generated
vendored
@ -6,6 +6,7 @@ import (
|
||||
"syscall"
|
||||
|
||||
"github.com/moby/buildkit/client/llb"
|
||||
"github.com/moby/buildkit/client/llb/sourceresolver"
|
||||
"github.com/moby/buildkit/solver/pb"
|
||||
"github.com/moby/buildkit/solver/result"
|
||||
spb "github.com/moby/buildkit/sourcepolicy/pb"
|
||||
@ -26,8 +27,9 @@ func NewResult() *Result {
|
||||
}
|
||||
|
||||
type Client interface {
|
||||
sourceresolver.MetaResolver
|
||||
Solve(ctx context.Context, req SolveRequest) (*Result, error)
|
||||
ResolveImageConfig(ctx context.Context, ref string, opt llb.ResolveImageConfigOpt) (string, digest.Digest, []byte, error)
|
||||
ResolveImageConfig(ctx context.Context, ref string, opt sourceresolver.Opt) (string, digest.Digest, []byte, error)
|
||||
BuildOpts() BuildOpts
|
||||
Inputs(ctx context.Context) (map[string]llb.State, error)
|
||||
NewContainer(ctx context.Context, req NewContainerRequest) (Container, error)
|
||||
|
128
vendor/github.com/moby/buildkit/frontend/gateway/grpcclient/client.go
generated
vendored
128
vendor/github.com/moby/buildkit/frontend/gateway/grpcclient/client.go
generated
vendored
@ -12,10 +12,12 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
distreference "github.com/distribution/reference"
|
||||
"github.com/gogo/googleapis/google/rpc"
|
||||
gogotypes "github.com/gogo/protobuf/types"
|
||||
"github.com/golang/protobuf/ptypes/any"
|
||||
"github.com/moby/buildkit/client/llb"
|
||||
"github.com/moby/buildkit/client/llb/sourceresolver"
|
||||
"github.com/moby/buildkit/frontend/gateway/client"
|
||||
pb "github.com/moby/buildkit/frontend/gateway/pb"
|
||||
"github.com/moby/buildkit/identity"
|
||||
@ -23,6 +25,7 @@ import (
|
||||
"github.com/moby/buildkit/util/apicaps"
|
||||
"github.com/moby/buildkit/util/bklog"
|
||||
"github.com/moby/buildkit/util/grpcerrors"
|
||||
"github.com/moby/buildkit/util/imageutil"
|
||||
"github.com/moby/sys/signal"
|
||||
digest "github.com/opencontainers/go-digest"
|
||||
"github.com/pkg/errors"
|
||||
@ -479,7 +482,35 @@ func (c *grpcClient) Solve(ctx context.Context, creq client.SolveRequest) (res *
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (c *grpcClient) ResolveImageConfig(ctx context.Context, ref string, opt llb.ResolveImageConfigOpt) (string, digest.Digest, []byte, error) {
|
||||
func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.SourceOp, opt sourceresolver.Opt) (*sourceresolver.MetaResponse, error) {
|
||||
if c.caps.Supports(pb.CapSourceMetaResolver) != nil {
|
||||
var ref string
|
||||
if v, ok := strings.CutPrefix(op.Identifier, "docker-image://"); ok {
|
||||
ref = v
|
||||
} else if v, ok := strings.CutPrefix(op.Identifier, "oci-layout://"); ok {
|
||||
ref = v
|
||||
} else {
|
||||
return &sourceresolver.MetaResponse{Op: op}, nil
|
||||
}
|
||||
retRef, dgst, config, err := c.ResolveImageConfig(ctx, ref, opt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if strings.HasPrefix(op.Identifier, "docker-image://") {
|
||||
op.Identifier = "docker-image://" + retRef
|
||||
} else if strings.HasPrefix(op.Identifier, "oci-layout://") {
|
||||
op.Identifier = "oci-layout://" + retRef
|
||||
}
|
||||
|
||||
return &sourceresolver.MetaResponse{
|
||||
Op: op,
|
||||
Image: &sourceresolver.ResolveImageResponse{
|
||||
Digest: dgst,
|
||||
Config: config,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
var p *opspb.Platform
|
||||
if platform := opt.Platform; platform != nil {
|
||||
p = &opspb.Platform{
|
||||
@ -491,16 +522,97 @@ func (c *grpcClient) ResolveImageConfig(ctx context.Context, ref string, opt llb
|
||||
}
|
||||
}
|
||||
|
||||
resp, err := c.client.ResolveImageConfig(ctx, &pb.ResolveImageConfigRequest{
|
||||
ResolverType: int32(opt.ResolverType),
|
||||
Ref: ref,
|
||||
req := &pb.ResolveSourceMetaRequest{
|
||||
Source: op,
|
||||
Platform: p,
|
||||
ResolveMode: opt.ResolveMode,
|
||||
LogName: opt.LogName,
|
||||
SessionID: opt.Store.SessionID,
|
||||
StoreID: opt.Store.StoreID,
|
||||
SourcePolicies: opt.SourcePolicies,
|
||||
})
|
||||
}
|
||||
resp, err := c.client.ResolveSourceMeta(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
r := &sourceresolver.MetaResponse{
|
||||
Op: resp.Source,
|
||||
}
|
||||
if resp.Image != nil {
|
||||
r.Image = &sourceresolver.ResolveImageResponse{
|
||||
Digest: resp.Image.Digest,
|
||||
Config: resp.Image.Config,
|
||||
}
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func (c *grpcClient) resolveImageConfigViaSourceMetadata(ctx context.Context, ref string, opt sourceresolver.Opt, p *opspb.Platform) (string, digest.Digest, []byte, error) {
|
||||
op := &opspb.SourceOp{
|
||||
Identifier: "docker-image://" + ref,
|
||||
}
|
||||
if opt.OCILayoutOpt != nil {
|
||||
named, err := distreference.ParseNormalizedNamed(ref)
|
||||
if err != nil {
|
||||
return "", "", nil, err
|
||||
}
|
||||
op.Identifier = "oci-layout://" + named.String()
|
||||
op.Attrs = map[string]string{
|
||||
opspb.AttrOCILayoutSessionID: opt.OCILayoutOpt.Store.SessionID,
|
||||
opspb.AttrOCILayoutStoreID: opt.OCILayoutOpt.Store.StoreID,
|
||||
}
|
||||
}
|
||||
|
||||
req := &pb.ResolveSourceMetaRequest{
|
||||
Source: op,
|
||||
Platform: p,
|
||||
LogName: opt.LogName,
|
||||
SourcePolicies: opt.SourcePolicies,
|
||||
}
|
||||
resp, err := c.client.ResolveSourceMeta(ctx, req)
|
||||
if err != nil {
|
||||
return "", "", nil, err
|
||||
}
|
||||
if resp.Image == nil {
|
||||
return "", "", nil, &imageutil.ResolveToNonImageError{Ref: ref, Updated: resp.Source.Identifier}
|
||||
}
|
||||
ref = strings.TrimPrefix(resp.Source.Identifier, "docker-image://")
|
||||
ref = strings.TrimPrefix(ref, "oci-layout://")
|
||||
return ref, resp.Image.Digest, resp.Image.Config, nil
|
||||
}
|
||||
|
||||
func (c *grpcClient) ResolveImageConfig(ctx context.Context, ref string, opt sourceresolver.Opt) (string, digest.Digest, []byte, error) {
|
||||
var p *opspb.Platform
|
||||
if platform := opt.Platform; platform != nil {
|
||||
p = &opspb.Platform{
|
||||
OS: platform.OS,
|
||||
Architecture: platform.Architecture,
|
||||
Variant: platform.Variant,
|
||||
OSVersion: platform.OSVersion,
|
||||
OSFeatures: platform.OSFeatures,
|
||||
}
|
||||
}
|
||||
|
||||
if c.caps.Supports(pb.CapSourceMetaResolver) == nil {
|
||||
return c.resolveImageConfigViaSourceMetadata(ctx, ref, opt, p)
|
||||
}
|
||||
|
||||
req := &pb.ResolveImageConfigRequest{
|
||||
Ref: ref,
|
||||
LogName: opt.LogName,
|
||||
SourcePolicies: opt.SourcePolicies,
|
||||
Platform: p,
|
||||
}
|
||||
if iopt := opt.ImageOpt; iopt != nil {
|
||||
req.ResolveMode = iopt.ResolveMode
|
||||
req.ResolverType = int32(sourceresolver.ResolverTypeRegistry)
|
||||
}
|
||||
|
||||
if iopt := opt.OCILayoutOpt; iopt != nil {
|
||||
req.ResolverType = int32(sourceresolver.ResolverTypeOCILayout)
|
||||
req.StoreID = iopt.Store.StoreID
|
||||
req.SessionID = iopt.Store.SessionID
|
||||
}
|
||||
|
||||
resp, err := c.client.ResolveImageConfig(ctx, req)
|
||||
if err != nil {
|
||||
return "", "", nil, err
|
||||
}
|
||||
|
11
vendor/github.com/moby/buildkit/frontend/gateway/pb/caps.go
generated
vendored
11
vendor/github.com/moby/buildkit/frontend/gateway/pb/caps.go
generated
vendored
@ -68,6 +68,10 @@ const (
|
||||
// CapAttestations is the capability to indicate that attestation
|
||||
// references will be attached to results
|
||||
CapAttestations apicaps.CapID = "reference.attestations"
|
||||
|
||||
// CapSourceMetaResolver is the capability to indicates support for ResolveSourceMetadata
|
||||
// function in gateway API
|
||||
CapSourceMetaResolver apicaps.CapID = "source.metaresolver"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -231,4 +235,11 @@ func init() {
|
||||
Enabled: true,
|
||||
Status: apicaps.CapStatusExperimental,
|
||||
})
|
||||
|
||||
Caps.Init(apicaps.Cap{
|
||||
ID: CapSourceMetaResolver,
|
||||
Name: "source meta resolver",
|
||||
Enabled: true,
|
||||
Status: apicaps.CapStatusExperimental,
|
||||
})
|
||||
}
|
||||
|
1324
vendor/github.com/moby/buildkit/frontend/gateway/pb/gateway.pb.go
generated
vendored
1324
vendor/github.com/moby/buildkit/frontend/gateway/pb/gateway.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
20
vendor/github.com/moby/buildkit/frontend/gateway/pb/gateway.proto
generated
vendored
20
vendor/github.com/moby/buildkit/frontend/gateway/pb/gateway.proto
generated
vendored
@ -17,6 +17,8 @@ option (gogoproto.unmarshaler_all) = true;
|
||||
service LLBBridge {
|
||||
// apicaps:CapResolveImage
|
||||
rpc ResolveImageConfig(ResolveImageConfigRequest) returns (ResolveImageConfigResponse);
|
||||
// apicaps:CapSourceMetaResolver
|
||||
rpc ResolveSourceMeta(ResolveSourceMetaRequest) returns (ResolveSourceMetaResponse);
|
||||
// apicaps:CapSolveBase
|
||||
rpc Solve(SolveRequest) returns (SolveResponse);
|
||||
// apicaps:CapReadFile
|
||||
@ -132,6 +134,24 @@ message ResolveImageConfigResponse {
|
||||
string Ref = 3;
|
||||
}
|
||||
|
||||
message ResolveSourceMetaRequest {
|
||||
pb.SourceOp Source = 1;
|
||||
pb.Platform Platform = 2;
|
||||
string LogName = 3;
|
||||
string ResolveMode = 4;
|
||||
repeated moby.buildkit.v1.sourcepolicy.Policy SourcePolicies = 8;
|
||||
}
|
||||
|
||||
message ResolveSourceMetaResponse {
|
||||
pb.SourceOp Source = 1;
|
||||
ResolveSourceImageResponse Image = 2;
|
||||
}
|
||||
|
||||
message ResolveSourceImageResponse {
|
||||
string Digest = 1 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false];
|
||||
bytes Config = 2;
|
||||
}
|
||||
|
||||
message SolveRequest {
|
||||
pb.Definition Definition = 1;
|
||||
string Frontend = 2;
|
||||
|
Reference in New Issue
Block a user