// 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 = "proto3";

package build.remote;

option java_package = "com.google.devtools.build.lib.remote";

// A message for cache entry.
message CacheEntry {
  // A list of files stored in this cache entry.
  repeated FileEntry files = 1;

  // A blob for data that is a chunk of a file.
  bytes file_content = 2;
}

// A message for storing a file in cache.
message FileEntry {
  // The path in the file system where to read this input artifact from. This is
  // either a path relative to the execution root (the worker process is
  // launched with the working directory set to the execution root), or an
  // absolute path.
  string path = 1;

  // The cache key to locate the file content. This key is usually generated
  // from
  // the content of the file such that different keys means the file content are
  // different.
  string content_key = 2;

  // Whether the file is an executable.
  bool executable = 3;

  // TODO(alpha): For large files we need to break down into chunks to store
  // in the cache. For that case we need a index for the chunks of the file.
}

// A message for running a command remotely.
message RemoteWorkRequest {
  // The key for writing the output of this work request.
  string output_key = 1;

  // The arguments for running the command. The command itself is in
  // arguments[0].
  repeated string arguments = 2;

  // The list of input files to this work request.
  repeated FileEntry input_files = 3;

  // A map of environment variables for this command.
  map<string, string> environment = 4;

  // The list of expected output files to this work request.
  // The content keys for these entries will be empty since the files don't
  // exist yet.
  repeated FileEntry output_files = 5;

  // Timeout for running this command.
  int32 timeout = 6;
}

// A message for a work response.
message RemoteWorkResponse {
  // True if the work was successful.
  bool success = 1;

  // String from stdout of running the work.
  string out = 2;

  // String from stderr of running the work.
  string err = 3;

  // String for the exception when running this work.
  string exception = 4;
}