// Copyright 2018 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.33.0
// 	protoc        v5.26.1
// source: go.chromium.org/luci/buildbucket/proto/launcher.proto

package buildbucketpb

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// A collection of build-related secrets we might pass from Buildbucket to Kitchen.
type BuildSecrets struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// A BUILD token to identify UpdateBuild RPCs associated with the same build.
	BuildToken string `protobuf:"bytes,1,opt,name=build_token,json=buildToken,proto3" json:"build_token,omitempty"`
	// Token to allow updating this build's invocation in ResultDB.
	ResultdbInvocationUpdateToken string `protobuf:"bytes,2,opt,name=resultdb_invocation_update_token,json=resultdbInvocationUpdateToken,proto3" json:"resultdb_invocation_update_token,omitempty"`
	// A START_BUILD token to identify StartBuild RPCs associated with
	// the same build.
	StartBuildToken string `protobuf:"bytes,3,opt,name=start_build_token,json=startBuildToken,proto3" json:"start_build_token,omitempty"`
}

func (x *BuildSecrets) Reset() {
	*x = BuildSecrets{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildSecrets) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildSecrets) ProtoMessage() {}

func (x *BuildSecrets) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuildSecrets.ProtoReflect.Descriptor instead.
func (*BuildSecrets) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescGZIP(), []int{0}
}

func (x *BuildSecrets) GetBuildToken() string {
	if x != nil {
		return x.BuildToken
	}
	return ""
}

func (x *BuildSecrets) GetResultdbInvocationUpdateToken() string {
	if x != nil {
		return x.ResultdbInvocationUpdateToken
	}
	return ""
}

func (x *BuildSecrets) GetStartBuildToken() string {
	if x != nil {
		return x.StartBuildToken
	}
	return ""
}

// Arguments for bbagent command.
//
// All paths are relateive to bbagent's working directory, and must be delimited
// with slashes ("/"), regardless of the host OS.
type BBAgentArgs struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Path to the user executable.
	//
	// Deprecated. Superseded by payload_path and `build.exe.cmd`.
	ExecutablePath string `protobuf:"bytes,1,opt,name=executable_path,json=executablePath,proto3" json:"executable_path,omitempty"`
	// Path to the base of the user executable package.
	//
	// Required.
	PayloadPath string `protobuf:"bytes,5,opt,name=payload_path,json=payloadPath,proto3" json:"payload_path,omitempty"`
	// Path to a directory where each subdirectory is a cache dir.
	//
	// Required.
	CacheDir string `protobuf:"bytes,2,opt,name=cache_dir,json=cacheDir,proto3" json:"cache_dir,omitempty"`
	// List of Gerrit hosts to force git authentication for.
	//
	// By default public hosts are accessed anonymously, and the anonymous access
	// has very low quota. Context needs to know all such hostnames in advance to
	// be able to force authenticated access to them.
	KnownPublicGerritHosts []string `protobuf:"bytes,3,rep,name=known_public_gerrit_hosts,json=knownPublicGerritHosts,proto3" json:"known_public_gerrit_hosts,omitempty"`
	// Initial state of the build, including immutable state such as id and input
	// properties.
	Build *Build `protobuf:"bytes,4,opt,name=build,proto3" json:"build,omitempty"`
}

func (x *BBAgentArgs) Reset() {
	*x = BBAgentArgs{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BBAgentArgs) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BBAgentArgs) ProtoMessage() {}

func (x *BBAgentArgs) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BBAgentArgs.ProtoReflect.Descriptor instead.
func (*BBAgentArgs) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescGZIP(), []int{1}
}

func (x *BBAgentArgs) GetExecutablePath() string {
	if x != nil {
		return x.ExecutablePath
	}
	return ""
}

func (x *BBAgentArgs) GetPayloadPath() string {
	if x != nil {
		return x.PayloadPath
	}
	return ""
}

func (x *BBAgentArgs) GetCacheDir() string {
	if x != nil {
		return x.CacheDir
	}
	return ""
}

func (x *BBAgentArgs) GetKnownPublicGerritHosts() []string {
	if x != nil {
		return x.KnownPublicGerritHosts
	}
	return nil
}

func (x *BBAgentArgs) GetBuild() *Build {
	if x != nil {
		return x.Build
	}
	return nil
}

type BuildbucketAgentContext struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Should match the task_id that was sent to buildbucket in
	// either RunTaskResposne.Task.Id.Id or in
	// StartBuildTaskRequest.Task.Id.Id
	TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"`
	// The secrets that was provided to the backend from
	// RunTaskRequest or StartBuildTaskResponse.
	//
	// During the task backend migration, the BuildToken secret
	// bytes sent to swarming will be populated here. Bbagent will
	// read LUCI_CONTEXT provided by raw swarming tasks and convert it to
	// BuildbucketAgentContext. All swarming tasks ran as task backend tasks
	// will use BuildbucketAgentContext directly.
	Secrets *BuildSecrets `protobuf:"bytes,2,opt,name=secrets,proto3" json:"secrets,omitempty"`
}

func (x *BuildbucketAgentContext) Reset() {
	*x = BuildbucketAgentContext{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildbucketAgentContext) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildbucketAgentContext) ProtoMessage() {}

func (x *BuildbucketAgentContext) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuildbucketAgentContext.ProtoReflect.Descriptor instead.
func (*BuildbucketAgentContext) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescGZIP(), []int{2}
}

func (x *BuildbucketAgentContext) GetTaskId() string {
	if x != nil {
		return x.TaskId
	}
	return ""
}

func (x *BuildbucketAgentContext) GetSecrets() *BuildSecrets {
	if x != nil {
		return x.Secrets
	}
	return nil
}

var File_go_chromium_org_luci_buildbucket_proto_launcher_proto protoreflect.FileDescriptor

var file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDesc = []byte{
	0x0a, 0x35, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65,
	0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75,
	0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x1a, 0x32, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x62, 0x75,
	0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa4, 0x01, 0x0a, 0x0c,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x47, 0x0a,
	0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65,
	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1d, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64,
	0x62, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74,
	0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x6f, 0x6b,
	0x65, 0x6e, 0x22, 0xde, 0x01, 0x0a, 0x0b, 0x42, 0x42, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72,
	0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65,
	0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65,
	0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x70,
	0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1b,
	0x0a, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x08, 0x63, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x12, 0x39, 0x0a, 0x19, 0x6b,
	0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x67, 0x65, 0x72, 0x72,
	0x69, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16,
	0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x47, 0x65, 0x72, 0x72, 0x69,
	0x74, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63,
	0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x62, 0x75,
	0x69, 0x6c, 0x64, 0x22, 0x6a, 0x0a, 0x17, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x17,
	0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65,
	0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53,
	0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x42,
	0x36, 0x5a, 0x34, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f,
	0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63,
	0x6b, 0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62,
	0x75, 0x63, 0x6b, 0x65, 0x74, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescOnce sync.Once
	file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescData = file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDesc
)

func file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescGZIP() []byte {
	file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescOnce.Do(func() {
		file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescData)
	})
	return file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDescData
}

var file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_go_chromium_org_luci_buildbucket_proto_launcher_proto_goTypes = []interface{}{
	(*BuildSecrets)(nil),            // 0: buildbucket.v2.BuildSecrets
	(*BBAgentArgs)(nil),             // 1: buildbucket.v2.BBAgentArgs
	(*BuildbucketAgentContext)(nil), // 2: buildbucket.v2.BuildbucketAgentContext
	(*Build)(nil),                   // 3: buildbucket.v2.Build
}
var file_go_chromium_org_luci_buildbucket_proto_launcher_proto_depIdxs = []int32{
	3, // 0: buildbucket.v2.BBAgentArgs.build:type_name -> buildbucket.v2.Build
	0, // 1: buildbucket.v2.BuildbucketAgentContext.secrets:type_name -> buildbucket.v2.BuildSecrets
	2, // [2:2] is the sub-list for method output_type
	2, // [2:2] is the sub-list for method input_type
	2, // [2:2] is the sub-list for extension type_name
	2, // [2:2] is the sub-list for extension extendee
	0, // [0:2] is the sub-list for field type_name
}

func init() { file_go_chromium_org_luci_buildbucket_proto_launcher_proto_init() }
func file_go_chromium_org_luci_buildbucket_proto_launcher_proto_init() {
	if File_go_chromium_org_luci_buildbucket_proto_launcher_proto != nil {
		return
	}
	file_go_chromium_org_luci_buildbucket_proto_build_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildSecrets); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BBAgentArgs); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildbucketAgentContext); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   3,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_go_chromium_org_luci_buildbucket_proto_launcher_proto_goTypes,
		DependencyIndexes: file_go_chromium_org_luci_buildbucket_proto_launcher_proto_depIdxs,
		MessageInfos:      file_go_chromium_org_luci_buildbucket_proto_launcher_proto_msgTypes,
	}.Build()
	File_go_chromium_org_luci_buildbucket_proto_launcher_proto = out.File
	file_go_chromium_org_luci_buildbucket_proto_launcher_proto_rawDesc = nil
	file_go_chromium_org_luci_buildbucket_proto_launcher_proto_goTypes = nil
	file_go_chromium_org_luci_buildbucket_proto_launcher_proto_depIdxs = nil
}
