// Copyright 2016 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.
//
// This file contains the protocol buffer representation of a build
// file or 'blaze query --output=proto' call.

syntax = "proto3";

package command_server;

option java_package = "com.google.devtools.build.lib.server";
option java_outer_classname = "CommandProtos";

message RunRequest {
  // This must be the request cookie from the output base. A rudimentary form of authentication.
  string cookie = 1;
  repeated bytes arg = 2;
  bool block_for_lock = 3;  // If false, the client won't wait for another client to finish
  string client_description = 4;
}

message RunResponse {
  // The server always sets this to the response cookie from the output base. A rudimentary form
  // of authentication.
  string cookie = 1;
  bytes standard_output = 2;
  bytes standard_error = 3;
  bool finished = 4;    // Whether this is the last message of the stream
  int32 exit_code = 5;  // Only valid for the last message in the stream
  string command_id = 6;  // Randomly generated command identifier
}

message CancelRequest {
  string cookie = 1;
  string command_id = 2;
}

message CancelResponse {
  string cookie = 1;
}

message PingRequest {
  string cookie = 1;
}

message PingResponse {
  string cookie = 1;
}

service CommandServer {
  // Run a Bazel command.
  rpc Run (RunRequest) returns (stream RunResponse) {}

  // Cancel a currently running Bazel command
  rpc Cancel (CancelRequest) returns (CancelResponse) {}

  // Does not do anything. Used for liveness check.
  rpc Ping (PingRequest) returns (PingResponse) {}
}
