blob: a77a82f0f0dca6e7c4b5c97c2ddf18dd3141d2aa [file] [log] [blame]
// Copyright (c) 2015 The LUCI Authors. All rights reserved.
// Use of this source code is governed under the Apache License, Version 2.0
// that can be found in the LICENSE file.
syntax = "proto3";
package milo;
import "google/protobuf/timestamp.proto";
// Status is the expressed root step of this step or substep.
enum Status {
// The step is still running.
RUNNING = 0;
// The step has finished successfully.
SUCCESS = 1;
// The step has finished unsuccessfully.
FAILURE = 2;
// The step has been scheduled, but not yet started.
PENDING = 3;
}
// FailureType provides more details on the nature of the Status.
message FailureDetails {
// Type is the type of failure.
enum Type {
// The failure is a general failure.
GENERAL = 0;
// An unhandled exception occured during execution.
EXCEPTION = 1;
// The failure is related to a failed infrastructure component, not an error
// with the Step itself.
INFRA = 2;
// The failure is due to a failed Dungeon Master dependency. This should be
// used if a Step's external depdendency fails and the Step cannot recover
// or proceed without it.
DM_DEPENDENCY_FAILED = 3;
// The step was cancelled.
CANCELLED = 4;
// The failure was due to an resource exhausion. The step was scheduled
// but never ran, and never will run.
EXPIRED = 5;
}
Type type = 1;
// An optional string describing the failure.
string text = 2;
// If the failure type is DEPENDENCY_FAILED, the failed dependencies should be
// listed here.
repeated DMLink failed_dm_dependency = 3;
}
// Generic step or substep state.
message Step {
// The display name of the Component.
string name = 1;
// Command contains information about a command-line invocation.
message Command {
// The command-line invocation, expressed as an argument vector.
repeated string command_line = 1;
// The current working directory.
string cwd = 2;
// Environment represents the state of a process' environment.
map<string, string> environ = 3;
}
// The command-line invocation of the step, expressed as an argument vector.
Command command = 2;
// The current running status of the Step.
Status status = 3;
// Optional information detailing the failure. This may be populated if the
// Step's top-level command Status is set to FAILURE.
FailureDetails failure_details = 4;
// Sub-steps nested underneath of this step.
message Substep {
// The substep.
oneof substep {
// The substep is an inline Step.
Step step = 1;
// The substep is a separate LogDog annotation stream.
LogdogStream annotation_stream = 2;
}
}
// Substeps that this Step is composed of.
repeated Substep substep = 5;
// A link to this Step's STDOUT stream, if present.
LogdogStream stdout_stream = 6;
// A link to this Step's STDERR stream, if present.
LogdogStream stderr_stream = 7;
// When the step started, expressed as an RFC3339 string using Z (UTC)
// timezone.
google.protobuf.Timestamp started = 8;
// When the step ended, expressed as an RFC3339 string using Z (UTC) timezone.
google.protobuf.Timestamp ended = 9;
// Arbitrary lines of component text. Each string here is a consecutive line,
// and should not contain newlines.
repeated string text = 20;
// Progress expresses a Component's overall progress. It does this using
// arbitrary "progress units", wich are discrete units of work measured by
// the Component that are either completed or not completed.
//
// A simple construction for "percentage complete" is to set `total` to 100
// and `completed` to the percentage value.
message Progress {
// The total number of progress units. If missing or zero, no progress is
// expressed.
int32 total = 1;
// The number of completed progress units. This must always be less than or
// equal to `total`. If omitted, it is implied to be zero.
int32 completed = 2;
}
// The Component's progress.
Progress progress = 21;
// The primary link for this Component. This is the link that interaction
// with the Component will use.
Link link = 22;
// Additional links related to the Component. These will be rendered alongside
// the component.
repeated Link other_links = 23;
// Property is an arbitrary key/value (build) property.
message Property {
// name is the property name.
string name = 1;
// value is the optional property value.
string value = 2;
}
repeated Property property = 24;
}
// A Link is an optional label followed by a typed link to an external
// resource.
message Link {
// An optional display label for the link.
string label = 1;
// If present, this link is an alias for another link with this name, and
// should be rendered in relation to that link.
string alias_label = 2;
oneof value {
// A URL.
string url = 3;
// (One of) A LogDog stream link.
LogdogStream logdog_stream = 4;
// (One of) An isolate server link.
IsolateObject isolate_object = 5;
// (One of) A link to a Dungeon Master object.
DMLink dm_link = 6;
}
}
// LogdogStream is a LogDog stream link.
message LogdogStream {
// The stream's server. If omitted, the server is the same server that this
// annotation stream is homed on.
string server = 1;
// The log Prefix. If empty, the prefix is the same prefix as this annotation
// stream.
string prefix = 2;
// The log name.
string name = 3;
}
// IsolateObject is an Isolate service object specification.
message IsolateObject {
// The Isolate server. If empty, this is the default Isolate server specified
// by the project's LUCI config.
string server = 1;
// The isolate object hash.
string hash = 2;
}
// DMLink is a Dungeon Master execution specification.
message DMLink {
// The Dungeon Master server. If empty, this is the default Isolate server
// specified by the project's LUCI config.
string server = 1;
// The quest name.
string quest = 2;
// The attempt number.
int64 attempt = 3;
// The execution number.
int64 execution = 4;
}