// Copyright 2015 The Bazel Authors. All rights reserved.
//
// 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.

syntax = "proto2";

package dash;

option java_package = "com.google.devtools.build.lib.bazel.dash";
option java_outer_classname = "DashProtos";

message Log {
  // Local path to the log.
  optional string path = 1;
  optional bytes contents = 2;
  // Log is truncated after 1MB.
  optional bool truncated = 3;
}

message BuildData {
  optional string build_id = 1;
  optional string command_name = 2;
  optional string working_dir = 3;

  message CommandLine {
    message Option {
      optional string name = 1;
      repeated string value = 2;
      optional string source = 3;
    }
    repeated Option startup_options = 1;
    repeated Option options = 2;
    repeated string residue = 3;
  }
  optional CommandLine command_line = 4;

  message EnvironmentVar {
    optional string name = 1;
    optional string value = 2;
  }
  repeated EnvironmentVar client_env = 5;

  message Target {
    optional string label = 1;
    optional string rule_kind = 2;
    message TestData {
      optional bool passed = 1;
      optional Log log = 2;
    }
    optional TestData test_data = 3;
  }
  repeated Target targets = 6;
}
