luci: go.chromium.org/luci/led/job Index | Files | Directories

package job

import "go.chromium.org/luci/led/job"

Index

Package Files

buildbucket.go edit.go edit_buildbucket.go edit_cipd_pkgs.go edit_dimensions.go edit_swarming.go gen.go info.go info_buildbucket.go info_swarming.go job.go job.pb.go kitchen_support.go util.go

Variables

var File_go_chromium_org_luci_led_job_job_proto protoreflect.FileDescriptor

type Buildbucket Uses

type Buildbucket struct {
    BbagentArgs      *proto1.BBAgentArgs   `protobuf:"bytes,1,opt,name=bbagent_args,json=bbagentArgs,proto3" json:"bbagent_args,omitempty"`
    CipdPackages     []*api.CIPDPackage    `protobuf:"bytes,2,rep,name=cipd_packages,json=cipdPackages,proto3" json:"cipd_packages,omitempty"`
    EnvVars          []*api.StringPair     `protobuf:"bytes,3,rep,name=env_vars,json=envVars,proto3" json:"env_vars,omitempty"`
    EnvPrefixes      []*api.StringListPair `protobuf:"bytes,4,rep,name=env_prefixes,json=envPrefixes,proto3" json:"env_prefixes,omitempty"`
    ExtraTags        []string              `protobuf:"bytes,5,rep,name=extra_tags,json=extraTags,proto3" json:"extra_tags,omitempty"`
    GracePeriod      *duration.Duration    `protobuf:"bytes,6,opt,name=grace_period,json=gracePeriod,proto3" json:"grace_period,omitempty"`
    BotPingTolerance *duration.Duration    `protobuf:"bytes,7,opt,name=bot_ping_tolerance,json=botPingTolerance,proto3" json:"bot_ping_tolerance,omitempty"`
    Containment      *api.Containment      `protobuf:"bytes,8,opt,name=containment,proto3" json:"containment,omitempty"`
    // Indicates that this build should be generated as a legacy kitchen task when
    // launched.
    LegacyKitchen bool `protobuf:"varint,9,opt,name=legacy_kitchen,json=legacyKitchen,proto3" json:"legacy_kitchen,omitempty"`
    // Eventually becomes the name of the launched swarming task.
    Name string `protobuf:"bytes,10,opt,name=name,proto3" json:"name,omitempty"`
    // This field contains the path relative to ${ISOLATED_OUTDIR} for the final
    // build.proto result. If blank, will cause the job not to emit any build
    // proto to the output directory.
    //
    // For bbagent-based jobs this must have the file extension ".pb", ".textpb"
    // or ".json", to get the respective encoding.
    //
    // For legacy kitchen jobs this must have the file extension ".json".
    //
    // By default, led will populate this with "build.proto.json".
    FinalBuildProtoPath string `protobuf:"bytes,11,opt,name=final_build_proto_path,json=finalBuildProtoPath,proto3" json:"final_build_proto_path,omitempty"`
    // contains filtered or unexported fields
}

Buildbucket is, ideally, just a BBAgentArgs, but there are bits of data that led needs to track which aren't currently contained in BBAgentArgs.

Where it makes sense, this additional data should be moved from this Buildbucket message into BBAgentArgs, but for now we store it separately to get led v2 up and running.

func (*Buildbucket) Descriptor Uses

func (*Buildbucket) Descriptor() ([]byte, []int)

Deprecated: Use Buildbucket.ProtoReflect.Descriptor instead.

func (*Buildbucket) EnsureBasics Uses

func (b *Buildbucket) EnsureBasics()

EnsureBasics ensures that the following fields are non-nil:

b.BbagentArgs
b.BbagentArgs.Build
b.BbagentArgs.Build.Exe
b.BbagentArgs.Build.Infra
b.BbagentArgs.Build.Infra.Logdog
b.BbagentArgs.Build.Infra.Swarming
b.BbagentArgs.Build.Input
b.BbagentArgs.Build.Input.Properties

func (*Buildbucket) GetBbagentArgs Uses

func (x *Buildbucket) GetBbagentArgs() *proto1.BBAgentArgs

func (*Buildbucket) GetBotPingTolerance Uses

func (x *Buildbucket) GetBotPingTolerance() *duration.Duration

func (*Buildbucket) GetCipdPackages Uses

func (x *Buildbucket) GetCipdPackages() []*api.CIPDPackage

func (*Buildbucket) GetContainment Uses

func (x *Buildbucket) GetContainment() *api.Containment

func (*Buildbucket) GetEnvPrefixes Uses

func (x *Buildbucket) GetEnvPrefixes() []*api.StringListPair

func (*Buildbucket) GetEnvVars Uses

func (x *Buildbucket) GetEnvVars() []*api.StringPair

func (*Buildbucket) GetExtraTags Uses

func (x *Buildbucket) GetExtraTags() []string

func (*Buildbucket) GetFinalBuildProtoPath Uses

func (x *Buildbucket) GetFinalBuildProtoPath() string

func (*Buildbucket) GetGracePeriod Uses

func (x *Buildbucket) GetGracePeriod() *duration.Duration

func (*Buildbucket) GetLegacyKitchen Uses

func (x *Buildbucket) GetLegacyKitchen() bool

func (*Buildbucket) GetName Uses

func (x *Buildbucket) GetName() string

func (*Buildbucket) ProtoMessage Uses

func (*Buildbucket) ProtoMessage()

func (*Buildbucket) ProtoReflect Uses

func (x *Buildbucket) ProtoReflect() protoreflect.Message

func (*Buildbucket) Reset Uses

func (x *Buildbucket) Reset()

func (*Buildbucket) String Uses

func (x *Buildbucket) String() string

func (*Buildbucket) WriteProperties Uses

func (b *Buildbucket) WriteProperties(inputs map[string]interface{})

WriteProperties writes an input property on this Buildbucket message.

type CIPDPkgs Uses

type CIPDPkgs map[string]string

CIPDPkgs is a mapping of the CIPD packages within a Definition in the form of:

"subdir:name/of/package" -> "version"

type Definition Uses

type Definition struct {

    // Types that are assignable to JobType:
    //	*Definition_Buildbucket
    //	*Definition_Swarming
    JobType isDefinition_JobType `protobuf_oneof:"job_type"`
    // If set, this holds the CASTree to use with the build, when launched.
    //
    // At the time of launch, this will be merged with
    // swarming.task_slice[*].properties.cas_inputs, if any.
    //
    // The 'server' and 'namespace' fields here are used as the defaults for any
    // digests specified without server/namespace.
    UserPayload *api.CASTree `protobuf:"bytes,3,opt,name=user_payload,json=userPayload,proto3" json:"user_payload,omitempty"`
    // contains filtered or unexported fields
}

func (*Definition) Descriptor Uses

func (*Definition) Descriptor() ([]byte, []int)

Deprecated: Use Definition.ProtoReflect.Descriptor instead.

func (*Definition) Edit Uses

func (jd *Definition) Edit(cb func(m Editor)) error

Edit runs a mutator function with an Editor.

If one of the edit operations has an error, further method calls on the Editor are ignored and this returns the error.

func (*Definition) FlattenToSwarming Uses

func (jd *Definition) FlattenToSwarming(ctx context.Context, uid, parentTaskId string, ks KitchenSupport) error

FlattenToSwarming modifies this Definition to populate the Swarming field from the Buildbucket field.

After flattening, HighLevelEdit functionality will no longer work on this Definition.

`uid` and `parentTaskId`, if specified, override the user and parentTaskId fields, respectively.

func (*Definition) GetBuildbucket Uses

func (x *Definition) GetBuildbucket() *Buildbucket

func (*Definition) GetJobType Uses

func (m *Definition) GetJobType() isDefinition_JobType

func (*Definition) GetSwarming Uses

func (x *Definition) GetSwarming() *Swarming

func (*Definition) GetUserPayload Uses

func (x *Definition) GetUserPayload() *api.CASTree

func (*Definition) HighLevelEdit Uses

func (jd *Definition) HighLevelEdit(cb func(m HighLevelEditor)) error

HighLevelEdit runs a mutator function with a HighLevelEditor.

If one of the edit operations has an error, further method calls on the HighLevelEditor are ignored and this returns the error.

func (*Definition) HighLevelInfo Uses

func (jd *Definition) HighLevelInfo() HighLevelInfo

HighLevelInfo returns an accessor object which can returns high-level information about the Definition.

Only returns a functioning implementation for Buildbucket jobs, otherwise returns nil.

func (*Definition) Info Uses

func (jd *Definition) Info() Info

Info returns a generic accessor object which can return generic information about the Definition.

Returns nil if the Definition doesn't support Info().

func (*Definition) ProtoMessage Uses

func (*Definition) ProtoMessage()

func (*Definition) ProtoReflect Uses

func (x *Definition) ProtoReflect() protoreflect.Message

func (*Definition) Reset Uses

func (x *Definition) Reset()

func (*Definition) String Uses

func (x *Definition) String() string

type Definition_Buildbucket Uses

type Definition_Buildbucket struct {
    // Represents a buildbucket-native task; May be recovered from a swarming
    // task, or provided directly via buildbucket.
    Buildbucket *Buildbucket `protobuf:"bytes,1,opt,name=buildbucket,proto3,oneof"`
}

type Definition_Swarming Uses

type Definition_Swarming struct {
    // Represents a swarming task. This will be filled for jobs sourced directly
    // from swarming which weren't recognized as a buildbucket task.
    //
    // A limited subset of the edit and info functionality is available for
    // raw swarming jobs.
    Swarming *Swarming `protobuf:"bytes,2,opt,name=swarming,proto3,oneof"`
}

type DimensionEditCommand Uses

type DimensionEditCommand struct {
    SetValues    []ExpiringValue
    RemoveValues []string
    AddValues    []ExpiringValue
}

DimensionEditCommand is instruction on how to process the values in the task associated with a swarming dimension.

The fields are processed in order:

* if SetValues is non-nil, the dimension values are set to this set
  (including empty).
* if RemoveValues is non-empty, these values will be removed from the
  dimension values.
* if AddValues is non-empty, these values will ber added to the dimension
  values.

If the set of values at the end of this process is empty, the dimension will be removed from the task. Otherwise the dimension will be set to the sorted remaining values.

type DimensionEditCommands Uses

type DimensionEditCommands map[string]*DimensionEditCommand

DimensionEditCommands is a mapping of dimension name to a set of commands to apply to the values of that dimension.

func MakeDimensionEditCommands Uses

func MakeDimensionEditCommands(commands []string) (DimensionEditCommands, error)

MakeDimensionEditCommands takes a slice of commands in the form of:

dimension=
dimension=value
dimension=value@1234

dimension-=value

dimension+=value
dimension+=value@1234

Logically:

* dimension_name - The name of the dimension to modify
* operator
  * "=" - Add value to SetValues. If empty, ensures that SetValues is
    non-nil (i.e. clear all values for this dimension).
  * "-=" - Add value to RemoveValues.
  * "+=" - Add value to AddValues.
* value - The dimension value for the operand
* expiration seconds - The time at which this value should expire.

All equivalent operations for the same dimension will be grouped into a single DimensionEditCommand in the order they appear in `commands`.

type Editor Uses

type Editor interface {
    // ClearCurrentIsolated removes all isolateds from this Definition.
    ClearCurrentIsolated()

    // ClearDimensions removes all dimensions.
    ClearDimensions()

    // SetDimensions sets the full set of dimensions.
    SetDimensions(dims ExpiringDimensions)

    // EditDimensions edits the swarming dimensions.
    EditDimensions(dimEdits DimensionEditCommands)

    // CIPDPkgs allows you to edit the cipd packages. The mapping is in the form
    // of:
    //
    //    "subdir:name/of/package" -> "version"
    //
    // If version is empty, this package will be removed (if it's present).
    CIPDPkgs(cipdPkgs CIPDPkgs)

    // Env edits the swarming environment variables (i.e. those set before the
    // user payload runs).
    //
    // The map given is a map of environment variable to its value; If the value
    // is "", then the environment variable is removed.
    Env(env map[string]string)

    // PrefixPathEnv controls swarming's env_prefix mapping for $PATH.
    //
    // Values prepended with '!' will remove them from the existing list of values
    // (if present). Otherwise these values will be appended to the current list
    // of PATH-prefix-envs.
    PrefixPathEnv(values []string)

    // Priority edits the swarming task priority.
    Priority(priority int32)

    // SwarmingHostname allows you to modify the current SwarmingHostname used by
    // this led pipeline.
    SwarmingHostname(host string)

    // TaskName allows you to set the swarming task name of the job.
    TaskName(name string)

    // Tags appends the given values to the task's tags.
    Tags(values []string)
}

Editor represents low-level mutations you can make on a job.Definition.

You may edit a job.Definition by calling its Edit method.

type ExpiringDimensions Uses

type ExpiringDimensions map[string][]ExpiringValue

ExpiringDimensions is a map from dimension name to a list of values corresponding to that dimension.

When retrieved from a led library, the values will be sorted by expiration time, followed by value. Expirations of 0 (i.e. "infinite") are sorted last.

func (ExpiringDimensions) String Uses

func (e ExpiringDimensions) String() string

type ExpiringValue Uses

type ExpiringValue struct {
    Value      string
    Expiration time.Duration
}

ExpiringValue represents a tuple of dimension value, plus an expiration time.

If Expiration is zero, it counts as "no expiration".

type HighLevelEditor Uses

type HighLevelEditor interface {
    Editor

    // Experimental sets the task to either be marked 'experimental' or not.
    Experimental(isExperimental bool)

    // Experiments enables or disables experiments.
    //
    // If `exps[<name>]` is true, the corresponding experiment will be enabled.
    // If it is false, the experiment will be disabled (if it was enabled).
    //
    // Experiments enabled in the build, but not mentioned in `exps` map are left
    // enabled.
    Experiments(exps map[string]bool)

    // Properties edits the recipe properties.
    //
    // `props` should be a mapping of the top-level property to JSON-encoded data
    // for the value of this property. If the value is "", then the top-level
    // property will be deleted.
    //
    // If `auto` is true, then values which do not decode as JSON will be treated
    // as literal strings. For example, given a value `literal string` with
    // auto=true, this would be equivalent to passing the value `"literal string"`
    // with auto=false.
    Properties(props map[string]string, auto bool)

    // TaskPayloadSource sets the task payload to either use the provided CIPD
    // package and version, or the UserPayload if they are empty.
    //
    // If cipdPkg is specified without cipdVers, cipdVers will be set to "latest".
    TaskPayloadSource(cipdPkg, cipdVers string)

    // TaskPayloadPath sets the location of where bbagent should locate the task
    // payload data within the task.
    TaskPayloadPath(path string)

    // TaskPayloadCmd sets the arguments used to run the task payload.
    //
    // args[0] is the path, relative to the payload path, of the executable to
    // run.
    //
    // NOTE: Kitchen tasks ignore this value.
    TaskPayloadCmd(args []string)

    // ClearGerritChanges removes all GerritChanges from the job.
    ClearGerritChanges()

    // AddGerritChange ensures the GerritChange is in the set of input CLs.
    AddGerritChange(cl *bbpb.GerritChange)

    // RemoveGerritChange ensures the GerritChange is not in the set of input CLs.
    RemoveGerritChange(cl *bbpb.GerritChange)

    // GitilesCommit sets the GitilesCommit.
    //
    // If `commit` is nil, removes the commit.
    GitilesCommit(commit *bbpb.GitilesCommit)
}

HighLevelEditor represents high-level mutations you can make on a job.Definition.

Currently only Buildbucket job.Definitions support high level edits.

You may edit a job.Definition by calling its HighLevelEdit method.

type HighLevelInfo Uses

type HighLevelInfo interface {
    Info

    // Returns true iff the job is marked as 'experimental'.
    Experimental() bool

    // Returns a sorted list of enabled experiments.
    Experiments() []string

    // Returns the input properties of this build as a map of top-level key to
    // its JSON-encoded value.
    Properties() (map[string]string, error)

    // TaskPayloadSource returns the CIPD package and version of the user's task
    // payload. If they are empty, then it means the source of the user task
    // payload is within the UserPayload in the job.Definition.
    TaskPayloadSource() (cipdPkg, cipdVers string)

    // TaskPayloadPath returns the location of where bbagent/kitchen will locate
    // the task payload data within the task.
    TaskPayloadPath() (path string)

    // TaskPayloadCmd returns the arguments used to run the task payload.
    //
    // args[0] is the path, relative to the payload path, of the executable to
    // run.
    //
    // If this is empty, it defaults to []string{"luciexe"}.
    //
    // NOTE: Kitchen tasks ignore this value.
    TaskPayloadCmd() (args []string)

    // Returns the gerrit changes associated with this job.
    GerritChanges() []*bbpb.GerritChange

    // Returns the gitiles commit associated with this job.
    GitilesCommit() *bbpb.GitilesCommit
}

HighLevelInfo represents high-level information for Buildbucket job Definitions.

HighLevelInfo includes all capabilities of `Info` as well.

type Info Uses

type Info interface {
    // SwarmingHostname retrieves the Swarming hostname this Definition will use.
    SwarmingHostname() string

    // TaskName retrieves the human-readable Swarming task name from the
    // Definition.
    TaskName() string

    // CurrentIsolated returns the current isolated contents for the
    // Definition. If the current CASTree information has no Digest value, this
    // returns nil.
    //
    // Returns error if this is a Swarming job where the slices have differing
    // isolateds.
    CurrentIsolated() (*swarmingpb.CASTree, error)

    // Dimensions returns a single map of all dimensions in the job Definition
    // and what their latest expiration is.
    //
    // For dimensions which "don't expire", they will report an expiration time of
    // the total task expiration.
    Dimensions() (ExpiringDimensions, error)

    // CIPDPkgs returns the mapping of all CIPD packages in the task, in the
    // same format that Editor.CIPDPkgs takes.
    //
    // Returns an error if not all slices in the swarming task have the same set
    // of packages.
    CIPDPkgs() (CIPDPkgs, error)

    // Env returns any environment variable overrides in the job.
    Env() (map[string]string, error)

    // PrefixPathEnv returns the list of $PATH prefixes
    PrefixPathEnv() ([]string, error)

    // Priority returns the job's current swarming priority value.
    Priority() int32

    // Tags returns the job's current swarming tags.
    Tags() []string
}

Info represents the common low-level information for all job Definitions.

Swarming and Buildbucket implement this interface.

type KitchenSupport Uses

type KitchenSupport interface {
    FromSwarming(ctx context.Context, in *swarming.SwarmingRpcsNewTaskRequest, out *Buildbucket) error
    GenerateCommand(ctx context.Context, bb *Buildbucket) ([]string, error)
}

KitchenSupport is the object for an interface to support 'LegacyKitchen' job definitions.

See 'infra/tools/led2' for the only real implementation of this.

This is abstracted out because 'kitchen' and its libraries live in infra, not in luci-go. Once kitchen is deleted, this will go away as well.

func NoKitchenSupport Uses

func NoKitchenSupport() KitchenSupport

NoKitchenSupport returns a null implementation of KitchenSupport which always returns errors if it ends up processing a kitchen job.

type Swarming Uses

type Swarming struct {
    Task     *api.TaskRequest `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"`
    Hostname string           `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"`
    // contains filtered or unexported fields
}

Swarming is the raw TaskRequest. When a Definition is in this form, the user's ability to manipulate it via `led` subcommands is extremely limited.

func (*Swarming) Descriptor Uses

func (*Swarming) Descriptor() ([]byte, []int)

Deprecated: Use Swarming.ProtoReflect.Descriptor instead.

func (*Swarming) GetHostname Uses

func (x *Swarming) GetHostname() string

func (*Swarming) GetTask Uses

func (x *Swarming) GetTask() *api.TaskRequest

func (*Swarming) ProtoMessage Uses

func (*Swarming) ProtoMessage()

func (*Swarming) ProtoReflect Uses

func (x *Swarming) ProtoReflect() protoreflect.Message

func (*Swarming) Reset Uses

func (x *Swarming) Reset()

func (*Swarming) String Uses

func (x *Swarming) String() string

Directories

PathSynopsis
experiments
jobcreate
jobexport

Package job imports 29 packages (graph) and is imported by 9 packages. Updated 2020-08-05. Refresh now. Tools for package owners.