// 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";
import "go.chromium.org/luci/common/proto/srcman/manifest.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;

  // Maps the name of the Manifest, e.g. UNPATCHED, INFRA, etc. to the
  // ManifestLink. This name will be used in the milo console definition to
  // indicate which manifest data to sort the console view by.
  map<string, srcman.ManifestLink> source_manifests = 25;
}

// 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;
}
