// Code generated by protoc-gen-go. DO NOT EDIT.
// source: go.chromium.org/luci/dm/api/distributor/swarming/v1/params.proto

package swarmingV1

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Parameters represents the set of swarming parameters that the Swarming v1
// distributor can interpret for use with a Swarming v1 compatible service.
type Parameters struct {
	Scheduling           *Parameters_Scheduling `protobuf:"bytes,1,opt,name=scheduling,proto3" json:"scheduling,omitempty"`
	Meta                 *Parameters_Meta       `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"`
	Job                  *Parameters_Job        `protobuf:"bytes,3,opt,name=job,proto3" json:"job,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *Parameters) Reset()         { *m = Parameters{} }
func (m *Parameters) String() string { return proto.CompactTextString(m) }
func (*Parameters) ProtoMessage()    {}
func (*Parameters) Descriptor() ([]byte, []int) {
	return fileDescriptor_a392a071be03ce1c, []int{0}
}

func (m *Parameters) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Parameters.Unmarshal(m, b)
}
func (m *Parameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Parameters.Marshal(b, m, deterministic)
}
func (m *Parameters) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Parameters.Merge(m, src)
}
func (m *Parameters) XXX_Size() int {
	return xxx_messageInfo_Parameters.Size(m)
}
func (m *Parameters) XXX_DiscardUnknown() {
	xxx_messageInfo_Parameters.DiscardUnknown(m)
}

var xxx_messageInfo_Parameters proto.InternalMessageInfo

func (m *Parameters) GetScheduling() *Parameters_Scheduling {
	if m != nil {
		return m.Scheduling
	}
	return nil
}

func (m *Parameters) GetMeta() *Parameters_Meta {
	if m != nil {
		return m.Meta
	}
	return nil
}

func (m *Parameters) GetJob() *Parameters_Job {
	if m != nil {
		return m.Job
	}
	return nil
}

// These parameters affect how the Executions for this Quest are scheduled.
type Parameters_Scheduling struct {
	// Priority adjusts the scheduling preference for Executions. The higher the
	// priority number, the longer it will take to schedule, and vice versa (ala
	// `nice`).
	//
	// A value of 0 (default) corresponds to a default priority (currently 100).
	// Other values correspond directly to the swarming task Priority.
	//
	// THIS MEANS THAT PRIORITY 0 IS NOT PERMITTED HERE! If you want 0, use
	// 1 instead.
	//
	// This must be <= 255.
	Priority uint32 `protobuf:"varint,1,opt,name=priority,proto3" json:"priority,omitempty"`
	// These specifiy the profile of the machine to use for Execuions of this
	// quest. These can indicate OS, number of cores, amount of ram, GPU type,
	// pool, etc. See the swarming service instance for available dimensions.
	Dimensions map[string]string `protobuf:"bytes,2,rep,name=dimensions,proto3" json:"dimensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// These dimensions will be snapshotted from the first execution of each
	// attempt, and will be subsequently re-used for all following executions of
	// that attempt.
	//
	// The most-specific value for these dimensions will be taken for tasks
	// where a given dimension has multiple values.
	SnapshotDimensions []string `protobuf:"bytes,3,rep,name=snapshot_dimensions,json=snapshotDimensions,proto3" json:"snapshot_dimensions,omitempty"`
	// This indicates the maximum amount of time that an Execution may run
	// without emitting IO on stdout/err. 0 means 'no timeout'.
	IoTimeout            *duration.Duration `protobuf:"bytes,4,opt,name=io_timeout,json=ioTimeout,proto3" json:"io_timeout,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Parameters_Scheduling) Reset()         { *m = Parameters_Scheduling{} }
func (m *Parameters_Scheduling) String() string { return proto.CompactTextString(m) }
func (*Parameters_Scheduling) ProtoMessage()    {}
func (*Parameters_Scheduling) Descriptor() ([]byte, []int) {
	return fileDescriptor_a392a071be03ce1c, []int{0, 0}
}

func (m *Parameters_Scheduling) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Parameters_Scheduling.Unmarshal(m, b)
}
func (m *Parameters_Scheduling) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Parameters_Scheduling.Marshal(b, m, deterministic)
}
func (m *Parameters_Scheduling) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Parameters_Scheduling.Merge(m, src)
}
func (m *Parameters_Scheduling) XXX_Size() int {
	return xxx_messageInfo_Parameters_Scheduling.Size(m)
}
func (m *Parameters_Scheduling) XXX_DiscardUnknown() {
	xxx_messageInfo_Parameters_Scheduling.DiscardUnknown(m)
}

var xxx_messageInfo_Parameters_Scheduling proto.InternalMessageInfo

func (m *Parameters_Scheduling) GetPriority() uint32 {
	if m != nil {
		return m.Priority
	}
	return 0
}

func (m *Parameters_Scheduling) GetDimensions() map[string]string {
	if m != nil {
		return m.Dimensions
	}
	return nil
}

func (m *Parameters_Scheduling) GetSnapshotDimensions() []string {
	if m != nil {
		return m.SnapshotDimensions
	}
	return nil
}

func (m *Parameters_Scheduling) GetIoTimeout() *duration.Duration {
	if m != nil {
		return m.IoTimeout
	}
	return nil
}

type Parameters_Meta struct {
	// The 'human readable' name prefix for Executions of this quest. DM will
	// automatically prepend this to the execution ID. So if this was "cool
	// job", the swarming task name would be
	//   "cool job / <quest_ID>|<attempt>|<execution>"
	NamePrefix           string   `protobuf:"bytes,1,opt,name=name_prefix,json=namePrefix,proto3" json:"name_prefix,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Parameters_Meta) Reset()         { *m = Parameters_Meta{} }
func (m *Parameters_Meta) String() string { return proto.CompactTextString(m) }
func (*Parameters_Meta) ProtoMessage()    {}
func (*Parameters_Meta) Descriptor() ([]byte, []int) {
	return fileDescriptor_a392a071be03ce1c, []int{0, 1}
}

func (m *Parameters_Meta) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Parameters_Meta.Unmarshal(m, b)
}
func (m *Parameters_Meta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Parameters_Meta.Marshal(b, m, deterministic)
}
func (m *Parameters_Meta) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Parameters_Meta.Merge(m, src)
}
func (m *Parameters_Meta) XXX_Size() int {
	return xxx_messageInfo_Parameters_Meta.Size(m)
}
func (m *Parameters_Meta) XXX_DiscardUnknown() {
	xxx_messageInfo_Parameters_Meta.DiscardUnknown(m)
}

var xxx_messageInfo_Parameters_Meta proto.InternalMessageInfo

func (m *Parameters_Meta) GetNamePrefix() string {
	if m != nil {
		return m.NamePrefix
	}
	return ""
}

type Parameters_Job struct {
	Inputs *Parameters_Job_Inputs `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"`
	// This is the "argv" to run with this job. This includes substitution
	// paramters defined by swarming's run_isolated.py script:
	//   https://github.com/luci/luci-py/blob/master/client/run_isolated.py
	//
	// Additionally, DM provides the following substitutions:
	//   ${DM.PREVIOUS.EXECUTION.STATE:PATH} - the path to a JSONPB encoding of
	//     the swarming_v1.Result from the previous Execution of this Attempt.
	//   ${DM.QUEST.DATA.DESC:PATH} - the path to the
	//     dm.Quest.Data.Desc JSONPB for the quest that this execution is part
	//     of.
	//   ${DM.HOST} - the hostname to use to access DM's pRPC API.
	//
	// DM also provides a JSONPB encoded dm.Execution.Auth via the LUCI_CONTEXT
	// swarming.secret_bytes value. See:
	//   https://github.com/luci/luci-py/blob/master/client/LUCI_CONTEXT.md
	//
	// Command MUST be specified; specifying a command in any of the isolated
	// inputs WILL NOT DO ANYTHING.
	Command []string `protobuf:"bytes,2,rep,name=command,proto3" json:"command,omitempty"`
	// Environment variables for the executions.
	Env                  map[string]string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,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 *Parameters_Job) Reset()         { *m = Parameters_Job{} }
func (m *Parameters_Job) String() string { return proto.CompactTextString(m) }
func (*Parameters_Job) ProtoMessage()    {}
func (*Parameters_Job) Descriptor() ([]byte, []int) {
	return fileDescriptor_a392a071be03ce1c, []int{0, 2}
}

func (m *Parameters_Job) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Parameters_Job.Unmarshal(m, b)
}
func (m *Parameters_Job) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Parameters_Job.Marshal(b, m, deterministic)
}
func (m *Parameters_Job) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Parameters_Job.Merge(m, src)
}
func (m *Parameters_Job) XXX_Size() int {
	return xxx_messageInfo_Parameters_Job.Size(m)
}
func (m *Parameters_Job) XXX_DiscardUnknown() {
	xxx_messageInfo_Parameters_Job.DiscardUnknown(m)
}

var xxx_messageInfo_Parameters_Job proto.InternalMessageInfo

func (m *Parameters_Job) GetInputs() *Parameters_Job_Inputs {
	if m != nil {
		return m.Inputs
	}
	return nil
}

func (m *Parameters_Job) GetCommand() []string {
	if m != nil {
		return m.Command
	}
	return nil
}

func (m *Parameters_Job) GetEnv() map[string]string {
	if m != nil {
		return m.Env
	}
	return nil
}

type Parameters_Job_Inputs struct {
	// 0 or more isolated IDs that will be 'included' together into the final
	// job .isolated sent to swarming.
	//
	// The "server" value must either be omitted, or equal the isolate server
	// defined by this distributor's config (the `isolate.host` field,
	// prepended with "https://").
	Isolated []*IsolatedRef `protobuf:"bytes,1,rep,name=isolated,proto3" json:"isolated,omitempty"`
	// CIPD packages to use for the job. These specs may contain templated
	// parameters for package names or non-instance_ids for the package
	// versions. The first successful execution for each attempt will
	// resolve+snapshot all package names and versions. These package names
	// and versions will be used for all subsequent executions of that
	// attempt.
	Cipd                 *CipdSpec `protobuf:"bytes,2,opt,name=cipd,proto3" json:"cipd,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

func (m *Parameters_Job_Inputs) Reset()         { *m = Parameters_Job_Inputs{} }
func (m *Parameters_Job_Inputs) String() string { return proto.CompactTextString(m) }
func (*Parameters_Job_Inputs) ProtoMessage()    {}
func (*Parameters_Job_Inputs) Descriptor() ([]byte, []int) {
	return fileDescriptor_a392a071be03ce1c, []int{0, 2, 0}
}

func (m *Parameters_Job_Inputs) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Parameters_Job_Inputs.Unmarshal(m, b)
}
func (m *Parameters_Job_Inputs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Parameters_Job_Inputs.Marshal(b, m, deterministic)
}
func (m *Parameters_Job_Inputs) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Parameters_Job_Inputs.Merge(m, src)
}
func (m *Parameters_Job_Inputs) XXX_Size() int {
	return xxx_messageInfo_Parameters_Job_Inputs.Size(m)
}
func (m *Parameters_Job_Inputs) XXX_DiscardUnknown() {
	xxx_messageInfo_Parameters_Job_Inputs.DiscardUnknown(m)
}

var xxx_messageInfo_Parameters_Job_Inputs proto.InternalMessageInfo

func (m *Parameters_Job_Inputs) GetIsolated() []*IsolatedRef {
	if m != nil {
		return m.Isolated
	}
	return nil
}

func (m *Parameters_Job_Inputs) GetCipd() *CipdSpec {
	if m != nil {
		return m.Cipd
	}
	return nil
}

func init() {
	proto.RegisterType((*Parameters)(nil), "swarmingV1.Parameters")
	proto.RegisterType((*Parameters_Scheduling)(nil), "swarmingV1.Parameters.Scheduling")
	proto.RegisterMapType((map[string]string)(nil), "swarmingV1.Parameters.Scheduling.DimensionsEntry")
	proto.RegisterType((*Parameters_Meta)(nil), "swarmingV1.Parameters.Meta")
	proto.RegisterType((*Parameters_Job)(nil), "swarmingV1.Parameters.Job")
	proto.RegisterMapType((map[string]string)(nil), "swarmingV1.Parameters.Job.EnvEntry")
	proto.RegisterType((*Parameters_Job_Inputs)(nil), "swarmingV1.Parameters.Job.Inputs")
}

func init() {
	proto.RegisterFile("go.chromium.org/luci/dm/api/distributor/swarming/v1/params.proto", fileDescriptor_a392a071be03ce1c)
}

var fileDescriptor_a392a071be03ce1c = []byte{
	// 513 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0xdf, 0x8b, 0x13, 0x31,
	0x10, 0xc7, 0x69, 0xb7, 0xd6, 0xeb, 0x14, 0x51, 0xe2, 0x81, 0xeb, 0x0a, 0x7a, 0xea, 0x83, 0x7d,
	0x90, 0x84, 0xeb, 0xa1, 0x9c, 0x82, 0xa2, 0x78, 0x7d, 0xb8, 0x82, 0x70, 0xe6, 0xc4, 0xd7, 0x92,
	0xdd, 0x4d, 0xb7, 0xd1, 0x26, 0xb3, 0x24, 0xd9, 0xea, 0xfd, 0x41, 0xfe, 0x03, 0xe2, 0x1f, 0x28,
	0x9b, 0xdd, 0xfe, 0x40, 0x38, 0x0f, 0xef, 0x6d, 0x27, 0xf3, 0xf9, 0x7e, 0x27, 0x33, 0x99, 0x85,
	0x77, 0x05, 0xd2, 0x6c, 0x61, 0x51, 0xab, 0x4a, 0x53, 0xb4, 0x05, 0x5b, 0x56, 0x99, 0x62, 0xb9,
	0x66, 0xa2, 0x54, 0x2c, 0x57, 0xce, 0x5b, 0x95, 0x56, 0x1e, 0x2d, 0x73, 0xdf, 0x85, 0xd5, 0xca,
	0x14, 0x6c, 0x75, 0xc8, 0x4a, 0x61, 0x85, 0x76, 0xb4, 0xb4, 0xe8, 0x91, 0xc0, 0x3a, 0xf3, 0xe5,
	0x30, 0x79, 0x58, 0x20, 0x16, 0x4b, 0xc9, 0x42, 0x26, 0xad, 0xe6, 0x2c, 0xaf, 0xac, 0xf0, 0x0a,
	0x4d, 0xc3, 0x26, 0x6f, 0xaf, 0x53, 0x2d, 0x53, 0x65, 0xde, 0xea, 0x27, 0xd7, 0xd1, 0x2b, 0x87,
	0x4b, 0xe1, 0xe5, 0xcc, 0xca, 0x79, 0x63, 0xf3, 0xe4, 0x77, 0x1f, 0xe0, 0xac, 0xee, 0x41, 0x7a,
	0x69, 0x1d, 0x79, 0x0f, 0xe0, 0xb2, 0x85, 0xcc, 0xab, 0xa5, 0x32, 0x45, 0xdc, 0x39, 0xe8, 0x8c,
	0x86, 0xe3, 0xc7, 0x74, 0xdb, 0x16, 0xdd, 0xb2, 0xf4, 0x7c, 0x03, 0xf2, 0x1d, 0x11, 0x61, 0xd0,
	0xd3, 0xd2, 0x8b, 0xb8, 0x1b, 0xc4, 0x0f, 0x2e, 0x11, 0x7f, 0x94, 0x5e, 0xf0, 0x00, 0x92, 0xe7,
	0x10, 0x7d, 0xc5, 0x34, 0x8e, 0x02, 0x9f, 0x5c, 0xc2, 0x4f, 0x31, 0xe5, 0x35, 0x96, 0xfc, 0xec,
	0x02, 0x6c, 0x2b, 0x93, 0x04, 0xf6, 0x4a, 0xab, 0xd0, 0x2a, 0x7f, 0x11, 0xae, 0x7b, 0x8b, 0x6f,
	0x62, 0xf2, 0x09, 0x20, 0x57, 0x5a, 0x1a, 0xa7, 0xd0, 0xb8, 0xb8, 0x7b, 0x10, 0x8d, 0x86, 0xe3,
	0xc3, 0x2b, 0x9b, 0xa1, 0x27, 0x1b, 0xcd, 0xc4, 0x78, 0x7b, 0xc1, 0x77, 0x4c, 0x08, 0x83, 0xbb,
	0xce, 0x88, 0xd2, 0x2d, 0xd0, 0xcf, 0x76, 0xbc, 0xa3, 0x83, 0x68, 0x34, 0xe0, 0x64, 0x9d, 0xda,
	0x3a, 0x90, 0x63, 0x00, 0x85, 0x33, 0xaf, 0xb4, 0xc4, 0xca, 0xc7, 0xbd, 0xd0, 0xe3, 0x7d, 0xda,
	0xec, 0x06, 0x5d, 0xef, 0x06, 0x3d, 0x69, 0x77, 0x83, 0x0f, 0x14, 0x7e, 0x6e, 0xd8, 0xe4, 0x0d,
	0xdc, 0xfe, 0xeb, 0x26, 0xe4, 0x0e, 0x44, 0xdf, 0x64, 0xd3, 0xe7, 0x80, 0xd7, 0x9f, 0x64, 0x1f,
	0x6e, 0xac, 0xc4, 0xb2, 0x92, 0x61, 0xda, 0x03, 0xde, 0x04, 0xaf, 0xbb, 0xc7, 0x9d, 0xe4, 0x19,
	0xf4, 0xea, 0x19, 0x93, 0x47, 0x30, 0x34, 0x42, 0xcb, 0x59, 0x69, 0xe5, 0x5c, 0xfd, 0x68, 0xb5,
	0x50, 0x1f, 0x9d, 0x85, 0x93, 0xe4, 0x57, 0x17, 0xa2, 0x29, 0xa6, 0xe4, 0x15, 0xf4, 0x95, 0x29,
	0x2b, 0xef, 0xae, 0x78, 0xf6, 0x29, 0xa6, 0xf4, 0x34, 0x80, 0xbc, 0x15, 0x90, 0x18, 0x6e, 0x66,
	0xa8, 0xb5, 0x30, 0x79, 0x98, 0xf2, 0x80, 0xaf, 0x43, 0xf2, 0x02, 0x22, 0x69, 0x56, 0x61, 0x3e,
	0xc3, 0xf1, 0xd3, 0x7f, 0x38, 0x4e, 0xcc, 0xaa, 0x99, 0x76, 0xcd, 0x27, 0x05, 0xf4, 0x9b, 0x12,
	0xe4, 0x08, 0xf6, 0xda, 0xa5, 0xcd, 0xe3, 0x4e, 0x70, 0xb9, 0xb7, 0xeb, 0x72, 0xda, 0xe6, 0xb8,
	0x9c, 0xf3, 0x0d, 0x48, 0x46, 0xd0, 0xab, 0xff, 0x94, 0x76, 0x05, 0xf7, 0x77, 0x05, 0x1f, 0x54,
	0x99, 0x9f, 0x97, 0x32, 0xe3, 0x81, 0x48, 0x5e, 0xc2, 0xde, 0xba, 0xf2, 0xff, 0x4c, 0x37, 0xed,
	0x87, 0xa7, 0x3b, 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, 0x12, 0xea, 0x1b, 0xc8, 0x34, 0x04, 0x00,
	0x00,
}
