controller: handle attestation options across api

We can perform all attestation processing, handling how the sbom and
provenance arguments interact on the client, while applying defaults on
the server.

Additionally, this allows us to start pulling fields out of CommonOpts.

Signed-off-by: Justin Chadwell <me@jedevc.com>
This commit is contained in:
Justin Chadwell 2023-02-15 14:24:09 +00:00
parent 0b8f0264b0
commit c2e11196dd
9 changed files with 274 additions and 204 deletions

View File

@ -1027,7 +1027,7 @@ func toBuildOpt(t *Target, inp *Input) (*build.Options, error) {
if err != nil {
return nil, err
}
bo.Attests = attests
bo.Attests = controllerapi.CreateAttestations(attests)
return bo, nil
}

View File

@ -455,11 +455,11 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op
return nil, nil, errors.Errorf("attestations are not supported by the current buildkitd")
}
for k, v := range attests {
so.FrontendAttrs[k] = v
so.FrontendAttrs["attest:"+k] = v
}
}
if _, ok := opt.Attests["attest:provenance"]; !ok && supportsAttestations {
if _, ok := opt.Attests["provenance"]; !ok && supportsAttestations {
const noAttestEnv = "BUILDX_NO_DEFAULT_ATTESTATIONS"
var noProv bool
if v, ok := os.LookupEnv(noAttestEnv); ok {

View File

@ -24,9 +24,11 @@ import (
)
type bakeOptions struct {
files []string
overrides []string
printOnly bool
files []string
overrides []string
printOnly bool
sbom string
provenance string
controllerapi.CommonOptions
}
@ -76,11 +78,11 @@ func runBake(dockerCli command.Cli, targets []string, in bakeOptions, cFlags com
if cFlags.pull != nil {
overrides = append(overrides, fmt.Sprintf("*.pull=%t", *cFlags.pull))
}
if in.SBOM != "" {
overrides = append(overrides, fmt.Sprintf("*.attest=%s", buildflags.CanonicalizeAttest("sbom", in.SBOM)))
if in.sbom != "" {
overrides = append(overrides, fmt.Sprintf("*.attest=%s", buildflags.CanonicalizeAttest("sbom", in.sbom)))
}
if in.Provenance != "" {
overrides = append(overrides, fmt.Sprintf("*.attest=%s", buildflags.CanonicalizeAttest("provenance", in.Provenance)))
if in.provenance != "" {
overrides = append(overrides, fmt.Sprintf("*.attest=%s", buildflags.CanonicalizeAttest("provenance", in.provenance)))
}
contextPathHash, _ := os.Getwd()
@ -220,8 +222,8 @@ func bakeCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
flags.BoolVar(&options.ExportLoad, "load", false, `Shorthand for "--set=*.output=type=docker"`)
flags.BoolVar(&options.printOnly, "print", false, "Print the options without building")
flags.BoolVar(&options.ExportPush, "push", false, `Shorthand for "--set=*.output=type=registry"`)
flags.StringVar(&options.SBOM, "sbom", "", `Shorthand for "--set=*.attest=type=sbom"`)
flags.StringVar(&options.Provenance, "provenance", "", `Shorthand for "--set=*.attest=type=provenance"`)
flags.StringVar(&options.sbom, "sbom", "", `Shorthand for "--set=*.attest=type=sbom"`)
flags.StringVar(&options.provenance, "provenance", "", `Shorthand for "--set=*.attest=type=provenance"`)
flags.StringArrayVar(&options.overrides, "set", nil, `Override target value (e.g., "targetpattern.key=value")`)
commonBuildFlags(&cFlags, flags)

View File

@ -42,7 +42,6 @@ import (
type buildOptions struct {
allow []string
attests []string
buildArgs []string
cacheFrom []string
cacheTo []string
@ -67,6 +66,10 @@ type buildOptions struct {
invoke string
attests []string
sbom string
provenance string
progress string
quiet bool
@ -78,7 +81,6 @@ func (o *buildOptions) toControllerOptions() (controllerapi.BuildOptions, error)
var err error
opts := controllerapi.BuildOptions{
Allow: o.allow,
Attests: o.attests,
BuildArgs: listToMap(o.buildArgs, true),
CgroupParent: o.cgroupParent,
ContextPath: o.contextPath,
@ -96,6 +98,18 @@ func (o *buildOptions) toControllerOptions() (controllerapi.BuildOptions, error)
Opts: &o.CommonOptions,
}
inAttests := append([]string{}, o.attests...)
if o.provenance != "" {
inAttests = append(inAttests, buildflags.CanonicalizeAttest("provenance", o.provenance))
}
if o.sbom != "" {
inAttests = append(inAttests, buildflags.CanonicalizeAttest("sbom", o.sbom))
}
opts.Attests, err = buildflags.ParseAttests(inAttests)
if err != nil {
return controllerapi.BuildOptions{}, err
}
opts.NamedContexts, err = buildflags.ParseContextNames(o.contexts)
if err != nil {
return controllerapi.BuildOptions{}, err
@ -285,8 +299,8 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
flags.Var(options.ulimits, "ulimit", "Ulimit options")
flags.StringArrayVar(&options.attests, "attest", []string{}, `Attestation parameters (format: "type=sbom,generator=image")`)
flags.StringVar(&options.SBOM, "sbom", "", `Shorthand for "--attest=type=sbom"`)
flags.StringVar(&options.Provenance, "provenance", "", `Shortand for "--attest=type=provenance"`)
flags.StringVar(&options.sbom, "sbom", "", `Shorthand for "--attest=type=sbom"`)
flags.StringVar(&options.provenance, "provenance", "", `Shortand for "--attest=type=provenance"`)
if isExperimental() {
flags.StringVar(&options.invoke, "invoke", "", "Invoke a command after the build [experimental]")

View File

@ -142,21 +142,11 @@ func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.Build
}
opts.Exports = outputs
inAttests := append([]string{}, in.Attests...)
if in.Opts.Provenance != "" {
inAttests = append(inAttests, buildflags.CanonicalizeAttest("provenance", in.Opts.Provenance))
}
if in.Opts.SBOM != "" {
inAttests = append(inAttests, buildflags.CanonicalizeAttest("sbom", in.Opts.SBOM))
}
opts.Attests, err = buildflags.ParseAttests(inAttests)
if err != nil {
return nil, nil, err
}
opts.CacheFrom = controllerapi.CreateCaches(in.CacheFrom)
opts.CacheTo = controllerapi.CreateCaches(in.CacheTo)
opts.Attests = controllerapi.CreateAttestations(in.Attests)
allow, err := buildflags.ParseEntitlements(in.Allow)
if err != nil {
return nil, nil, err

20
controller/pb/attest.go Normal file
View File

@ -0,0 +1,20 @@
package pb
func CreateAttestations(attests []*Attest) map[string]*string {
result := map[string]*string{}
for _, attest := range attests {
// ignore duplicates
if _, ok := result[attest.Type]; ok {
continue
}
if attest.Disabled {
result[attest.Type] = nil
continue
}
attrs := attest.Attrs
result[attest.Type] = &attrs
}
return result
}

View File

@ -77,7 +77,7 @@ type BuildOptions struct {
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 []string `protobuf:"bytes,6,rep,name=Attests,proto3" json:"Attests,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"`
@ -159,7 +159,7 @@ func (m *BuildOptions) GetAllow() []string {
return nil
}
func (m *BuildOptions) GetAttests() []string {
func (m *BuildOptions) GetAttests() []*Attest {
if m != nil {
return m.Attests
}
@ -385,6 +385,60 @@ func (m *CacheOptionsEntry) GetAttrs() map[string]string {
return nil
}
type Attest struct {
Type string `protobuf:"bytes,1,opt,name=Type,proto3" json:"Type,omitempty"`
Disabled bool `protobuf:"varint,2,opt,name=Disabled,proto3" json:"Disabled,omitempty"`
Attrs string `protobuf:"bytes,3,opt,name=Attrs,proto3" json:"Attrs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
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{4}
}
func (m *Attest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Attest.Unmarshal(m, b)
}
func (m *Attest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Attest.Marshal(b, m, deterministic)
}
func (m *Attest) XXX_Merge(src proto.Message) {
xxx_messageInfo_Attest.Merge(m, src)
}
func (m *Attest) XXX_Size() int {
return xxx_messageInfo_Attest.Size(m)
}
func (m *Attest) XXX_DiscardUnknown() {
xxx_messageInfo_Attest.DiscardUnknown(m)
}
var xxx_messageInfo_Attest proto.InternalMessageInfo
func (m *Attest) GetType() string {
if m != nil {
return m.Type
}
return ""
}
func (m *Attest) GetDisabled() bool {
if m != nil {
return m.Disabled
}
return false
}
func (m *Attest) GetAttrs() string {
if m != nil {
return m.Attrs
}
return ""
}
type SSH struct {
ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
Paths []string `protobuf:"bytes,2,rep,name=Paths,proto3" json:"Paths,omitempty"`
@ -397,7 +451,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{4}
return fileDescriptor_ed7f10298fa1d90f, []int{5}
}
func (m *SSH) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SSH.Unmarshal(m, b)
@ -444,7 +498,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{5}
return fileDescriptor_ed7f10298fa1d90f, []int{6}
}
func (m *Secret) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Secret.Unmarshal(m, b)
@ -496,7 +550,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{6}
return fileDescriptor_ed7f10298fa1d90f, []int{7}
}
func (m *UlimitOpt) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UlimitOpt.Unmarshal(m, b)
@ -536,7 +590,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{7}
return fileDescriptor_ed7f10298fa1d90f, []int{8}
}
func (m *Ulimit) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Ulimit.Unmarshal(m, b)
@ -585,8 +639,6 @@ type CommonOptions struct {
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"`
SBOM string `protobuf:"bytes,7,opt,name=SBOM,proto3" json:"SBOM,omitempty"`
Provenance string `protobuf:"bytes,8,opt,name=Provenance,proto3" json:"Provenance,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -596,7 +648,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{8}
return fileDescriptor_ed7f10298fa1d90f, []int{9}
}
func (m *CommonOptions) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommonOptions.Unmarshal(m, b)
@ -658,20 +710,6 @@ func (m *CommonOptions) GetExportLoad() bool {
return false
}
func (m *CommonOptions) GetSBOM() string {
if m != nil {
return m.SBOM
}
return ""
}
func (m *CommonOptions) GetProvenance() string {
if m != nil {
return m.Provenance
}
return ""
}
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:"-"`
@ -683,7 +721,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{9}
return fileDescriptor_ed7f10298fa1d90f, []int{10}
}
func (m *BuildResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BuildResponse.Unmarshal(m, b)
@ -721,7 +759,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{10}
return fileDescriptor_ed7f10298fa1d90f, []int{11}
}
func (m *DisconnectRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DisconnectRequest.Unmarshal(m, b)
@ -758,7 +796,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{11}
return fileDescriptor_ed7f10298fa1d90f, []int{12}
}
func (m *DisconnectResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DisconnectResponse.Unmarshal(m, b)
@ -789,7 +827,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{12}
return fileDescriptor_ed7f10298fa1d90f, []int{13}
}
func (m *ListRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListRequest.Unmarshal(m, b)
@ -827,7 +865,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{13}
return fileDescriptor_ed7f10298fa1d90f, []int{14}
}
func (m *ListResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListResponse.Unmarshal(m, b)
@ -868,7 +906,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{14}
return fileDescriptor_ed7f10298fa1d90f, []int{15}
}
func (m *InputMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InputMessage.Unmarshal(m, b)
@ -942,7 +980,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{15}
return fileDescriptor_ed7f10298fa1d90f, []int{16}
}
func (m *InputInitMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InputInitMessage.Unmarshal(m, b)
@ -981,7 +1019,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{16}
return fileDescriptor_ed7f10298fa1d90f, []int{17}
}
func (m *DataMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DataMessage.Unmarshal(m, b)
@ -1025,7 +1063,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{17}
return fileDescriptor_ed7f10298fa1d90f, []int{18}
}
func (m *InputResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InputResponse.Unmarshal(m, b)
@ -1061,7 +1099,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{18}
return fileDescriptor_ed7f10298fa1d90f, []int{19}
}
func (m *Message) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Message.Unmarshal(m, b)
@ -1160,7 +1198,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{19}
return fileDescriptor_ed7f10298fa1d90f, []int{20}
}
func (m *InitMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InitMessage.Unmarshal(m, b)
@ -1212,7 +1250,7 @@ func (m *ContainerConfig) Reset() { *m = ContainerConfig{} }
func (m *ContainerConfig) String() string { return proto.CompactTextString(m) }
func (*ContainerConfig) ProtoMessage() {}
func (*ContainerConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_ed7f10298fa1d90f, []int{20}
return fileDescriptor_ed7f10298fa1d90f, []int{21}
}
func (m *ContainerConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ContainerConfig.Unmarshal(m, b)
@ -1301,7 +1339,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{21}
return fileDescriptor_ed7f10298fa1d90f, []int{22}
}
func (m *FdMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FdMessage.Unmarshal(m, b)
@ -1354,7 +1392,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{22}
return fileDescriptor_ed7f10298fa1d90f, []int{23}
}
func (m *ResizeMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResizeMessage.Unmarshal(m, b)
@ -1401,7 +1439,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{23}
return fileDescriptor_ed7f10298fa1d90f, []int{24}
}
func (m *SignalMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SignalMessage.Unmarshal(m, b)
@ -1439,7 +1477,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{24}
return fileDescriptor_ed7f10298fa1d90f, []int{25}
}
func (m *StatusRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StatusRequest.Unmarshal(m, b)
@ -1480,7 +1518,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{25}
return fileDescriptor_ed7f10298fa1d90f, []int{26}
}
func (m *StatusResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StatusResponse.Unmarshal(m, b)
@ -1538,7 +1576,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{26}
return fileDescriptor_ed7f10298fa1d90f, []int{27}
}
func (m *InfoRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InfoRequest.Unmarshal(m, b)
@ -1569,7 +1607,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{27}
return fileDescriptor_ed7f10298fa1d90f, []int{28}
}
func (m *InfoResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InfoResponse.Unmarshal(m, b)
@ -1609,7 +1647,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{28}
return fileDescriptor_ed7f10298fa1d90f, []int{29}
}
func (m *BuildxVersion) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BuildxVersion.Unmarshal(m, b)
@ -1660,6 +1698,7 @@ func init() {
proto.RegisterMapType((map[string]string)(nil), "buildx.controller.v1.ExportEntry.AttrsEntry")
proto.RegisterType((*CacheOptionsEntry)(nil), "buildx.controller.v1.CacheOptionsEntry")
proto.RegisterMapType((map[string]string)(nil), "buildx.controller.v1.CacheOptionsEntry.AttrsEntry")
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((*UlimitOpt)(nil), "buildx.controller.v1.UlimitOpt")
@ -1692,111 +1731,111 @@ func init() {
func init() { proto.RegisterFile("controller.proto", fileDescriptor_ed7f10298fa1d90f) }
var fileDescriptor_ed7f10298fa1d90f = []byte{
// 1654 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xeb, 0x6e, 0x1b, 0x37,
0x16, 0xde, 0x91, 0x64, 0x5d, 0x8e, 0x2c, 0xc7, 0xe1, 0x3a, 0x01, 0x57, 0x9b, 0x4d, 0x9c, 0xc9,
0x65, 0x05, 0x64, 0x21, 0x27, 0xce, 0xa6, 0xb9, 0x16, 0xa8, 0x2d, 0x5b, 0xb0, 0x0b, 0xdf, 0x30,
0x72, 0x12, 0xb4, 0x05, 0x1a, 0x8c, 0x25, 0x5a, 0x1e, 0x68, 0x34, 0x54, 0x87, 0x94, 0x6c, 0xf7,
0x57, 0x9f, 0xa0, 0xef, 0x51, 0xf4, 0x11, 0xfa, 0xab, 0xef, 0xd0, 0x77, 0xe8, 0xcf, 0xf6, 0x11,
0x0a, 0x1e, 0x72, 0xa4, 0x91, 0xa5, 0x91, 0x6d, 0xf4, 0x97, 0xc9, 0x33, 0xdf, 0x77, 0xce, 0xe1,
0xe1, 0xb9, 0x50, 0x86, 0xc5, 0x26, 0x0f, 0x64, 0xc8, 0x7d, 0x9f, 0x85, 0xd5, 0x5e, 0xc8, 0x25,
0x27, 0x4b, 0x47, 0x7d, 0xcf, 0x6f, 0x9d, 0x55, 0x63, 0x1f, 0x06, 0xcf, 0xca, 0x6f, 0xdb, 0x9e,
0x3c, 0xe9, 0x1f, 0x55, 0x9b, 0xbc, 0xbb, 0xd2, 0xe5, 0x47, 0xe7, 0x2b, 0x88, 0xea, 0x78, 0x72,
0xc5, 0xed, 0x79, 0x2b, 0x82, 0x85, 0x03, 0xaf, 0xc9, 0xc4, 0x8a, 0x21, 0x45, 0x7f, 0xb5, 0x4a,
0xfb, 0x5b, 0x98, 0x5f, 0x57, 0x70, 0x87, 0x7d, 0xd7, 0x67, 0x42, 0x92, 0x45, 0x48, 0x3b, 0xec,
0x98, 0x5a, 0xcb, 0x56, 0xa5, 0xe0, 0xa8, 0x25, 0x79, 0x07, 0xb9, 0xfd, 0x9e, 0xf4, 0x78, 0x20,
0x68, 0x6a, 0xd9, 0xaa, 0x14, 0x57, 0xed, 0xea, 0x34, 0x37, 0xaa, 0xa8, 0xc6, 0x20, 0x9d, 0x88,
0x62, 0xff, 0x5e, 0x30, 0x06, 0x8c, 0x80, 0x2c, 0x43, 0xb1, 0xc6, 0x03, 0xc9, 0xce, 0xe4, 0x81,
0x2b, 0x4f, 0x8c, 0xa1, 0xb8, 0x88, 0x3c, 0x86, 0x85, 0x0d, 0xde, 0xec, 0xb0, 0xf0, 0xd8, 0xf3,
0xd9, 0x9e, 0xdb, 0x65, 0x68, 0xb7, 0xe0, 0x5c, 0x90, 0x92, 0x3b, 0x50, 0x38, 0x08, 0xbd, 0x40,
0xd6, 0xfb, 0x41, 0x93, 0xa6, 0x11, 0x32, 0x12, 0x90, 0x6f, 0xa0, 0xa4, 0x50, 0x2d, 0xa3, 0x59,
0xd0, 0xcc, 0x72, 0xba, 0x52, 0x5c, 0x7d, 0x71, 0xb9, 0xf3, 0xd5, 0x31, 0xde, 0x66, 0x20, 0xc3,
0x73, 0x67, 0x5c, 0x17, 0x59, 0x82, 0xb9, 0x35, 0xdf, 0xe7, 0xa7, 0x74, 0x6e, 0x39, 0x5d, 0x29,
0x38, 0x7a, 0x43, 0x28, 0xe4, 0xd6, 0xa4, 0x64, 0x42, 0x0a, 0x9a, 0x45, 0x79, 0xb4, 0x25, 0xfb,
0x50, 0x40, 0x0b, 0x6b, 0x61, 0x5b, 0xd0, 0x1c, 0x3a, 0xf2, 0xec, 0x0a, 0x8e, 0x0c, 0x39, 0xda,
0x89, 0x91, 0x0e, 0xb2, 0x09, 0x85, 0x9a, 0xdb, 0x3c, 0x61, 0xf5, 0x90, 0x77, 0x69, 0x1e, 0x15,
0xfe, 0x77, 0xba, 0x42, 0x84, 0x19, 0x85, 0x46, 0xcd, 0x90, 0x49, 0xd6, 0x20, 0x87, 0x9b, 0x43,
0x4e, 0x0b, 0xd7, 0x53, 0x12, 0xf1, 0x88, 0x0d, 0xf3, 0xb5, 0x76, 0xc8, 0xfb, 0xbd, 0x03, 0x37,
0x64, 0x81, 0xa4, 0x80, 0x17, 0x31, 0x26, 0x23, 0x6f, 0x21, 0xb7, 0x79, 0xd6, 0xe3, 0xa1, 0x14,
0xb4, 0x88, 0x66, 0xee, 0x4f, 0x37, 0xa3, 0x41, 0xc6, 0x80, 0x61, 0x90, 0xbb, 0x00, 0x9b, 0x67,
0x32, 0x74, 0xb7, 0xb8, 0x0a, 0xec, 0x3c, 0x06, 0x36, 0x26, 0x21, 0x75, 0xc8, 0xee, 0xb8, 0x47,
0xcc, 0x17, 0xb4, 0x84, 0xba, 0xab, 0x57, 0x08, 0xac, 0x26, 0x68, 0x43, 0x86, 0xad, 0x12, 0x73,
0x8f, 0xc9, 0x53, 0x1e, 0x76, 0x76, 0x79, 0x8b, 0xd1, 0x05, 0x9d, 0x98, 0x31, 0x11, 0x79, 0x08,
0xa5, 0x3d, 0xae, 0x83, 0xe7, 0xf9, 0x92, 0x85, 0xf4, 0x06, 0x3a, 0x33, 0x2e, 0xc4, 0xb4, 0xf4,
0x5d, 0x79, 0xcc, 0xc3, 0xae, 0xa0, 0x8b, 0x88, 0x18, 0x09, 0xc8, 0x67, 0x90, 0x6b, 0xb0, 0x66,
0xc8, 0xa4, 0xa0, 0x37, 0xd1, 0xdd, 0x3b, 0xd3, 0xdd, 0xd5, 0x20, 0x27, 0x02, 0xab, 0xdc, 0x6a,
0x9c, 0x74, 0x1b, 0xde, 0xf7, 0x8c, 0x92, 0x65, 0xab, 0x92, 0x76, 0xa2, 0x2d, 0x79, 0x02, 0xe9,
0x46, 0x63, 0x8b, 0xfe, 0x13, 0xb5, 0xfd, 0x2b, 0x41, 0x5b, 0x63, 0xcb, 0x51, 0x28, 0x42, 0x20,
0x73, 0xe8, 0xb6, 0x05, 0x5d, 0x42, 0xbf, 0x70, 0x4d, 0x6e, 0x43, 0xf6, 0xd0, 0x0d, 0xdb, 0x4c,
0xd2, 0x5b, 0x78, 0x66, 0xb3, 0x23, 0xaf, 0x21, 0xf7, 0xde, 0xf7, 0xba, 0x9e, 0x14, 0xf4, 0x36,
0x16, 0xfe, 0xbd, 0xe9, 0xca, 0x35, 0x68, 0xbf, 0x27, 0x9d, 0x08, 0x4f, 0x5e, 0x42, 0x66, 0xbf,
0x27, 0x05, 0xa5, 0xc8, 0x7b, 0x90, 0x90, 0x54, 0xbc, 0xdb, 0xe5, 0x41, 0xd4, 0x31, 0x90, 0x50,
0xfe, 0x02, 0xc8, 0x64, 0xf5, 0xa9, 0xa6, 0xd4, 0x61, 0xe7, 0x51, 0x53, 0xea, 0xb0, 0x73, 0x55,
0x80, 0x03, 0xd7, 0xef, 0x47, 0xad, 0x41, 0x6f, 0xde, 0xa4, 0x5e, 0x59, 0xe5, 0x77, 0xb0, 0x30,
0x5e, 0x36, 0xd7, 0x62, 0xbf, 0x86, 0x62, 0x2c, 0x37, 0xae, 0x43, 0xb5, 0x7f, 0xb5, 0xa0, 0x18,
0x4b, 0x60, 0x0c, 0xf5, 0x79, 0x8f, 0x19, 0x32, 0xae, 0xc9, 0x3a, 0xcc, 0xad, 0x49, 0x19, 0xaa,
0x4e, 0xaa, 0x6e, 0xeb, 0x7f, 0x97, 0x96, 0x41, 0x15, 0xe1, 0x3a, 0x51, 0x35, 0x55, 0xe5, 0xe9,
0x06, 0x13, 0xd2, 0x0b, 0x5c, 0x15, 0x38, 0xd3, 0xf8, 0xe2, 0xa2, 0xf2, 0x2b, 0x80, 0x11, 0xed,
0x5a, 0x67, 0xf8, 0xd9, 0x82, 0x9b, 0x13, 0xb5, 0x3e, 0xf5, 0x24, 0x5b, 0xe3, 0x27, 0x59, 0xbd,
0x62, 0xdf, 0x98, 0x3c, 0xcf, 0xdf, 0xf0, 0x56, 0x67, 0x3e, 0x59, 0x80, 0xd4, 0xf6, 0x86, 0x61,
0xa4, 0xb6, 0x37, 0x14, 0x41, 0xcd, 0x11, 0xed, 0x5a, 0xc1, 0xd1, 0x1b, 0xbb, 0x0e, 0x59, 0x5d,
0x4b, 0x13, 0xf8, 0x32, 0xe4, 0xeb, 0x9e, 0xcf, 0x70, 0x1c, 0x69, 0x1b, 0xc3, 0xbd, 0x72, 0x67,
0x33, 0x18, 0x98, 0x20, 0xab, 0xa5, 0xfd, 0x93, 0x05, 0x85, 0x61, 0xc6, 0x93, 0x1a, 0x64, 0xd1,
0x1f, 0x41, 0x2d, 0x8c, 0xc3, 0x93, 0x4b, 0x4a, 0xa4, 0xfa, 0x01, 0xd1, 0xa6, 0xf3, 0x68, 0x6a,
0xf9, 0x23, 0x14, 0x63, 0xe2, 0x29, 0x21, 0x58, 0x8d, 0x87, 0x20, 0xb1, 0x65, 0x68, 0x23, 0xf1,
0x00, 0x6d, 0x40, 0x56, 0x0b, 0xd5, 0x15, 0xe2, 0x24, 0x35, 0x57, 0x88, 0xf3, 0x93, 0x40, 0x66,
0xcb, 0x0d, 0x5b, 0xa8, 0x34, 0xed, 0xe0, 0x5a, 0xc9, 0x1a, 0xfc, 0x58, 0xe2, 0x81, 0xd3, 0x0e,
0xae, 0xed, 0x3f, 0x2c, 0x28, 0x8d, 0xd5, 0xaa, 0x6a, 0x46, 0x58, 0x63, 0x2c, 0x34, 0x0a, 0xa3,
0xad, 0x9a, 0x06, 0xbb, 0x4c, 0xba, 0x2d, 0x57, 0xba, 0x2a, 0x86, 0x26, 0x9e, 0x63, 0x32, 0xc5,
0x36, 0x1d, 0x13, 0xcd, 0xe4, 0x9d, 0x68, 0xab, 0xac, 0x1f, 0xf4, 0x7d, 0x9f, 0x66, 0x50, 0x8c,
0x6b, 0xdd, 0xfe, 0x55, 0x3d, 0x1c, 0xf4, 0xc5, 0x09, 0x9d, 0xc3, 0x2f, 0x31, 0xc9, 0xe8, 0xfb,
0x0e, 0x77, 0x5b, 0x34, 0x1b, 0xff, 0xae, 0x24, 0x78, 0xa2, 0xf5, 0xfd, 0x5d, 0x9a, 0xd3, 0x27,
0x57, 0x6b, 0xc5, 0x39, 0x08, 0xf9, 0x80, 0x05, 0x6e, 0xd0, 0x64, 0x34, 0x8f, 0x5f, 0x62, 0x12,
0xfb, 0x17, 0x0b, 0x4a, 0xe6, 0x55, 0x24, 0x7a, 0x3c, 0x10, 0x8c, 0x30, 0x58, 0xd4, 0x3a, 0x59,
0x18, 0xc9, 0xcc, 0x8d, 0xbf, 0x9e, 0x31, 0x6e, 0x22, 0x68, 0xf5, 0x22, 0x57, 0xdf, 0xff, 0x84,
0xca, 0x72, 0x0d, 0x6e, 0x4d, 0x85, 0x5e, 0xab, 0x2c, 0x1e, 0xc1, 0xcd, 0x0d, 0x4f, 0x34, 0x79,
0x10, 0xb0, 0xa6, 0x4c, 0x7c, 0xd7, 0xd9, 0x4b, 0x40, 0xe2, 0x30, 0x6d, 0xcd, 0xbe, 0x07, 0xc5,
0x1d, 0x4f, 0xcc, 0xa0, 0xd9, 0x30, 0xaf, 0x01, 0x26, 0x32, 0x04, 0x32, 0x1d, 0x76, 0xae, 0xf3,
0xbf, 0xe0, 0xe0, 0xda, 0xfe, 0xd1, 0x82, 0xf9, 0xed, 0xa0, 0xd7, 0x97, 0xbb, 0x4c, 0x08, 0xb7,
0xcd, 0xc8, 0x3b, 0xc8, 0x6c, 0x07, 0x9e, 0x44, 0x3d, 0xc5, 0xd5, 0xc7, 0xd3, 0x43, 0x86, 0x0c,
0x05, 0x33, 0xac, 0xad, 0x7f, 0x38, 0xc8, 0x52, 0xd3, 0x64, 0xc3, 0x95, 0xae, 0xc9, 0xfe, 0x84,
0xb7, 0x83, 0x42, 0xc4, 0x88, 0x6a, 0xbb, 0x9e, 0x83, 0x39, 0x54, 0x6a, 0x3f, 0x84, 0xc5, 0x8b,
0xda, 0xa7, 0x1c, 0xed, 0x39, 0x14, 0x63, 0x5a, 0xb0, 0xf6, 0xf7, 0xeb, 0x08, 0xc8, 0x3b, 0x6a,
0xa9, 0xce, 0x3a, 0x74, 0x64, 0x5e, 0xdb, 0xb0, 0x6f, 0x40, 0x09, 0x55, 0x0f, 0x23, 0xf8, 0x43,
0x0a, 0x72, 0x91, 0x8a, 0x97, 0x63, 0xe7, 0xbe, 0x9f, 0x74, 0xee, 0xc9, 0x23, 0xbf, 0x80, 0xcc,
0xb0, 0x7e, 0x12, 0x07, 0x6f, 0xbd, 0x15, 0xa3, 0x61, 0x69, 0x7d, 0x0e, 0x59, 0x87, 0x09, 0xf5,
0x48, 0x48, 0xcf, 0x9a, 0xbc, 0x1a, 0x33, 0x22, 0x1b, 0x92, 0xa2, 0x37, 0xbc, 0x76, 0xe0, 0xea,
0x0a, 0x4c, 0xa4, 0x6b, 0x4c, 0x8c, 0xae, 0x05, 0xa3, 0x70, 0xf7, 0xa0, 0x38, 0x33, 0xd2, 0x64,
0x1f, 0x6e, 0xa8, 0x09, 0xef, 0x7a, 0x01, 0x0b, 0x6b, 0x3c, 0x38, 0xf6, 0xda, 0xe6, 0xa4, 0x8f,
0x92, 0x9e, 0x0a, 0x63, 0x60, 0xe7, 0x22, 0x5b, 0x55, 0xec, 0x45, 0x19, 0x76, 0x06, 0x55, 0x3c,
0x3d, 0xee, 0x05, 0xd2, 0xe4, 0x67, 0x4c, 0xa2, 0xdc, 0xaa, 0x75, 0x5b, 0x66, 0x4a, 0xa8, 0xe5,
0xa8, 0xdb, 0xa7, 0x4d, 0xb7, 0x57, 0x37, 0xfe, 0x5e, 0xb0, 0x10, 0xe3, 0x51, 0x70, 0x70, 0xad,
0xde, 0x4b, 0x7b, 0x1c, 0xa5, 0xba, 0x1b, 0x99, 0x1d, 0xea, 0x3b, 0xd5, 0x2d, 0x48, 0xe9, 0x3b,
0x6d, 0xa9, 0x1a, 0xdd, 0xe3, 0x4a, 0x96, 0x43, 0xa0, 0xde, 0x28, 0xdc, 0xa1, 0x3c, 0xc7, 0xb6,
0x93, 0x77, 0xd4, 0xd2, 0x5e, 0x83, 0xc2, 0xf0, 0x2e, 0xd5, 0x78, 0xaa, 0xb7, 0x30, 0x58, 0x25,
0x27, 0x55, 0x6f, 0x45, 0x69, 0x98, 0x9a, 0x4c, 0xc3, 0x74, 0x2c, 0x0d, 0x5f, 0x42, 0x69, 0xec,
0x56, 0x15, 0xc8, 0xe1, 0xa7, 0xc2, 0x28, 0xc2, 0xb5, 0x92, 0xd5, 0xb8, 0xaf, 0x7f, 0xc7, 0x95,
0x1c, 0x5c, 0xdb, 0x0f, 0xa0, 0x34, 0x76, 0x9f, 0xd3, 0x46, 0x85, 0x7d, 0x1f, 0x4a, 0x0d, 0xe9,
0xca, 0xbe, 0x48, 0xee, 0x0b, 0x7f, 0x5a, 0xb0, 0x10, 0x61, 0x4c, 0x6b, 0xf8, 0x3f, 0xe4, 0x07,
0x2c, 0x94, 0xec, 0x6c, 0x38, 0x1e, 0x69, 0x55, 0xfd, 0x40, 0xad, 0x46, 0x3f, 0x50, 0xd5, 0xd5,
0x7e, 0x40, 0x84, 0x33, 0x44, 0x92, 0x37, 0x90, 0x17, 0xa8, 0x87, 0x45, 0x8f, 0x8b, 0xbb, 0x49,
0x2c, 0x63, 0x6f, 0x88, 0x27, 0x2b, 0x90, 0xf1, 0x79, 0x5b, 0xe0, 0x0d, 0x16, 0x57, 0xff, 0x9d,
0xc4, 0xdb, 0xe1, 0x6d, 0x07, 0x81, 0xe4, 0x2d, 0xe4, 0x4f, 0xdd, 0x30, 0xf0, 0x82, 0x76, 0xf4,
0x03, 0xf1, 0x5e, 0x12, 0xe9, 0xa3, 0xc6, 0x39, 0x43, 0x82, 0x5d, 0x52, 0x69, 0x7e, 0xcc, 0x4d,
0x4c, 0xec, 0xaf, 0x54, 0xd3, 0x53, 0x5b, 0x73, 0xfc, 0x6d, 0x28, 0xe9, 0x64, 0xfe, 0xc0, 0x42,
0xa1, 0x9e, 0x6a, 0xd6, 0xac, 0xa2, 0x5a, 0x8f, 0x43, 0x9d, 0x71, 0xa6, 0xfd, 0xc9, 0xcc, 0xa3,
0x48, 0xa0, 0x66, 0x68, 0xcf, 0x6d, 0x76, 0xdc, 0x76, 0x74, 0x4f, 0xd1, 0x56, 0x7d, 0x19, 0x18,
0x7b, 0x7a, 0x32, 0x44, 0x5b, 0xf5, 0xce, 0x09, 0xd9, 0xc0, 0x13, 0xa3, 0x57, 0xe3, 0x70, 0xbf,
0xfa, 0x5b, 0x06, 0xa0, 0x36, 0xf4, 0x87, 0x1c, 0xc0, 0x1c, 0xda, 0x23, 0xf6, 0xcc, 0xe9, 0x86,
0xe7, 0x2e, 0x3f, 0xb8, 0xc2, 0x04, 0x24, 0xef, 0x21, 0xab, 0x6f, 0x8b, 0x24, 0x35, 0x95, 0x78,
0x7e, 0x95, 0x1f, 0xce, 0x06, 0x69, 0xa5, 0x4f, 0x2d, 0xe2, 0x98, 0x96, 0x93, 0xe4, 0x68, 0x7c,
0x0a, 0x25, 0x39, 0x3a, 0xd6, 0xbe, 0x2b, 0x16, 0xf9, 0x12, 0xb2, 0xdb, 0xc1, 0x80, 0x77, 0x18,
0xf9, 0xcf, 0x74, 0x42, 0xa4, 0x6f, 0xf6, 0xe7, 0x8a, 0xf5, 0xd4, 0x22, 0xbb, 0x90, 0x51, 0xd3,
0x92, 0x24, 0xb4, 0xfe, 0xd8, 0xa8, 0x2d, 0xdb, 0xb3, 0x20, 0x26, 0x8a, 0x9f, 0x00, 0x46, 0x33,
0x9b, 0x24, 0xfc, 0x58, 0x9f, 0x18, 0xfe, 0xe5, 0xca, 0xe5, 0x40, 0x63, 0x60, 0x57, 0x0d, 0xac,
0x63, 0x4e, 0x12, 0x47, 0xd5, 0x30, 0xdd, 0xcb, 0xf6, 0x2c, 0x88, 0x56, 0xb7, 0x9e, 0xf9, 0x3a,
0xd5, 0x3b, 0x3a, 0xca, 0xe2, 0xbf, 0x9a, 0x9e, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xd9,
0xb0, 0xd0, 0xd1, 0x12, 0x00, 0x00,
// 1657 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x6e, 0xdb, 0xc6,
0x12, 0x3e, 0x94, 0x64, 0xfd, 0x8c, 0x2c, 0xc7, 0xd9, 0xe3, 0x04, 0x3c, 0x3a, 0x39, 0x89, 0xc3,
0xfc, 0x1c, 0x01, 0x29, 0xe4, 0xc4, 0x69, 0x9a, 0xdf, 0x02, 0xb5, 0x25, 0x0b, 0x76, 0xe1, 0x3f,
0x50, 0x4e, 0x82, 0xb6, 0x40, 0x03, 0x5a, 0x5a, 0xcb, 0x84, 0x28, 0xae, 0xca, 0x5d, 0xc9, 0x56,
0xaf, 0x7a, 0xd3, 0xdb, 0xbe, 0x47, 0xd1, 0x47, 0xe8, 0x55, 0xdf, 0xa1, 0x0f, 0xd2, 0x47, 0x28,
0x76, 0x76, 0x49, 0x51, 0x96, 0x28, 0xdb, 0xe8, 0x95, 0x77, 0x86, 0xdf, 0x37, 0xb3, 0x3b, 0x3b,
0x3f, 0x2b, 0xc3, 0x72, 0x8b, 0xf9, 0x22, 0x60, 0x9e, 0x47, 0x83, 0x6a, 0x3f, 0x60, 0x82, 0x91,
0x95, 0xe3, 0x81, 0xeb, 0xb5, 0xcf, 0xab, 0xb1, 0x0f, 0xc3, 0x67, 0xe5, 0xb7, 0x1d, 0x57, 0x9c,
0x0e, 0x8e, 0xab, 0x2d, 0xd6, 0x5b, 0xeb, 0xb1, 0xe3, 0xd1, 0x1a, 0xa2, 0xba, 0xae, 0x58, 0x73,
0xfa, 0xee, 0x1a, 0xa7, 0xc1, 0xd0, 0x6d, 0x51, 0xbe, 0xa6, 0x49, 0xe1, 0x5f, 0x65, 0xd2, 0xfa,
0x1e, 0x16, 0x37, 0x25, 0xdc, 0xa6, 0x3f, 0x0c, 0x28, 0x17, 0x64, 0x19, 0xd2, 0x36, 0x3d, 0x31,
0x8d, 0x55, 0xa3, 0x52, 0xb0, 0xe5, 0x92, 0xbc, 0x83, 0xdc, 0x41, 0x5f, 0xb8, 0xcc, 0xe7, 0x66,
0x6a, 0xd5, 0xa8, 0x14, 0xd7, 0xad, 0xea, 0xac, 0x6d, 0x54, 0xd1, 0x8c, 0x46, 0xda, 0x21, 0xc5,
0xfa, 0x19, 0xb4, 0x03, 0xad, 0x20, 0xab, 0x50, 0xac, 0x31, 0x5f, 0xd0, 0x73, 0x71, 0xe8, 0x88,
0x53, 0xed, 0x28, 0xae, 0x22, 0x8f, 0x61, 0xa9, 0xce, 0x5a, 0x5d, 0x1a, 0x9c, 0xb8, 0x1e, 0xdd,
0x77, 0x7a, 0x14, 0xfd, 0x16, 0xec, 0x0b, 0x5a, 0x72, 0x07, 0x0a, 0x87, 0x81, 0xeb, 0x8b, 0xc6,
0xc0, 0x6f, 0x99, 0x69, 0x84, 0x8c, 0x15, 0xe4, 0x3b, 0x28, 0x49, 0x54, 0x5b, 0x5b, 0xe6, 0x66,
0x66, 0x35, 0x5d, 0x29, 0xae, 0xbf, 0xb8, 0x7c, 0xf3, 0xd5, 0x09, 0xde, 0x96, 0x2f, 0x82, 0x91,
0x3d, 0x69, 0x8b, 0xac, 0xc0, 0xc2, 0x86, 0xe7, 0xb1, 0x33, 0x73, 0x61, 0x35, 0x5d, 0x29, 0xd8,
0x4a, 0x20, 0x5f, 0x40, 0x6e, 0x43, 0x08, 0xca, 0x05, 0x37, 0xb3, 0xe8, 0xec, 0xce, 0x6c, 0x67,
0x0a, 0x64, 0x87, 0x60, 0x72, 0x00, 0x05, 0xf4, 0xbf, 0x11, 0x74, 0xb8, 0x99, 0x43, 0xe6, 0xb3,
0x2b, 0x6c, 0x33, 0xe2, 0xa8, 0x2d, 0x8e, 0x6d, 0x90, 0x2d, 0x28, 0xd4, 0x9c, 0xd6, 0x29, 0x6d,
0x04, 0xac, 0x67, 0xe6, 0xd1, 0xe0, 0xff, 0x67, 0x1b, 0x44, 0x98, 0x36, 0xa8, 0xcd, 0x44, 0x4c,
0xb2, 0x01, 0x39, 0x14, 0x8e, 0x98, 0x59, 0xb8, 0x9e, 0x91, 0x90, 0x47, 0x2c, 0x58, 0xac, 0x75,
0x02, 0x36, 0xe8, 0x1f, 0x3a, 0x01, 0xf5, 0x85, 0x09, 0x78, 0x4d, 0x13, 0x3a, 0xf2, 0x16, 0x72,
0x5b, 0xe7, 0x7d, 0x16, 0x08, 0x6e, 0x16, 0xd1, 0xcd, 0xfd, 0xd9, 0x6e, 0x14, 0x48, 0x3b, 0xd0,
0x0c, 0x72, 0x17, 0x60, 0xeb, 0x5c, 0x04, 0xce, 0x36, 0x93, 0x61, 0x5f, 0xc4, 0xeb, 0x88, 0x69,
0x48, 0x03, 0xb2, 0xbb, 0xce, 0x31, 0xf5, 0xb8, 0x59, 0x42, 0xdb, 0xd5, 0x2b, 0x04, 0x56, 0x11,
0x94, 0x23, 0xcd, 0x96, 0x69, 0xbb, 0x4f, 0xc5, 0x19, 0x0b, 0xba, 0x7b, 0xac, 0x4d, 0xcd, 0x25,
0x95, 0xb6, 0x31, 0x15, 0x79, 0x08, 0xa5, 0x7d, 0xa6, 0x82, 0xe7, 0x7a, 0x82, 0x06, 0xe6, 0x0d,
0xdc, 0xcc, 0xa4, 0x12, 0x93, 0xd6, 0x73, 0xc4, 0x09, 0x0b, 0x7a, 0xdc, 0x5c, 0x46, 0xc4, 0x58,
0x21, 0x33, 0xa8, 0x49, 0x5b, 0x01, 0x15, 0xdc, 0xbc, 0x39, 0x2f, 0x83, 0x14, 0xc8, 0x0e, 0xc1,
0xc4, 0x84, 0x5c, 0xf3, 0xb4, 0xd7, 0x74, 0x7f, 0xa4, 0x26, 0x59, 0x35, 0x2a, 0x69, 0x3b, 0x14,
0xc9, 0x13, 0x48, 0x37, 0x9b, 0xdb, 0xe6, 0xbf, 0xd1, 0xda, 0x7f, 0x12, 0xac, 0x35, 0xb7, 0x6d,
0x89, 0x22, 0x04, 0x32, 0x47, 0x4e, 0x87, 0x9b, 0x2b, 0xb8, 0x2f, 0x5c, 0x93, 0xdb, 0x90, 0x3d,
0x72, 0x82, 0x0e, 0x15, 0xe6, 0x2d, 0x3c, 0xb3, 0x96, 0xc8, 0x6b, 0xc8, 0xbd, 0xf7, 0xdc, 0x9e,
0x2b, 0xb8, 0x79, 0x1b, 0xdb, 0xc2, 0xbd, 0xd9, 0xc6, 0x15, 0xe8, 0xa0, 0x2f, 0xec, 0x10, 0x4f,
0x5e, 0x42, 0xe6, 0xa0, 0x2f, 0xb8, 0x69, 0x22, 0xef, 0x41, 0x42, 0x52, 0xb1, 0x5e, 0x8f, 0xf9,
0x61, 0x3f, 0x41, 0x42, 0xf9, 0x2b, 0x20, 0xd3, 0xb5, 0x29, 0x5b, 0x56, 0x97, 0x8e, 0xc2, 0x96,
0xd5, 0xa5, 0x23, 0x59, 0x9e, 0x43, 0xc7, 0x1b, 0x84, 0x8d, 0x43, 0x09, 0x6f, 0x52, 0xaf, 0x8c,
0xf2, 0x3b, 0x58, 0x9a, 0x2c, 0x9b, 0x6b, 0xb1, 0x5f, 0x43, 0x31, 0x96, 0x1b, 0xd7, 0xa1, 0x5a,
0x7f, 0x18, 0x50, 0x8c, 0x25, 0x30, 0x86, 0x7a, 0xd4, 0xa7, 0x9a, 0x8c, 0x6b, 0xb2, 0x09, 0x0b,
0x1b, 0x42, 0x04, 0xb2, 0xcf, 0xca, 0xdb, 0xfa, 0xec, 0xd2, 0x32, 0xa8, 0x22, 0x5c, 0x25, 0xaa,
0xa2, 0xca, 0x3c, 0xad, 0x53, 0x2e, 0x5c, 0xdf, 0x91, 0x81, 0xd3, 0x6d, 0x31, 0xae, 0x2a, 0xbf,
0x02, 0x18, 0xd3, 0xae, 0x75, 0x86, 0xdf, 0x0c, 0xb8, 0x39, 0x55, 0xeb, 0x33, 0x4f, 0xb2, 0x3d,
0x79, 0x92, 0xf5, 0x2b, 0xf6, 0x8d, 0xe9, 0xf3, 0xfc, 0x83, 0xdd, 0xee, 0x43, 0x56, 0x35, 0xd8,
0x99, 0x3b, 0x2c, 0x43, 0xbe, 0xee, 0x72, 0xe7, 0xd8, 0xa3, 0x6d, 0xa4, 0xe6, 0xed, 0x48, 0xc6,
0xee, 0x8e, 0xbb, 0x57, 0xd1, 0x53, 0x82, 0xa5, 0x2a, 0x89, 0x2c, 0x41, 0x6a, 0xa7, 0xae, 0x4d,
0xa5, 0x76, 0xea, 0x12, 0x2c, 0xa7, 0x96, 0x3a, 0x6a, 0xc1, 0x56, 0x82, 0xd5, 0x80, 0xac, 0xaa,
0xcd, 0x29, 0x7c, 0x19, 0xf2, 0x0d, 0xd7, 0xa3, 0x38, 0xfc, 0xd4, 0x9e, 0x23, 0x59, 0x1e, 0x6f,
0xcb, 0x1f, 0x6a, 0xb7, 0x72, 0x69, 0xfd, 0x6a, 0x40, 0x21, 0xaa, 0x20, 0x52, 0x83, 0x2c, 0x9e,
0x8f, 0x9b, 0x06, 0xc6, 0xf5, 0xc9, 0x25, 0x25, 0x57, 0xfd, 0x80, 0x68, 0xdd, 0xc9, 0x14, 0xb5,
0xfc, 0x11, 0x8a, 0x31, 0xf5, 0x8c, 0x90, 0xae, 0xc7, 0x43, 0x9a, 0xd8, 0x82, 0x94, 0x93, 0x78,
0xc0, 0xeb, 0x90, 0x55, 0x4a, 0x19, 0x70, 0x9c, 0xdb, 0x3a, 0xe0, 0x38, 0xad, 0x09, 0x64, 0xb6,
0x9d, 0x40, 0x05, 0x3b, 0x6d, 0xe3, 0x5a, 0xea, 0x9a, 0xec, 0x44, 0xe0, 0x81, 0xd3, 0x36, 0xae,
0xad, 0xdf, 0x0d, 0x28, 0x4d, 0xd4, 0xbe, 0x6c, 0x6e, 0x58, 0xb3, 0x34, 0xd0, 0x06, 0x43, 0x51,
0x4e, 0x97, 0x3d, 0x2a, 0x9c, 0xb6, 0x23, 0x1c, 0x19, 0x43, 0x1d, 0xcf, 0x09, 0x9d, 0x64, 0xeb,
0x0e, 0x8c, 0x6e, 0xf2, 0x76, 0x28, 0x4a, 0xef, 0x87, 0x03, 0xcf, 0x33, 0x33, 0xa8, 0xc6, 0xb5,
0x1a, 0x27, 0xb2, 0xbe, 0x0e, 0x07, 0xfc, 0xd4, 0x5c, 0xc0, 0x2f, 0x31, 0xcd, 0xf8, 0xfb, 0x2e,
0x73, 0xda, 0x66, 0x36, 0xfe, 0x5d, 0x6a, 0x70, 0xf7, 0xfa, 0x3d, 0xc5, 0xfb, 0xcc, 0xe7, 0x94,
0x50, 0x58, 0x56, 0xdf, 0x69, 0x10, 0xea, 0xf4, 0xed, 0xbd, 0x9e, 0x33, 0x8a, 0x42, 0x68, 0xf5,
0x22, 0x57, 0xdd, 0xe5, 0x94, 0xc9, 0x72, 0x0d, 0x6e, 0xcd, 0x84, 0x5e, 0xab, 0x64, 0x1e, 0xc1,
0xcd, 0xba, 0xcb, 0x5b, 0xcc, 0xf7, 0x69, 0x4b, 0x24, 0xbe, 0x08, 0xad, 0x15, 0x20, 0x71, 0x98,
0xf2, 0x66, 0xdd, 0x83, 0xe2, 0xae, 0xcb, 0xe7, 0xd0, 0x2c, 0x58, 0x54, 0x00, 0x1d, 0x19, 0x02,
0x99, 0x2e, 0x1d, 0xa9, 0x5c, 0x2e, 0xd8, 0xb8, 0xb6, 0x7e, 0x31, 0x60, 0x71, 0xc7, 0xef, 0x0f,
0xc4, 0x1e, 0xe5, 0xdc, 0xe9, 0x50, 0xf2, 0x0e, 0x32, 0x3b, 0xbe, 0x2b, 0xd0, 0x4e, 0x71, 0xfd,
0xf1, 0xec, 0x90, 0x21, 0x43, 0xc2, 0x34, 0x6b, 0xfb, 0x5f, 0x36, 0xb2, 0xe4, 0xa4, 0xa9, 0x3b,
0xc2, 0xd1, 0x99, 0x9c, 0xf0, 0xae, 0x90, 0x88, 0x18, 0x51, 0x8a, 0x9b, 0x39, 0x58, 0x40, 0xa3,
0xd6, 0x43, 0x58, 0xbe, 0x68, 0x7d, 0xc6, 0xd1, 0x9e, 0x43, 0x31, 0x66, 0x05, 0xeb, 0xf8, 0xa0,
0x81, 0x80, 0xbc, 0x2d, 0x97, 0xf2, 0xac, 0xd1, 0x46, 0x16, 0x95, 0x0f, 0xeb, 0x06, 0x94, 0xd0,
0x74, 0x14, 0xc1, 0x9f, 0x52, 0x90, 0x0b, 0x4d, 0xbc, 0x9c, 0x38, 0xf7, 0xfd, 0xa4, 0x73, 0x4f,
0x1f, 0xf9, 0x05, 0x64, 0xa2, 0x5a, 0x48, 0x1c, 0xca, 0x8d, 0x76, 0x8c, 0x86, 0x65, 0xf2, 0x25,
0x64, 0x6d, 0xca, 0xe5, 0x03, 0x22, 0x3d, 0x6f, 0x2a, 0x2b, 0xcc, 0x98, 0xac, 0x49, 0x92, 0xde,
0x74, 0x3b, 0xbe, 0xa3, 0xaa, 0x29, 0x91, 0xae, 0x30, 0x31, 0xba, 0x52, 0x8c, 0xc3, 0xdd, 0x87,
0xe2, 0xdc, 0x48, 0x93, 0x03, 0xb8, 0x21, 0xa7, 0xbf, 0xe3, 0xfa, 0x34, 0xa8, 0x31, 0xff, 0xc4,
0xed, 0xe8, 0x93, 0x3e, 0x4a, 0x7a, 0x46, 0x4c, 0x80, 0xed, 0x8b, 0x6c, 0x59, 0xb1, 0x17, 0x75,
0x58, 0xe5, 0xb2, 0x78, 0xfa, 0xcc, 0xf5, 0x85, 0xce, 0xcf, 0x98, 0x46, 0x6e, 0xab, 0xd6, 0x6b,
0xeb, 0x8e, 0x2f, 0x97, 0xe3, 0xce, 0x9d, 0xd6, 0x9d, 0x5b, 0xde, 0xf8, 0x7b, 0x4e, 0x03, 0x8c,
0x47, 0xc1, 0xc6, 0xb5, 0x7c, 0x4b, 0xed, 0x33, 0xd4, 0xaa, 0xce, 0xa2, 0x25, 0xb4, 0x77, 0xa6,
0xda, 0x89, 0xb4, 0x77, 0x86, 0x23, 0x68, 0x9f, 0x49, 0x5d, 0x0e, 0x81, 0x4a, 0x90, 0xb8, 0x23,
0x31, 0x32, 0xf3, 0x2a, 0xaf, 0x8e, 0xc4, 0xc8, 0xda, 0x80, 0x42, 0x74, 0x97, 0x72, 0xd4, 0x34,
0xda, 0x18, 0xac, 0x92, 0x9d, 0x6a, 0xb4, 0xc3, 0x34, 0x4c, 0x4d, 0xa7, 0x61, 0x3a, 0x96, 0x86,
0x2f, 0xa1, 0x34, 0x71, 0xab, 0x12, 0x64, 0xb3, 0x33, 0xae, 0x0d, 0xe1, 0x5a, 0xea, 0x6a, 0xcc,
0x53, 0xbf, 0x00, 0x4b, 0x36, 0xae, 0xad, 0x07, 0x50, 0x9a, 0xb8, 0xcf, 0x59, 0x6d, 0xdf, 0xba,
0x0f, 0xa5, 0xa6, 0x70, 0xc4, 0x80, 0x27, 0xf7, 0x85, 0xbf, 0x0c, 0x58, 0x0a, 0x31, 0xba, 0x35,
0x7c, 0x0e, 0xf9, 0x21, 0x0d, 0x04, 0x3d, 0x8f, 0x46, 0x9d, 0x59, 0x95, 0x3f, 0x6d, 0xab, 0xe1,
0x4f, 0x5b, 0x79, 0xb5, 0x1f, 0x10, 0x61, 0x47, 0x48, 0xf2, 0x06, 0xf2, 0x1c, 0xed, 0xd0, 0xf0,
0xe1, 0x71, 0x37, 0x89, 0xa5, 0xfd, 0x45, 0x78, 0xb2, 0x06, 0x19, 0x8f, 0x75, 0x38, 0xde, 0x60,
0x71, 0xfd, 0xbf, 0x49, 0xbc, 0x5d, 0xd6, 0xb1, 0x11, 0x48, 0xde, 0x42, 0xfe, 0xcc, 0x09, 0x7c,
0xd7, 0xef, 0x84, 0x3f, 0x2d, 0xef, 0x25, 0x91, 0x3e, 0x2a, 0x9c, 0x1d, 0x11, 0xac, 0x92, 0x4c,
0xf3, 0x13, 0xa6, 0x63, 0x62, 0x7d, 0x23, 0x9b, 0x9e, 0x14, 0xf5, 0xf1, 0x77, 0xa0, 0xa4, 0x92,
0xf9, 0x03, 0x0d, 0xb8, 0x7c, 0xc6, 0x19, 0xf3, 0x8a, 0x6a, 0x33, 0x0e, 0xb5, 0x27, 0x99, 0xd6,
0x27, 0x3d, 0x8f, 0x42, 0x85, 0x9c, 0x87, 0x7d, 0xa7, 0xd5, 0x75, 0x3a, 0xe1, 0x3d, 0x85, 0xa2,
0xfc, 0x32, 0xd4, 0xfe, 0xd4, 0x64, 0x08, 0x45, 0xf9, 0x66, 0x09, 0xe8, 0xd0, 0xe5, 0xe3, 0x17,
0x65, 0x24, 0xaf, 0xff, 0x99, 0x01, 0xa8, 0x45, 0xfb, 0x21, 0x87, 0xb0, 0x80, 0xfe, 0x88, 0x35,
0x77, 0xba, 0xe1, 0xb9, 0xcb, 0x0f, 0xae, 0x30, 0x01, 0xc9, 0x7b, 0xc8, 0xaa, 0xdb, 0x22, 0x49,
0x4d, 0x25, 0x9e, 0x5f, 0xe5, 0x87, 0xf3, 0x41, 0xca, 0xe8, 0x53, 0x83, 0xd8, 0xba, 0xe5, 0x24,
0x6d, 0x34, 0x3e, 0x85, 0x92, 0x36, 0x3a, 0xd1, 0xbe, 0x2b, 0x06, 0xf9, 0x1a, 0xb2, 0x3b, 0xfe,
0x90, 0x75, 0x29, 0xf9, 0xdf, 0x6c, 0x42, 0x68, 0x6f, 0xfe, 0xe7, 0x8a, 0xf1, 0xd4, 0x20, 0x7b,
0x90, 0x91, 0xd3, 0x92, 0x24, 0xb4, 0xfe, 0xd8, 0xa8, 0x2d, 0x5b, 0xf3, 0x20, 0x3a, 0x8a, 0x9f,
0x00, 0xc6, 0x33, 0x9b, 0x24, 0xfc, 0x90, 0x9f, 0x1a, 0xfe, 0xe5, 0xca, 0xe5, 0x40, 0xed, 0x60,
0x4f, 0x0e, 0xac, 0x13, 0x46, 0x12, 0x47, 0x55, 0x94, 0xee, 0x65, 0x6b, 0x1e, 0x44, 0x99, 0xdb,
0xcc, 0x7c, 0x9b, 0xea, 0x1f, 0x1f, 0x67, 0xf1, 0x9f, 0x54, 0xcf, 0xff, 0x0e, 0x00, 0x00, 0xff,
0xff, 0xf4, 0x2e, 0xaa, 0xc4, 0x0b, 0x13, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@ -28,7 +28,7 @@ message BuildOptions {
map<string, string> NamedContexts = 4;
repeated string Allow = 5;
repeated string Attests = 6; // TODO
repeated Attest Attests = 6;
map<string, string> BuildArgs = 7;
repeated CacheOptionsEntry CacheFrom = 8;
repeated CacheOptionsEntry CacheTo = 9;
@ -60,6 +60,12 @@ message CacheOptionsEntry {
map<string, string> Attrs = 2;
}
message Attest {
string Type = 1;
bool Disabled = 2;
string Attrs = 3;
}
message SSH {
string ID = 1;
repeated string Paths = 2;
@ -89,8 +95,6 @@ message CommonOptions {
bool Pull = 4;
bool ExportPush = 5;
bool ExportLoad = 6;
string SBOM = 7; // TODO
string Provenance = 8; // TODO
}
message BuildResponse {

View File

@ -6,6 +6,7 @@ import (
"strconv"
"strings"
controllerapi "github.com/docker/buildx/controller/pb"
"github.com/pkg/errors"
)
@ -14,66 +15,66 @@ func CanonicalizeAttest(attestType string, in string) string {
return ""
}
if b, err := strconv.ParseBool(in); err == nil {
return fmt.Sprintf("type=%s,enabled=%t", attestType, b)
return fmt.Sprintf("type=%s,disabled=%t", attestType, !b)
}
return fmt.Sprintf("type=%s,%s", attestType, in)
}
func ParseAttests(in []string) (map[string]*string, error) {
out := map[string]*string{}
func ParseAttests(in []string) ([]*controllerapi.Attest, error) {
out := []*controllerapi.Attest{}
found := map[string]struct{}{}
for _, in := range in {
in := in
attestType, enabled, err := parseAttest(in)
attest, err := parseAttest(in)
if err != nil {
return nil, err
}
k := "attest:" + attestType
if _, ok := out[k]; ok {
return nil, errors.Errorf("duplicate attestation field %s", attestType)
}
if enabled {
out[k] = &in
} else {
out[k] = nil
if _, ok := found[attest.Type]; ok {
return nil, errors.Errorf("duplicate attestation field %s", attest.Type)
}
found[attest.Type] = struct{}{}
out = append(out, attest)
}
return out, nil
}
func parseAttest(in string) (string, bool, error) {
func parseAttest(in string) (*controllerapi.Attest, error) {
if in == "" {
return "", false, nil
return nil, nil
}
csvReader := csv.NewReader(strings.NewReader(in))
fields, err := csvReader.Read()
if err != nil {
return "", false, err
return nil, err
}
attestType := ""
enabled := true
attest := controllerapi.Attest{
Attrs: in,
}
for _, field := range fields {
key, value, ok := strings.Cut(field, "=")
if !ok {
return "", false, errors.Errorf("invalid value %s", field)
return nil, errors.Errorf("invalid value %s", field)
}
key = strings.TrimSpace(strings.ToLower(key))
switch key {
case "type":
attestType = value
case "enabled":
enabled, err = strconv.ParseBool(value)
attest.Type = value
case "disabled":
disabled, err := strconv.ParseBool(value)
if err != nil {
return "", false, err
return nil, errors.Wrapf(err, "invalid value %s", field)
}
attest.Disabled = disabled
}
}
if attestType == "" {
return "", false, errors.Errorf("attestation type not specified")
if attest.Type == "" {
return nil, errors.Errorf("attestation type not specified")
}
return attestType, enabled, nil
return &attest, nil
}