From d8f6d554a898ec3d3a507d0984a7414d6f436f9e Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 15 Mar 2023 11:41:18 +0000 Subject: [PATCH 1/2] controller: refactor build inputs to external struct This patch continues the move to attempt to merge the build.Options struct into the controllerapi.Options message. To do this, we extract all the input parameters into a dedicated message (adding the missing ones, except for the InStream parameter which will require some additional fiddling around). We also rework the NamedContexts to allow containing States (by transmitting them as DefinitionOps), and adding a Linked field to the common options. Signed-off-by: Justin Chadwell --- commands/build.go | 128 +++++---- commands/build_test.go | 70 +++-- controller/build/build.go | 119 +++++--- controller/pb/controller.pb.go | 495 ++++++++++++++++++++------------- controller/pb/controller.proto | 66 +++-- util/buildflags/context.go | 7 +- 6 files changed, 550 insertions(+), 335 deletions(-) diff --git a/commands/build.go b/commands/build.go index 3d33ab65..8accd8ab 100644 --- a/commands/build.go +++ b/commands/build.go @@ -81,23 +81,32 @@ type buildOptions struct { func (o *buildOptions) toControllerOptions() (controllerapi.BuildOptions, error) { var err error - opts := controllerapi.BuildOptions{ - Allow: o.allow, - BuildArgs: listToMap(o.buildArgs, true), - CgroupParent: o.cgroupParent, + + inputs := controllerapi.Inputs{ ContextPath: o.contextPath, DockerfileName: o.dockerfileName, - ExtraHosts: o.extraHosts, - Labels: listToMap(o.labels, false), - NetworkMode: o.networkMode, - NoCacheFilter: o.noCacheFilter, - Platforms: o.platforms, - PrintFunc: o.printFunc, - ShmSize: int64(o.shmSize), - Tags: o.tags, - Target: o.target, - Ulimits: dockerUlimitToControllerUlimit(o.ulimits), - Opts: &o.CommonOptions, + } + inputs.NamedContexts, err = buildflags.ParseContextNames(o.contexts) + if err != nil { + return controllerapi.BuildOptions{}, err + } + + opts := controllerapi.BuildOptions{ + Inputs: &inputs, + Allow: o.allow, + BuildArgs: listToMap(o.buildArgs, true), + CgroupParent: o.cgroupParent, + ExtraHosts: o.extraHosts, + Labels: listToMap(o.labels, false), + NetworkMode: o.networkMode, + NoCacheFilter: o.noCacheFilter, + Platforms: o.platforms, + PrintFunc: o.printFunc, + ShmSize: int64(o.shmSize), + Tags: o.tags, + Target: o.target, + Ulimits: dockerUlimitToControllerUlimit(o.ulimits), + Opts: &o.CommonOptions, } inAttests := append([]string{}, o.attests...) @@ -112,11 +121,6 @@ func (o *buildOptions) toControllerOptions() (controllerapi.BuildOptions, error) return controllerapi.BuildOptions{}, err } - opts.NamedContexts, err = buildflags.ParseContextNames(o.contexts) - if err != nil { - return controllerapi.BuildOptions{}, err - } - opts.Exports, err = buildflags.ParseExports(o.outputs) if err != nil { return controllerapi.BuildOptions{}, err @@ -662,45 +666,6 @@ func dockerUlimitToControllerUlimit(u *dockeropts.UlimitOpt) *controllerapi.Ulim // resolvePaths resolves all paths contained in controllerapi.BuildOptions // and replaces them to absolute paths. func resolvePaths(options *controllerapi.BuildOptions) (_ *controllerapi.BuildOptions, err error) { - if options.ContextPath != "" && options.ContextPath != "-" { - options.ContextPath, err = filepath.Abs(options.ContextPath) - if err != nil { - return nil, err - } - } - if options.DockerfileName != "" && options.DockerfileName != "-" { - options.DockerfileName, err = filepath.Abs(options.DockerfileName) - if err != nil { - return nil, err - } - } - var contexts map[string]string - for k, v := range options.NamedContexts { - if urlutil.IsGitURL(v) || urlutil.IsURL(v) || strings.HasPrefix(v, "docker-image://") { - // url prefix, this is a remote path - } else if strings.HasPrefix(v, "oci-layout://") { - // oci layout prefix, this is a local path - p := strings.TrimPrefix(v, "oci-layout://") - p, err = filepath.Abs(p) - if err != nil { - return nil, err - } - v = "oci-layout://" + p - } else { - // no prefix, assume local path - v, err = filepath.Abs(v) - if err != nil { - return nil, err - } - } - - if contexts == nil { - contexts = make(map[string]string) - } - contexts[k] = v - } - options.NamedContexts = contexts - var cacheFrom []*controllerapi.CacheOptionsEntry for _, co := range options.CacheFrom { switch co.Type { @@ -812,5 +777,50 @@ func resolvePaths(options *controllerapi.BuildOptions) (_ *controllerapi.BuildOp } } + if options.Inputs == nil { + return options, nil + } + if options.Inputs.ContextPath != "" && options.Inputs.ContextPath != "-" { + options.Inputs.ContextPath, err = filepath.Abs(options.Inputs.ContextPath) + if err != nil { + return nil, err + } + } + if options.Inputs.DockerfileName != "" && options.Inputs.DockerfileName != "-" { + options.Inputs.DockerfileName, err = filepath.Abs(options.Inputs.DockerfileName) + if err != nil { + return nil, err + } + } + var contexts map[string]*controllerapi.NamedContext + for k, v := range options.Inputs.NamedContexts { + v := *v + if v.Definition != nil { + // definition, no path + } else if urlutil.IsGitURL(v.Path) || urlutil.IsURL(v.Path) || strings.HasPrefix(v.Path, "docker-image://") { + // url prefix, this is a remote path + } else if strings.HasPrefix(v.Path, "oci-layout://") { + // oci layout prefix, this is a local path + p := strings.TrimPrefix(v.Path, "oci-layout://") + p, err = filepath.Abs(p) + if err != nil { + return nil, err + } + v.Path = "oci-layout://" + p + } else { + // no prefix, assume local path + v.Path, err = filepath.Abs(v.Path) + if err != nil { + return nil, err + } + } + + if contexts == nil { + contexts = make(map[string]*controllerapi.NamedContext) + } + contexts[k] = &v + } + options.Inputs.NamedContexts = contexts + return options, nil } diff --git a/commands/build_test.go b/commands/build_test.go index 1a7f335e..85694f51 100644 --- a/commands/build_test.go +++ b/commands/build_test.go @@ -21,36 +21,68 @@ func TestResolvePaths(t *testing.T) { want controllerapi.BuildOptions }{ { - name: "contextpath", - options: controllerapi.BuildOptions{ContextPath: "test"}, - want: controllerapi.BuildOptions{ContextPath: filepath.Join(tmpwd, "test")}, + name: "contextpath", + options: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{ContextPath: "test"}, + }, + want: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{ContextPath: filepath.Join(tmpwd, "test")}, + }, }, { - name: "contextpath-cwd", - options: controllerapi.BuildOptions{ContextPath: "."}, - want: controllerapi.BuildOptions{ContextPath: tmpwd}, + name: "contextpath-cwd", + options: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{ContextPath: "."}, + }, + want: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{ContextPath: tmpwd}, + }, }, { - name: "contextpath-dash", - options: controllerapi.BuildOptions{ContextPath: "-"}, - want: controllerapi.BuildOptions{ContextPath: "-"}, + name: "contextpath-dash", + options: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{ContextPath: "-"}, + }, + want: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{ContextPath: "-"}, + }, }, { - name: "dockerfilename", - options: controllerapi.BuildOptions{DockerfileName: "test"}, - want: controllerapi.BuildOptions{DockerfileName: filepath.Join(tmpwd, "test")}, + name: "dockerfilename", + options: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{DockerfileName: "test"}, + }, + want: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{DockerfileName: filepath.Join(tmpwd, "test")}, + }, }, { - name: "dockerfilename-dash", - options: controllerapi.BuildOptions{DockerfileName: "-"}, - want: controllerapi.BuildOptions{DockerfileName: "-"}, + name: "dockerfilename-dash", + options: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{DockerfileName: "-"}, + }, + want: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{DockerfileName: "-"}, + }, }, { name: "contexts", - options: controllerapi.BuildOptions{NamedContexts: map[string]string{"a": "test1", "b": "test2", - "alpine": "docker-image://alpine@sha256:0123456789", "project": "https://github.com/myuser/project.git"}}, - want: controllerapi.BuildOptions{NamedContexts: map[string]string{"a": filepath.Join(tmpwd, "test1"), "b": filepath.Join(tmpwd, "test2"), - "alpine": "docker-image://alpine@sha256:0123456789", "project": "https://github.com/myuser/project.git"}}, + options: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{NamedContexts: map[string]*controllerapi.NamedContext{ + "a": {Path: "test1"}, + "b": {Path: "test2"}, + "alpine": {Path: "docker-image://alpine@sha256:0123456789"}, + "project": {Path: "https://github.com/myuser/project.git"}, + }, + }}, + want: controllerapi.BuildOptions{ + Inputs: &controllerapi.Inputs{NamedContexts: map[string]*controllerapi.NamedContext{ + "a": {Path: filepath.Join(tmpwd, "test1")}, + "b": {Path: filepath.Join(tmpwd, "test2")}, + "alpine": {Path: "docker-image://alpine@sha256:0123456789"}, + "project": {Path: "https://github.com/myuser/project.git"}, + }, + }}, }, { name: "cache-from", diff --git a/controller/build/build.go b/controller/build/build.go index 12fa8580..f6196b58 100644 --- a/controller/build/build.go +++ b/controller/build/build.go @@ -29,6 +29,7 @@ import ( "github.com/docker/docker/pkg/ioutils" "github.com/docker/go-units" "github.com/moby/buildkit/client" + "github.com/moby/buildkit/client/llb" "github.com/moby/buildkit/session/auth/authprovider" "github.com/moby/buildkit/solver/errdefs" "github.com/moby/buildkit/util/grpcerrors" @@ -42,26 +43,82 @@ import ( const defaultTargetName = "default" func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.BuildOptions, inStream io.Reader, progressMode string, statusChan chan *client.SolveStatus) (*client.SolveResponse, *build.ResultContext, error) { + opts, err := ToBuildOpts(in, inStream) + if err != nil { + return nil, nil, err + } + + // key string used for kubernetes "sticky" mode + contextPathHash, err := filepath.Abs(in.Inputs.ContextPath) + if err != nil { + contextPathHash = in.Inputs.ContextPath + } + + b, err := builder.New(dockerCli, + builder.WithName(in.Opts.Builder), + builder.WithContextPathHash(contextPathHash), + ) + if err != nil { + return nil, nil, err + } + if err = updateLastActivity(dockerCli, b.NodeGroup); err != nil { + return nil, nil, errors.Wrapf(err, "failed to update builder last activity time") + } + nodes, err := b.LoadNodes(ctx, false) + if err != nil { + return nil, nil, err + } + + resp, res, err := buildTargets(ctx, dockerCli, b.NodeGroup, nodes, map[string]build.Options{defaultTargetName: *opts}, progressMode, in.Opts.MetadataFile, statusChan) + err = wrapBuildError(err, false) + if err != nil { + return nil, nil, err + } + return resp, res, nil +} + +func ToBuildOpts(in controllerapi.BuildOptions, inStream io.Reader) (*build.Options, error) { if in.Opts.NoCache && len(in.NoCacheFilter) > 0 { - return nil, nil, errors.Errorf("--no-cache and --no-cache-filter cannot currently be used together") + return nil, errors.Errorf("--no-cache and --no-cache-filter cannot currently be used together") + } + + var context *llb.State + if in.Inputs.ContextDefinition != nil { + defop, err := llb.NewDefinitionOp(in.Inputs.ContextDefinition) + if err != nil { + return nil, err + } + st := llb.NewState(defop) + context = &st } contexts := map[string]build.NamedContext{} - for name, path := range in.NamedContexts { - contexts[name] = build.NamedContext{Path: path} + for name, context := range in.Inputs.NamedContexts { + if context.Definition != nil { + defop, err := llb.NewDefinitionOp(context.Definition) + if err != nil { + return nil, err + } + st := llb.NewState(defop) + contexts[name] = build.NamedContext{State: &st} + } else { + contexts[name] = build.NamedContext{Path: context.Path} + } } printFunc, err := parsePrintFunc(in.PrintFunc) if err != nil { - return nil, nil, err + return nil, err } opts := build.Options{ Inputs: build.Inputs{ - ContextPath: in.ContextPath, - DockerfilePath: in.DockerfileName, - InStream: inStream, - NamedContexts: contexts, + ContextPath: in.Inputs.ContextPath, + DockerfilePath: in.Inputs.DockerfileName, + DockerfileInline: in.Inputs.DockerfileInline, + ContextState: context, + InStream: inStream, + NamedContexts: contexts, }, BuildArgs: in.BuildArgs, ExtraHosts: in.ExtraHosts, @@ -79,7 +136,7 @@ func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.Build platforms, err := platformutil.Parse(in.Platforms) if err != nil { - return nil, nil, err + return nil, err } opts.Platforms = platforms @@ -88,27 +145,27 @@ func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.Build secrets, err := controllerapi.CreateSecrets(in.Secrets) if err != nil { - return nil, nil, err + return nil, err } opts.Session = append(opts.Session, secrets) sshSpecs := in.SSH - if len(sshSpecs) == 0 && buildflags.IsGitSSH(in.ContextPath) { + if len(sshSpecs) == 0 && buildflags.IsGitSSH(in.Inputs.ContextPath) { sshSpecs = append(sshSpecs, &controllerapi.SSH{ID: "default"}) } ssh, err := controllerapi.CreateSSH(sshSpecs) if err != nil { - return nil, nil, err + return nil, err } opts.Session = append(opts.Session, ssh) outputs, err := controllerapi.CreateExports(in.Exports) if err != nil { - return nil, nil, err + return nil, err } if in.Opts.ExportPush { if in.Opts.ExportLoad { - return nil, nil, errors.Errorf("push and load may not be set together at the moment") + return nil, errors.Errorf("push and load may not be set together at the moment") } if len(outputs) == 0 { outputs = []client.ExportEntry{{ @@ -122,7 +179,7 @@ func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.Build case "image": outputs[0].Attrs["push"] = "true" default: - return nil, nil, errors.Errorf("push and %q output can't be used together", outputs[0].Type) + return nil, errors.Errorf("push and %q output can't be used together", outputs[0].Type) } } } @@ -136,7 +193,7 @@ func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.Build switch outputs[0].Type { case "docker": default: - return nil, nil, errors.Errorf("load and %q output can't be used together", outputs[0].Type) + return nil, errors.Errorf("load and %q output can't be used together", outputs[0].Type) } } } @@ -149,37 +206,11 @@ func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.Build allow, err := buildflags.ParseEntitlements(in.Allow) if err != nil { - return nil, nil, err + return nil, err } opts.Allow = allow - // key string used for kubernetes "sticky" mode - contextPathHash, err := filepath.Abs(in.ContextPath) - if err != nil { - contextPathHash = in.ContextPath - } - - b, err := builder.New(dockerCli, - builder.WithName(in.Opts.Builder), - builder.WithContextPathHash(contextPathHash), - ) - if err != nil { - return nil, nil, err - } - if err = updateLastActivity(dockerCli, b.NodeGroup); err != nil { - return nil, nil, errors.Wrapf(err, "failed to update builder last activity time") - } - nodes, err := b.LoadNodes(ctx, false) - if err != nil { - return nil, nil, err - } - - resp, res, err := buildTargets(ctx, dockerCli, b.NodeGroup, nodes, map[string]build.Options{defaultTargetName: opts}, progressMode, in.Opts.MetadataFile, statusChan) - err = wrapBuildError(err, false) - if err != nil { - return nil, nil, err - } - return resp, res, nil + return &opts, nil } func buildTargets(ctx context.Context, dockerCli command.Cli, ng *store.NodeGroup, nodes []builder.Node, opts map[string]build.Options, progressMode string, metadataFile string, statusChan chan *client.SolveStatus) (*client.SolveResponse, *build.ResultContext, error) { diff --git a/controller/pb/controller.pb.go b/controller/pb/controller.pb.go index ec675210..ab8708fb 100644 --- a/controller/pb/controller.pb.go +++ b/controller/pb/controller.pb.go @@ -8,6 +8,7 @@ import ( fmt "fmt" proto "github.com/gogo/protobuf/proto" control "github.com/moby/buildkit/api/services/control" + pb "github.com/moby/buildkit/solver/pb" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -269,30 +270,98 @@ func (m *BuildRequest) GetOptions() *BuildOptions { return nil } +type Inputs struct { + ContextPath string `protobuf:"bytes,1,opt,name=ContextPath,proto3" json:"ContextPath,omitempty"` + DockerfileName string `protobuf:"bytes,2,opt,name=DockerfileName,proto3" json:"DockerfileName,omitempty"` + DockerfileInline string `protobuf:"bytes,3,opt,name=DockerfileInline,proto3" json:"DockerfileInline,omitempty"` + ContextDefinition *pb.Definition `protobuf:"bytes,4,opt,name=ContextDefinition,proto3" json:"ContextDefinition,omitempty"` + NamedContexts map[string]*NamedContext `protobuf:"bytes,5,rep,name=NamedContexts,proto3" json:"NamedContexts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Inputs) Reset() { *m = Inputs{} } +func (m *Inputs) String() string { return proto.CompactTextString(m) } +func (*Inputs) ProtoMessage() {} +func (*Inputs) Descriptor() ([]byte, []int) { + return fileDescriptor_ed7f10298fa1d90f, []int{6} +} +func (m *Inputs) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Inputs.Unmarshal(m, b) +} +func (m *Inputs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Inputs.Marshal(b, m, deterministic) +} +func (m *Inputs) XXX_Merge(src proto.Message) { + xxx_messageInfo_Inputs.Merge(m, src) +} +func (m *Inputs) XXX_Size() int { + return xxx_messageInfo_Inputs.Size(m) +} +func (m *Inputs) XXX_DiscardUnknown() { + xxx_messageInfo_Inputs.DiscardUnknown(m) +} + +var xxx_messageInfo_Inputs proto.InternalMessageInfo + +func (m *Inputs) GetContextPath() string { + if m != nil { + return m.ContextPath + } + return "" +} + +func (m *Inputs) GetDockerfileName() string { + if m != nil { + return m.DockerfileName + } + return "" +} + +func (m *Inputs) GetDockerfileInline() string { + if m != nil { + return m.DockerfileInline + } + return "" +} + +func (m *Inputs) GetContextDefinition() *pb.Definition { + if m != nil { + return m.ContextDefinition + } + return nil +} + +func (m *Inputs) GetNamedContexts() map[string]*NamedContext { + if m != nil { + return m.NamedContexts + } + return nil +} + type BuildOptions struct { - ContextPath string `protobuf:"bytes,1,opt,name=ContextPath,proto3" json:"ContextPath,omitempty"` - DockerfileName string `protobuf:"bytes,2,opt,name=DockerfileName,proto3" json:"DockerfileName,omitempty"` - PrintFunc string `protobuf:"bytes,3,opt,name=PrintFunc,proto3" json:"PrintFunc,omitempty"` - NamedContexts map[string]string `protobuf:"bytes,4,rep,name=NamedContexts,proto3" json:"NamedContexts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Allow []string `protobuf:"bytes,5,rep,name=Allow,proto3" json:"Allow,omitempty"` - Attests []*Attest `protobuf:"bytes,6,rep,name=Attests,proto3" json:"Attests,omitempty"` - BuildArgs map[string]string `protobuf:"bytes,7,rep,name=BuildArgs,proto3" json:"BuildArgs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - CacheFrom []*CacheOptionsEntry `protobuf:"bytes,8,rep,name=CacheFrom,proto3" json:"CacheFrom,omitempty"` - CacheTo []*CacheOptionsEntry `protobuf:"bytes,9,rep,name=CacheTo,proto3" json:"CacheTo,omitempty"` - CgroupParent string `protobuf:"bytes,10,opt,name=CgroupParent,proto3" json:"CgroupParent,omitempty"` - Exports []*ExportEntry `protobuf:"bytes,11,rep,name=Exports,proto3" json:"Exports,omitempty"` - ExtraHosts []string `protobuf:"bytes,12,rep,name=ExtraHosts,proto3" json:"ExtraHosts,omitempty"` - Labels map[string]string `protobuf:"bytes,13,rep,name=Labels,proto3" json:"Labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - NetworkMode string `protobuf:"bytes,14,opt,name=NetworkMode,proto3" json:"NetworkMode,omitempty"` - NoCacheFilter []string `protobuf:"bytes,15,rep,name=NoCacheFilter,proto3" json:"NoCacheFilter,omitempty"` - Platforms []string `protobuf:"bytes,16,rep,name=Platforms,proto3" json:"Platforms,omitempty"` - Secrets []*Secret `protobuf:"bytes,17,rep,name=Secrets,proto3" json:"Secrets,omitempty"` - ShmSize int64 `protobuf:"varint,18,opt,name=ShmSize,proto3" json:"ShmSize,omitempty"` - SSH []*SSH `protobuf:"bytes,19,rep,name=SSH,proto3" json:"SSH,omitempty"` - Tags []string `protobuf:"bytes,20,rep,name=Tags,proto3" json:"Tags,omitempty"` - Target string `protobuf:"bytes,21,opt,name=Target,proto3" json:"Target,omitempty"` - Ulimits *UlimitOpt `protobuf:"bytes,22,opt,name=Ulimits,proto3" json:"Ulimits,omitempty"` - Opts *CommonOptions `protobuf:"bytes,24,opt,name=Opts,proto3" json:"Opts,omitempty"` + Inputs *Inputs `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"` + PrintFunc string `protobuf:"bytes,2,opt,name=PrintFunc,proto3" json:"PrintFunc,omitempty"` + Allow []string `protobuf:"bytes,3,rep,name=Allow,proto3" json:"Allow,omitempty"` + Attests []*Attest `protobuf:"bytes,4,rep,name=Attests,proto3" json:"Attests,omitempty"` + BuildArgs map[string]string `protobuf:"bytes,5,rep,name=BuildArgs,proto3" json:"BuildArgs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CacheFrom []*CacheOptionsEntry `protobuf:"bytes,6,rep,name=CacheFrom,proto3" json:"CacheFrom,omitempty"` + CacheTo []*CacheOptionsEntry `protobuf:"bytes,7,rep,name=CacheTo,proto3" json:"CacheTo,omitempty"` + CgroupParent string `protobuf:"bytes,8,opt,name=CgroupParent,proto3" json:"CgroupParent,omitempty"` + Exports []*ExportEntry `protobuf:"bytes,9,rep,name=Exports,proto3" json:"Exports,omitempty"` + ExtraHosts []string `protobuf:"bytes,10,rep,name=ExtraHosts,proto3" json:"ExtraHosts,omitempty"` + Labels map[string]string `protobuf:"bytes,11,rep,name=Labels,proto3" json:"Labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + NetworkMode string `protobuf:"bytes,12,opt,name=NetworkMode,proto3" json:"NetworkMode,omitempty"` + NoCacheFilter []string `protobuf:"bytes,13,rep,name=NoCacheFilter,proto3" json:"NoCacheFilter,omitempty"` + Platforms []string `protobuf:"bytes,14,rep,name=Platforms,proto3" json:"Platforms,omitempty"` + Secrets []*Secret `protobuf:"bytes,15,rep,name=Secrets,proto3" json:"Secrets,omitempty"` + ShmSize int64 `protobuf:"varint,16,opt,name=ShmSize,proto3" json:"ShmSize,omitempty"` + SSH []*SSH `protobuf:"bytes,17,rep,name=SSH,proto3" json:"SSH,omitempty"` + Tags []string `protobuf:"bytes,18,rep,name=Tags,proto3" json:"Tags,omitempty"` + Target string `protobuf:"bytes,19,opt,name=Target,proto3" json:"Target,omitempty"` + Ulimits *UlimitOpt `protobuf:"bytes,20,opt,name=Ulimits,proto3" json:"Ulimits,omitempty"` + Opts *CommonOptions `protobuf:"bytes,21,opt,name=Opts,proto3" json:"Opts,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -302,7 +371,7 @@ func (m *BuildOptions) Reset() { *m = BuildOptions{} } func (m *BuildOptions) String() string { return proto.CompactTextString(m) } func (*BuildOptions) ProtoMessage() {} func (*BuildOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{6} + return fileDescriptor_ed7f10298fa1d90f, []int{7} } func (m *BuildOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BuildOptions.Unmarshal(m, b) @@ -322,18 +391,11 @@ func (m *BuildOptions) XXX_DiscardUnknown() { var xxx_messageInfo_BuildOptions proto.InternalMessageInfo -func (m *BuildOptions) GetContextPath() string { - if m != nil { - return m.ContextPath - } - return "" -} - -func (m *BuildOptions) GetDockerfileName() string { +func (m *BuildOptions) GetInputs() *Inputs { if m != nil { - return m.DockerfileName + return m.Inputs } - return "" + return nil } func (m *BuildOptions) GetPrintFunc() string { @@ -343,13 +405,6 @@ func (m *BuildOptions) GetPrintFunc() string { return "" } -func (m *BuildOptions) GetNamedContexts() map[string]string { - if m != nil { - return m.NamedContexts - } - return nil -} - func (m *BuildOptions) GetAllow() []string { if m != nil { return m.Allow @@ -496,7 +551,7 @@ func (m *ExportEntry) Reset() { *m = ExportEntry{} } func (m *ExportEntry) String() string { return proto.CompactTextString(m) } func (*ExportEntry) ProtoMessage() {} func (*ExportEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{7} + return fileDescriptor_ed7f10298fa1d90f, []int{8} } func (m *ExportEntry) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExportEntry.Unmarshal(m, b) @@ -549,7 +604,7 @@ func (m *CacheOptionsEntry) Reset() { *m = CacheOptionsEntry{} } func (m *CacheOptionsEntry) String() string { return proto.CompactTextString(m) } func (*CacheOptionsEntry) ProtoMessage() {} func (*CacheOptionsEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{8} + return fileDescriptor_ed7f10298fa1d90f, []int{9} } func (m *CacheOptionsEntry) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CacheOptionsEntry.Unmarshal(m, b) @@ -596,7 +651,7 @@ func (m *Attest) Reset() { *m = Attest{} } func (m *Attest) String() string { return proto.CompactTextString(m) } func (*Attest) ProtoMessage() {} func (*Attest) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{9} + return fileDescriptor_ed7f10298fa1d90f, []int{10} } func (m *Attest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Attest.Unmarshal(m, b) @@ -649,7 +704,7 @@ func (m *SSH) Reset() { *m = SSH{} } func (m *SSH) String() string { return proto.CompactTextString(m) } func (*SSH) ProtoMessage() {} func (*SSH) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{10} + return fileDescriptor_ed7f10298fa1d90f, []int{11} } func (m *SSH) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SSH.Unmarshal(m, b) @@ -696,7 +751,7 @@ func (m *Secret) Reset() { *m = Secret{} } func (m *Secret) String() string { return proto.CompactTextString(m) } func (*Secret) ProtoMessage() {} func (*Secret) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{11} + return fileDescriptor_ed7f10298fa1d90f, []int{12} } func (m *Secret) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Secret.Unmarshal(m, b) @@ -737,6 +792,52 @@ func (m *Secret) GetEnv() string { return "" } +type NamedContext struct { + Path string `protobuf:"bytes,1,opt,name=Path,proto3" json:"Path,omitempty"` + Definition *pb.Definition `protobuf:"bytes,2,opt,name=Definition,proto3" json:"Definition,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NamedContext) Reset() { *m = NamedContext{} } +func (m *NamedContext) String() string { return proto.CompactTextString(m) } +func (*NamedContext) ProtoMessage() {} +func (*NamedContext) Descriptor() ([]byte, []int) { + return fileDescriptor_ed7f10298fa1d90f, []int{13} +} +func (m *NamedContext) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NamedContext.Unmarshal(m, b) +} +func (m *NamedContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NamedContext.Marshal(b, m, deterministic) +} +func (m *NamedContext) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamedContext.Merge(m, src) +} +func (m *NamedContext) XXX_Size() int { + return xxx_messageInfo_NamedContext.Size(m) +} +func (m *NamedContext) XXX_DiscardUnknown() { + xxx_messageInfo_NamedContext.DiscardUnknown(m) +} + +var xxx_messageInfo_NamedContext proto.InternalMessageInfo + +func (m *NamedContext) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *NamedContext) GetDefinition() *pb.Definition { + if m != nil { + return m.Definition + } + return nil +} + type UlimitOpt struct { Values map[string]*Ulimit `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -748,7 +849,7 @@ func (m *UlimitOpt) Reset() { *m = UlimitOpt{} } func (m *UlimitOpt) String() string { return proto.CompactTextString(m) } func (*UlimitOpt) ProtoMessage() {} func (*UlimitOpt) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{12} + return fileDescriptor_ed7f10298fa1d90f, []int{14} } func (m *UlimitOpt) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UlimitOpt.Unmarshal(m, b) @@ -788,7 +889,7 @@ func (m *Ulimit) Reset() { *m = Ulimit{} } func (m *Ulimit) String() string { return proto.CompactTextString(m) } func (*Ulimit) ProtoMessage() {} func (*Ulimit) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{13} + return fileDescriptor_ed7f10298fa1d90f, []int{15} } func (m *Ulimit) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Ulimit.Unmarshal(m, b) @@ -834,9 +935,14 @@ type CommonOptions struct { MetadataFile string `protobuf:"bytes,2,opt,name=MetadataFile,proto3" json:"MetadataFile,omitempty"` NoCache bool `protobuf:"varint,3,opt,name=NoCache,proto3" json:"NoCache,omitempty"` // string Progress: no progress view on server side - Pull bool `protobuf:"varint,4,opt,name=Pull,proto3" json:"Pull,omitempty"` - ExportPush bool `protobuf:"varint,5,opt,name=ExportPush,proto3" json:"ExportPush,omitempty"` - ExportLoad bool `protobuf:"varint,6,opt,name=ExportLoad,proto3" json:"ExportLoad,omitempty"` + Pull bool `protobuf:"varint,4,opt,name=Pull,proto3" json:"Pull,omitempty"` + ExportPush bool `protobuf:"varint,5,opt,name=ExportPush,proto3" json:"ExportPush,omitempty"` + ExportLoad bool `protobuf:"varint,6,opt,name=ExportLoad,proto3" json:"ExportLoad,omitempty"` + // TODO: we should remove Linked from the controllerapi, it's only used to + // produce a single warning. To allow this, we need to move the default + // export detection out from the controller server, as well as load the + // driver on the controller client. + Linked bool `protobuf:"varint,7,opt,name=Linked,proto3" json:"Linked,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -846,7 +952,7 @@ func (m *CommonOptions) Reset() { *m = CommonOptions{} } func (m *CommonOptions) String() string { return proto.CompactTextString(m) } func (*CommonOptions) ProtoMessage() {} func (*CommonOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{14} + return fileDescriptor_ed7f10298fa1d90f, []int{16} } func (m *CommonOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonOptions.Unmarshal(m, b) @@ -908,6 +1014,13 @@ func (m *CommonOptions) GetExportLoad() bool { return false } +func (m *CommonOptions) GetLinked() bool { + if m != nil { + return m.Linked + } + return false +} + type BuildResponse struct { ExporterResponse map[string]string `protobuf:"bytes,1,rep,name=ExporterResponse,proto3" json:"ExporterResponse,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -919,7 +1032,7 @@ func (m *BuildResponse) Reset() { *m = BuildResponse{} } func (m *BuildResponse) String() string { return proto.CompactTextString(m) } func (*BuildResponse) ProtoMessage() {} func (*BuildResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{15} + return fileDescriptor_ed7f10298fa1d90f, []int{17} } func (m *BuildResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BuildResponse.Unmarshal(m, b) @@ -957,7 +1070,7 @@ func (m *DisconnectRequest) Reset() { *m = DisconnectRequest{} } func (m *DisconnectRequest) String() string { return proto.CompactTextString(m) } func (*DisconnectRequest) ProtoMessage() {} func (*DisconnectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{16} + return fileDescriptor_ed7f10298fa1d90f, []int{18} } func (m *DisconnectRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DisconnectRequest.Unmarshal(m, b) @@ -994,7 +1107,7 @@ func (m *DisconnectResponse) Reset() { *m = DisconnectResponse{} } func (m *DisconnectResponse) String() string { return proto.CompactTextString(m) } func (*DisconnectResponse) ProtoMessage() {} func (*DisconnectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{17} + return fileDescriptor_ed7f10298fa1d90f, []int{19} } func (m *DisconnectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DisconnectResponse.Unmarshal(m, b) @@ -1025,7 +1138,7 @@ func (m *ListRequest) Reset() { *m = ListRequest{} } func (m *ListRequest) String() string { return proto.CompactTextString(m) } func (*ListRequest) ProtoMessage() {} func (*ListRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{18} + return fileDescriptor_ed7f10298fa1d90f, []int{20} } func (m *ListRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListRequest.Unmarshal(m, b) @@ -1063,7 +1176,7 @@ func (m *ListResponse) Reset() { *m = ListResponse{} } func (m *ListResponse) String() string { return proto.CompactTextString(m) } func (*ListResponse) ProtoMessage() {} func (*ListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{19} + return fileDescriptor_ed7f10298fa1d90f, []int{21} } func (m *ListResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListResponse.Unmarshal(m, b) @@ -1104,7 +1217,7 @@ func (m *InputMessage) Reset() { *m = InputMessage{} } func (m *InputMessage) String() string { return proto.CompactTextString(m) } func (*InputMessage) ProtoMessage() {} func (*InputMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{20} + return fileDescriptor_ed7f10298fa1d90f, []int{22} } func (m *InputMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InputMessage.Unmarshal(m, b) @@ -1178,7 +1291,7 @@ func (m *InputInitMessage) Reset() { *m = InputInitMessage{} } func (m *InputInitMessage) String() string { return proto.CompactTextString(m) } func (*InputInitMessage) ProtoMessage() {} func (*InputInitMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{21} + return fileDescriptor_ed7f10298fa1d90f, []int{23} } func (m *InputInitMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InputInitMessage.Unmarshal(m, b) @@ -1217,7 +1330,7 @@ func (m *DataMessage) Reset() { *m = DataMessage{} } func (m *DataMessage) String() string { return proto.CompactTextString(m) } func (*DataMessage) ProtoMessage() {} func (*DataMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{22} + return fileDescriptor_ed7f10298fa1d90f, []int{24} } func (m *DataMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DataMessage.Unmarshal(m, b) @@ -1261,7 +1374,7 @@ func (m *InputResponse) Reset() { *m = InputResponse{} } func (m *InputResponse) String() string { return proto.CompactTextString(m) } func (*InputResponse) ProtoMessage() {} func (*InputResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{23} + return fileDescriptor_ed7f10298fa1d90f, []int{25} } func (m *InputResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InputResponse.Unmarshal(m, b) @@ -1297,7 +1410,7 @@ func (m *Message) Reset() { *m = Message{} } func (m *Message) String() string { return proto.CompactTextString(m) } func (*Message) ProtoMessage() {} func (*Message) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{24} + return fileDescriptor_ed7f10298fa1d90f, []int{26} } func (m *Message) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Message.Unmarshal(m, b) @@ -1399,7 +1512,7 @@ func (m *InitMessage) Reset() { *m = InitMessage{} } func (m *InitMessage) String() string { return proto.CompactTextString(m) } func (*InitMessage) ProtoMessage() {} func (*InitMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{25} + return fileDescriptor_ed7f10298fa1d90f, []int{27} } func (m *InitMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InitMessage.Unmarshal(m, b) @@ -1459,7 +1572,7 @@ func (m *InvokeConfig) Reset() { *m = InvokeConfig{} } func (m *InvokeConfig) String() string { return proto.CompactTextString(m) } func (*InvokeConfig) ProtoMessage() {} func (*InvokeConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{26} + return fileDescriptor_ed7f10298fa1d90f, []int{28} } func (m *InvokeConfig) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvokeConfig.Unmarshal(m, b) @@ -1555,7 +1668,7 @@ func (m *FdMessage) Reset() { *m = FdMessage{} } func (m *FdMessage) String() string { return proto.CompactTextString(m) } func (*FdMessage) ProtoMessage() {} func (*FdMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{27} + return fileDescriptor_ed7f10298fa1d90f, []int{29} } func (m *FdMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FdMessage.Unmarshal(m, b) @@ -1608,7 +1721,7 @@ func (m *ResizeMessage) Reset() { *m = ResizeMessage{} } func (m *ResizeMessage) String() string { return proto.CompactTextString(m) } func (*ResizeMessage) ProtoMessage() {} func (*ResizeMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{28} + return fileDescriptor_ed7f10298fa1d90f, []int{30} } func (m *ResizeMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResizeMessage.Unmarshal(m, b) @@ -1655,7 +1768,7 @@ func (m *SignalMessage) Reset() { *m = SignalMessage{} } func (m *SignalMessage) String() string { return proto.CompactTextString(m) } func (*SignalMessage) ProtoMessage() {} func (*SignalMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{29} + return fileDescriptor_ed7f10298fa1d90f, []int{31} } func (m *SignalMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalMessage.Unmarshal(m, b) @@ -1693,7 +1806,7 @@ func (m *StatusRequest) Reset() { *m = StatusRequest{} } func (m *StatusRequest) String() string { return proto.CompactTextString(m) } func (*StatusRequest) ProtoMessage() {} func (*StatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{30} + return fileDescriptor_ed7f10298fa1d90f, []int{32} } func (m *StatusRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StatusRequest.Unmarshal(m, b) @@ -1734,7 +1847,7 @@ func (m *StatusResponse) Reset() { *m = StatusResponse{} } func (m *StatusResponse) String() string { return proto.CompactTextString(m) } func (*StatusResponse) ProtoMessage() {} func (*StatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{31} + return fileDescriptor_ed7f10298fa1d90f, []int{33} } func (m *StatusResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StatusResponse.Unmarshal(m, b) @@ -1792,7 +1905,7 @@ func (m *InfoRequest) Reset() { *m = InfoRequest{} } func (m *InfoRequest) String() string { return proto.CompactTextString(m) } func (*InfoRequest) ProtoMessage() {} func (*InfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{32} + return fileDescriptor_ed7f10298fa1d90f, []int{34} } func (m *InfoRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InfoRequest.Unmarshal(m, b) @@ -1823,7 +1936,7 @@ func (m *InfoResponse) Reset() { *m = InfoResponse{} } func (m *InfoResponse) String() string { return proto.CompactTextString(m) } func (*InfoResponse) ProtoMessage() {} func (*InfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{33} + return fileDescriptor_ed7f10298fa1d90f, []int{35} } func (m *InfoResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InfoResponse.Unmarshal(m, b) @@ -1863,7 +1976,7 @@ func (m *BuildxVersion) Reset() { *m = BuildxVersion{} } func (m *BuildxVersion) String() string { return proto.CompactTextString(m) } func (*BuildxVersion) ProtoMessage() {} func (*BuildxVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_ed7f10298fa1d90f, []int{34} + return fileDescriptor_ed7f10298fa1d90f, []int{36} } func (m *BuildxVersion) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BuildxVersion.Unmarshal(m, b) @@ -1911,10 +2024,11 @@ func init() { proto.RegisterType((*DisconnectProcessRequest)(nil), "buildx.controller.v1.DisconnectProcessRequest") proto.RegisterType((*DisconnectProcessResponse)(nil), "buildx.controller.v1.DisconnectProcessResponse") proto.RegisterType((*BuildRequest)(nil), "buildx.controller.v1.BuildRequest") + proto.RegisterType((*Inputs)(nil), "buildx.controller.v1.Inputs") + proto.RegisterMapType((map[string]*NamedContext)(nil), "buildx.controller.v1.Inputs.NamedContextsEntry") proto.RegisterType((*BuildOptions)(nil), "buildx.controller.v1.BuildOptions") proto.RegisterMapType((map[string]string)(nil), "buildx.controller.v1.BuildOptions.BuildArgsEntry") proto.RegisterMapType((map[string]string)(nil), "buildx.controller.v1.BuildOptions.LabelsEntry") - proto.RegisterMapType((map[string]string)(nil), "buildx.controller.v1.BuildOptions.NamedContextsEntry") proto.RegisterType((*ExportEntry)(nil), "buildx.controller.v1.ExportEntry") proto.RegisterMapType((map[string]string)(nil), "buildx.controller.v1.ExportEntry.AttrsEntry") proto.RegisterType((*CacheOptionsEntry)(nil), "buildx.controller.v1.CacheOptionsEntry") @@ -1922,6 +2036,7 @@ func init() { proto.RegisterType((*Attest)(nil), "buildx.controller.v1.Attest") proto.RegisterType((*SSH)(nil), "buildx.controller.v1.SSH") proto.RegisterType((*Secret)(nil), "buildx.controller.v1.Secret") + proto.RegisterType((*NamedContext)(nil), "buildx.controller.v1.NamedContext") proto.RegisterType((*UlimitOpt)(nil), "buildx.controller.v1.UlimitOpt") proto.RegisterMapType((map[string]*Ulimit)(nil), "buildx.controller.v1.UlimitOpt.ValuesEntry") proto.RegisterType((*Ulimit)(nil), "buildx.controller.v1.Ulimit") @@ -1952,119 +2067,127 @@ func init() { func init() { proto.RegisterFile("controller.proto", fileDescriptor_ed7f10298fa1d90f) } var fileDescriptor_ed7f10298fa1d90f = []byte{ - // 1790 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xcd, 0x6e, 0x23, 0xc7, - 0x11, 0xce, 0x90, 0x14, 0x7f, 0x8a, 0xa2, 0xac, 0xed, 0x68, 0x8d, 0x31, 0xed, 0x78, 0xb5, 0xb3, - 0x1b, 0x87, 0xc8, 0x06, 0x94, 0x2d, 0xc7, 0x59, 0xaf, 0x77, 0x03, 0x44, 0xa2, 0x44, 0x48, 0xc6, - 0xea, 0x07, 0x4d, 0xed, 0x1a, 0x49, 0x80, 0x18, 0x43, 0xb2, 0x45, 0x0d, 0x38, 0x9c, 0x66, 0xa6, - 0x9b, 0x94, 0x98, 0x53, 0x2e, 0xbe, 0xe6, 0x3d, 0x82, 0x5c, 0x73, 0xcb, 0x29, 0xef, 0x90, 0x07, - 0xc9, 0x23, 0x04, 0x5d, 0xdd, 0x33, 0x9c, 0x11, 0x39, 0x94, 0x14, 0x9f, 0xd8, 0x55, 0xf3, 0x55, - 0x55, 0x57, 0x75, 0xfd, 0x74, 0x13, 0x36, 0x7b, 0x3c, 0x90, 0x21, 0xf7, 0x7d, 0x16, 0x36, 0xc7, - 0x21, 0x97, 0x9c, 0x6c, 0x75, 0x27, 0x9e, 0xdf, 0xbf, 0x69, 0x26, 0x3e, 0x4c, 0xbf, 0xa8, 0xbf, - 0x1e, 0x78, 0xf2, 0x6a, 0xd2, 0x6d, 0xf6, 0xf8, 0x68, 0x67, 0xc4, 0xbb, 0xb3, 0x1d, 0x44, 0x0d, - 0x3d, 0xb9, 0xe3, 0x8e, 0xbd, 0x1d, 0xc1, 0xc2, 0xa9, 0xd7, 0x63, 0x62, 0xc7, 0x08, 0x45, 0xbf, - 0x5a, 0xa5, 0xd3, 0x80, 0xad, 0xb7, 0x9e, 0x90, 0xe7, 0x21, 0xef, 0x31, 0x21, 0x98, 0xa0, 0xec, - 0xcf, 0x13, 0x26, 0x24, 0xd9, 0x84, 0x3c, 0x65, 0x97, 0xb6, 0xb5, 0x6d, 0x35, 0x2a, 0x54, 0x2d, - 0x9d, 0x73, 0x78, 0x7c, 0x0b, 0x29, 0xc6, 0x3c, 0x10, 0x8c, 0xbc, 0x84, 0xb5, 0xe3, 0xe0, 0x92, - 0x0b, 0xdb, 0xda, 0xce, 0x37, 0xaa, 0xbb, 0x4f, 0x9b, 0xcb, 0x76, 0xd9, 0x34, 0x72, 0x0a, 0x49, - 0x35, 0xde, 0x11, 0x50, 0x4d, 0x70, 0xc9, 0x27, 0x50, 0x89, 0xc8, 0x03, 0x63, 0x78, 0xce, 0x20, - 0x6d, 0x58, 0x3f, 0x0e, 0xa6, 0x7c, 0xc8, 0x5a, 0x3c, 0xb8, 0xf4, 0x06, 0x76, 0x6e, 0xdb, 0x6a, - 0x54, 0x77, 0x9d, 0xe5, 0xc6, 0x92, 0x48, 0x9a, 0x92, 0x73, 0xbe, 0x05, 0xfb, 0xc0, 0x13, 0x3d, - 0x1e, 0x04, 0xac, 0x17, 0x39, 0x93, 0xe9, 0x74, 0x7a, 0x4f, 0xb9, 0x5b, 0x7b, 0x72, 0x3e, 0x86, - 0x8f, 0x96, 0xe8, 0xd2, 0x61, 0x71, 0xfe, 0x04, 0xeb, 0xfb, 0x6a, 0x6f, 0xd9, 0xca, 0xdf, 0x40, - 0xe9, 0x6c, 0x2c, 0x3d, 0x1e, 0x88, 0xd5, 0xde, 0xa0, 0x1a, 0x83, 0xa4, 0x91, 0x88, 0xf3, 0x03, - 0x18, 0x03, 0x86, 0x41, 0xb6, 0xa1, 0xda, 0xe2, 0x81, 0x64, 0x37, 0xf2, 0xdc, 0x95, 0x57, 0xc6, - 0x50, 0x92, 0x45, 0x3e, 0x83, 0x8d, 0x03, 0xde, 0x1b, 0xb2, 0xf0, 0xd2, 0xf3, 0xd9, 0xa9, 0x3b, - 0x62, 0xc6, 0xa5, 0x5b, 0x5c, 0xed, 0xb5, 0x17, 0xc8, 0xf6, 0x24, 0xe8, 0xd9, 0xf9, 0xc8, 0x6b, - 0xc3, 0x20, 0x7f, 0x84, 0x9a, 0x42, 0xf5, 0x8d, 0x66, 0x61, 0x17, 0xf0, 0xdc, 0xbf, 0xba, 0x7b, - 0xf3, 0xcd, 0x94, 0xdc, 0x61, 0x20, 0xc3, 0x19, 0x4d, 0xeb, 0x22, 0x5b, 0xb0, 0xb6, 0xe7, 0xfb, - 0xfc, 0xda, 0x5e, 0xdb, 0xce, 0x37, 0x2a, 0x54, 0x13, 0xe4, 0x37, 0x50, 0xda, 0x93, 0x92, 0x09, - 0x29, 0xec, 0x22, 0x1a, 0xfb, 0x64, 0xb9, 0x31, 0x0d, 0xa2, 0x11, 0x98, 0x9c, 0x41, 0x05, 0xed, - 0xef, 0x85, 0x03, 0x61, 0x97, 0x50, 0xf2, 0x8b, 0x7b, 0x6c, 0x33, 0x96, 0xd1, 0x5b, 0x9c, 0xeb, - 0x20, 0x87, 0x50, 0x69, 0xb9, 0xbd, 0x2b, 0xd6, 0x0e, 0xf9, 0xc8, 0x2e, 0xa3, 0xc2, 0x5f, 0x2c, - 0x57, 0x88, 0x30, 0xa3, 0xd0, 0xa8, 0x89, 0x25, 0xc9, 0x1e, 0x94, 0x90, 0xb8, 0xe0, 0x76, 0xe5, - 0x61, 0x4a, 0x22, 0x39, 0xe2, 0xc0, 0x7a, 0x6b, 0x10, 0xf2, 0xc9, 0xf8, 0xdc, 0x0d, 0x59, 0x20, - 0x6d, 0xc0, 0x63, 0x4a, 0xf1, 0xc8, 0x6b, 0x28, 0x1d, 0xde, 0x8c, 0x79, 0x28, 0x85, 0x5d, 0x5d, - 0x55, 0x9b, 0x1a, 0x64, 0x0c, 0x18, 0x09, 0xf2, 0x29, 0xc0, 0xe1, 0x8d, 0x0c, 0xdd, 0x23, 0xae, - 0xc2, 0xbe, 0x8e, 0xc7, 0x91, 0xe0, 0x90, 0x36, 0x14, 0xdf, 0xba, 0x5d, 0xe6, 0x0b, 0xbb, 0x86, - 0xba, 0x9b, 0xf7, 0x08, 0xac, 0x16, 0xd0, 0x86, 0x8c, 0xb4, 0x4a, 0xdb, 0x53, 0x26, 0xaf, 0x79, - 0x38, 0x3c, 0xe1, 0x7d, 0x66, 0x6f, 0xe8, 0xb4, 0x4d, 0xb0, 0xc8, 0x73, 0xa8, 0x9d, 0x72, 0x1d, - 0x3c, 0xcf, 0x97, 0x2c, 0xb4, 0x3f, 0xc0, 0xcd, 0xa4, 0x99, 0x98, 0xb4, 0xbe, 0x2b, 0x2f, 0x79, - 0x38, 0x12, 0xf6, 0x26, 0x22, 0xe6, 0x0c, 0x95, 0x41, 0x1d, 0xd6, 0x0b, 0x99, 0x14, 0xf6, 0xa3, - 0x55, 0x19, 0xa4, 0x41, 0x34, 0x02, 0x13, 0x1b, 0x4a, 0x9d, 0xab, 0x51, 0xc7, 0xfb, 0x0b, 0xb3, - 0xc9, 0xb6, 0xd5, 0xc8, 0xd3, 0x88, 0x24, 0x2f, 0x20, 0xdf, 0xe9, 0x1c, 0xd9, 0x3f, 0x45, 0x6d, - 0x1f, 0x65, 0x68, 0xeb, 0x1c, 0x51, 0x85, 0x22, 0x04, 0x0a, 0x17, 0xee, 0x40, 0xd8, 0x5b, 0xb8, - 0x2f, 0x5c, 0x93, 0x0f, 0xa1, 0x78, 0xe1, 0x86, 0x03, 0x26, 0xed, 0xc7, 0xe8, 0xb3, 0xa1, 0xc8, - 0x2b, 0x28, 0xbd, 0xf3, 0xbd, 0x91, 0x27, 0x85, 0xfd, 0x21, 0xb6, 0x85, 0x27, 0xcb, 0x95, 0x6b, - 0xd0, 0xd9, 0x58, 0xd2, 0x08, 0x4f, 0x5e, 0x42, 0xe1, 0x6c, 0x2c, 0x85, 0x6d, 0xa3, 0xdc, 0xb3, - 0x8c, 0xa4, 0xe2, 0xa3, 0x11, 0x0f, 0xa2, 0x7e, 0x82, 0x02, 0xf5, 0xdf, 0x01, 0x59, 0xac, 0x4d, - 0xd5, 0xb2, 0x86, 0x6c, 0x16, 0xb5, 0xac, 0x21, 0x9b, 0xa9, 0xf2, 0x9c, 0xba, 0xfe, 0x24, 0x6a, - 0x1c, 0x9a, 0xf8, 0x26, 0xf7, 0xb5, 0x55, 0x7f, 0x03, 0x1b, 0xe9, 0xb2, 0x79, 0x90, 0xf4, 0x2b, - 0xa8, 0x26, 0x72, 0xe3, 0x21, 0xa2, 0xce, 0xbf, 0x2d, 0xa8, 0x26, 0x12, 0x18, 0x43, 0x3d, 0x1b, - 0x33, 0x23, 0x8c, 0x6b, 0xb2, 0x0f, 0x6b, 0x7b, 0x52, 0x86, 0xaa, 0xcf, 0xaa, 0xd3, 0xfa, 0xd5, - 0x9d, 0x65, 0xd0, 0x44, 0xb8, 0x4e, 0x54, 0x2d, 0xaa, 0xf2, 0xf4, 0x80, 0x09, 0xe9, 0x05, 0xae, - 0x0a, 0x9c, 0x69, 0x8b, 0x49, 0x56, 0xfd, 0x6b, 0x80, 0xb9, 0xd8, 0x83, 0x7c, 0xf8, 0x87, 0x05, - 0x8f, 0x16, 0x6a, 0x7d, 0xa9, 0x27, 0x47, 0x69, 0x4f, 0x76, 0xef, 0xd9, 0x37, 0x16, 0xfd, 0xf9, - 0x11, 0xbb, 0x3d, 0x85, 0xa2, 0x6e, 0xb0, 0x4b, 0x77, 0x58, 0x87, 0xf2, 0x81, 0x27, 0xdc, 0xae, - 0xcf, 0xfa, 0x28, 0x5a, 0xa6, 0x31, 0x8d, 0xdd, 0x1d, 0x77, 0xaf, 0xa3, 0xa7, 0x09, 0x47, 0x57, - 0x12, 0xd9, 0x80, 0x5c, 0x3c, 0xf8, 0x73, 0xc7, 0x07, 0x0a, 0xac, 0xa6, 0x96, 0x76, 0xb5, 0x42, - 0x35, 0xe1, 0xb4, 0xa1, 0xa8, 0x6b, 0x73, 0x01, 0x5f, 0x87, 0x72, 0xdb, 0xf3, 0x19, 0x0e, 0x3f, - 0xbd, 0xe7, 0x98, 0x56, 0xee, 0x1d, 0x06, 0x53, 0x63, 0x56, 0x2d, 0x9d, 0xbf, 0x5b, 0x50, 0x89, - 0x2b, 0x88, 0xb4, 0xa0, 0x88, 0xfe, 0x45, 0x97, 0x98, 0x17, 0x77, 0x94, 0x5c, 0xf3, 0x3d, 0xa2, - 0x4d, 0x27, 0xd3, 0xa2, 0xf5, 0xef, 0xa0, 0x9a, 0x60, 0x2f, 0x09, 0xe9, 0x6e, 0x32, 0xa4, 0x99, - 0x2d, 0x48, 0x1b, 0x49, 0x06, 0xfc, 0x00, 0x8a, 0x9a, 0xa9, 0x02, 0x8e, 0x73, 0xdb, 0x04, 0x1c, - 0xa7, 0x35, 0x81, 0xc2, 0x91, 0x1b, 0xea, 0x60, 0xe7, 0x29, 0xae, 0x15, 0xaf, 0xc3, 0x2f, 0x25, - 0x3a, 0x9c, 0xa7, 0xb8, 0x76, 0xfe, 0x65, 0x41, 0x2d, 0x55, 0xfb, 0xaa, 0xb9, 0x61, 0xcd, 0xb2, - 0xd0, 0x28, 0x8c, 0x48, 0x35, 0x5d, 0x4e, 0x98, 0x74, 0xfb, 0xae, 0x74, 0x55, 0x0c, 0x4d, 0x3c, - 0x53, 0x3c, 0x25, 0x6d, 0x3a, 0x30, 0x9a, 0x29, 0xd3, 0x88, 0x54, 0xd6, 0xcf, 0x27, 0xbe, 0x6f, - 0x17, 0x90, 0x8d, 0x6b, 0x3d, 0x4e, 0x54, 0x7d, 0x9d, 0x4f, 0xc4, 0x95, 0xbd, 0x86, 0x5f, 0x12, - 0x9c, 0xf9, 0xf7, 0xb7, 0xdc, 0xed, 0xdb, 0xc5, 0xe4, 0x77, 0xc5, 0xc1, 0xdd, 0x9b, 0xfb, 0x94, - 0xb9, 0x77, 0x32, 0xd8, 0xd4, 0xdf, 0x59, 0x18, 0xf1, 0xcc, 0xe9, 0xbd, 0x5a, 0x31, 0x8a, 0x22, - 0x68, 0xf3, 0xb6, 0xac, 0x3e, 0xcb, 0x05, 0x95, 0xf5, 0x16, 0x3c, 0x5e, 0x0a, 0x7d, 0x50, 0xc9, - 0xfc, 0x1c, 0x1e, 0xcd, 0x6f, 0x8a, 0xd9, 0x77, 0xec, 0x2d, 0x20, 0x49, 0x98, 0xb9, 0x49, 0x3e, - 0x81, 0xaa, 0xba, 0x79, 0x67, 0x8b, 0x39, 0xb0, 0xae, 0x01, 0x26, 0x32, 0x04, 0x0a, 0x43, 0x36, - 0xd3, 0xb9, 0x5c, 0xa1, 0xb8, 0x76, 0xfe, 0x66, 0xa9, 0x0b, 0xf4, 0x78, 0x22, 0x4f, 0x98, 0x10, - 0xee, 0x80, 0x91, 0x37, 0x50, 0x38, 0x0e, 0x3c, 0x89, 0x7a, 0xaa, 0xbb, 0x9f, 0x65, 0x5d, 0xa4, - 0xc7, 0x13, 0xa9, 0x60, 0x46, 0xea, 0xe8, 0x27, 0x14, 0xa5, 0xd4, 0xa4, 0x39, 0x70, 0xa5, 0x6b, - 0x32, 0x39, 0xe3, 0x5e, 0xa1, 0x10, 0x09, 0x41, 0x45, 0xee, 0x97, 0xd4, 0x6b, 0x61, 0x3c, 0x91, - 0xce, 0x73, 0xd8, 0xbc, 0xad, 0x7d, 0x89, 0x6b, 0x5f, 0x42, 0x35, 0xa1, 0x05, 0xeb, 0xf8, 0xac, - 0x8d, 0x80, 0x32, 0x55, 0x4b, 0xe5, 0x6b, 0xbc, 0x91, 0x75, 0x6d, 0xc3, 0xf9, 0x00, 0x6a, 0xa8, - 0x3a, 0x8e, 0xe0, 0x5f, 0x73, 0x50, 0x8a, 0x54, 0xbc, 0x4c, 0xf9, 0xfd, 0x34, 0xcb, 0xef, 0x45, - 0x97, 0xbf, 0x82, 0x42, 0x5c, 0x0b, 0x99, 0x43, 0xb9, 0xdd, 0x4f, 0x88, 0x61, 0x99, 0xfc, 0x16, - 0x8a, 0x94, 0x09, 0x75, 0x81, 0xc8, 0xaf, 0x9a, 0xca, 0x1a, 0x33, 0x17, 0x36, 0x42, 0x4a, 0xbc, - 0xe3, 0x0d, 0x02, 0x57, 0x57, 0x53, 0xa6, 0xb8, 0xc6, 0x24, 0xc4, 0x35, 0x63, 0x1e, 0xee, 0x1f, - 0x2c, 0xa8, 0xae, 0x0c, 0xf5, 0xea, 0xb7, 0xce, 0xc2, 0xfb, 0x2b, 0xff, 0x7f, 0xbe, 0xbf, 0xfe, - 0x63, 0xa5, 0x15, 0x61, 0xe1, 0xab, 0x7a, 0x1a, 0x73, 0x2f, 0x90, 0x26, 0x65, 0x13, 0x1c, 0xb5, - 0xd1, 0xd6, 0xa8, 0x6f, 0x86, 0x80, 0x5a, 0xce, 0x9b, 0x79, 0xde, 0x34, 0x73, 0x95, 0x04, 0xef, - 0x04, 0x0b, 0x31, 0x44, 0x15, 0x8a, 0x6b, 0x75, 0xbd, 0x3a, 0xe5, 0xc8, 0xd5, 0xcd, 0xc6, 0x50, - 0xa8, 0xef, 0x5a, 0x77, 0x18, 0xa5, 0xef, 0x1a, 0xa7, 0xd2, 0x29, 0x57, 0xbc, 0x12, 0x02, 0x35, - 0xa1, 0x70, 0x17, 0x72, 0x66, 0x97, 0x75, 0xaa, 0x5d, 0xc8, 0x99, 0x1a, 0x30, 0x94, 0xfb, 0x7e, - 0xd7, 0xed, 0x0d, 0xed, 0x8a, 0x9e, 0x6c, 0x11, 0xed, 0xec, 0x41, 0x25, 0x3e, 0x7a, 0x35, 0x99, - 0xda, 0x7d, 0x0c, 0x6d, 0x8d, 0xe6, 0xda, 0xfd, 0x28, 0x6b, 0x73, 0x8b, 0x59, 0x9b, 0x4f, 0x64, - 0xed, 0x4b, 0xa8, 0xa5, 0x92, 0x40, 0x81, 0x28, 0xbf, 0x16, 0x46, 0x11, 0xae, 0x15, 0xaf, 0xc5, - 0x7d, 0xfd, 0x60, 0xac, 0x51, 0x5c, 0x3b, 0xcf, 0xa0, 0x96, 0x3a, 0xfe, 0x65, 0x53, 0xc2, 0x79, - 0x0a, 0xb5, 0x8e, 0x74, 0xe5, 0x64, 0xc5, 0x0b, 0xff, 0xbf, 0x16, 0x6c, 0x44, 0x18, 0xd3, 0x49, - 0x7e, 0x0d, 0xe5, 0x29, 0x0b, 0x25, 0xbb, 0x89, 0x27, 0xa3, 0xdd, 0x1c, 0xf1, 0xee, 0xac, 0x19, - 0xfd, 0xc7, 0xa0, 0x4e, 0xfb, 0x3d, 0x22, 0x68, 0x8c, 0x24, 0xdf, 0x40, 0x59, 0xa0, 0x1e, 0x16, - 0xdd, 0x53, 0x3e, 0xcd, 0x92, 0x32, 0xf6, 0x62, 0x3c, 0xd9, 0x81, 0x82, 0xcf, 0x07, 0x02, 0x4f, - 0xb7, 0xba, 0xfb, 0x71, 0x96, 0xdc, 0x5b, 0x3e, 0xa0, 0x08, 0x24, 0xaf, 0xa1, 0x7c, 0xed, 0x86, - 0x81, 0x17, 0x0c, 0xa2, 0x97, 0xe8, 0x93, 0x2c, 0xa1, 0xef, 0x34, 0x8e, 0xc6, 0x02, 0x4e, 0x4d, - 0x15, 0xc5, 0x25, 0x37, 0x31, 0x71, 0x7e, 0xaf, 0x72, 0x53, 0x91, 0xc6, 0xfd, 0x63, 0xa8, 0xe9, - 0xfc, 0x7e, 0xcf, 0x42, 0xa1, 0x6e, 0x7d, 0xd6, 0xaa, 0x1a, 0xdc, 0x4f, 0x42, 0x69, 0x5a, 0xd2, - 0xf9, 0xde, 0x8c, 0xaf, 0x88, 0xa1, 0xc6, 0xe7, 0xd8, 0xed, 0x0d, 0xdd, 0x41, 0x74, 0x4e, 0x11, - 0xa9, 0xbe, 0x4c, 0x8d, 0x3d, 0x5d, 0x86, 0x11, 0xa9, 0x32, 0x30, 0x64, 0x53, 0x4f, 0xcc, 0x2f, - 0xa0, 0x31, 0xbd, 0xfb, 0xcf, 0x22, 0x40, 0x2b, 0xde, 0x0f, 0x39, 0x87, 0x35, 0xb4, 0x47, 0x9c, - 0x95, 0xc3, 0x10, 0xfd, 0xae, 0x3f, 0xbb, 0xc7, 0xc0, 0x24, 0xef, 0xa0, 0xa8, 0x4f, 0x8b, 0x64, - 0xf5, 0xa0, 0x64, 0x7e, 0xd5, 0x9f, 0xaf, 0x06, 0x69, 0xa5, 0x9f, 0x5b, 0x84, 0x9a, 0x0e, 0x45, - 0x9c, 0x15, 0x23, 0xc8, 0x64, 0x76, 0xd6, 0x46, 0x53, 0xdd, 0xbe, 0x61, 0x91, 0x6f, 0xa1, 0xa8, - 0x7b, 0x0c, 0xf9, 0xd9, 0x72, 0x81, 0x48, 0xdf, 0xea, 0xcf, 0x0d, 0xeb, 0x73, 0x8b, 0x9c, 0x40, - 0x41, 0x0d, 0x57, 0x92, 0x31, 0x29, 0x12, 0x93, 0xb9, 0xee, 0xac, 0x82, 0x98, 0x28, 0x7e, 0x0f, - 0x30, 0x1f, 0xf1, 0x24, 0xe3, 0xdd, 0xbf, 0x70, 0x57, 0xa8, 0x37, 0xee, 0x06, 0x1a, 0x03, 0x27, - 0x6a, 0xbe, 0x5d, 0x72, 0x92, 0x39, 0xd9, 0xe2, 0x74, 0xaf, 0x3b, 0xab, 0x20, 0x46, 0xdd, 0x15, - 0xd4, 0x52, 0x7f, 0xfb, 0x91, 0x5f, 0x66, 0x3b, 0x79, 0xfb, 0x5f, 0xc4, 0xfa, 0x8b, 0x7b, 0x61, - 0x8d, 0x25, 0x99, 0xbc, 0x23, 0x99, 0xcf, 0xa4, 0x79, 0x97, 0xdf, 0xe9, 0xbf, 0xf0, 0xea, 0x3b, - 0xf7, 0xc6, 0x6b, 0xab, 0xfb, 0x85, 0x3f, 0xe4, 0xc6, 0xdd, 0x6e, 0x11, 0xff, 0x0d, 0xfd, 0xf2, - 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x41, 0x5d, 0x93, 0xf2, 0x74, 0x15, 0x00, 0x00, + // 1913 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xcd, 0x72, 0x1b, 0xb9, + 0x11, 0xce, 0x90, 0x14, 0x7f, 0x9a, 0xa2, 0x56, 0x46, 0xe4, 0xd4, 0x2c, 0xd7, 0x59, 0xcb, 0x63, + 0x67, 0xa3, 0x5a, 0x6f, 0x91, 0xbb, 0xda, 0x4d, 0x6c, 0xaf, 0x9d, 0x83, 0xfe, 0x58, 0xd2, 0x96, + 0xfe, 0x0a, 0xb2, 0xbd, 0x95, 0x1c, 0xb2, 0x35, 0x24, 0x41, 0x6a, 0x8a, 0xc3, 0xc1, 0x64, 0x00, + 0x52, 0x52, 0x4e, 0xb9, 0xe4, 0x9a, 0xf7, 0x48, 0xe5, 0x9a, 0x5b, 0x4e, 0x79, 0x85, 0x24, 0x0f, + 0x92, 0x6b, 0x6e, 0x29, 0x34, 0x30, 0xe4, 0x8c, 0xc8, 0x19, 0xc9, 0xc9, 0x89, 0x40, 0xcf, 0xf7, + 0x35, 0xd0, 0x8d, 0x46, 0x77, 0x83, 0xb0, 0xde, 0xe3, 0x81, 0x8c, 0xb8, 0xef, 0xb3, 0xa8, 0x15, + 0x46, 0x5c, 0x72, 0xb2, 0xd1, 0x9d, 0x78, 0x7e, 0xff, 0xba, 0x95, 0xf8, 0x30, 0xfd, 0xaa, 0xf9, + 0x7a, 0xe8, 0xc9, 0xcb, 0x49, 0xb7, 0xd5, 0xe3, 0xe3, 0xf6, 0x98, 0x77, 0x6f, 0xda, 0x88, 0x1a, + 0x79, 0xb2, 0xed, 0x86, 0x5e, 0x5b, 0xb0, 0x68, 0xea, 0xf5, 0x98, 0x68, 0x1b, 0x52, 0xfc, 0xab, + 0x55, 0x36, 0xbf, 0xc8, 0x24, 0x0b, 0xee, 0x4f, 0x59, 0xd4, 0x0e, 0xbb, 0x6d, 0x1e, 0x0a, 0x8d, + 0x76, 0xb6, 0x60, 0xe3, 0xd8, 0x13, 0xf2, 0x3c, 0xe2, 0x3d, 0x26, 0x04, 0x13, 0x94, 0xfd, 0x6e, + 0xc2, 0x84, 0x24, 0xeb, 0x50, 0xa4, 0x6c, 0x60, 0x5b, 0x9b, 0xd6, 0x56, 0x8d, 0xaa, 0xa1, 0x73, + 0x0e, 0x0f, 0x6f, 0x21, 0x45, 0xc8, 0x03, 0xc1, 0xc8, 0x0b, 0x58, 0x39, 0x0a, 0x06, 0x5c, 0xd8, + 0xd6, 0x66, 0x71, 0xab, 0xbe, 0xfd, 0xa4, 0xb5, 0xcc, 0xa6, 0x96, 0xe1, 0x29, 0x24, 0xd5, 0x78, + 0x47, 0x40, 0x3d, 0x21, 0x25, 0x8f, 0xa0, 0x16, 0x4f, 0xf7, 0xcd, 0xc2, 0x73, 0x01, 0xe9, 0xc0, + 0xea, 0x51, 0x30, 0xe5, 0x23, 0xb6, 0xc7, 0x83, 0x81, 0x37, 0xb4, 0x0b, 0x9b, 0xd6, 0x56, 0x7d, + 0xdb, 0x59, 0xbe, 0x58, 0x12, 0x49, 0x53, 0x3c, 0xe7, 0x3b, 0xb0, 0xf7, 0x3d, 0xd1, 0xe3, 0x41, + 0xc0, 0x7a, 0xb1, 0x31, 0x99, 0x46, 0xa7, 0xf7, 0x54, 0xb8, 0xb5, 0x27, 0xe7, 0x13, 0xf8, 0x78, + 0x89, 0x2e, 0xed, 0x16, 0xe7, 0xb7, 0xb0, 0xba, 0xab, 0xf6, 0x96, 0xad, 0xfc, 0x0d, 0x54, 0xce, + 0x42, 0xe9, 0xf1, 0x40, 0xe4, 0x5b, 0x83, 0x6a, 0x0c, 0x92, 0xc6, 0x14, 0xe7, 0x3f, 0x05, 0x28, + 0x1f, 0x05, 0xe1, 0x44, 0x0a, 0xb2, 0x09, 0xf5, 0x3d, 0x1e, 0x48, 0x76, 0x2d, 0xcf, 0x5d, 0x79, + 0x69, 0x96, 0x48, 0x8a, 0xc8, 0x67, 0xb0, 0xb6, 0xcf, 0x7b, 0x23, 0x16, 0x0d, 0x3c, 0x9f, 0x9d, + 0xba, 0x63, 0x66, 0x8c, 0xb9, 0x25, 0x25, 0x9f, 0xc3, 0xfa, 0x5c, 0x72, 0x14, 0xf8, 0x5e, 0xc0, + 0xec, 0x22, 0x22, 0x17, 0xe4, 0xe4, 0x0d, 0x3c, 0x30, 0x4b, 0xec, 0xb3, 0x81, 0x17, 0x78, 0x6a, + 0x5b, 0x76, 0x09, 0x0d, 0x59, 0x6b, 0x85, 0xdd, 0xd6, 0x5c, 0x4a, 0x17, 0x81, 0xe4, 0x1d, 0x34, + 0xd4, 0x8a, 0x7d, 0xf3, 0x45, 0xd8, 0x2b, 0x18, 0x3d, 0xed, 0xac, 0x03, 0x55, 0x86, 0xb6, 0x52, + 0x8c, 0x83, 0x40, 0x46, 0x37, 0x34, 0xad, 0xa5, 0xd9, 0x07, 0xb2, 0x08, 0x52, 0xbe, 0x1f, 0xb1, + 0x9b, 0xd8, 0xf7, 0x23, 0x76, 0x43, 0x5e, 0xc2, 0xca, 0xd4, 0xf5, 0x27, 0x2c, 0xdf, 0xf3, 0x49, + 0x55, 0x54, 0x13, 0xbe, 0x2d, 0xbc, 0xb4, 0x9c, 0x7f, 0x54, 0xcd, 0xe1, 0x9a, 0xc3, 0x20, 0xdf, + 0x40, 0xd9, 0xc3, 0x2d, 0xe2, 0x1a, 0xf5, 0xed, 0x47, 0x79, 0x66, 0x50, 0x83, 0xd5, 0xd1, 0xe5, + 0x05, 0xb2, 0x33, 0x09, 0x7a, 0xf3, 0xe8, 0x32, 0x02, 0xb2, 0x01, 0x2b, 0x3b, 0xbe, 0xcf, 0xaf, + 0xec, 0xe2, 0x66, 0x71, 0xab, 0x46, 0xf5, 0x84, 0xfc, 0x12, 0x2a, 0x3b, 0x52, 0x32, 0x21, 0x85, + 0x5d, 0x42, 0x8f, 0x65, 0x2c, 0xa5, 0x41, 0x34, 0x06, 0x93, 0x33, 0xa8, 0xe1, 0x8e, 0x77, 0xa2, + 0x61, 0xec, 0xeb, 0xaf, 0xee, 0x0e, 0xb7, 0xd6, 0x8c, 0xa3, 0xbd, 0x3d, 0xd7, 0x41, 0x0e, 0xa0, + 0xb6, 0xe7, 0xf6, 0x2e, 0x59, 0x27, 0xe2, 0x63, 0xbb, 0x8c, 0x0a, 0x7f, 0xbe, 0x5c, 0x21, 0xc2, + 0x8c, 0x42, 0xa3, 0x66, 0xc6, 0x24, 0x3b, 0x50, 0xc1, 0xc9, 0x5b, 0x6e, 0x57, 0x3e, 0x4c, 0x49, + 0xcc, 0x23, 0x0e, 0xac, 0xee, 0x0d, 0x23, 0x3e, 0x09, 0xcf, 0xdd, 0x88, 0x05, 0xd2, 0xae, 0xa2, + 0x27, 0x53, 0x32, 0xf2, 0x1a, 0x2a, 0x07, 0xd7, 0x21, 0x8f, 0xa4, 0xb0, 0x6b, 0x79, 0x69, 0x4a, + 0x83, 0xcc, 0x02, 0x86, 0x41, 0x3e, 0x05, 0x38, 0xb8, 0x96, 0x91, 0x7b, 0xc8, 0x95, 0xdb, 0x01, + 0x8f, 0x23, 0x21, 0x21, 0x1d, 0x28, 0x1f, 0xbb, 0x5d, 0xe6, 0x0b, 0xbb, 0x8e, 0xba, 0x5b, 0xf7, + 0x70, 0xac, 0x26, 0xe8, 0x85, 0x0c, 0x5b, 0xdd, 0xe3, 0x53, 0x26, 0xaf, 0x78, 0x34, 0x3a, 0xe1, + 0x7d, 0x66, 0xaf, 0xea, 0x7b, 0x9c, 0x10, 0x91, 0x67, 0xd0, 0x38, 0xe5, 0xda, 0x79, 0x9e, 0x2f, + 0x59, 0x64, 0x37, 0x70, 0x33, 0x69, 0x21, 0xc6, 0x95, 0xef, 0xca, 0x01, 0x8f, 0xc6, 0xc2, 0x5e, + 0x43, 0xc4, 0x5c, 0xa0, 0x22, 0xe8, 0x82, 0xf5, 0x22, 0x26, 0x85, 0xfd, 0x51, 0x5e, 0x04, 0x69, + 0x10, 0x8d, 0xc1, 0xc4, 0x86, 0xca, 0xc5, 0xe5, 0xf8, 0xc2, 0xfb, 0x3d, 0xb3, 0xd7, 0x37, 0xad, + 0xad, 0x22, 0x8d, 0xa7, 0xe4, 0x39, 0x14, 0x2f, 0x2e, 0x0e, 0xed, 0x07, 0xa8, 0xed, 0xe3, 0x0c, + 0x6d, 0x17, 0x87, 0x54, 0xa1, 0x08, 0x81, 0xd2, 0x5b, 0x77, 0x28, 0x6c, 0x82, 0xfb, 0xc2, 0x31, + 0xf9, 0x09, 0x94, 0xdf, 0xba, 0xd1, 0x90, 0x49, 0xfb, 0xc7, 0x68, 0xb3, 0x99, 0x91, 0x57, 0x50, + 0x79, 0xe7, 0x7b, 0x63, 0x4f, 0x0a, 0x7b, 0x03, 0xef, 0xd5, 0xe3, 0xe5, 0xca, 0x35, 0xe8, 0x2c, + 0x94, 0x34, 0xc6, 0x93, 0x17, 0x50, 0x3a, 0x0b, 0xa5, 0xb0, 0x1f, 0x22, 0xef, 0x69, 0x46, 0x50, + 0xf1, 0xf1, 0x98, 0x07, 0x71, 0x6a, 0x45, 0x42, 0xf3, 0x0d, 0xac, 0xa5, 0x83, 0x7e, 0x49, 0xf6, + 0xd8, 0x48, 0x66, 0x8f, 0x5a, 0x22, 0x33, 0x34, 0x5f, 0x41, 0x3d, 0x71, 0xb2, 0x1f, 0x42, 0x75, + 0xfe, 0x6e, 0x41, 0x3d, 0x11, 0x7e, 0xe8, 0xa8, 0x9b, 0x90, 0x19, 0x32, 0x8e, 0xc9, 0x2e, 0xac, + 0xec, 0x48, 0x19, 0xa9, 0x82, 0xa1, 0x7c, 0xfd, 0xc5, 0x9d, 0x41, 0xdc, 0x42, 0xb8, 0x0e, 0x33, + 0x4d, 0x55, 0x51, 0xb6, 0xcf, 0x84, 0xf4, 0x02, 0x17, 0x33, 0xb6, 0x4e, 0xef, 0x49, 0x51, 0xf3, + 0x25, 0xc0, 0x9c, 0xf6, 0x41, 0x36, 0xfc, 0xc5, 0x82, 0x07, 0x0b, 0x37, 0x75, 0xa9, 0x25, 0x87, + 0x69, 0x4b, 0xb6, 0xef, 0x79, 0xeb, 0x17, 0xed, 0xf9, 0x3f, 0x76, 0x7b, 0x0a, 0x65, 0x9d, 0x1e, + 0x97, 0xee, 0xb0, 0x09, 0xd5, 0x7d, 0x4f, 0xb8, 0x5d, 0x9f, 0xf5, 0x91, 0x5a, 0xa5, 0xb3, 0x39, + 0xe6, 0x66, 0xdc, 0xbd, 0xf6, 0x9e, 0x9e, 0x38, 0xfa, 0x1e, 0x90, 0x35, 0x28, 0xcc, 0x3a, 0x98, + 0xc2, 0xd1, 0xbe, 0x02, 0xab, 0x22, 0xac, 0x4d, 0xad, 0x51, 0x3d, 0x71, 0x3a, 0x50, 0xd6, 0x37, + 0x6b, 0x01, 0xdf, 0x84, 0x6a, 0xc7, 0xf3, 0x19, 0xd6, 0x72, 0xbd, 0xe7, 0xd9, 0x5c, 0x99, 0x77, + 0x10, 0x4c, 0xcd, 0xb2, 0x6a, 0xe8, 0x50, 0x58, 0x4d, 0x96, 0x29, 0x65, 0x4a, 0xa2, 0x0b, 0xc0, + 0x31, 0x69, 0x01, 0x24, 0x6a, 0x74, 0x61, 0x69, 0x8d, 0x4e, 0x20, 0x9c, 0x3f, 0x5b, 0x50, 0x9b, + 0xdd, 0x29, 0xb2, 0x07, 0x65, 0xf4, 0x59, 0xdc, 0xe1, 0x3d, 0xbf, 0xe3, 0x12, 0xb6, 0xde, 0x23, + 0xda, 0xe4, 0x36, 0x4d, 0x6d, 0x7e, 0x0f, 0xf5, 0x84, 0x78, 0xc9, 0x31, 0x6d, 0xa7, 0x2b, 0xf2, + 0xa3, 0xbc, 0x45, 0x92, 0x87, 0xb8, 0x0f, 0x65, 0x2d, 0x54, 0x96, 0x63, 0x6b, 0x63, 0x2c, 0xc7, + 0x86, 0x86, 0x40, 0xe9, 0xd0, 0x8d, 0xf4, 0x01, 0x16, 0x29, 0x8e, 0x95, 0xec, 0x82, 0x0f, 0x24, + 0x3a, 0xb1, 0x48, 0x71, 0xec, 0xfc, 0xd3, 0x82, 0x46, 0x2a, 0x1b, 0xa8, 0x74, 0x87, 0x79, 0x80, + 0x45, 0x46, 0x61, 0x3c, 0x55, 0xf5, 0xe6, 0x84, 0x49, 0xb7, 0xef, 0x4a, 0x57, 0x9d, 0x8b, 0x39, + 0xa3, 0x94, 0x4c, 0xb1, 0x4d, 0x4e, 0xc6, 0x65, 0xaa, 0x34, 0x9e, 0xe2, 0xf9, 0x4c, 0x7c, 0x1f, + 0x3b, 0xa5, 0x2a, 0xc5, 0xb1, 0x2e, 0x30, 0xea, 0xce, 0x9e, 0x4f, 0xc4, 0xa5, 0xbd, 0x82, 0x5f, + 0x12, 0x92, 0xf9, 0xf7, 0x63, 0xee, 0xf6, 0xed, 0x72, 0xf2, 0xbb, 0x92, 0xa8, 0xfc, 0x79, 0xec, + 0x05, 0x23, 0xd6, 0xb7, 0x2b, 0xf8, 0xcd, 0xcc, 0x9c, 0xbf, 0x59, 0xd0, 0x30, 0x4d, 0xa8, 0x69, + 0xd6, 0x19, 0xac, 0x6b, 0x1e, 0x8b, 0x62, 0x99, 0x39, 0xd5, 0x57, 0x39, 0x45, 0x2b, 0x86, 0xb6, + 0x6e, 0x73, 0xf5, 0x19, 0x2f, 0xa8, 0x6c, 0xee, 0xc1, 0xc3, 0xa5, 0xd0, 0x0f, 0xba, 0x9e, 0x3f, + 0x83, 0x07, 0xf3, 0xf6, 0x3a, 0xfb, 0x61, 0xb2, 0x01, 0x24, 0x09, 0x33, 0xed, 0xf7, 0x63, 0xa8, + 0xab, 0xe7, 0x4a, 0x36, 0xcd, 0x81, 0x55, 0x0d, 0x30, 0x9e, 0x21, 0x50, 0x1a, 0xb1, 0x1b, 0x1d, + 0xe3, 0x35, 0x8a, 0x63, 0xe7, 0x4f, 0x96, 0x7a, 0x75, 0x84, 0x13, 0x79, 0xc2, 0x84, 0x70, 0x87, + 0xaa, 0xe7, 0x2d, 0x1d, 0x05, 0x9e, 0x34, 0x5d, 0xde, 0x67, 0x39, 0x5d, 0x9e, 0x82, 0x19, 0xd6, + 0xe1, 0x8f, 0x28, 0xb2, 0x54, 0x4d, 0xda, 0x77, 0xa5, 0x6b, 0x22, 0x3c, 0xa3, 0x03, 0x51, 0x88, + 0x04, 0x51, 0x4d, 0x77, 0x2b, 0xea, 0x89, 0x15, 0x4e, 0xa4, 0xf3, 0x0c, 0xd6, 0x6f, 0x6b, 0x5f, + 0x62, 0xda, 0xd7, 0x50, 0x4f, 0x68, 0xc1, 0x9c, 0x71, 0xd6, 0x41, 0x40, 0x95, 0xaa, 0xa1, 0xb2, + 0x75, 0xb6, 0x91, 0x55, 0xbd, 0x86, 0xf3, 0x11, 0x34, 0x50, 0xf5, 0xcc, 0x83, 0x7f, 0x28, 0x40, + 0x25, 0x56, 0xf1, 0x22, 0x65, 0xf7, 0x93, 0x2c, 0xbb, 0x17, 0x4d, 0xfe, 0x05, 0x94, 0x66, 0x77, + 0x24, 0xb3, 0x7c, 0x77, 0xfa, 0x09, 0x1a, 0x5e, 0x9f, 0x5f, 0x41, 0x99, 0x32, 0xa1, 0x5a, 0x8d, + 0x62, 0x5e, 0xfd, 0xd6, 0x98, 0x39, 0xd9, 0x90, 0x14, 0xfd, 0xc2, 0x1b, 0x06, 0xae, 0x6f, 0xde, + 0x23, 0x19, 0x74, 0x8d, 0x49, 0xd0, 0xb5, 0x60, 0xee, 0xee, 0x3f, 0x5a, 0x50, 0xcf, 0x75, 0x75, + 0xfe, 0x03, 0x71, 0xe1, 0xd1, 0x5a, 0xfc, 0x1f, 0x1f, 0xad, 0xff, 0xb2, 0xd2, 0x8a, 0x30, 0x21, + 0xa8, 0xfb, 0x14, 0x72, 0x2f, 0x90, 0x26, 0x64, 0x13, 0x12, 0xb5, 0xd1, 0xbd, 0x71, 0xdf, 0x14, + 0x1c, 0x35, 0x9c, 0x17, 0x8e, 0xa2, 0x29, 0x1c, 0x2a, 0x08, 0xde, 0x09, 0x16, 0xa1, 0x8b, 0x6a, + 0x14, 0xc7, 0x2a, 0x91, 0x9c, 0x72, 0x94, 0xea, 0x24, 0x64, 0x66, 0xa8, 0xef, 0x4a, 0x67, 0x1e, + 0xa5, 0xef, 0x0a, 0x2b, 0xe0, 0x29, 0x57, 0x32, 0x9d, 0x71, 0xf4, 0x44, 0xe1, 0xde, 0xca, 0x1b, + 0xec, 0xc0, 0xab, 0x54, 0x0d, 0x55, 0x31, 0xa3, 0xdc, 0xf7, 0xbb, 0x6e, 0x6f, 0x64, 0xd7, 0x74, + 0x15, 0x8d, 0xe7, 0xce, 0x0e, 0xd4, 0x66, 0x47, 0xaf, 0xaa, 0x60, 0xa7, 0x8f, 0xae, 0x6d, 0xd0, + 0x42, 0xa7, 0x1f, 0x47, 0x6d, 0x61, 0x31, 0x6a, 0x8b, 0x89, 0xa8, 0x7d, 0x01, 0x8d, 0x54, 0x10, + 0x28, 0x10, 0xe5, 0x57, 0xc2, 0x28, 0xc2, 0xb1, 0x92, 0xed, 0x71, 0x5f, 0xbf, 0xb2, 0x1b, 0x14, + 0xc7, 0xce, 0x53, 0x68, 0xa4, 0x8e, 0x7f, 0x59, 0xf5, 0x70, 0x9e, 0x40, 0xe3, 0x42, 0xba, 0x72, + 0x92, 0xf3, 0xb7, 0xc8, 0xbf, 0x2d, 0x58, 0x8b, 0x31, 0x26, 0x93, 0x7c, 0x03, 0xd5, 0x29, 0x8b, + 0x24, 0xbb, 0x9e, 0x55, 0x4c, 0xbb, 0x35, 0xe6, 0xdd, 0x9b, 0x56, 0xfc, 0x4f, 0x8c, 0x3a, 0xed, + 0xf7, 0x88, 0xa0, 0x33, 0x24, 0xf9, 0x16, 0xaa, 0x02, 0xf5, 0xb0, 0xb8, 0x27, 0xfa, 0x34, 0x8b, + 0x65, 0xd6, 0x9b, 0xe1, 0x49, 0x1b, 0x4a, 0x3e, 0x1f, 0x0a, 0x3c, 0xdd, 0xfa, 0xf6, 0x27, 0x59, + 0xbc, 0x63, 0x3e, 0xa4, 0x08, 0x24, 0xaf, 0xa1, 0x7a, 0xe5, 0x46, 0x81, 0x17, 0x0c, 0xe3, 0x67, + 0xe4, 0xe3, 0x2c, 0xd2, 0xf7, 0x1a, 0x47, 0x67, 0x04, 0xa7, 0xa1, 0x2e, 0xc5, 0x80, 0x1b, 0x9f, + 0x38, 0xbf, 0x56, 0xb1, 0xa9, 0xa6, 0xc6, 0xfc, 0x23, 0x68, 0xe8, 0xf8, 0x7e, 0xcf, 0x22, 0xa1, + 0xfa, 0x0d, 0x2b, 0xef, 0x0e, 0xee, 0x26, 0xa1, 0x34, 0xcd, 0x74, 0x7e, 0x30, 0xe5, 0x2b, 0x16, + 0xa8, 0xb2, 0x1a, 0xba, 0xbd, 0x91, 0x3b, 0x8c, 0xcf, 0x29, 0x9e, 0xaa, 0x2f, 0x53, 0xb3, 0x9e, + 0xbe, 0x86, 0xf1, 0x54, 0x45, 0x60, 0xc4, 0xa6, 0x9e, 0x98, 0x37, 0xbb, 0xb3, 0xf9, 0xf6, 0x5f, + 0xcb, 0x00, 0x7b, 0xb3, 0xfd, 0x90, 0x73, 0x58, 0xc1, 0xf5, 0x88, 0x93, 0x5b, 0x0c, 0xd1, 0xee, + 0xe6, 0xd3, 0x7b, 0x14, 0x4c, 0xf2, 0x0e, 0xca, 0xfa, 0xb4, 0x48, 0x56, 0x0e, 0x4a, 0xc6, 0x57, + 0xf3, 0x59, 0x3e, 0x48, 0x2b, 0xfd, 0xd2, 0x22, 0xd4, 0x64, 0x28, 0xe2, 0xe4, 0x94, 0x20, 0x13, + 0xd9, 0x59, 0x1b, 0x4d, 0x65, 0xfb, 0x2d, 0x8b, 0x7c, 0x07, 0x65, 0x9d, 0x63, 0xc8, 0x4f, 0x97, + 0x13, 0x62, 0x7d, 0xf9, 0x9f, 0xb7, 0xac, 0x2f, 0x2d, 0x72, 0x02, 0x25, 0x55, 0x5c, 0x49, 0x46, + 0xa5, 0x48, 0x54, 0xe6, 0xa6, 0x93, 0x07, 0x31, 0x5e, 0xfc, 0x01, 0x60, 0x5e, 0xe2, 0x49, 0xc6, + 0x3f, 0x04, 0x0b, 0xbd, 0x42, 0x73, 0xeb, 0x6e, 0xa0, 0x59, 0xe0, 0x44, 0xd5, 0xb7, 0x01, 0x27, + 0x99, 0x95, 0x6d, 0x16, 0xee, 0x4d, 0x27, 0x0f, 0x62, 0xd4, 0x5d, 0x42, 0x23, 0xf5, 0x5f, 0x29, + 0xf9, 0x3c, 0xdb, 0xc8, 0xdb, 0x7f, 0xbd, 0x36, 0x9f, 0xdf, 0x0b, 0x6b, 0x56, 0x92, 0xc9, 0x1e, + 0xc9, 0x7c, 0x26, 0xad, 0xbb, 0xec, 0x4e, 0xff, 0xef, 0xd9, 0x6c, 0xdf, 0x1b, 0xaf, 0x57, 0xdd, + 0x2d, 0xfd, 0xa6, 0x10, 0x76, 0xbb, 0x65, 0xfc, 0x0b, 0xf9, 0xeb, 0xff, 0x06, 0x00, 0x00, 0xff, + 0xff, 0x6f, 0xa9, 0xd4, 0x1e, 0xd7, 0x16, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/controller/pb/controller.proto b/controller/pb/controller.proto index 944bbc26..518a4bf0 100644 --- a/controller/pb/controller.proto +++ b/controller/pb/controller.proto @@ -3,6 +3,7 @@ syntax = "proto3"; package buildx.controller.v1; import "github.com/moby/buildkit/api/services/control/control.proto"; +import "github.com/moby/buildkit/solver/pb/ops.proto"; option go_package = "pb"; @@ -44,32 +45,39 @@ message BuildRequest { BuildOptions Options = 2; } -message BuildOptions { +message Inputs { string ContextPath = 1; string DockerfileName = 2; - string PrintFunc = 3; - map NamedContexts = 4; - - repeated string Allow = 5; - repeated Attest Attests = 6; - map BuildArgs = 7; - repeated CacheOptionsEntry CacheFrom = 8; - repeated CacheOptionsEntry CacheTo = 9; - string CgroupParent = 10; - repeated ExportEntry Exports = 11; - repeated string ExtraHosts = 12; - map Labels = 13; - string NetworkMode = 14; - repeated string NoCacheFilter = 15; - repeated string Platforms = 16; - repeated Secret Secrets = 17; - int64 ShmSize = 18; - repeated SSH SSH = 19; - repeated string Tags = 20; - string Target = 21; - UlimitOpt Ulimits = 22; - - CommonOptions Opts = 24; + string DockerfileInline = 3; + pb.Definition ContextDefinition = 4; + map NamedContexts = 5; + // io.Reader InStream = ???; +} + +message BuildOptions { + Inputs inputs = 1; + string PrintFunc = 2; + + repeated string Allow = 3; + repeated Attest Attests = 4; + map BuildArgs = 5; + repeated CacheOptionsEntry CacheFrom = 6; + repeated CacheOptionsEntry CacheTo = 7; + string CgroupParent = 8; + repeated ExportEntry Exports = 9; + repeated string ExtraHosts = 10; + map Labels = 11; + string NetworkMode = 12; + repeated string NoCacheFilter = 13; + repeated string Platforms = 14; + repeated Secret Secrets = 15; + int64 ShmSize = 16; + repeated SSH SSH = 17; + repeated string Tags = 18; + string Target = 19; + UlimitOpt Ulimits = 20; + + CommonOptions Opts = 21; } message ExportEntry { @@ -100,6 +108,11 @@ message Secret { string Env = 3; } +message NamedContext { + string Path = 1; + pb.Definition Definition = 2; +} + message UlimitOpt { map values = 1; } @@ -118,6 +131,11 @@ message CommonOptions { bool Pull = 4; bool ExportPush = 5; bool ExportLoad = 6; + // TODO: we should remove Linked from the controllerapi, it's only used to + // produce a single warning. To allow this, we need to move the default + // export detection out from the controller server, as well as load the + // driver on the controller client. + bool Linked = 7; } message BuildResponse { diff --git a/util/buildflags/context.go b/util/buildflags/context.go index e67fb97c..73d8c1c2 100644 --- a/util/buildflags/context.go +++ b/util/buildflags/context.go @@ -3,15 +3,16 @@ package buildflags import ( "strings" + controllerapi "github.com/docker/buildx/controller/pb" "github.com/docker/distribution/reference" "github.com/pkg/errors" ) -func ParseContextNames(values []string) (map[string]string, error) { +func ParseContextNames(values []string) (map[string]*controllerapi.NamedContext, error) { if len(values) == 0 { return nil, nil } - result := make(map[string]string, len(values)) + result := make(map[string]*controllerapi.NamedContext, len(values)) for _, value := range values { kv := strings.SplitN(value, "=", 2) if len(kv) != 2 { @@ -22,7 +23,7 @@ func ParseContextNames(values []string) (map[string]string, error) { return nil, errors.Wrapf(err, "invalid context name %s", kv[0]) } name := strings.TrimSuffix(reference.FamiliarString(named), ":latest") - result[name] = kv[1] + result[name] = &controllerapi.NamedContext{Path: kv[1]} } return result, nil } From d4e38a0ebe2ff7d262aba8f7641f77d678151e3d Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 15 Mar 2023 11:47:18 +0000 Subject: [PATCH 2/2] bake: use controller build options as an intermediate stage With the previous changes to bring controllerapi.BuildOptions up to date with build.Options, we can have bake generate controllerapi.BuildOptions, and then convert those to build.Option using the controller/build package. This is an intermediate patch, designed to allow us to clean up some shared logic between both build and bake. The next step will be to modify bake to use the controller api, and completely skip the build.Options generation step. Signed-off-by: Justin Chadwell --- bake/bake.go | 118 ++++++++++++++++++++++----------------------------- 1 file changed, 51 insertions(+), 67 deletions(-) diff --git a/bake/bake.go b/bake/bake.go index 1abf5f1b..6da25b7e 100644 --- a/bake/bake.go +++ b/bake/bake.go @@ -14,14 +14,12 @@ import ( "github.com/docker/buildx/bake/hclparser" "github.com/docker/buildx/build" + cbuild "github.com/docker/buildx/controller/build" controllerapi "github.com/docker/buildx/controller/pb" "github.com/docker/buildx/util/buildflags" - "github.com/docker/buildx/util/platformutil" - "github.com/docker/cli/cli/config" "github.com/docker/docker/builder/remotecontext/urlutil" hcl "github.com/hashicorp/hcl/v2" "github.com/moby/buildkit/client/llb" - "github.com/moby/buildkit/session/auth/authprovider" "github.com/pkg/errors" ) @@ -782,7 +780,11 @@ func (t *Target) AddOverrides(overrides map[string]Override) error { func TargetsToBuildOpt(m map[string]*Target, inp *Input) (map[string]build.Options, error) { m2 := make(map[string]build.Options, len(m)) for k, v := range m { - bo, err := toBuildOpt(v, inp) + opts, err := toControllerOpt(v, inp) + if err != nil { + return nil, err + } + bo, err := cbuild.ToBuildOpts(*opts, nil) if err != nil { return nil, err } @@ -791,14 +793,14 @@ func TargetsToBuildOpt(m map[string]*Target, inp *Input) (map[string]build.Optio return m2, nil } -func updateContext(t *build.Inputs, inp *Input) { +func updateContext(t *controllerapi.Inputs, inp *Input) error { if inp == nil || inp.State == nil { - return + return nil } for k, v := range t.NamedContexts { if v.Path == "." { - t.NamedContexts[k] = build.NamedContext{Path: inp.URL} + t.NamedContexts[k] = &controllerapi.NamedContext{Path: inp.URL} } if strings.HasPrefix(v.Path, "cwd://") || strings.HasPrefix(v.Path, "target:") || strings.HasPrefix(v.Path, "docker-image:") { continue @@ -807,27 +809,36 @@ func updateContext(t *build.Inputs, inp *Input) { continue } st := llb.Scratch().File(llb.Copy(*inp.State, v.Path, "/"), llb.WithCustomNamef("set context %s to %s", k, v.Path)) - t.NamedContexts[k] = build.NamedContext{State: &st} + def, err := st.Marshal(context.TODO()) + if err != nil { + return err + } + t.NamedContexts[k] = &controllerapi.NamedContext{Definition: def.ToPB()} } if t.ContextPath == "." { t.ContextPath = inp.URL - return + return nil } if strings.HasPrefix(t.ContextPath, "cwd://") { - return + return nil } if IsRemoteURL(t.ContextPath) { - return + return nil } st := llb.Scratch().File(llb.Copy(*inp.State, t.ContextPath, "/"), llb.WithCustomNamef("set context to %s", t.ContextPath)) - t.ContextState = &st + def, err := st.Marshal(context.TODO()) + if err != nil { + return err + } + t.ContextDefinition = def.ToPB() + return nil } // validateContextsEntitlements is a basic check to ensure contexts do not // escape local directories when loaded from remote sources. This is to be // replaced with proper entitlements support in the future. -func validateContextsEntitlements(t build.Inputs, inp *Input) error { +func validateContextsEntitlements(t controllerapi.Inputs, inp *Input) error { if inp == nil || inp.State == nil { return nil } @@ -836,13 +847,13 @@ func validateContextsEntitlements(t build.Inputs, inp *Input) error { return nil } } - if t.ContextState == nil { + if t.ContextDefinition == nil { if err := checkPath(t.ContextPath); err != nil { return err } } for _, v := range t.NamedContexts { - if v.State != nil { + if v.Definition != nil { continue } if err := checkPath(v.Path); err != nil { @@ -877,7 +888,7 @@ func checkPath(p string) error { return nil } -func toBuildOpt(t *Target, inp *Input) (*build.Options, error) { +func toControllerOpt(t *Target, inp *Input) (*controllerapi.BuildOptions, error) { if v := t.Context; v != nil && *v == "-" { return nil, errors.Errorf("context from stdin not allowed in bake") } @@ -930,9 +941,9 @@ func toBuildOpt(t *Target, inp *Input) (*build.Options, error) { networkMode = *t.NetworkMode } - bi := build.Inputs{ + bi := controllerapi.Inputs{ ContextPath: contextPath, - DockerfilePath: dockerfilePath, + DockerfileName: dockerfilePath, NamedContexts: toNamedContexts(t.Contexts), } if t.DockerfileInline != nil { @@ -944,7 +955,7 @@ func toBuildOpt(t *Target, inp *Input) (*build.Options, error) { } for k, v := range bi.NamedContexts { if strings.HasPrefix(v.Path, "cwd://") { - bi.NamedContexts[k] = build.NamedContext{Path: path.Clean(strings.TrimPrefix(v.Path, "cwd://"))} + bi.NamedContexts[k] = &controllerapi.NamedContext{Path: path.Clean(strings.TrimPrefix(v.Path, "cwd://"))} } } @@ -954,82 +965,55 @@ func toBuildOpt(t *Target, inp *Input) (*build.Options, error) { t.Context = &bi.ContextPath - bo := &build.Options{ - Inputs: bi, + opts := &controllerapi.BuildOptions{ + Inputs: &bi, Tags: t.Tags, BuildArgs: args, Labels: labels, - NoCache: noCache, NoCacheFilter: t.NoCacheFilter, - Pull: pull, NetworkMode: networkMode, - Linked: t.linked, + Opts: &controllerapi.CommonOptions{ + NoCache: noCache, + Pull: pull, + Linked: t.linked, + }, + Platforms: t.Platforms, } + var err error - platforms, err := platformutil.Parse(t.Platforms) - if err != nil { - return nil, err - } - bo.Platforms = platforms - - dockerConfig := config.LoadDefaultConfigFile(os.Stderr) - bo.Session = append(bo.Session, authprovider.NewDockerAuthProvider(dockerConfig)) - - secrets, err := buildflags.ParseSecretSpecs(t.Secrets) - if err != nil { - return nil, err - } - secretAttachment, err := controllerapi.CreateSecrets(secrets) - if err != nil { - return nil, err + if t.Target != nil { + opts.Target = *t.Target } - bo.Session = append(bo.Session, secretAttachment) - sshSpecs, err := buildflags.ParseSSHSpecs(t.SSH) + opts.Secrets, err = buildflags.ParseSecretSpecs(t.Secrets) if err != nil { return nil, err } - if len(sshSpecs) == 0 && buildflags.IsGitSSH(contextPath) { - sshSpecs = append(sshSpecs, &controllerapi.SSH{ID: "default"}) - } - sshAttachment, err := controllerapi.CreateSSH(sshSpecs) + opts.SSH, err = buildflags.ParseSSHSpecs(t.SSH) if err != nil { return nil, err } - bo.Session = append(bo.Session, sshAttachment) - - if t.Target != nil { - bo.Target = *t.Target - } - cacheImports, err := buildflags.ParseCacheEntry(t.CacheFrom) + opts.CacheFrom, err = buildflags.ParseCacheEntry(t.CacheFrom) if err != nil { return nil, err } - bo.CacheFrom = controllerapi.CreateCaches(cacheImports) - - cacheExports, err := buildflags.ParseCacheEntry(t.CacheTo) + opts.CacheTo, err = buildflags.ParseCacheEntry(t.CacheTo) if err != nil { return nil, err } - bo.CacheTo = controllerapi.CreateCaches(cacheExports) - outputs, err := buildflags.ParseExports(t.Outputs) - if err != nil { - return nil, err - } - bo.Exports, err = controllerapi.CreateExports(outputs) + opts.Exports, err = buildflags.ParseExports(t.Outputs) if err != nil { return nil, err } - attests, err := buildflags.ParseAttests(t.Attest) + opts.Attests, err = buildflags.ParseAttests(t.Attest) if err != nil { return nil, err } - bo.Attests = controllerapi.CreateAttestations(attests) - return bo, nil + return opts, nil } func defaultTarget() *Target { @@ -1102,10 +1086,10 @@ func sliceEqual(s1, s2 []string) bool { return true } -func toNamedContexts(m map[string]string) map[string]build.NamedContext { - m2 := make(map[string]build.NamedContext, len(m)) +func toNamedContexts(m map[string]string) map[string]*controllerapi.NamedContext { + m2 := make(map[string]*controllerapi.NamedContext, len(m)) for k, v := range m { - m2[k] = build.NamedContext{Path: v} + m2[k] = &controllerapi.NamedContext{Path: v} } return m2 }