// Copyright 2018 The LUCI Authors.
//
// 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 buildbucket.v2;

option go_package = "go.chromium.org/luci/buildbucket/proto;buildbucketpb";

import "go.chromium.org/luci/buildbucket/proto/build.proto";

// This file is meant for protos passed and used internally.

// A collection of build-related secrets we might pass from Buildbucket to Kitchen.
message BuildSecrets {
  // Token to identify RPCs associated with the same build.
  string build_token = 1;

  // Token to allow updating this build's invocation in ResultDB.
  string resultdb_invocation_update_token = 2;
}

// Arguments for bbagent command.
//
// All paths are relateive to bbagent's working directory, and must be delimited
// with slashes ("/"), regardless of the host OS.
message BBAgentArgs {
  // Path to the user executable.
  //
  // Deprecated. Superceded by payload_path and `build.exe.cmd`.
  string executable_path = 1;

  // Path to the base of the user executable package.
  //
  // Required.
  string payload_path = 5;

  // Path to a directory where each subdirectory is a cache dir.
  //
  // Required.
  string cache_dir = 2;

	// List of Gerrit hosts to force git authentication for.
	//
	// By default public hosts are accessed anonymously, and the anonymous access
	// has very low quota. Context needs to know all such hostnames in advance to
	// be able to force authenticated access to them.
  repeated string known_public_gerrit_hosts = 3;

  // Initial state of the build, including immutable state such as id and input
  // properties.
  Build build = 4;
}
