aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2024-04-29 18:29:17 -0400
committerDan Willemsen <dwillemsen@google.com>2024-04-29 18:29:17 -0400
commit0f60a196f4ef1ff7a116ef704260c79ca4b3b804 (patch)
tree507cfb1fee5dfdfaba962996f00d84f7d403e3c6
parent4c36890ed9652e25946c94b67f910b77bc01b359 (diff)
parent1f36c310b28d762b258ea577ed08e8203274efae (diff)
downloadbazelbuild-remote-apis-0f60a196f4ef1ff7a116ef704260c79ca4b3b804.tar.gz
Upgrade remote-apis to 1f36c310b28d762b258ea577ed08e8203274efae
This project was upgraded with external_updater. Usage: tools/external_updater/updater.sh update external/bazelbuild-remote-apis For more info, check https://cs.android.com/android/platform/superproject/+/main:tools/external_updater/README.md Test: TreeHugger Change-Id: I0050def086d535476e499619f141e88039e0830f
-rw-r--r--.bazelrc2
-rw-r--r--.github/workflows/main.yml26
-rw-r--r--BUILD.bazel0
-rw-r--r--METADATA22
-rw-r--r--README.md123
-rw-r--r--WORKSPACE94
-rw-r--r--build/bazel/remote/asset/v1/BUILD38
-rw-r--r--build/bazel/remote/asset/v1/cc/BUILD25
-rw-r--r--build/bazel/remote/asset/v1/go/BUILD22
-rw-r--r--build/bazel/remote/asset/v1/java/BUILD6
-rw-r--r--build/bazel/remote/asset/v1/qualifiers.md104
-rw-r--r--build/bazel/remote/asset/v1/remote_asset.pb.go1689
-rw-r--r--build/bazel/remote/asset/v1/remote_asset.proto495
-rw-r--r--build/bazel/remote/execution/v2/BUILD40
-rw-r--r--build/bazel/remote/execution/v2/cc/BUILD25
-rw-r--r--build/bazel/remote/execution/v2/go/BUILD23
-rw-r--r--build/bazel/remote/execution/v2/java/BUILD6
-rw-r--r--build/bazel/remote/execution/v2/platform.md126
-rwxr-xr-xbuild/bazel/remote/execution/v2/remote_execution.pb.go7560
-rw-r--r--build/bazel/remote/execution/v2/remote_execution.proto960
-rw-r--r--build/bazel/remote/execution/v2/sha256tree_test_vectors.txt27
-rw-r--r--build/bazel/remote/logstream/v1/BUILD30
-rw-r--r--build/bazel/remote/logstream/v1/cc/BUILD25
-rw-r--r--build/bazel/remote/logstream/v1/go/BUILD17
-rw-r--r--build/bazel/remote/logstream/v1/java/BUILD6
-rwxr-xr-xbuild/bazel/remote/logstream/v1/remote_logstream.pb.go389
-rw-r--r--build/bazel/remote/logstream/v1/remote_logstream.proto139
-rw-r--r--build/bazel/semver/BUILD24
-rw-r--r--build/bazel/semver/cc/BUILD6
-rw-r--r--build/bazel/semver/go/BUILD16
-rw-r--r--build/bazel/semver/java/BUILD6
-rwxr-xr-xbuild/bazel/semver/semver.pb.go199
-rw-r--r--build/bazel/semver/semver.proto2
-rw-r--r--external/BUILD.googleapis78
-rw-r--r--go.mod12
-rw-r--r--go.sum123
-rwxr-xr-xhooks/pre-commit15
-rw-r--r--internal/BUILD0
-rw-r--r--internal/cc_grpc_library.bzl118
-rw-r--r--remote_apis_deps.bzl55
-rw-r--r--repository_rules.bzl18
41 files changed, 12409 insertions, 282 deletions
diff --git a/.bazelrc b/.bazelrc
new file mode 100644
index 0000000..936a7e8
--- /dev/null
+++ b/.bazelrc
@@ -0,0 +1,2 @@
+# Include comments in generated code for godoc.
+build --experimental_proto_descriptor_sets_include_source_info
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..87cbcde
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,26 @@
+name: CI
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Install bazelisk
+ run: |
+ curl -LO https://github.com/bazelbuild/bazelisk/releases/download/v1.7.4/bazelisk-linux-amd64
+ mkdir -p "${HOME}/bin"
+ mv bazelisk-linux-amd64 "${HOME}/bin/bazel"
+ chmod +x "${HOME}/bin/bazel"
+
+ - name: Check bindings generation
+ run: |
+ set -e
+ PATH=${HOME}/bin:$PATH ./hooks/pre-commit
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/BUILD.bazel
diff --git a/METADATA b/METADATA
index 21373cc..ca6c758 100644
--- a/METADATA
+++ b/METADATA
@@ -1,13 +1,19 @@
-name: "remote-apis"
-description:
- "An API for caching and execution of actions on a remote system."
+# This project was upgraded with external_updater.
+# Usage: tools/external_updater/updater.sh update external/bazelbuild-remote-apis
+# For more info, check https://cs.android.com/android/platform/superproject/+/main:tools/external_updater/README.md
+name: "remote-apis"
+description: "An API for caching and execution of actions on a remote system."
third_party {
- url {
- type: GIT
+ license_type: NOTICE
+ last_upgrade_date {
+ year: 2024
+ month: 4
+ day: 29
+ }
+ identifier {
+ type: "Git"
value: "https://github.com/bazelbuild/remote-apis"
+ version: "1f36c310b28d762b258ea577ed08e8203274efae"
}
- version: "6a5a17b77bca5e70417746fd0616db3849731619"
- last_upgrade_date { year: 2019 month: 4 day: 9 }
- license_type: NOTICE
}
diff --git a/README.md b/README.md
index 1c99ce6..7542a4b 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,38 @@
-# Remote Execution API
+# remote-apis
-The Remote Execution API is an API that, at its most general, allows clients to
-request execution of binaries on a remote system. It is intended primarily for
-use by build systems, such as [Bazel](bazel.build), to distribute build and test
-actions through a worker pool, and also provide a central cache of build
-results. This allows builds to execute faster, both by reusing results already
-built by other clients and by allowing many actions to be executed in parallel,
-in excess of the resource limits of the machine running the build.
+This repository contains a collection of APIs which work together to enable
+large scale distributed execution and caching on source code and other inputs.
+It describes how to upload inputs, request the execution, monitor for results,
+and cache those results. It's overall aim is to enable large scale parallel executions
+that wouldn't be feasible on a single system, while minimizing the amount of uploads
+and executions needed by storing data in a content-addressable format and caching results.
+
+### [Remote Execution API](build/bazel/remote/execution/v2/remote_execution.proto)
+
+The Remote Execution API is an API that, at its most general, allows clients to request
+execution of binaries on a remote system. It is intended primarily for use by build systems,
+such as [Bazel](bazel.build), to distribute build and test actions through a worker pool,
+and also provide a central cache of build results. This allows builds to execute
+faster, both by reusing results already built by other clients and by allowing many
+actions to be executed in parallel, in excess of the resource limits of the machine
+running the build.
+
+### [Remote Asset API](build/bazel/remote/asset/v1/remote_asset.proto)
+
+The Remote Asset API is an API to associate Qualifiers and URIs to Digests stored in
+Content Addressable Storage. It is primary intended to allow clients to use semantically
+relevant identifiers, such as a git repository or tarball location, to get the corresponding
+Digest. This mapping may be pushed by a client directly, or dynamically resolved and added
+to CAS by the asset server when fetched by a client.
+
+### [Remote Logstream API](build/bazel/remote/logstream/v1/remote_logstream.proto)
+
+The Remote Logstream API is an API supporting ordered reads and writes of `LogStream`
+resources. It is intented primarily for streaming the stdout and stderr of ongoing Action
+executions, enabling clients to view them while the Action is executing instead of waiting
+for it's completion.
+
+## API users
There are a number of clients and services using these APIs, they are listed
below.
@@ -15,20 +41,60 @@ below.
These tools use the Remote Execution API to distribute builds to workers.
* [Bazel](https://bazel.build)
+* [Buck2](https://github.com/facebook/buck2)
* [BuildStream](https://buildstream.build/)
+* [Goma Server](https://chromium.googlesource.com/infra/goma/server/)
+* [Justbuild](https://github.com/just-buildsystem/justbuild) (via `--compatible`)
* [Pants](https://www.pantsbuild.org)
+* [Please](https://please.build)
* [Recc](https://gitlab.com/bloomberg/recc)
+* [Reclient](https://github.com/bazelbuild/reclient)
+* [Siso](https://chromium.googlesource.com/infra/infra/+/refs/heads/main/go/src/infra/build/siso/)
### Servers
-These applications implement the Remote Execution API to server build requests
-from the clients above. These are then distributed to workers; some of these
-workers implement the Remote Worker API.
+These applications implement the Remote Execution API to serve build requests
+from the clients above.
+
+* [bazel-remote](https://github.com/buchgr/bazel-remote) (open source, cache only)
+* [Buildbarn](https://github.com/buildbarn) (open source)
+* [BuildBuddy](https://www.buildbuddy.io/) (commercial & open source)
+* [Buildfarm](https://github.com/bazelbuild/bazel-buildfarm) (open source)
+* [BuildGrid](https://buildgrid.build/) (open source)
+* [EngFlow](https://www.engflow.com/) (commercial)
+* [Flare Build Execution](https://flare.build/products/flare-build-execution) (commercial)
+* [Justbuild](https://github.com/just-buildsystem/justbuild/blob/master/doc/tutorial/just-execute.org) (via `--compatible`, open source)
+* [Kajiya](https://chromium.googlesource.com/infra/infra/+/refs/heads/main/go/src/infra/build/kajiya/) (open source)
+* [NativeLink](https://github.com/TraceMachina/nativelink) (open source)
+* [Scoot](https://github.com/twitter/scoot) (open source)
+
+### Workers
+Servers generally distribute work to a fleet of workers.
+The [Remote Worker API](https://docs.google.com/document/d/1s_AzRRD2mdyktKUj2HWBn99rMg_3tcPvdjx3MPbFidU)
+defines a generic protocol for worker and server communication, although,
+this API is considered too heavyweight for most use-cases. Because of that,
+many implementations have designed their own protocols. Links to these APIs
+are provided as a reference below.
+*Adhering to any one of these protocols is not a requirement.*
+
+* [Buildfarm Operation Queues](https://bazelbuild.github.io/bazel-buildfarm/docs/architecture/queues/)
+ * Uses sets of queues for managing different payload requirements.
+* [Buildbarn Remote Worker](https://github.com/buildbarn/bb-remote-execution/blob/master/pkg/proto/remoteworker/remoteworker.proto)
+ * Uses a custom protocol for workers to connect to a scheduler and receive instructions.
+* [BuildGrid Bots](https://buildgrid.build/developer/data_model.html#rwapi)
+ * A server implementation of the Remote Workers API.
+* [Buildbox Worker](https://gitlab.com/BuildGrid/buildbox/buildbox-worker)
+ * A worker implementation of the Remote Workers API.
+
+## API Community
-* [Buildbarn](https://github.com/EdSchouten/bazel-buildbarn)
-* [Buildfarm](https://github.com/bazelbuild/bazel-buildfarm)
-* [BuildGrid](https://buildgrid.build/)
-* [Remote Build Execution (Alpha)](https://blog.bazel.build/2018/10/05/remote-build-execution.html)
-* [Scoot](https://github.com/twitter/scoot)
+The [Remote Execution APIs
+group](https://groups.google.com/forum/#!forum/remote-execution-apis) hosts
+discussions related to the APIs in this repository.
+
+Interested parties meet monthly via VC to discuss issues related to the APIs,
+and several contributors have organized occasional meetups, hack-a-thons, and
+summits. Joining the email discussion group will automatically add you to the
+Google Calendar invite for the monthly meeting.
## Dependencies
@@ -48,3 +114,28 @@ Bazel, you will possibly want to declare `cc_proto_library`,
Other build systems will have to run protoc on the protobuf files, and link in
the googleapis and well-known proto types, manually.
+
+### Go (for non-Bazel build systems)
+
+This repository contains the generated Go code for interacting with the API via
+gRPC. Get it with:
+
+```
+go get github.com/bazelbuild/remote-apis
+```
+
+Import it with, for example:
+
+```
+repb "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2"
+```
+
+## Development
+
+Enable the git hooks to automatically generate Go proto code on commit:
+
+```
+git config core.hooksPath hooks/
+```
+
+This is a local setting, so applies only to this repository.
diff --git a/WORKSPACE b/WORKSPACE
index 4bd4dfa..391d0c2 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -2,49 +2,81 @@ workspace(name = "bazel_remote_apis")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-# Needed for protobuf.
http_archive(
name = "bazel_skylib",
- # Commit f83cb8dd6f5658bc574ccd873e25197055265d1c of 2018-11-26
- sha256 = "ba5d15ca230efca96320085d8e4d58da826d1f81b444ef8afccd8b23e0799b52",
- strip_prefix = "bazel-skylib-f83cb8dd6f5658bc574ccd873e25197055265d1c",
+ sha256 = "66ffd9315665bfaafc96b52278f57c7e2dd09f5ede279ea6d39b2be471e7e3aa",
urls = [
- "https://github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz",
+ "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.4.2/bazel-skylib-1.4.2.tar.gz",
+ "https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.2/bazel-skylib-1.4.2.tar.gz",
],
)
-# Needed for "well-known protos" and protoc.
+load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
+
+bazel_skylib_workspace()
+
+# Pull in go rules, which we need in order to selectively pull in Go dependencies.
http_archive(
- name = "com_google_protobuf",
- sha256 = "3e933375ecc58d01e52705479b82f155aea2d02cc55d833f8773213e74f88363",
- strip_prefix = "protobuf-3.7.0",
- urls = ["https://github.com/protocolbuffers/protobuf/releases/download/v3.7.0/protobuf-all-3.7.0.tar.gz"],
+ name = "io_bazel_rules_go",
+ sha256 = "d6ab6b57e48c09523e93050f13698f708428cfd5e619252e369d377af6597707",
+ urls = [
+ "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.43.0/rules_go-v0.43.0.zip",
+ "https://github.com/bazelbuild/rules_go/releases/download/v0.43.0/rules_go-v0.43.0.zip",
+ ],
)
-# Needed for the googleapis protos.
+# Gazelle, which we need in order to selectively pull in Gazelle dependencies for Go.
http_archive(
- name = "googleapis",
- build_file = "BUILD.googleapis",
- sha256 = "7b6ea252f0b8fb5cd722f45feb83e115b689909bbb6a393a873b6cbad4ceae1d",
- strip_prefix = "googleapis-143084a2624b6591ee1f9d23e7f5241856642f4d",
- urls = ["https://github.com/googleapis/googleapis/archive/143084a2624b6591ee1f9d23e7f5241856642f4d.zip"],
+ name = "bazel_gazelle",
+ sha256 = "b7387f72efb59f876e4daae42f1d3912d0d45563eac7cb23d1de0b094ab588cf",
+ urls = [
+ "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.34.0/bazel-gazelle-v0.34.0.tar.gz",
+ "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.34.0/bazel-gazelle-v0.34.0.tar.gz",
+ ],
)
+# Needed for protobuf.
+http_archive(
+ name = "com_google_protobuf",
+ sha256 = "535fbf566d372ccf3a097c374b26896fa044bf4232aef9cab37bd1cc1ba4e850",
+ strip_prefix = "protobuf-3.15.0",
+ urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.0.zip"],
+)
+
+load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
+
+protobuf_deps()
+
# Needed for C++ gRPC.
http_archive(
name = "com_github_grpc_grpc",
- strip_prefix = "grpc-1.17.2",
- urls = [
- "https://github.com/grpc/grpc/archive/v1.17.2.tar.gz",
- "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.17.2.tar.gz",
- ],
- sha256 = "34ed95b727e7c6fcbf85e5eb422e962788e21707b712fdb4caf931553c2c6dbc",
+ sha256 = "b391a327429279f6f29b9ae7e5317cd80d5e9d49cc100e6d682221af73d984a6",
+ strip_prefix = "grpc-93e8830070e9afcbaa992c75817009ee3f4b63a0", # v1.24.3 with fixes
+ urls = ["https://github.com/grpc/grpc/archive/93e8830070e9afcbaa992c75817009ee3f4b63a0.zip"],
)
# Pull in all gRPC dependencies.
load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
+
grpc_deps()
+# More gRPC dependencies. grpc_extra_deps does not work out of the box.
+load("@upb//bazel:workspace_deps.bzl", "upb_deps")
+load("@build_bazel_rules_apple//apple:repositories.bzl", "apple_rules_dependencies")
+load("@build_bazel_apple_support//lib:repositories.bzl", "apple_support_dependencies")
+
+upb_deps()
+
+apple_rules_dependencies()
+
+apple_support_dependencies()
+
+load("@upb//bazel:repository_defs.bzl", "bazel_version_repository")
+
+bazel_version_repository(
+ name = "bazel_version",
+)
+
bind(
name = "grpc_cpp_plugin",
actual = "@com_github_grpc_grpc//:grpc_cpp_plugin",
@@ -54,3 +86,21 @@ bind(
name = "grpc_lib",
actual = "@com_github_grpc_grpc//:grpc++",
)
+
+load("//:remote_apis_deps.bzl", "remote_apis_go_deps")
+
+remote_apis_go_deps()
+
+# Needed for the googleapis protos.
+http_archive(
+ name = "googleapis",
+ sha256 = "b28c13e99001664eac5f1fb81b44d912d19fbc041e30772263251da131f6573c",
+ strip_prefix = "googleapis-bb964feba5980ed70c9fb8f84fe6e86694df65b0",
+ urls = ["https://github.com/googleapis/googleapis/archive/bb964feba5980ed70c9fb8f84fe6e86694df65b0.zip"],
+)
+
+load("@googleapis//:repository_rules.bzl", "switched_rules_by_language")
+
+switched_rules_by_language(
+ name = "com_google_googleapis_imports",
+)
diff --git a/build/bazel/remote/asset/v1/BUILD b/build/bazel/remote/asset/v1/BUILD
new file mode 100644
index 0000000..f360b4f
--- /dev/null
+++ b/build/bazel/remote/asset/v1/BUILD
@@ -0,0 +1,38 @@
+package(default_visibility = ["//visibility:public"])
+
+load("@rules_proto//proto:defs.bzl", "proto_library")
+
+licenses(["notice"])
+
+proto_library(
+ name = "remote_asset_proto",
+ srcs = ["remote_asset.proto"],
+ deps = [
+ "//build/bazel/remote/execution/v2:remote_execution_proto",
+ "@com_google_protobuf//:duration_proto",
+ "@com_google_protobuf//:timestamp_proto",
+ "@googleapis//google/api:annotations_proto",
+ "@googleapis//google/api:http_proto",
+ "@googleapis//google/rpc:status_proto",
+ ],
+)
+
+alias(
+ name = "remote_asset_java_proto",
+ actual = "//build/bazel/remote/asset/v1/java:remote_asset_java_proto",
+)
+
+alias(
+ name = "remote_asset_cc_proto",
+ actual = "//build/bazel/remote/asset/v1/cc:remote_asset_cc_grpc",
+)
+
+alias(
+ name = "remote_asset_go_proto",
+ actual = "//build/bazel/remote/asset/v1/go:remote_asset_go_proto",
+)
+
+alias(
+ name = "go_default_library",
+ actual = "//build/bazel/remote/asset/v1/go:go_default_library",
+)
diff --git a/build/bazel/remote/asset/v1/cc/BUILD b/build/bazel/remote/asset/v1/cc/BUILD
new file mode 100644
index 0000000..f4bcddb
--- /dev/null
+++ b/build/bazel/remote/asset/v1/cc/BUILD
@@ -0,0 +1,25 @@
+package(default_visibility = ["//build/bazel/remote/asset/v1:__pkg__"])
+
+load("//internal:cc_grpc_library.bzl", "cc_grpc_codegen")
+
+cc_proto_library(
+ name = "remote_asset_cc_proto",
+ deps = ["//build/bazel/remote/asset/v1:remote_asset_proto"],
+)
+
+cc_grpc_codegen(
+ name = "remote_asset_cc_grpc_codegen",
+ proto = "//build/bazel/remote/asset/v1:remote_asset_proto",
+)
+
+cc_library(
+ name = "remote_asset_cc_grpc",
+ srcs = [":remote_asset_cc_grpc_codegen"],
+ hdrs = [":remote_asset_cc_grpc_codegen"],
+ include_prefix = "build/bazel/remote/asset/v1",
+ strip_include_prefix = "/" + package_name(),
+ deps = [
+ ":remote_asset_cc_proto",
+ "@com_github_grpc_grpc//:grpc++_codegen_proto",
+ ],
+)
diff --git a/build/bazel/remote/asset/v1/go/BUILD b/build/bazel/remote/asset/v1/go/BUILD
new file mode 100644
index 0000000..f1b1d26
--- /dev/null
+++ b/build/bazel/remote/asset/v1/go/BUILD
@@ -0,0 +1,22 @@
+package(default_visibility = ["//build/bazel/remote/asset/v1:__pkg__"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+go_proto_library(
+ name = "remote_asset_go_proto",
+ compilers = ["@io_bazel_rules_go//proto:go_grpc"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/asset/v1",
+ proto = "//build/bazel/remote/asset/v1:remote_asset_proto",
+ deps = [
+ "//build/bazel/remote/execution/v2:remote_execution_go_proto",
+ "@org_golang_google_genproto//googleapis/api/annotations",
+ "@org_golang_google_genproto//googleapis/rpc/status",
+ ],
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":remote_asset_go_proto"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/asset/v1",
+)
diff --git a/build/bazel/remote/asset/v1/java/BUILD b/build/bazel/remote/asset/v1/java/BUILD
new file mode 100644
index 0000000..6346656
--- /dev/null
+++ b/build/bazel/remote/asset/v1/java/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/remote/asset/v1:__pkg__"])
+
+java_proto_library(
+ name = "remote_asset_java_proto",
+ deps = ["//build/bazel/remote/asset/v1:remote_asset_proto"],
+)
diff --git a/build/bazel/remote/asset/v1/qualifiers.md b/build/bazel/remote/asset/v1/qualifiers.md
new file mode 100644
index 0000000..65fb655
--- /dev/null
+++ b/build/bazel/remote/asset/v1/qualifiers.md
@@ -0,0 +1,104 @@
+# Qualifier Lexicon
+
+This lexicon defines standard qualifier names that servers
+**MAY** support in the `Qualifier` message to facilitate interoperability.
+
+The following standard qualifier `name`s are defined:
+
+* `resource_type`: This describes the type of resource.
+
+ File assests should use an existing [media type](https://www.iana.org/assignments/media-types/media-types.xhtml).
+
+ Git repositories should use `application/x-git`.
+
+ Example:
+ ```json
+ // (FetchDirectoryRequest proto)
+ {
+ "uris": [
+ "https://github.com/bazelbuild/remote-apis.git"
+ ],
+ "qualifiers": [
+ {
+ "name": "resource_type",
+ "value": "application/x-git"
+ }
+ ]
+ }
+ ```
+
+* `checksum.sri`: The value represents a [Subresource Integrity](https://www.w3.org/TR/SRI/)
+ checksum of the content.
+
+ Example:
+ ```json
+ // (FetchBlobRequest proto)
+ {
+ "uris": [
+ "https://github.com/bazelbuild/remote-apis/archive/v2.0.0.tar.gz"
+ ],
+ "qualifiers": [
+ {
+ "name": "checksum.sri",
+ "value": "sha384-G9d9sKLNRfeFfGn1mnVXeJzXSbkCsYt11kl5hJnHpdzfVuLIuruIDnrs/lZyB4Gs"
+ }
+ ]
+ }
+ ```
+
+* `directory`: This is the relative path of a subdirectory of the resource. There should
+ be no trailing `/`.
+
+ Example:
+ ```json
+ // (FetchDirectoryRequest proto)
+ {
+ "uris": [
+ "https://github.com/bazelbuild/remote-apis.git"
+ ],
+ "qualifiers": [
+ {
+ "name": "directory",
+ "value": "build/bazel/remote/execution/v2"
+ }
+ ]
+ }
+ ```
+
+* `vcs.branch`: This is the name of the branch under source control management
+
+ Example:
+ ```json
+ // (FetchDirectoryRequest proto)
+ {
+ "uris": [
+ "https://github.com/bazelbuild/remote-apis.git"
+ ],
+ "qualifiers": [
+ {
+ "name": "vcs.branch",
+ "value": "master"
+ }
+ ]
+ }
+ ```
+
+* `vcs.commit`: The value is the identity of a specific version of the content
+ under source control management. For git this is a commit-ish, for subversion
+ this is a revision, for example.
+
+ Example:
+ ```json
+ // (FetchDirectoryRequest proto)
+ {
+ "uris": [
+ "https://github.com/bazelbuild/remote-apis.git"
+ ],
+ "qualifiers": [
+ {
+ "name": "vcs.commit",
+ "value": "b5123b1bb2853393c7b9aa43236db924d7e32d61"
+ }
+ ]
+ }
+ ```
diff --git a/build/bazel/remote/asset/v1/remote_asset.pb.go b/build/bazel/remote/asset/v1/remote_asset.pb.go
new file mode 100644
index 0000000..8c0c360
--- /dev/null
+++ b/build/bazel/remote/asset/v1/remote_asset.pb.go
@@ -0,0 +1,1689 @@
+// Copyright 2020 The Bazel 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.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.31.0
+// protoc v3.15.0
+// source: build/bazel/remote/asset/v1/remote_asset.proto
+
+package remoteasset
+
+import (
+ context "context"
+ v2 "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2"
+ _ "google.golang.org/genproto/googleapis/api/annotations"
+ status "google.golang.org/genproto/googleapis/rpc/status"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status1 "google.golang.org/grpc/status"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ durationpb "google.golang.org/protobuf/types/known/durationpb"
+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Qualifiers are used to disambiguate or sub-select content that shares a URI.
+// This may include specifying a particular commit or branch, in the case of
+// URIs referencing a repository; they could also be used to specify a
+// particular subdirectory of a repository or tarball. Qualifiers may also be
+// used to ensure content matches what the client expects, even when there is
+// no ambiguity to be had - for example, a qualifier specifying a checksum
+// value.
+//
+// In cases where the semantics of the request are not immediately clear from
+// the URL and/or qualifiers - e.g. dictated by URL scheme - it is recommended
+// to use an additional qualifier to remove the ambiguity. The `resource_type`
+// qualifier is recommended for this purpose.
+//
+// Qualifiers may be supplied in any order.
+type Qualifier struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The "name" of the qualifier, for example "resource_type".
+ // No separation is made between 'standard' and 'nonstandard'
+ // qualifiers, in accordance with https://tools.ietf.org/html/rfc6648,
+ // however implementers *SHOULD* take care to avoid ambiguity.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The "value" of the qualifier. Semantics will be dictated by the name.
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *Qualifier) Reset() {
+ *x = Qualifier{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Qualifier) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Qualifier) ProtoMessage() {}
+
+func (x *Qualifier) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Qualifier.ProtoReflect.Descriptor instead.
+func (*Qualifier) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Qualifier) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Qualifier) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+
+// A request message for
+// [Fetch.FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob].
+type FetchBlobRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The timeout for the underlying fetch, if content needs to be retrieved from
+ // origin.
+ //
+ // If unset, the server *MAY* apply an implementation-defined timeout.
+ //
+ // If set, and the user-provided timeout exceeds the RPC deadline, the server
+ // *SHOULD* keep the fetch going after the RPC completes, to be made
+ // available for future Fetch calls. The server may also enforce (via clamping
+ // and/or an INVALID_ARGUMENT error) implementation-defined minimum and
+ // maximum timeout values.
+ //
+ // If this timeout is exceeded on an attempt to retrieve content from origin
+ // the client will receive DEADLINE_EXCEEDED in [FetchBlobResponse.status].
+ Timeout *durationpb.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"`
+ // The oldest content the client is willing to accept, as measured from the
+ // time it was Push'd or when the underlying retrieval from origin was
+ // started.
+ // Upon retries of Fetch requests that cannot be completed within a single
+ // RPC, clients *SHOULD* provide the same value for subsequent requests as the
+ // original, to simplify combining the request with the previous attempt.
+ //
+ // If unset, the client *SHOULD* accept content of any age.
+ OldestContentAccepted *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=oldest_content_accepted,json=oldestContentAccepted,proto3" json:"oldest_content_accepted,omitempty"`
+ // The URI(s) of the content to fetch. These may be resources that the server
+ // can directly fetch from origin, in which case multiple URIs *SHOULD*
+ // represent the same content available at different locations (such as an
+ // origin and secondary mirrors). These may also be URIs for content known to
+ // the server through other mechanisms, e.g. pushed via the [Push][build.bazel.remote.asset.v1.Push]
+ // service.
+ //
+ // Clients *MUST* supply at least one URI. Servers *MAY* match any one of the
+ // supplied URIs.
+ Uris []string `protobuf:"bytes,4,rep,name=uris,proto3" json:"uris,omitempty"`
+ // Qualifiers sub-specifying the content to fetch - see comments on
+ // [Qualifier][build.bazel.remote.asset.v1.Qualifier].
+ // The same qualifiers apply to all URIs.
+ //
+ // Specified qualifier names *MUST* be unique.
+ Qualifiers []*Qualifier `protobuf:"bytes,5,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"`
+}
+
+func (x *FetchBlobRequest) Reset() {
+ *x = FetchBlobRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *FetchBlobRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FetchBlobRequest) ProtoMessage() {}
+
+func (x *FetchBlobRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FetchBlobRequest.ProtoReflect.Descriptor instead.
+func (*FetchBlobRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *FetchBlobRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *FetchBlobRequest) GetTimeout() *durationpb.Duration {
+ if x != nil {
+ return x.Timeout
+ }
+ return nil
+}
+
+func (x *FetchBlobRequest) GetOldestContentAccepted() *timestamppb.Timestamp {
+ if x != nil {
+ return x.OldestContentAccepted
+ }
+ return nil
+}
+
+func (x *FetchBlobRequest) GetUris() []string {
+ if x != nil {
+ return x.Uris
+ }
+ return nil
+}
+
+func (x *FetchBlobRequest) GetQualifiers() []*Qualifier {
+ if x != nil {
+ return x.Qualifiers
+ }
+ return nil
+}
+
+// A response message for
+// [Fetch.FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob].
+type FetchBlobResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // If the status has a code other than `OK`, it indicates that the operation
+ // was unable to be completed for reasons outside the servers' control.
+ // The possible fetch errors include:
+ // - `DEADLINE_EXCEEDED`: The operation could not be completed within the
+ // specified timeout.
+ // - `NOT_FOUND`: The requested asset was not found at the specified location.
+ // - `PERMISSION_DENIED`: The request was rejected by a remote server, or
+ // requested an asset from a disallowed origin.
+ // - `ABORTED`: The operation could not be completed, typically due to a
+ // failed consistency check.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+ // The uri from the request that resulted in a successful retrieval, or from
+ // which the error indicated in `status` was obtained.
+ Uri string `protobuf:"bytes,2,opt,name=uri,proto3" json:"uri,omitempty"`
+ // Any qualifiers known to the server and of interest to clients.
+ Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"`
+ // A minimum timestamp the content is expected to be available through.
+ // Servers *MAY* omit this field, if not known with confidence.
+ ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"`
+ // The result of the fetch, if the status had code `OK`.
+ // The digest of the file's contents, available for download through the CAS.
+ BlobDigest *v2.Digest `protobuf:"bytes,5,opt,name=blob_digest,json=blobDigest,proto3" json:"blob_digest,omitempty"`
+}
+
+func (x *FetchBlobResponse) Reset() {
+ *x = FetchBlobResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *FetchBlobResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FetchBlobResponse) ProtoMessage() {}
+
+func (x *FetchBlobResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FetchBlobResponse.ProtoReflect.Descriptor instead.
+func (*FetchBlobResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *FetchBlobResponse) GetStatus() *status.Status {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+
+func (x *FetchBlobResponse) GetUri() string {
+ if x != nil {
+ return x.Uri
+ }
+ return ""
+}
+
+func (x *FetchBlobResponse) GetQualifiers() []*Qualifier {
+ if x != nil {
+ return x.Qualifiers
+ }
+ return nil
+}
+
+func (x *FetchBlobResponse) GetExpiresAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.ExpiresAt
+ }
+ return nil
+}
+
+func (x *FetchBlobResponse) GetBlobDigest() *v2.Digest {
+ if x != nil {
+ return x.BlobDigest
+ }
+ return nil
+}
+
+// A request message for
+// [Fetch.FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory].
+type FetchDirectoryRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The timeout for the underlying fetch, if content needs to be retrieved from
+ // origin. This value is allowed to exceed the RPC deadline, in which case the
+ // server *SHOULD* keep the fetch going after the RPC completes, to be made
+ // available for future Fetch calls.
+ //
+ // If this timeout is exceeded on an attempt to retrieve content from origin
+ // the client will receive DEADLINE_EXCEEDED in [FetchDirectoryResponse.status].
+ Timeout *durationpb.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"`
+ // The oldest content the client is willing to accept, as measured from the
+ // time it was Push'd or when the underlying retrieval from origin was
+ // started.
+ // Upon retries of Fetch requests that cannot be completed within a single
+ // RPC, clients *SHOULD* provide the same value for subsequent requests as the
+ // original, to simplify combining the request with the previous attempt.
+ //
+ // If unset, the client *SHOULD* accept content of any age.
+ OldestContentAccepted *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=oldest_content_accepted,json=oldestContentAccepted,proto3" json:"oldest_content_accepted,omitempty"`
+ // The URI(s) of the content to fetch. These may be resources that the server
+ // can directly fetch from origin, in which case multiple URIs *SHOULD*
+ // represent the same content available at different locations (such as an
+ // origin and secondary mirrors). These may also be URIs for content known to
+ // the server through other mechanisms, e.g. pushed via the [Push][build.bazel.remote.asset.v1.Push]
+ // service.
+ //
+ // Clients *MUST* supply at least one URI. Servers *MAY* match any one of the
+ // supplied URIs.
+ Uris []string `protobuf:"bytes,4,rep,name=uris,proto3" json:"uris,omitempty"`
+ // Qualifiers sub-specifying the content to fetch - see comments on
+ // [Qualifier][build.bazel.remote.asset.v1.Qualifier].
+ // The same qualifiers apply to all URIs.
+ //
+ // Specified qualifier names *MUST* be unique.
+ Qualifiers []*Qualifier `protobuf:"bytes,5,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"`
+}
+
+func (x *FetchDirectoryRequest) Reset() {
+ *x = FetchDirectoryRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *FetchDirectoryRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FetchDirectoryRequest) ProtoMessage() {}
+
+func (x *FetchDirectoryRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FetchDirectoryRequest.ProtoReflect.Descriptor instead.
+func (*FetchDirectoryRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *FetchDirectoryRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *FetchDirectoryRequest) GetTimeout() *durationpb.Duration {
+ if x != nil {
+ return x.Timeout
+ }
+ return nil
+}
+
+func (x *FetchDirectoryRequest) GetOldestContentAccepted() *timestamppb.Timestamp {
+ if x != nil {
+ return x.OldestContentAccepted
+ }
+ return nil
+}
+
+func (x *FetchDirectoryRequest) GetUris() []string {
+ if x != nil {
+ return x.Uris
+ }
+ return nil
+}
+
+func (x *FetchDirectoryRequest) GetQualifiers() []*Qualifier {
+ if x != nil {
+ return x.Qualifiers
+ }
+ return nil
+}
+
+// A response message for
+// [Fetch.FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory].
+type FetchDirectoryResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // If the status has a code other than `OK`, it indicates that the operation
+ // was unable to be completed for reasons outside the servers' control.
+ // The possible fetch errors include:
+ // - `DEADLINE_EXCEEDED`: The operation could not be completed within the
+ // specified timeout.
+ // - `NOT_FOUND`: The requested asset was not found at the specified location.
+ // - `PERMISSION_DENIED`: The request was rejected by a remote server, or
+ // requested an asset from a disallowed origin.
+ // - `ABORTED`: The operation could not be completed, typically due to a
+ // failed consistency check.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+ // The uri from the request that resulted in a successful retrieval, or from
+ // which the error indicated in `status` was obtained.
+ Uri string `protobuf:"bytes,2,opt,name=uri,proto3" json:"uri,omitempty"`
+ // Any qualifiers known to the server and of interest to clients.
+ Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"`
+ // A minimum timestamp the content is expected to be available through.
+ // Servers *MAY* omit this field, if not known with confidence.
+ ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"`
+ // The result of the fetch, if the status had code `OK`.
+ // the root digest of a directory tree, suitable for fetching via
+ // [ContentAddressableStorage.GetTree].
+ RootDirectoryDigest *v2.Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"`
+}
+
+func (x *FetchDirectoryResponse) Reset() {
+ *x = FetchDirectoryResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *FetchDirectoryResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FetchDirectoryResponse) ProtoMessage() {}
+
+func (x *FetchDirectoryResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FetchDirectoryResponse.ProtoReflect.Descriptor instead.
+func (*FetchDirectoryResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *FetchDirectoryResponse) GetStatus() *status.Status {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+
+func (x *FetchDirectoryResponse) GetUri() string {
+ if x != nil {
+ return x.Uri
+ }
+ return ""
+}
+
+func (x *FetchDirectoryResponse) GetQualifiers() []*Qualifier {
+ if x != nil {
+ return x.Qualifiers
+ }
+ return nil
+}
+
+func (x *FetchDirectoryResponse) GetExpiresAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.ExpiresAt
+ }
+ return nil
+}
+
+func (x *FetchDirectoryResponse) GetRootDirectoryDigest() *v2.Digest {
+ if x != nil {
+ return x.RootDirectoryDigest
+ }
+ return nil
+}
+
+// A request message for
+// [Push.PushBlob][build.bazel.remote.asset.v1.Push.PushBlob].
+type PushBlobRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The URI(s) of the content to associate. If multiple URIs are specified, the
+ // pushed content will be available to fetch by specifying any of them.
+ Uris []string `protobuf:"bytes,2,rep,name=uris,proto3" json:"uris,omitempty"`
+ // Qualifiers sub-specifying the content that is being pushed - see comments
+ // on [Qualifier][build.bazel.remote.asset.v1.Qualifier].
+ // The same qualifiers apply to all URIs.
+ Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"`
+ // A time after which this content should stop being returned via [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob].
+ // Servers *MAY* expire content early, e.g. due to storage pressure.
+ ExpireAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"`
+ // The blob to associate.
+ BlobDigest *v2.Digest `protobuf:"bytes,5,opt,name=blob_digest,json=blobDigest,proto3" json:"blob_digest,omitempty"`
+ // Referenced blobs or directories that need to not expire before expiration
+ // of this association, in addition to `blob_digest` itself.
+ // These fields are hints - clients *MAY* omit them, and servers *SHOULD*
+ // respect them, at the risk of increased incidents of Fetch responses
+ // indirectly referencing unavailable blobs.
+ ReferencesBlobs []*v2.Digest `protobuf:"bytes,6,rep,name=references_blobs,json=referencesBlobs,proto3" json:"references_blobs,omitempty"`
+ ReferencesDirectories []*v2.Digest `protobuf:"bytes,7,rep,name=references_directories,json=referencesDirectories,proto3" json:"references_directories,omitempty"`
+}
+
+func (x *PushBlobRequest) Reset() {
+ *x = PushBlobRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PushBlobRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PushBlobRequest) ProtoMessage() {}
+
+func (x *PushBlobRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PushBlobRequest.ProtoReflect.Descriptor instead.
+func (*PushBlobRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *PushBlobRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *PushBlobRequest) GetUris() []string {
+ if x != nil {
+ return x.Uris
+ }
+ return nil
+}
+
+func (x *PushBlobRequest) GetQualifiers() []*Qualifier {
+ if x != nil {
+ return x.Qualifiers
+ }
+ return nil
+}
+
+func (x *PushBlobRequest) GetExpireAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.ExpireAt
+ }
+ return nil
+}
+
+func (x *PushBlobRequest) GetBlobDigest() *v2.Digest {
+ if x != nil {
+ return x.BlobDigest
+ }
+ return nil
+}
+
+func (x *PushBlobRequest) GetReferencesBlobs() []*v2.Digest {
+ if x != nil {
+ return x.ReferencesBlobs
+ }
+ return nil
+}
+
+func (x *PushBlobRequest) GetReferencesDirectories() []*v2.Digest {
+ if x != nil {
+ return x.ReferencesDirectories
+ }
+ return nil
+}
+
+// A response message for
+// [Push.PushBlob][build.bazel.remote.asset.v1.Push.PushBlob].
+type PushBlobResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *PushBlobResponse) Reset() {
+ *x = PushBlobResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PushBlobResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PushBlobResponse) ProtoMessage() {}
+
+func (x *PushBlobResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PushBlobResponse.ProtoReflect.Descriptor instead.
+func (*PushBlobResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{6}
+}
+
+// A request message for
+// [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory].
+type PushDirectoryRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The URI(s) of the content to associate. If multiple URIs are specified, the
+ // pushed content will be available to fetch by specifying any of them.
+ Uris []string `protobuf:"bytes,2,rep,name=uris,proto3" json:"uris,omitempty"`
+ // Qualifiers sub-specifying the content that is being pushed - see comments
+ // on [Qualifier][build.bazel.remote.asset.v1.Qualifier].
+ // The same qualifiers apply to all URIs.
+ Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"`
+ // A time after which this content should stop being returned via
+ // [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory].
+ // Servers *MAY* expire content early, e.g. due to storage pressure.
+ ExpireAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"`
+ // Directory to associate
+ RootDirectoryDigest *v2.Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"`
+ // Referenced blobs or directories that need to not expire before expiration
+ // of this association, in addition to `root_directory_digest` itself.
+ // These fields are hints - clients *MAY* omit them, and servers *SHOULD*
+ // respect them, at the risk of increased incidents of Fetch responses
+ // indirectly referencing unavailable blobs.
+ ReferencesBlobs []*v2.Digest `protobuf:"bytes,6,rep,name=references_blobs,json=referencesBlobs,proto3" json:"references_blobs,omitempty"`
+ ReferencesDirectories []*v2.Digest `protobuf:"bytes,7,rep,name=references_directories,json=referencesDirectories,proto3" json:"references_directories,omitempty"`
+}
+
+func (x *PushDirectoryRequest) Reset() {
+ *x = PushDirectoryRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PushDirectoryRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PushDirectoryRequest) ProtoMessage() {}
+
+func (x *PushDirectoryRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PushDirectoryRequest.ProtoReflect.Descriptor instead.
+func (*PushDirectoryRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *PushDirectoryRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *PushDirectoryRequest) GetUris() []string {
+ if x != nil {
+ return x.Uris
+ }
+ return nil
+}
+
+func (x *PushDirectoryRequest) GetQualifiers() []*Qualifier {
+ if x != nil {
+ return x.Qualifiers
+ }
+ return nil
+}
+
+func (x *PushDirectoryRequest) GetExpireAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.ExpireAt
+ }
+ return nil
+}
+
+func (x *PushDirectoryRequest) GetRootDirectoryDigest() *v2.Digest {
+ if x != nil {
+ return x.RootDirectoryDigest
+ }
+ return nil
+}
+
+func (x *PushDirectoryRequest) GetReferencesBlobs() []*v2.Digest {
+ if x != nil {
+ return x.ReferencesBlobs
+ }
+ return nil
+}
+
+func (x *PushDirectoryRequest) GetReferencesDirectories() []*v2.Digest {
+ if x != nil {
+ return x.ReferencesDirectories
+ }
+ return nil
+}
+
+// A response message for
+// [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory].
+type PushDirectoryResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *PushDirectoryResponse) Reset() {
+ *x = PushDirectoryResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PushDirectoryResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PushDirectoryResponse) ProtoMessage() {}
+
+func (x *PushDirectoryResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PushDirectoryResponse.ProtoReflect.Descriptor instead.
+func (*PushDirectoryResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{8}
+}
+
+var File_build_bazel_remote_asset_v1_remote_asset_proto protoreflect.FileDescriptor
+
+var file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc = []byte{
+ 0x0a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x12, 0x1b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x36, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,
+ 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63,
+ 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x35, 0x0a,
+ 0x09, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14,
+ 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9c, 0x02, 0x0a, 0x10, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c,
+ 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73,
+ 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33,
+ 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+ 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65,
+ 0x6f, 0x75, 0x74, 0x12, 0x52, 0x0a, 0x17, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x52, 0x15, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41,
+ 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x69, 0x73, 0x18,
+ 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x71,
+ 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75,
+ 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x73, 0x22, 0x9e, 0x02, 0x0a, 0x11, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f,
+ 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12,
+ 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
+ 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x62, 0x6c,
+ 0x6f, 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x44, 0x69,
+ 0x67, 0x65, 0x73, 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x15, 0x46, 0x65, 0x74, 0x63, 0x68, 0x44, 0x69,
+ 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23,
+ 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e,
+ 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x52, 0x0a, 0x17, 0x6f, 0x6c, 0x64, 0x65,
+ 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70,
+ 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
+ 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04,
+ 0x75, 0x72, 0x69, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73,
+ 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e,
+ 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75,
+ 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x22, 0xb6, 0x02, 0x0a, 0x16, 0x46, 0x65, 0x74,
+ 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63,
+ 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
+ 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72,
+ 0x69, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18,
+ 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61,
+ 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74,
+ 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71,
+ 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70,
+ 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+ 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72,
+ 0x65, 0x73, 0x41, 0x74, 0x12, 0x5b, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f,
+ 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x22, 0xc9, 0x03, 0x0a, 0x0f, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63,
+ 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e,
+ 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72,
+ 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 0x12, 0x46,
+ 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31,
+ 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65,
+ 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
+ 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x12,
+ 0x48, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x62,
+ 0x6c, 0x6f, 0x62, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x10, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x06, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x5e, 0x0a,
+ 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65,
+ 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e,
+ 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x15, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x12, 0x0a,
+ 0x10, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0xe1, 0x03, 0x0a, 0x14, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74,
+ 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e,
+ 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x75, 0x72, 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75,
+ 0x72, 0x69, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73,
+ 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52,
+ 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65,
+ 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+ 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x70, 0x69,
+ 0x72, 0x65, 0x41, 0x74, 0x12, 0x5b, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f,
+ 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x12, 0x52, 0x0a, 0x10, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f,
+ 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69,
+ 0x67, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73,
+ 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x5e, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18,
+ 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61,
+ 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x15,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74,
+ 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xdd,
+ 0x02, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x9e, 0x01, 0x0a, 0x09, 0x46, 0x65, 0x74,
+ 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65,
+ 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61,
+ 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74,
+ 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a,
+ 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a,
+ 0x66, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0xb2, 0x01, 0x0a, 0x0e, 0x46, 0x65,
+ 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x32, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68,
+ 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46,
+ 0x65, 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x3a, 0x01, 0x2a,
+ 0x22, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a,
+ 0x66, 0x65, 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x32, 0xd4,
+ 0x02, 0x0a, 0x04, 0x50, 0x75, 0x73, 0x68, 0x12, 0x9a, 0x01, 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68,
+ 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e,
+ 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31,
+ 0x2e, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76,
+ 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x70, 0x75, 0x73, 0x68,
+ 0x42, 0x6c, 0x6f, 0x62, 0x12, 0xae, 0x01, 0x0a, 0x0d, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65,
+ 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61,
+ 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65,
+ 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82,
+ 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69,
+ 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d,
+ 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x70, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65,
+ 0x63, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x9f, 0x01, 0x0a, 0x1b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73,
+ 0x65, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x73, 0x73,
+ 0x65, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75,
+ 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x62, 0x75, 0x69,
+ 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f,
+ 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61,
+ 0x73, 0x73, 0x65, 0x74, 0xa2, 0x02, 0x02, 0x52, 0x41, 0xaa, 0x02, 0x1b, 0x42, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x41,
+ 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescOnce sync.Once
+ file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData = file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc
+)
+
+func file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP() []byte {
+ file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescOnce.Do(func() {
+ file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData = protoimpl.X.CompressGZIP(file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData)
+ })
+ return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData
+}
+
+var file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes = []interface{}{
+ (*Qualifier)(nil), // 0: build.bazel.remote.asset.v1.Qualifier
+ (*FetchBlobRequest)(nil), // 1: build.bazel.remote.asset.v1.FetchBlobRequest
+ (*FetchBlobResponse)(nil), // 2: build.bazel.remote.asset.v1.FetchBlobResponse
+ (*FetchDirectoryRequest)(nil), // 3: build.bazel.remote.asset.v1.FetchDirectoryRequest
+ (*FetchDirectoryResponse)(nil), // 4: build.bazel.remote.asset.v1.FetchDirectoryResponse
+ (*PushBlobRequest)(nil), // 5: build.bazel.remote.asset.v1.PushBlobRequest
+ (*PushBlobResponse)(nil), // 6: build.bazel.remote.asset.v1.PushBlobResponse
+ (*PushDirectoryRequest)(nil), // 7: build.bazel.remote.asset.v1.PushDirectoryRequest
+ (*PushDirectoryResponse)(nil), // 8: build.bazel.remote.asset.v1.PushDirectoryResponse
+ (*durationpb.Duration)(nil), // 9: google.protobuf.Duration
+ (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp
+ (*status.Status)(nil), // 11: google.rpc.Status
+ (*v2.Digest)(nil), // 12: build.bazel.remote.execution.v2.Digest
+}
+var file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs = []int32{
+ 9, // 0: build.bazel.remote.asset.v1.FetchBlobRequest.timeout:type_name -> google.protobuf.Duration
+ 10, // 1: build.bazel.remote.asset.v1.FetchBlobRequest.oldest_content_accepted:type_name -> google.protobuf.Timestamp
+ 0, // 2: build.bazel.remote.asset.v1.FetchBlobRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier
+ 11, // 3: build.bazel.remote.asset.v1.FetchBlobResponse.status:type_name -> google.rpc.Status
+ 0, // 4: build.bazel.remote.asset.v1.FetchBlobResponse.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier
+ 10, // 5: build.bazel.remote.asset.v1.FetchBlobResponse.expires_at:type_name -> google.protobuf.Timestamp
+ 12, // 6: build.bazel.remote.asset.v1.FetchBlobResponse.blob_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 9, // 7: build.bazel.remote.asset.v1.FetchDirectoryRequest.timeout:type_name -> google.protobuf.Duration
+ 10, // 8: build.bazel.remote.asset.v1.FetchDirectoryRequest.oldest_content_accepted:type_name -> google.protobuf.Timestamp
+ 0, // 9: build.bazel.remote.asset.v1.FetchDirectoryRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier
+ 11, // 10: build.bazel.remote.asset.v1.FetchDirectoryResponse.status:type_name -> google.rpc.Status
+ 0, // 11: build.bazel.remote.asset.v1.FetchDirectoryResponse.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier
+ 10, // 12: build.bazel.remote.asset.v1.FetchDirectoryResponse.expires_at:type_name -> google.protobuf.Timestamp
+ 12, // 13: build.bazel.remote.asset.v1.FetchDirectoryResponse.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 0, // 14: build.bazel.remote.asset.v1.PushBlobRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier
+ 10, // 15: build.bazel.remote.asset.v1.PushBlobRequest.expire_at:type_name -> google.protobuf.Timestamp
+ 12, // 16: build.bazel.remote.asset.v1.PushBlobRequest.blob_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 12, // 17: build.bazel.remote.asset.v1.PushBlobRequest.references_blobs:type_name -> build.bazel.remote.execution.v2.Digest
+ 12, // 18: build.bazel.remote.asset.v1.PushBlobRequest.references_directories:type_name -> build.bazel.remote.execution.v2.Digest
+ 0, // 19: build.bazel.remote.asset.v1.PushDirectoryRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier
+ 10, // 20: build.bazel.remote.asset.v1.PushDirectoryRequest.expire_at:type_name -> google.protobuf.Timestamp
+ 12, // 21: build.bazel.remote.asset.v1.PushDirectoryRequest.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 12, // 22: build.bazel.remote.asset.v1.PushDirectoryRequest.references_blobs:type_name -> build.bazel.remote.execution.v2.Digest
+ 12, // 23: build.bazel.remote.asset.v1.PushDirectoryRequest.references_directories:type_name -> build.bazel.remote.execution.v2.Digest
+ 1, // 24: build.bazel.remote.asset.v1.Fetch.FetchBlob:input_type -> build.bazel.remote.asset.v1.FetchBlobRequest
+ 3, // 25: build.bazel.remote.asset.v1.Fetch.FetchDirectory:input_type -> build.bazel.remote.asset.v1.FetchDirectoryRequest
+ 5, // 26: build.bazel.remote.asset.v1.Push.PushBlob:input_type -> build.bazel.remote.asset.v1.PushBlobRequest
+ 7, // 27: build.bazel.remote.asset.v1.Push.PushDirectory:input_type -> build.bazel.remote.asset.v1.PushDirectoryRequest
+ 2, // 28: build.bazel.remote.asset.v1.Fetch.FetchBlob:output_type -> build.bazel.remote.asset.v1.FetchBlobResponse
+ 4, // 29: build.bazel.remote.asset.v1.Fetch.FetchDirectory:output_type -> build.bazel.remote.asset.v1.FetchDirectoryResponse
+ 6, // 30: build.bazel.remote.asset.v1.Push.PushBlob:output_type -> build.bazel.remote.asset.v1.PushBlobResponse
+ 8, // 31: build.bazel.remote.asset.v1.Push.PushDirectory:output_type -> build.bazel.remote.asset.v1.PushDirectoryResponse
+ 28, // [28:32] is the sub-list for method output_type
+ 24, // [24:28] is the sub-list for method input_type
+ 24, // [24:24] is the sub-list for extension type_name
+ 24, // [24:24] is the sub-list for extension extendee
+ 0, // [0:24] is the sub-list for field type_name
+}
+
+func init() { file_build_bazel_remote_asset_v1_remote_asset_proto_init() }
+func file_build_bazel_remote_asset_v1_remote_asset_proto_init() {
+ if File_build_bazel_remote_asset_v1_remote_asset_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Qualifier); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FetchBlobRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FetchBlobResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FetchDirectoryRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FetchDirectoryResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PushBlobRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PushBlobResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PushDirectoryRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PushDirectoryResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 9,
+ NumExtensions: 0,
+ NumServices: 2,
+ },
+ GoTypes: file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes,
+ DependencyIndexes: file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs,
+ MessageInfos: file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes,
+ }.Build()
+ File_build_bazel_remote_asset_v1_remote_asset_proto = out.File
+ file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc = nil
+ file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes = nil
+ file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs = nil
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// FetchClient is the client API for Fetch service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FetchClient interface {
+ // Resolve or fetch referenced assets, making them available to the caller and
+ // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ //
+ // Servers *MAY* fetch content that they do not already have cached, for any
+ // URLs they support.
+ //
+ // Servers *SHOULD* ensure that referenced files are present in the CAS at the
+ // time of the response, and (if supported) that they will remain available
+ // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD*
+ // be increased if necessary and applicable.
+ // In the event that a client receives a reference to content that is no
+ // longer present, it *MAY* re-issue the request with
+ // `oldest_content_accepted` set to a more recent timestamp than the original
+ // attempt, to induce a re-fetch from origin.
+ //
+ // Servers *MAY* cache fetched content and reuse it for subsequent requests,
+ // subject to `oldest_content_accepted`.
+ //
+ // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push]
+ // API and allow content to be directly inserted for use in future fetch
+ // responses.
+ //
+ // Servers *MUST* ensure Fetch'd content matches all the specified
+ // qualifiers except in the case of previously Push'd resources, for which
+ // the server *MAY* trust the pushing client to have set the qualifiers
+ // correctly, without validation.
+ //
+ // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push]
+ // API *MUST* reject requests containing qualifiers it does not support.
+ //
+ // Servers *MAY* transform assets as part of the fetch. For example a
+ // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]
+ // might be unpacked, or a Git repository
+ // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]
+ // might be passed through `git-archive`.
+ //
+ // Errors handling the requested assets will be returned as gRPC Status errors
+ // here; errors outside the server's control will be returned inline in the
+ // `status` field of the response (see comment there for details).
+ // The possible RPC errors include:
+ // - `INVALID_ARGUMENT`: One or more arguments were invalid, such as a
+ // qualifier that is not supported by the server.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ // - `UNAVAILABLE`: Due to a transient condition the operation could not be
+ // completed. The client should retry.
+ // - `INTERNAL`: An internal error occurred while performing the operation.
+ // The client should retry.
+ // - `DEADLINE_EXCEEDED`: The fetch could not be completed within the given
+ // RPC deadline. The client should retry for at least as long as the value
+ // provided in `timeout` field of the request.
+ //
+ // In the case of unsupported qualifiers, the server *SHOULD* additionally
+ // send a [BadRequest][google.rpc.BadRequest] error detail where, for each
+ // unsupported qualifier, there is a `FieldViolation` with a `field` of
+ // `qualifiers.name` and a `description` of `"{qualifier}" not supported`
+ // indicating the name of the unsupported qualifier.
+ FetchBlob(ctx context.Context, in *FetchBlobRequest, opts ...grpc.CallOption) (*FetchBlobResponse, error)
+ FetchDirectory(ctx context.Context, in *FetchDirectoryRequest, opts ...grpc.CallOption) (*FetchDirectoryResponse, error)
+}
+
+type fetchClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewFetchClient(cc grpc.ClientConnInterface) FetchClient {
+ return &fetchClient{cc}
+}
+
+func (c *fetchClient) FetchBlob(ctx context.Context, in *FetchBlobRequest, opts ...grpc.CallOption) (*FetchBlobResponse, error) {
+ out := new(FetchBlobResponse)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Fetch/FetchBlob", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *fetchClient) FetchDirectory(ctx context.Context, in *FetchDirectoryRequest, opts ...grpc.CallOption) (*FetchDirectoryResponse, error) {
+ out := new(FetchDirectoryResponse)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Fetch/FetchDirectory", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// FetchServer is the server API for Fetch service.
+type FetchServer interface {
+ // Resolve or fetch referenced assets, making them available to the caller and
+ // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ //
+ // Servers *MAY* fetch content that they do not already have cached, for any
+ // URLs they support.
+ //
+ // Servers *SHOULD* ensure that referenced files are present in the CAS at the
+ // time of the response, and (if supported) that they will remain available
+ // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD*
+ // be increased if necessary and applicable.
+ // In the event that a client receives a reference to content that is no
+ // longer present, it *MAY* re-issue the request with
+ // `oldest_content_accepted` set to a more recent timestamp than the original
+ // attempt, to induce a re-fetch from origin.
+ //
+ // Servers *MAY* cache fetched content and reuse it for subsequent requests,
+ // subject to `oldest_content_accepted`.
+ //
+ // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push]
+ // API and allow content to be directly inserted for use in future fetch
+ // responses.
+ //
+ // Servers *MUST* ensure Fetch'd content matches all the specified
+ // qualifiers except in the case of previously Push'd resources, for which
+ // the server *MAY* trust the pushing client to have set the qualifiers
+ // correctly, without validation.
+ //
+ // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push]
+ // API *MUST* reject requests containing qualifiers it does not support.
+ //
+ // Servers *MAY* transform assets as part of the fetch. For example a
+ // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]
+ // might be unpacked, or a Git repository
+ // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]
+ // might be passed through `git-archive`.
+ //
+ // Errors handling the requested assets will be returned as gRPC Status errors
+ // here; errors outside the server's control will be returned inline in the
+ // `status` field of the response (see comment there for details).
+ // The possible RPC errors include:
+ // - `INVALID_ARGUMENT`: One or more arguments were invalid, such as a
+ // qualifier that is not supported by the server.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ // - `UNAVAILABLE`: Due to a transient condition the operation could not be
+ // completed. The client should retry.
+ // - `INTERNAL`: An internal error occurred while performing the operation.
+ // The client should retry.
+ // - `DEADLINE_EXCEEDED`: The fetch could not be completed within the given
+ // RPC deadline. The client should retry for at least as long as the value
+ // provided in `timeout` field of the request.
+ //
+ // In the case of unsupported qualifiers, the server *SHOULD* additionally
+ // send a [BadRequest][google.rpc.BadRequest] error detail where, for each
+ // unsupported qualifier, there is a `FieldViolation` with a `field` of
+ // `qualifiers.name` and a `description` of `"{qualifier}" not supported`
+ // indicating the name of the unsupported qualifier.
+ FetchBlob(context.Context, *FetchBlobRequest) (*FetchBlobResponse, error)
+ FetchDirectory(context.Context, *FetchDirectoryRequest) (*FetchDirectoryResponse, error)
+}
+
+// UnimplementedFetchServer can be embedded to have forward compatible implementations.
+type UnimplementedFetchServer struct {
+}
+
+func (*UnimplementedFetchServer) FetchBlob(context.Context, *FetchBlobRequest) (*FetchBlobResponse, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method FetchBlob not implemented")
+}
+func (*UnimplementedFetchServer) FetchDirectory(context.Context, *FetchDirectoryRequest) (*FetchDirectoryResponse, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method FetchDirectory not implemented")
+}
+
+func RegisterFetchServer(s *grpc.Server, srv FetchServer) {
+ s.RegisterService(&_Fetch_serviceDesc, srv)
+}
+
+func _Fetch_FetchBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(FetchBlobRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(FetchServer).FetchBlob(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.asset.v1.Fetch/FetchBlob",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(FetchServer).FetchBlob(ctx, req.(*FetchBlobRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Fetch_FetchDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(FetchDirectoryRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(FetchServer).FetchDirectory(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.asset.v1.Fetch/FetchDirectory",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(FetchServer).FetchDirectory(ctx, req.(*FetchDirectoryRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _Fetch_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "build.bazel.remote.asset.v1.Fetch",
+ HandlerType: (*FetchServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "FetchBlob",
+ Handler: _Fetch_FetchBlob_Handler,
+ },
+ {
+ MethodName: "FetchDirectory",
+ Handler: _Fetch_FetchDirectory_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "build/bazel/remote/asset/v1/remote_asset.proto",
+}
+
+// PushClient is the client API for Push service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type PushClient interface {
+ // These APIs associate the identifying information of a resource, as
+ // indicated by URI and optionally Qualifiers, with content available in the
+ // CAS. For example, associating a repository url and a commit id with a
+ // Directory Digest.
+ //
+ // Servers *SHOULD* only allow trusted clients to associate content, and *MAY*
+ // only allow certain URIs to be pushed.
+ //
+ // Clients *MUST* ensure associated content is available in CAS prior to
+ // pushing.
+ //
+ // Clients *MUST* ensure the Qualifiers listed correctly match the contents,
+ // and Servers *MAY* trust these values without validation.
+ // Fetch servers *MAY* require exact match of all qualifiers when returning
+ // content previously pushed, or allow fetching content with only a subset of
+ // the qualifiers specified on Push.
+ //
+ // Clients can specify expiration information that the server *SHOULD*
+ // respect. Subsequent requests can be used to alter the expiration time.
+ //
+ // A minimal compliant Fetch implementation may support only Push'd content
+ // and return `NOT_FOUND` for any resource that was not pushed first.
+ // Alternatively, a compliant implementation may choose to not support Push
+ // and only return resources that can be Fetch'd from origin.
+ //
+ // Errors will be returned as gRPC Status errors.
+ // The possible RPC errors include:
+ // - `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ // - `UNAVAILABLE`: Due to a transient condition the operation could not be
+ // completed. The client should retry.
+ // - `INTERNAL`: An internal error occurred while performing the operation.
+ // The client should retry.
+ PushBlob(ctx context.Context, in *PushBlobRequest, opts ...grpc.CallOption) (*PushBlobResponse, error)
+ PushDirectory(ctx context.Context, in *PushDirectoryRequest, opts ...grpc.CallOption) (*PushDirectoryResponse, error)
+}
+
+type pushClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewPushClient(cc grpc.ClientConnInterface) PushClient {
+ return &pushClient{cc}
+}
+
+func (c *pushClient) PushBlob(ctx context.Context, in *PushBlobRequest, opts ...grpc.CallOption) (*PushBlobResponse, error) {
+ out := new(PushBlobResponse)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Push/PushBlob", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *pushClient) PushDirectory(ctx context.Context, in *PushDirectoryRequest, opts ...grpc.CallOption) (*PushDirectoryResponse, error) {
+ out := new(PushDirectoryResponse)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Push/PushDirectory", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// PushServer is the server API for Push service.
+type PushServer interface {
+ // These APIs associate the identifying information of a resource, as
+ // indicated by URI and optionally Qualifiers, with content available in the
+ // CAS. For example, associating a repository url and a commit id with a
+ // Directory Digest.
+ //
+ // Servers *SHOULD* only allow trusted clients to associate content, and *MAY*
+ // only allow certain URIs to be pushed.
+ //
+ // Clients *MUST* ensure associated content is available in CAS prior to
+ // pushing.
+ //
+ // Clients *MUST* ensure the Qualifiers listed correctly match the contents,
+ // and Servers *MAY* trust these values without validation.
+ // Fetch servers *MAY* require exact match of all qualifiers when returning
+ // content previously pushed, or allow fetching content with only a subset of
+ // the qualifiers specified on Push.
+ //
+ // Clients can specify expiration information that the server *SHOULD*
+ // respect. Subsequent requests can be used to alter the expiration time.
+ //
+ // A minimal compliant Fetch implementation may support only Push'd content
+ // and return `NOT_FOUND` for any resource that was not pushed first.
+ // Alternatively, a compliant implementation may choose to not support Push
+ // and only return resources that can be Fetch'd from origin.
+ //
+ // Errors will be returned as gRPC Status errors.
+ // The possible RPC errors include:
+ // - `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ // - `UNAVAILABLE`: Due to a transient condition the operation could not be
+ // completed. The client should retry.
+ // - `INTERNAL`: An internal error occurred while performing the operation.
+ // The client should retry.
+ PushBlob(context.Context, *PushBlobRequest) (*PushBlobResponse, error)
+ PushDirectory(context.Context, *PushDirectoryRequest) (*PushDirectoryResponse, error)
+}
+
+// UnimplementedPushServer can be embedded to have forward compatible implementations.
+type UnimplementedPushServer struct {
+}
+
+func (*UnimplementedPushServer) PushBlob(context.Context, *PushBlobRequest) (*PushBlobResponse, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method PushBlob not implemented")
+}
+func (*UnimplementedPushServer) PushDirectory(context.Context, *PushDirectoryRequest) (*PushDirectoryResponse, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method PushDirectory not implemented")
+}
+
+func RegisterPushServer(s *grpc.Server, srv PushServer) {
+ s.RegisterService(&_Push_serviceDesc, srv)
+}
+
+func _Push_PushBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(PushBlobRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(PushServer).PushBlob(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.asset.v1.Push/PushBlob",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(PushServer).PushBlob(ctx, req.(*PushBlobRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Push_PushDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(PushDirectoryRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(PushServer).PushDirectory(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.asset.v1.Push/PushDirectory",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(PushServer).PushDirectory(ctx, req.(*PushDirectoryRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _Push_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "build.bazel.remote.asset.v1.Push",
+ HandlerType: (*PushServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "PushBlob",
+ Handler: _Push_PushBlob_Handler,
+ },
+ {
+ MethodName: "PushDirectory",
+ Handler: _Push_PushDirectory_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "build/bazel/remote/asset/v1/remote_asset.proto",
+}
diff --git a/build/bazel/remote/asset/v1/remote_asset.proto b/build/bazel/remote/asset/v1/remote_asset.proto
new file mode 100644
index 0000000..c896ec4
--- /dev/null
+++ b/build/bazel/remote/asset/v1/remote_asset.proto
@@ -0,0 +1,495 @@
+// Copyright 2020 The Bazel 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 build.bazel.remote.asset.v1;
+
+import "build/bazel/remote/execution/v2/remote_execution.proto";
+import "google/api/annotations.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/timestamp.proto";
+import "google/rpc/status.proto";
+
+option csharp_namespace = "Build.Bazel.Remote.Asset.v1";
+option go_package = "github.com/bazelbuild/remote-apis/build/bazel/remote/asset/v1;remoteasset";
+option java_multiple_files = true;
+option java_outer_classname = "RemoteAssetProto";
+option java_package = "build.bazel.remote.asset.v1";
+option objc_class_prefix = "RA";
+
+// The Remote Asset API provides a mapping from a URI and Qualifiers to
+// Digests.
+//
+// Multiple URIs may be used to refer to the same content. For example, the
+// same tarball may exist at multiple mirrors and thus be retrievable from
+// multiple URLs. When URLs are used, these should refer to actual content as
+// Fetch service implementations may choose to fetch the content directly
+// from the origin. For example, the HEAD of a git repository's active branch
+// can be referred to as:
+//
+// uri: https://github.com/bazelbuild/remote-apis.git
+//
+// URNs may be used to strongly identify content, for instance by using the
+// uuid namespace identifier: urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6.
+// This is most applicable to named content that is Push'd, where the URN
+// serves as an agreed-upon key, but carries no other inherent meaning.
+//
+// Service implementations may choose to support only URLs, only URNs for
+// Push'd content, only other URIs for which the server and client agree upon
+// semantics of, or any mixture of the above.
+
+// Qualifiers are used to disambiguate or sub-select content that shares a URI.
+// This may include specifying a particular commit or branch, in the case of
+// URIs referencing a repository; they could also be used to specify a
+// particular subdirectory of a repository or tarball. Qualifiers may also be
+// used to ensure content matches what the client expects, even when there is
+// no ambiguity to be had - for example, a qualifier specifying a checksum
+// value.
+//
+// In cases where the semantics of the request are not immediately clear from
+// the URL and/or qualifiers - e.g. dictated by URL scheme - it is recommended
+// to use an additional qualifier to remove the ambiguity. The `resource_type`
+// qualifier is recommended for this purpose.
+//
+// Qualifiers may be supplied in any order.
+message Qualifier {
+ // The "name" of the qualifier, for example "resource_type".
+ // No separation is made between 'standard' and 'nonstandard'
+ // qualifiers, in accordance with https://tools.ietf.org/html/rfc6648,
+ // however implementers *SHOULD* take care to avoid ambiguity.
+ string name = 1;
+
+ // The "value" of the qualifier. Semantics will be dictated by the name.
+ string value = 2;
+}
+
+// The Fetch service resolves or fetches assets referenced by URI and
+// Qualifiers, returning a Digest for the content in
+// [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+//
+// As with other services in the Remote Execution API, any call may return an
+// error with a [RetryInfo][google.rpc.RetryInfo] error detail providing
+// information about when the client should retry the request; clients SHOULD
+// respect the information provided.
+service Fetch {
+ // Resolve or fetch referenced assets, making them available to the caller and
+ // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ //
+ // Servers *MAY* fetch content that they do not already have cached, for any
+ // URLs they support.
+ //
+ // Servers *SHOULD* ensure that referenced files are present in the CAS at the
+ // time of the response, and (if supported) that they will remain available
+ // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD*
+ // be increased if necessary and applicable.
+ // In the event that a client receives a reference to content that is no
+ // longer present, it *MAY* re-issue the request with
+ // `oldest_content_accepted` set to a more recent timestamp than the original
+ // attempt, to induce a re-fetch from origin.
+ //
+ // Servers *MAY* cache fetched content and reuse it for subsequent requests,
+ // subject to `oldest_content_accepted`.
+ //
+ // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push]
+ // API and allow content to be directly inserted for use in future fetch
+ // responses.
+ //
+ // Servers *MUST* ensure Fetch'd content matches all the specified
+ // qualifiers except in the case of previously Push'd resources, for which
+ // the server *MAY* trust the pushing client to have set the qualifiers
+ // correctly, without validation.
+ //
+ // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push]
+ // API *MUST* reject requests containing qualifiers it does not support.
+ //
+ // Servers *MAY* transform assets as part of the fetch. For example a
+ // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]
+ // might be unpacked, or a Git repository
+ // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]
+ // might be passed through `git-archive`.
+ //
+ // Errors handling the requested assets will be returned as gRPC Status errors
+ // here; errors outside the server's control will be returned inline in the
+ // `status` field of the response (see comment there for details).
+ // The possible RPC errors include:
+ // * `INVALID_ARGUMENT`: One or more arguments were invalid, such as a
+ // qualifier that is not supported by the server.
+ // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ // * `UNAVAILABLE`: Due to a transient condition the operation could not be
+ // completed. The client should retry.
+ // * `INTERNAL`: An internal error occurred while performing the operation.
+ // The client should retry.
+ // * `DEADLINE_EXCEEDED`: The fetch could not be completed within the given
+ // RPC deadline. The client should retry for at least as long as the value
+ // provided in `timeout` field of the request.
+ //
+ // In the case of unsupported qualifiers, the server *SHOULD* additionally
+ // send a [BadRequest][google.rpc.BadRequest] error detail where, for each
+ // unsupported qualifier, there is a `FieldViolation` with a `field` of
+ // `qualifiers.name` and a `description` of `"{qualifier}" not supported`
+ // indicating the name of the unsupported qualifier.
+ rpc FetchBlob(FetchBlobRequest) returns (FetchBlobResponse) {
+ option (google.api.http) = { post: "/v1/{instance_name=**}/assets:fetchBlob" body: "*" };
+ }
+ rpc FetchDirectory(FetchDirectoryRequest) returns (FetchDirectoryResponse) {
+ option (google.api.http) = { post: "/v1/{instance_name=**}/assets:fetchDirectory" body: "*" };
+ }
+}
+
+// A request message for
+// [Fetch.FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob].
+message FetchBlobRequest {
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ string instance_name = 1;
+
+ // The timeout for the underlying fetch, if content needs to be retrieved from
+ // origin.
+ //
+ // If unset, the server *MAY* apply an implementation-defined timeout.
+ //
+ // If set, and the user-provided timeout exceeds the RPC deadline, the server
+ // *SHOULD* keep the fetch going after the RPC completes, to be made
+ // available for future Fetch calls. The server may also enforce (via clamping
+ // and/or an INVALID_ARGUMENT error) implementation-defined minimum and
+ // maximum timeout values.
+ //
+ // If this timeout is exceeded on an attempt to retrieve content from origin
+ // the client will receive DEADLINE_EXCEEDED in [FetchBlobResponse.status].
+ google.protobuf.Duration timeout = 2;
+
+ // The oldest content the client is willing to accept, as measured from the
+ // time it was Push'd or when the underlying retrieval from origin was
+ // started.
+ // Upon retries of Fetch requests that cannot be completed within a single
+ // RPC, clients *SHOULD* provide the same value for subsequent requests as the
+ // original, to simplify combining the request with the previous attempt.
+ //
+ // If unset, the client *SHOULD* accept content of any age.
+ google.protobuf.Timestamp oldest_content_accepted = 3;
+
+ // The URI(s) of the content to fetch. These may be resources that the server
+ // can directly fetch from origin, in which case multiple URIs *SHOULD*
+ // represent the same content available at different locations (such as an
+ // origin and secondary mirrors). These may also be URIs for content known to
+ // the server through other mechanisms, e.g. pushed via the [Push][build.bazel.remote.asset.v1.Push]
+ // service.
+ //
+ // Clients *MUST* supply at least one URI. Servers *MAY* match any one of the
+ // supplied URIs.
+ repeated string uris = 4;
+
+ // Qualifiers sub-specifying the content to fetch - see comments on
+ // [Qualifier][build.bazel.remote.asset.v1.Qualifier].
+ // The same qualifiers apply to all URIs.
+ //
+ // Specified qualifier names *MUST* be unique.
+ repeated Qualifier qualifiers = 5;
+
+ // The digest function the server must use to compute the digest.
+ //
+ // If unset, the server SHOULD default to SHA256.
+ build.bazel.remote.execution.v2.DigestFunction.Value digest_function = 6;
+}
+
+// A response message for
+// [Fetch.FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob].
+message FetchBlobResponse {
+ // If the status has a code other than `OK`, it indicates that the operation
+ // was unable to be completed for reasons outside the servers' control.
+ // The possible fetch errors include:
+ // * `DEADLINE_EXCEEDED`: The operation could not be completed within the
+ // specified timeout.
+ // * `NOT_FOUND`: The requested asset was not found at the specified location.
+ // * `PERMISSION_DENIED`: The request was rejected by a remote server, or
+ // requested an asset from a disallowed origin.
+ // * `ABORTED`: The operation could not be completed, typically due to a
+ // failed consistency check.
+ // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ google.rpc.Status status = 1;
+
+ // The uri from the request that resulted in a successful retrieval, or from
+ // which the error indicated in `status` was obtained.
+ string uri = 2;
+
+ // Any qualifiers known to the server and of interest to clients.
+ repeated Qualifier qualifiers = 3;
+
+ // A minimum timestamp the content is expected to be available through.
+ // Servers *MAY* omit this field, if not known with confidence.
+ google.protobuf.Timestamp expires_at = 4;
+
+ // The result of the fetch, if the status had code `OK`.
+ // The digest of the file's contents, available for download through the CAS.
+ build.bazel.remote.execution.v2.Digest blob_digest = 5;
+
+ // This field SHOULD be set to the digest function that was used by the server
+ // to compute [FetchBlobResponse.blob_digest].
+ // Clients could use this to determine whether the server honors
+ // [FetchBlobRequest.digest_function] that was set in the request.
+ //
+ // If unset, clients SHOULD default to use SHA256 regardless of the requested
+ // [FetchBlobRequest.digest_function].
+ build.bazel.remote.execution.v2.DigestFunction.Value digest_function = 6;
+}
+
+// A request message for
+// [Fetch.FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory].
+message FetchDirectoryRequest {
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ string instance_name = 1;
+
+ // The timeout for the underlying fetch, if content needs to be retrieved from
+ // origin. This value is allowed to exceed the RPC deadline, in which case the
+ // server *SHOULD* keep the fetch going after the RPC completes, to be made
+ // available for future Fetch calls.
+ //
+ // If this timeout is exceeded on an attempt to retrieve content from origin
+ // the client will receive DEADLINE_EXCEEDED in [FetchDirectoryResponse.status].
+ google.protobuf.Duration timeout = 2;
+
+ // The oldest content the client is willing to accept, as measured from the
+ // time it was Push'd or when the underlying retrieval from origin was
+ // started.
+ // Upon retries of Fetch requests that cannot be completed within a single
+ // RPC, clients *SHOULD* provide the same value for subsequent requests as the
+ // original, to simplify combining the request with the previous attempt.
+ //
+ // If unset, the client *SHOULD* accept content of any age.
+ google.protobuf.Timestamp oldest_content_accepted = 3;
+
+ // The URI(s) of the content to fetch. These may be resources that the server
+ // can directly fetch from origin, in which case multiple URIs *SHOULD*
+ // represent the same content available at different locations (such as an
+ // origin and secondary mirrors). These may also be URIs for content known to
+ // the server through other mechanisms, e.g. pushed via the [Push][build.bazel.remote.asset.v1.Push]
+ // service.
+ //
+ // Clients *MUST* supply at least one URI. Servers *MAY* match any one of the
+ // supplied URIs.
+ repeated string uris = 4;
+
+ // Qualifiers sub-specifying the content to fetch - see comments on
+ // [Qualifier][build.bazel.remote.asset.v1.Qualifier].
+ // The same qualifiers apply to all URIs.
+ //
+ // Specified qualifier names *MUST* be unique.
+ repeated Qualifier qualifiers = 5;
+
+ // The digest function the server must use to compute the digest.
+ //
+ // If unset, the server SHOULD default to SHA256.
+ build.bazel.remote.execution.v2.DigestFunction.Value digest_function = 6;
+}
+
+// A response message for
+// [Fetch.FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory].
+message FetchDirectoryResponse {
+ // If the status has a code other than `OK`, it indicates that the operation
+ // was unable to be completed for reasons outside the servers' control.
+ // The possible fetch errors include:
+ // * `DEADLINE_EXCEEDED`: The operation could not be completed within the
+ // specified timeout.
+ // * `NOT_FOUND`: The requested asset was not found at the specified location.
+ // * `PERMISSION_DENIED`: The request was rejected by a remote server, or
+ // requested an asset from a disallowed origin.
+ // * `ABORTED`: The operation could not be completed, typically due to a
+ // failed consistency check.
+ // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ google.rpc.Status status = 1;
+
+ // The uri from the request that resulted in a successful retrieval, or from
+ // which the error indicated in `status` was obtained.
+ string uri = 2;
+
+ // Any qualifiers known to the server and of interest to clients.
+ repeated Qualifier qualifiers = 3;
+
+ // A minimum timestamp the content is expected to be available through.
+ // Servers *MAY* omit this field, if not known with confidence.
+ google.protobuf.Timestamp expires_at = 4;
+
+ // The result of the fetch, if the status had code `OK`.
+ // the root digest of a directory tree, suitable for fetching via
+ // [ContentAddressableStorage.GetTree].
+ build.bazel.remote.execution.v2.Digest root_directory_digest = 5;
+
+ // This field SHOULD be set to the digest function that was used by the server
+ // to compute [FetchBlobResponse.root_directory_digest].
+ // Clients could use this to determine whether the server honors
+ // [FetchDirectoryRequest.digest_function] that was set in the request.
+ //
+ // If unset, clients SHOULD default to use SHA256 regardless of the requested
+ // [FetchDirectoryRequest.digest_function].
+ build.bazel.remote.execution.v2.DigestFunction.Value digest_function = 6;
+}
+
+// The Push service is complementary to the Fetch, and allows for
+// associating contents of URLs to be returned in future Fetch API calls.
+//
+// As with other services in the Remote Execution API, any call may return an
+// error with a [RetryInfo][google.rpc.RetryInfo] error detail providing
+// information about when the client should retry the request; clients SHOULD
+// respect the information provided.
+service Push {
+ // These APIs associate the identifying information of a resource, as
+ // indicated by URI and optionally Qualifiers, with content available in the
+ // CAS. For example, associating a repository url and a commit id with a
+ // Directory Digest.
+ //
+ // Servers *SHOULD* only allow trusted clients to associate content, and *MAY*
+ // only allow certain URIs to be pushed.
+ //
+ // Clients *MUST* ensure associated content is available in CAS prior to
+ // pushing.
+ //
+ // Clients *MUST* ensure the Qualifiers listed correctly match the contents,
+ // and Servers *MAY* trust these values without validation.
+ // Fetch servers *MAY* require exact match of all qualifiers when returning
+ // content previously pushed, or allow fetching content with only a subset of
+ // the qualifiers specified on Push.
+ //
+ // Clients can specify expiration information that the server *SHOULD*
+ // respect. Subsequent requests can be used to alter the expiration time.
+ //
+ // A minimal compliant Fetch implementation may support only Push'd content
+ // and return `NOT_FOUND` for any resource that was not pushed first.
+ // Alternatively, a compliant implementation may choose to not support Push
+ // and only return resources that can be Fetch'd from origin.
+ //
+ // Errors will be returned as gRPC Status errors.
+ // The possible RPC errors include:
+ // * `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid.
+ // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to
+ // perform the requested operation. The client may retry after a delay.
+ // * `UNAVAILABLE`: Due to a transient condition the operation could not be
+ // completed. The client should retry.
+ // * `INTERNAL`: An internal error occurred while performing the operation.
+ // The client should retry.
+ rpc PushBlob(PushBlobRequest) returns (PushBlobResponse) {
+ option (google.api.http) = { post: "/v1/{instance_name=**}/assets:pushBlob" body: "*" };
+ }
+
+ rpc PushDirectory(PushDirectoryRequest) returns (PushDirectoryResponse) {
+ option (google.api.http) = { post: "/v1/{instance_name=**}/assets:pushDirectory" body: "*" };
+ }
+}
+
+// A request message for
+// [Push.PushBlob][build.bazel.remote.asset.v1.Push.PushBlob].
+message PushBlobRequest {
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ string instance_name = 1;
+
+ // The URI(s) of the content to associate. If multiple URIs are specified, the
+ // pushed content will be available to fetch by specifying any of them.
+ repeated string uris = 2;
+
+ // Qualifiers sub-specifying the content that is being pushed - see comments
+ // on [Qualifier][build.bazel.remote.asset.v1.Qualifier].
+ // The same qualifiers apply to all URIs.
+ repeated Qualifier qualifiers = 3;
+
+ // A time after which this content should stop being returned via [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob].
+ // Servers *MAY* expire content early, e.g. due to storage pressure.
+ google.protobuf.Timestamp expire_at = 4;
+
+ // The blob to associate.
+ build.bazel.remote.execution.v2.Digest blob_digest = 5;
+
+ // Referenced blobs or directories that need to not expire before expiration
+ // of this association, in addition to `blob_digest` itself.
+ // These fields are hints - clients *MAY* omit them, and servers *SHOULD*
+ // respect them, at the risk of increased incidents of Fetch responses
+ // indirectly referencing unavailable blobs.
+ repeated build.bazel.remote.execution.v2.Digest references_blobs = 6;
+ repeated build.bazel.remote.execution.v2.Digest references_directories = 7;
+
+ // The digest function that was used to compute the blob digest.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the action digest hash and the digest functions announced
+ // in the server's capabilities.
+ build.bazel.remote.execution.v2.DigestFunction.Value digest_function = 8;
+}
+
+// A response message for
+// [Push.PushBlob][build.bazel.remote.asset.v1.Push.PushBlob].
+message PushBlobResponse { /* empty */ }
+
+// A request message for
+// [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory].
+message PushDirectoryRequest {
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ string instance_name = 1;
+
+ // The URI(s) of the content to associate. If multiple URIs are specified, the
+ // pushed content will be available to fetch by specifying any of them.
+ repeated string uris = 2;
+
+ // Qualifiers sub-specifying the content that is being pushed - see comments
+ // on [Qualifier][build.bazel.remote.asset.v1.Qualifier].
+ // The same qualifiers apply to all URIs.
+ repeated Qualifier qualifiers = 3;
+
+ // A time after which this content should stop being returned via
+ // [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory].
+ // Servers *MAY* expire content early, e.g. due to storage pressure.
+ google.protobuf.Timestamp expire_at = 4;
+
+ // Directory to associate
+ build.bazel.remote.execution.v2.Digest root_directory_digest = 5;
+
+ // Referenced blobs or directories that need to not expire before expiration
+ // of this association, in addition to `root_directory_digest` itself.
+ // These fields are hints - clients *MAY* omit them, and servers *SHOULD*
+ // respect them, at the risk of increased incidents of Fetch responses
+ // indirectly referencing unavailable blobs.
+ repeated build.bazel.remote.execution.v2.Digest references_blobs = 6;
+ repeated build.bazel.remote.execution.v2.Digest references_directories = 7;
+
+ // The digest function that was used to compute blob digests.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the action digest hash and the digest functions announced
+ // in the server's capabilities.
+ build.bazel.remote.execution.v2.DigestFunction.Value digest_function = 8;
+}
+
+// A response message for
+// [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory].
+message PushDirectoryResponse { /* empty */ }
diff --git a/build/bazel/remote/execution/v2/BUILD b/build/bazel/remote/execution/v2/BUILD
index 34a509c..e8edcf0 100644
--- a/build/bazel/remote/execution/v2/BUILD
+++ b/build/bazel/remote/execution/v2/BUILD
@@ -1,5 +1,6 @@
package(default_visibility = ["//visibility:public"])
-load("@com_github_grpc_grpc//bazel:cc_grpc_library.bzl", "cc_grpc_library")
+
+load("@rules_proto//proto:defs.bzl", "proto_library")
licenses(["notice"])
@@ -8,32 +9,33 @@ proto_library(
srcs = ["remote_execution.proto"],
deps = [
"//build/bazel/semver:semver_proto",
+ "@com_google_protobuf//:any_proto",
"@com_google_protobuf//:duration_proto",
"@com_google_protobuf//:timestamp_proto",
- "@googleapis//:google_api_annotations_proto",
- "@googleapis//:google_api_http_proto",
- "@googleapis//:google_longrunning_operations_proto",
- "@googleapis//:google_rpc_status_proto",
+ "@com_google_protobuf//:wrappers_proto",
+ "@googleapis//google/api:annotations_proto",
+ "@googleapis//google/api:http_proto",
+ "@googleapis//google/longrunning:operations_proto",
+ "@googleapis//google/rpc:status_proto",
],
)
-java_proto_library(
+alias(
name = "remote_execution_java_proto",
- deps = [":remote_execution_proto"],
+ actual = "//build/bazel/remote/execution/v2/java:remote_execution_java_proto",
)
-cc_grpc_library(
+alias(
name = "remote_execution_cc_proto",
- srcs = ["remote_execution.proto"],
- deps = [
- "//build/bazel/semver:semver_cc_proto",
- "@googleapis//:google_api_annotations_cc_proto",
- "@googleapis//:google_api_http_cc_proto",
- "@googleapis//:google_longrunning_operations_cc_proto",
- "@googleapis//:google_rpc_status_cc_proto",
- ],
- proto_only = False,
- well_known_protos = True,
- use_external = False,
+ actual = "//build/bazel/remote/execution/v2/cc:remote_execution_cc_grpc",
)
+alias(
+ name = "remote_execution_go_proto",
+ actual = "//build/bazel/remote/execution/v2/go:remote_execution_go_proto",
+)
+
+alias(
+ name = "go_default_library",
+ actual = "//build/bazel/remote/execution/v2/go:go_default_library",
+)
diff --git a/build/bazel/remote/execution/v2/cc/BUILD b/build/bazel/remote/execution/v2/cc/BUILD
new file mode 100644
index 0000000..541b645
--- /dev/null
+++ b/build/bazel/remote/execution/v2/cc/BUILD
@@ -0,0 +1,25 @@
+package(default_visibility = ["//build/bazel/remote/execution/v2:__pkg__"])
+
+load("//internal:cc_grpc_library.bzl", "cc_grpc_codegen")
+
+cc_proto_library(
+ name = "remote_execution_cc_proto",
+ deps = ["//build/bazel/remote/execution/v2:remote_execution_proto"],
+)
+
+cc_grpc_codegen(
+ name = "remote_execution_cc_grpc_codegen",
+ proto = "//build/bazel/remote/execution/v2:remote_execution_proto",
+)
+
+cc_library(
+ name = "remote_execution_cc_grpc",
+ srcs = [":remote_execution_cc_grpc_codegen"],
+ hdrs = [":remote_execution_cc_grpc_codegen"],
+ include_prefix = "build/bazel/remote/execution/v2",
+ strip_include_prefix = "/" + package_name(),
+ deps = [
+ ":remote_execution_cc_proto",
+ "@com_github_grpc_grpc//:grpc++_codegen_proto",
+ ],
+)
diff --git a/build/bazel/remote/execution/v2/go/BUILD b/build/bazel/remote/execution/v2/go/BUILD
new file mode 100644
index 0000000..24cc7a0
--- /dev/null
+++ b/build/bazel/remote/execution/v2/go/BUILD
@@ -0,0 +1,23 @@
+package(default_visibility = ["//build/bazel/remote/execution/v2:__pkg__"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+go_proto_library(
+ name = "remote_execution_go_proto",
+ compilers = ["@io_bazel_rules_go//proto:go_grpc"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2",
+ proto = "//build/bazel/remote/execution/v2:remote_execution_proto",
+ deps = [
+ "//build/bazel/semver:semver_go_proto",
+ "@org_golang_google_genproto//googleapis/api/annotations",
+ "@org_golang_google_genproto//googleapis/longrunning",
+ "@org_golang_google_genproto//googleapis/rpc/status",
+ ],
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":remote_execution_go_proto"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2",
+)
diff --git a/build/bazel/remote/execution/v2/java/BUILD b/build/bazel/remote/execution/v2/java/BUILD
new file mode 100644
index 0000000..e6bb022
--- /dev/null
+++ b/build/bazel/remote/execution/v2/java/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/remote/execution/v2:__pkg__"])
+
+java_proto_library(
+ name = "remote_execution_java_proto",
+ deps = ["//build/bazel/remote/execution/v2:remote_execution_proto"],
+)
diff --git a/build/bazel/remote/execution/v2/platform.md b/build/bazel/remote/execution/v2/platform.md
new file mode 100644
index 0000000..56a11af
--- /dev/null
+++ b/build/bazel/remote/execution/v2/platform.md
@@ -0,0 +1,126 @@
+# Platform Lexicon
+
+This lexicon defines standard platform property names and values that servers
+MAY support in the `Platform` message to facilitate interoperability. New
+values can be added by submitting a PR against this repository, which requires
+signing the [Google CLA](https://opensource.google/documentation/reference/cla).
+If signing the Google CLA is undesirable, you may submit an issue instead.
+
+The following standard property `name`s are defined:
+
+* `OSFamily`: This describes the operating system family. Multiple values
+ are not allowed and an exact match is required.
+
+ The following standard values are defined:
+
+ - `aix`
+ - `freebsd`
+ - `linux`
+ - `macos`
+ - `sunos`
+ - `windows`
+
+ Additional values may be defined by the server. For other POSIX systems
+ the recommendation is to use the output of `uname -s` in lower case.
+
+* `ISA`: This describes the instruction set architecture including
+ instruction set extensions and versions. Multiple values are allowed. If
+ multiple values are specified, they are AND-ed together: the worker is
+ required to support all of the listed values.
+
+ The following standard instruction set architecture values are defined:
+
+ - `arm-a32` (little endian)
+ - `arm-a32-be` (big endian)
+ - `arm-a64` (little endian)
+ - `arm-a64-be` (big endian)
+ - `arm-t32` (little endian)
+ - `arm-t32-be` (big endian)
+ - `la64v100` (little endian)
+ - `power-isa-be` (big endian)
+ - `power-isa-le` (little endian)
+ - `rv32g` (little endian)
+ - `rv64g` (little endian)
+ - `sparc-v9` (big endian)
+ - `x86-32`
+ - `x86-64`
+
+ The following standard instruction set extension and version values are
+ defined:
+
+ - `arm-neon`
+ - `arm-sve`
+ - `arm-vfpv3`
+ - `arm-vfpv4`
+ - `armv6`
+ - `armv7`
+ - `armv8`
+ - `x86-avx`
+ - `x86-avx2`
+ - `x86-avx-512`
+ - `x86-sse4.1`
+ - `x86-sse4.2`
+
+ Additional values may be defined by the server. Vendor-neutral names are
+ recommended.
+
+ Clients SHOULD NOT request instruction set extensions or versions without
+ requesting an instruction set architecture.
+
+ Examples with multiple values:
+
+ ```json
+ // (Platform proto)
+ {
+ "properties": [
+ {
+ "name": "ISA",
+ "value": "x86-64"
+ },
+ {
+ "name": "ISA",
+ "value": "x86-avx2"
+ }
+ ]
+ }
+ ```
+
+ ```json
+ // (Platform proto)
+ {
+ "properties": [
+ {
+ "name": "ISA",
+ "value": "arm-a64"
+ },
+ {
+ "name": "ISA",
+ "value": "armv8"
+ },
+ {
+ "name": "ISA",
+ "value": "arm-sve"
+ }
+ ]
+ }
+ ```
+
+ ```json
+ // (Platform proto)
+ {
+ "properties": [
+ {
+ "name": "ISA",
+ "value": "arm-a32"
+ },
+ {
+ "name": "ISA",
+ "value": "armv7"
+ },
+ {
+ "name": "ISA",
+ "value": "arm-vfpv4"
+ }
+ ]
+ }
+ ```
diff --git a/build/bazel/remote/execution/v2/remote_execution.pb.go b/build/bazel/remote/execution/v2/remote_execution.pb.go
new file mode 100755
index 0000000..3dad0e1
--- /dev/null
+++ b/build/bazel/remote/execution/v2/remote_execution.pb.go
@@ -0,0 +1,7560 @@
+// Copyright 2018 The Bazel 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.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.31.0
+// protoc v3.15.0
+// source: build/bazel/remote/execution/v2/remote_execution.proto
+
+package remoteexecution
+
+import (
+ context "context"
+ semver "github.com/bazelbuild/remote-apis/build/bazel/semver"
+ _ "google.golang.org/genproto/googleapis/api/annotations"
+ longrunning "google.golang.org/genproto/googleapis/longrunning"
+ status "google.golang.org/genproto/googleapis/rpc/status"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status1 "google.golang.org/grpc/status"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ anypb "google.golang.org/protobuf/types/known/anypb"
+ durationpb "google.golang.org/protobuf/types/known/durationpb"
+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+ wrapperspb "google.golang.org/protobuf/types/known/wrapperspb"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type Command_OutputDirectoryFormat int32
+
+const (
+ // The client is only interested in receiving output directories in
+ // the form of a single Tree object, using the `tree_digest` field.
+ Command_TREE_ONLY Command_OutputDirectoryFormat = 0
+ // The client is only interested in receiving output directories in
+ // the form of a hierarchy of separately stored Directory objects,
+ // using the `root_directory_digest` field.
+ Command_DIRECTORY_ONLY Command_OutputDirectoryFormat = 1
+ // The client is interested in receiving output directories both in
+ // the form of a single Tree object and a hierarchy of separately
+ // stored Directory objects, using both the `tree_digest` and
+ // `root_directory_digest` fields.
+ Command_TREE_AND_DIRECTORY Command_OutputDirectoryFormat = 2
+)
+
+// Enum value maps for Command_OutputDirectoryFormat.
+var (
+ Command_OutputDirectoryFormat_name = map[int32]string{
+ 0: "TREE_ONLY",
+ 1: "DIRECTORY_ONLY",
+ 2: "TREE_AND_DIRECTORY",
+ }
+ Command_OutputDirectoryFormat_value = map[string]int32{
+ "TREE_ONLY": 0,
+ "DIRECTORY_ONLY": 1,
+ "TREE_AND_DIRECTORY": 2,
+ }
+)
+
+func (x Command_OutputDirectoryFormat) Enum() *Command_OutputDirectoryFormat {
+ p := new(Command_OutputDirectoryFormat)
+ *p = x
+ return p
+}
+
+func (x Command_OutputDirectoryFormat) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Command_OutputDirectoryFormat) Descriptor() protoreflect.EnumDescriptor {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[0].Descriptor()
+}
+
+func (Command_OutputDirectoryFormat) Type() protoreflect.EnumType {
+ return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[0]
+}
+
+func (x Command_OutputDirectoryFormat) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Command_OutputDirectoryFormat.Descriptor instead.
+func (Command_OutputDirectoryFormat) EnumDescriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{1, 0}
+}
+
+type ExecutionStage_Value int32
+
+const (
+ // Invalid value.
+ ExecutionStage_UNKNOWN ExecutionStage_Value = 0
+ // Checking the result against the cache.
+ ExecutionStage_CACHE_CHECK ExecutionStage_Value = 1
+ // Currently idle, awaiting a free machine to execute.
+ ExecutionStage_QUEUED ExecutionStage_Value = 2
+ // Currently being executed by a worker.
+ ExecutionStage_EXECUTING ExecutionStage_Value = 3
+ // Finished execution.
+ ExecutionStage_COMPLETED ExecutionStage_Value = 4
+)
+
+// Enum value maps for ExecutionStage_Value.
+var (
+ ExecutionStage_Value_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "CACHE_CHECK",
+ 2: "QUEUED",
+ 3: "EXECUTING",
+ 4: "COMPLETED",
+ }
+ ExecutionStage_Value_value = map[string]int32{
+ "UNKNOWN": 0,
+ "CACHE_CHECK": 1,
+ "QUEUED": 2,
+ "EXECUTING": 3,
+ "COMPLETED": 4,
+ }
+)
+
+func (x ExecutionStage_Value) Enum() *ExecutionStage_Value {
+ p := new(ExecutionStage_Value)
+ *p = x
+ return p
+}
+
+func (x ExecutionStage_Value) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ExecutionStage_Value) Descriptor() protoreflect.EnumDescriptor {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[1].Descriptor()
+}
+
+func (ExecutionStage_Value) Type() protoreflect.EnumType {
+ return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[1]
+}
+
+func (x ExecutionStage_Value) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ExecutionStage_Value.Descriptor instead.
+func (ExecutionStage_Value) EnumDescriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{21, 0}
+}
+
+type DigestFunction_Value int32
+
+const (
+ // It is an error for the server to return this value.
+ DigestFunction_UNKNOWN DigestFunction_Value = 0
+ // The SHA-256 digest function.
+ DigestFunction_SHA256 DigestFunction_Value = 1
+ // The SHA-1 digest function.
+ DigestFunction_SHA1 DigestFunction_Value = 2
+ // The MD5 digest function.
+ DigestFunction_MD5 DigestFunction_Value = 3
+ // The Microsoft "VSO-Hash" paged SHA256 digest function.
+ // See https://github.com/microsoft/BuildXL/blob/master/Documentation/Specs/PagedHash.md .
+ DigestFunction_VSO DigestFunction_Value = 4
+ // The SHA-384 digest function.
+ DigestFunction_SHA384 DigestFunction_Value = 5
+ // The SHA-512 digest function.
+ DigestFunction_SHA512 DigestFunction_Value = 6
+ // Murmur3 128-bit digest function, x64 variant. Note that this is not a
+ // cryptographic hash function and its collision properties are not strongly guaranteed.
+ // See https://github.com/aappleby/smhasher/wiki/MurmurHash3 .
+ DigestFunction_MURMUR3 DigestFunction_Value = 7
+ // The SHA-256 digest function, modified to use a Merkle tree for
+ // large objects. This permits implementations to store large blobs
+ // as a decomposed sequence of 2^j sized chunks, where j >= 10,
+ // while being able to validate integrity at the chunk level.
+ //
+ // Furthermore, on systems that do not offer dedicated instructions
+ // for computing SHA-256 hashes (e.g., the Intel SHA and ARMv8
+ // cryptographic extensions), SHA256TREE hashes can be computed more
+ // efficiently than plain SHA-256 hashes by using generic SIMD
+ // extensions, such as Intel AVX2 or ARM NEON.
+ //
+ // SHA256TREE hashes are computed as follows:
+ //
+ // - For blobs that are 1024 bytes or smaller, the hash is computed
+ // using the regular SHA-256 digest function.
+ //
+ // - For blobs that are more than 1024 bytes in size, the hash is
+ // computed as follows:
+ //
+ // 1. The blob is partitioned into a left (leading) and right
+ // (trailing) blob. These blobs have lengths m and n
+ // respectively, where m = 2^k and 0 < n <= m.
+ //
+ // 2. Hashes of the left and right blob, Hash(left) and
+ // Hash(right) respectively, are computed by recursively
+ // applying the SHA256TREE algorithm.
+ //
+ // 3. A single invocation is made to the SHA-256 block cipher with
+ // the following parameters:
+ //
+ // M = Hash(left) || Hash(right)
+ // H = {
+ // 0xcbbb9d5d, 0x629a292a, 0x9159015a, 0x152fecd8,
+ // 0x67332667, 0x8eb44a87, 0xdb0c2e0d, 0x47b5481d,
+ // }
+ //
+ // The values of H are the leading fractional parts of the
+ // square roots of the 9th to the 16th prime number (23 to 53).
+ // This differs from plain SHA-256, where the first eight prime
+ // numbers (2 to 19) are used, thereby preventing trivial hash
+ // collisions between small and large objects.
+ //
+ // 4. The hash of the full blob can then be obtained by
+ // concatenating the outputs of the block cipher:
+ //
+ // Hash(blob) = a || b || c || d || e || f || g || h
+ //
+ // Addition of the original values of H, as normally done
+ // through the use of the Davies-Meyer structure, is not
+ // performed. This isn't necessary, as the block cipher is only
+ // invoked once.
+ //
+ // Test vectors of this digest function can be found in the
+ // accompanying sha256tree_test_vectors.txt file.
+ DigestFunction_SHA256TREE DigestFunction_Value = 8
+ // The BLAKE3 hash function.
+ // See https://github.com/BLAKE3-team/BLAKE3.
+ DigestFunction_BLAKE3 DigestFunction_Value = 9
+)
+
+// Enum value maps for DigestFunction_Value.
+var (
+ DigestFunction_Value_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "SHA256",
+ 2: "SHA1",
+ 3: "MD5",
+ 4: "VSO",
+ 5: "SHA384",
+ 6: "SHA512",
+ 7: "MURMUR3",
+ 8: "SHA256TREE",
+ 9: "BLAKE3",
+ }
+ DigestFunction_Value_value = map[string]int32{
+ "UNKNOWN": 0,
+ "SHA256": 1,
+ "SHA1": 2,
+ "MD5": 3,
+ "VSO": 4,
+ "SHA384": 5,
+ "SHA512": 6,
+ "MURMUR3": 7,
+ "SHA256TREE": 8,
+ "BLAKE3": 9,
+ }
+)
+
+func (x DigestFunction_Value) Enum() *DigestFunction_Value {
+ p := new(DigestFunction_Value)
+ *p = x
+ return p
+}
+
+func (x DigestFunction_Value) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DigestFunction_Value) Descriptor() protoreflect.EnumDescriptor {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[2].Descriptor()
+}
+
+func (DigestFunction_Value) Type() protoreflect.EnumType {
+ return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[2]
+}
+
+func (x DigestFunction_Value) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DigestFunction_Value.Descriptor instead.
+func (DigestFunction_Value) EnumDescriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{36, 0}
+}
+
+type SymlinkAbsolutePathStrategy_Value int32
+
+const (
+ // Invalid value.
+ SymlinkAbsolutePathStrategy_UNKNOWN SymlinkAbsolutePathStrategy_Value = 0
+ // Server will return an `INVALID_ARGUMENT` on input symlinks with absolute
+ // targets.
+ // If an action tries to create an output symlink with an absolute target, a
+ // `FAILED_PRECONDITION` will be returned.
+ SymlinkAbsolutePathStrategy_DISALLOWED SymlinkAbsolutePathStrategy_Value = 1
+ // Server will allow symlink targets to escape the input root tree, possibly
+ // resulting in non-hermetic builds.
+ SymlinkAbsolutePathStrategy_ALLOWED SymlinkAbsolutePathStrategy_Value = 2
+)
+
+// Enum value maps for SymlinkAbsolutePathStrategy_Value.
+var (
+ SymlinkAbsolutePathStrategy_Value_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "DISALLOWED",
+ 2: "ALLOWED",
+ }
+ SymlinkAbsolutePathStrategy_Value_value = map[string]int32{
+ "UNKNOWN": 0,
+ "DISALLOWED": 1,
+ "ALLOWED": 2,
+ }
+)
+
+func (x SymlinkAbsolutePathStrategy_Value) Enum() *SymlinkAbsolutePathStrategy_Value {
+ p := new(SymlinkAbsolutePathStrategy_Value)
+ *p = x
+ return p
+}
+
+func (x SymlinkAbsolutePathStrategy_Value) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SymlinkAbsolutePathStrategy_Value) Descriptor() protoreflect.EnumDescriptor {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[3].Descriptor()
+}
+
+func (SymlinkAbsolutePathStrategy_Value) Type() protoreflect.EnumType {
+ return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[3]
+}
+
+func (x SymlinkAbsolutePathStrategy_Value) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SymlinkAbsolutePathStrategy_Value.Descriptor instead.
+func (SymlinkAbsolutePathStrategy_Value) EnumDescriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{39, 0}
+}
+
+type Compressor_Value int32
+
+const (
+ // No compression. Servers and clients MUST always support this, and do
+ // not need to advertise it.
+ Compressor_IDENTITY Compressor_Value = 0
+ // Zstandard compression.
+ Compressor_ZSTD Compressor_Value = 1
+ // RFC 1951 Deflate. This format is identical to what is used by ZIP
+ // files. Headers such as the one generated by gzip are not
+ // included.
+ //
+ // It is advised to use algorithms such as Zstandard instead, as
+ // those are faster and/or provide a better compression ratio.
+ Compressor_DEFLATE Compressor_Value = 2
+ // Brotli compression.
+ Compressor_BROTLI Compressor_Value = 3
+)
+
+// Enum value maps for Compressor_Value.
+var (
+ Compressor_Value_name = map[int32]string{
+ 0: "IDENTITY",
+ 1: "ZSTD",
+ 2: "DEFLATE",
+ 3: "BROTLI",
+ }
+ Compressor_Value_value = map[string]int32{
+ "IDENTITY": 0,
+ "ZSTD": 1,
+ "DEFLATE": 2,
+ "BROTLI": 3,
+ }
+)
+
+func (x Compressor_Value) Enum() *Compressor_Value {
+ p := new(Compressor_Value)
+ *p = x
+ return p
+}
+
+func (x Compressor_Value) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Compressor_Value) Descriptor() protoreflect.EnumDescriptor {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[4].Descriptor()
+}
+
+func (Compressor_Value) Type() protoreflect.EnumType {
+ return &file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes[4]
+}
+
+func (x Compressor_Value) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Compressor_Value.Descriptor instead.
+func (Compressor_Value) EnumDescriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{40, 0}
+}
+
+// An `Action` captures all the information about an execution which is required
+// to reproduce it.
+//
+// `Action`s are the core component of the [Execution] service. A single
+// `Action` represents a repeatable action that can be performed by the
+// execution service. `Action`s can be succinctly identified by the digest of
+// their wire format encoding and, once an `Action` has been executed, will be
+// cached in the action cache. Future requests can then use the cached result
+// rather than needing to run afresh.
+//
+// When a server completes execution of an
+// [Action][build.bazel.remote.execution.v2.Action], it MAY choose to
+// cache the [result][build.bazel.remote.execution.v2.ActionResult] in
+// the [ActionCache][build.bazel.remote.execution.v2.ActionCache] unless
+// `do_not_cache` is `true`. Clients SHOULD expect the server to do so. By
+// default, future calls to
+// [Execute][build.bazel.remote.execution.v2.Execution.Execute] the same
+// `Action` will also serve their results from the cache. Clients must take care
+// to understand the caching behaviour. Ideally, all `Action`s will be
+// reproducible so that serving a result from cache is always desirable and
+// correct.
+type Action struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The digest of the [Command][build.bazel.remote.execution.v2.Command]
+ // to run, which MUST be present in the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ CommandDigest *Digest `protobuf:"bytes,1,opt,name=command_digest,json=commandDigest,proto3" json:"command_digest,omitempty"`
+ // The digest of the root
+ // [Directory][build.bazel.remote.execution.v2.Directory] for the input
+ // files. The files in the directory tree are available in the correct
+ // location on the build machine before the command is executed. The root
+ // directory, as well as every subdirectory and content blob referred to, MUST
+ // be in the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ InputRootDigest *Digest `protobuf:"bytes,2,opt,name=input_root_digest,json=inputRootDigest,proto3" json:"input_root_digest,omitempty"`
+ // A timeout after which the execution should be killed. If the timeout is
+ // absent, then the client is specifying that the execution should continue
+ // as long as the server will let it. The server SHOULD impose a timeout if
+ // the client does not specify one, however, if the client does specify a
+ // timeout that is longer than the server's maximum timeout, the server MUST
+ // reject the request.
+ //
+ // The timeout is only intended to cover the "execution" of the specified
+ // action and not time in queue nor any overheads before or after execution
+ // such as marshalling inputs/outputs. The server SHOULD avoid including time
+ // spent the client doesn't have control over, and MAY extend or reduce the
+ // timeout to account for delays or speedups that occur during execution
+ // itself (e.g., lazily loading data from the Content Addressable Storage,
+ // live migration of virtual machines, emulation overhead).
+ //
+ // The timeout is a part of the
+ // [Action][build.bazel.remote.execution.v2.Action] message, and
+ // therefore two `Actions` with different timeouts are different, even if they
+ // are otherwise identical. This is because, if they were not, running an
+ // `Action` with a lower timeout than is required might result in a cache hit
+ // from an execution run with a longer timeout, hiding the fact that the
+ // timeout is too short. By encoding it directly in the `Action`, a lower
+ // timeout will result in a cache miss and the execution timeout will fail
+ // immediately, rather than whenever the cache entry gets evicted.
+ Timeout *durationpb.Duration `protobuf:"bytes,6,opt,name=timeout,proto3" json:"timeout,omitempty"`
+ // If true, then the `Action`'s result cannot be cached, and in-flight
+ // requests for the same `Action` may not be merged.
+ DoNotCache bool `protobuf:"varint,7,opt,name=do_not_cache,json=doNotCache,proto3" json:"do_not_cache,omitempty"`
+ // An optional additional salt value used to place this `Action` into a
+ // separate cache namespace from other instances having the same field
+ // contents. This salt typically comes from operational configuration
+ // specific to sources such as repo and service configuration,
+ // and allows disowning an entire set of ActionResults that might have been
+ // poisoned by buggy software or tool failures.
+ Salt []byte `protobuf:"bytes,9,opt,name=salt,proto3" json:"salt,omitempty"`
+ // The optional platform requirements for the execution environment. The
+ // server MAY choose to execute the action on any worker satisfying the
+ // requirements, so the client SHOULD ensure that running the action on any
+ // such worker will have the same result. A detailed lexicon for this can be
+ // found in the accompanying platform.md.
+ // New in version 2.2: clients SHOULD set these platform properties as well
+ // as those in the [Command][build.bazel.remote.execution.v2.Command]. Servers
+ // SHOULD prefer those set here.
+ Platform *Platform `protobuf:"bytes,10,opt,name=platform,proto3" json:"platform,omitempty"`
+}
+
+func (x *Action) Reset() {
+ *x = Action{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Action) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Action) ProtoMessage() {}
+
+func (x *Action) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Action.ProtoReflect.Descriptor instead.
+func (*Action) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Action) GetCommandDigest() *Digest {
+ if x != nil {
+ return x.CommandDigest
+ }
+ return nil
+}
+
+func (x *Action) GetInputRootDigest() *Digest {
+ if x != nil {
+ return x.InputRootDigest
+ }
+ return nil
+}
+
+func (x *Action) GetTimeout() *durationpb.Duration {
+ if x != nil {
+ return x.Timeout
+ }
+ return nil
+}
+
+func (x *Action) GetDoNotCache() bool {
+ if x != nil {
+ return x.DoNotCache
+ }
+ return false
+}
+
+func (x *Action) GetSalt() []byte {
+ if x != nil {
+ return x.Salt
+ }
+ return nil
+}
+
+func (x *Action) GetPlatform() *Platform {
+ if x != nil {
+ return x.Platform
+ }
+ return nil
+}
+
+// A `Command` is the actual command executed by a worker running an
+// [Action][build.bazel.remote.execution.v2.Action] and specifications of its
+// environment.
+//
+// Except as otherwise required, the environment (such as which system
+// libraries or binaries are available, and what filesystems are mounted where)
+// is defined by and specific to the implementation of the remote execution API.
+type Command struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The arguments to the command.
+ //
+ // The first argument specifies the command to run, which may be either an
+ // absolute path, a path relative to the working directory, or an unqualified
+ // path (without path separators) which will be resolved using the operating
+ // system's equivalent of the PATH environment variable. Path separators
+ // native to the operating system running on the worker SHOULD be used. If the
+ // `environment_variables` list contains an entry for the PATH environment
+ // variable, it SHOULD be respected. If not, the resolution process is
+ // implementation-defined.
+ //
+ // Changed in v2.3. v2.2 and older require that no PATH lookups are performed,
+ // and that relative paths are resolved relative to the input root. This
+ // behavior can, however, not be relied upon, as most implementations already
+ // followed the rules described above.
+ Arguments []string `protobuf:"bytes,1,rep,name=arguments,proto3" json:"arguments,omitempty"`
+ // The environment variables to set when running the program. The worker may
+ // provide its own default environment variables; these defaults can be
+ // overridden using this field. Additional variables can also be specified.
+ //
+ // In order to ensure that equivalent
+ // [Command][build.bazel.remote.execution.v2.Command]s always hash to the same
+ // value, the environment variables MUST be lexicographically sorted by name.
+ // Sorting of strings is done by code point, equivalently, by the UTF-8 bytes.
+ EnvironmentVariables []*Command_EnvironmentVariable `protobuf:"bytes,2,rep,name=environment_variables,json=environmentVariables,proto3" json:"environment_variables,omitempty"`
+ // A list of the output files that the client expects to retrieve from the
+ // action. Only the listed files, as well as directories listed in
+ // `output_directories`, will be returned to the client as output.
+ // Other files or directories that may be created during command execution
+ // are discarded.
+ //
+ // The paths are relative to the working directory of the action execution.
+ // The paths are specified using a single forward slash (`/`) as a path
+ // separator, even if the execution platform natively uses a different
+ // separator. The path MUST NOT include a trailing slash, nor a leading slash,
+ // being a relative path.
+ //
+ // In order to ensure consistent hashing of the same Action, the output paths
+ // MUST be sorted lexicographically by code point (or, equivalently, by UTF-8
+ // bytes).
+ //
+ // An output file cannot be duplicated, be a parent of another output file, or
+ // have the same path as any of the listed output directories.
+ //
+ // Directories leading up to the output files are created by the worker prior
+ // to execution, even if they are not explicitly part of the input root.
+ //
+ // DEPRECATED since v2.1: Use `output_paths` instead.
+ //
+ // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+ OutputFiles []string `protobuf:"bytes,3,rep,name=output_files,json=outputFiles,proto3" json:"output_files,omitempty"`
+ // A list of the output directories that the client expects to retrieve from
+ // the action. Only the listed directories will be returned (an entire
+ // directory structure will be returned as a
+ // [Tree][build.bazel.remote.execution.v2.Tree] message digest, see
+ // [OutputDirectory][build.bazel.remote.execution.v2.OutputDirectory]), as
+ // well as files listed in `output_files`. Other files or directories that
+ // may be created during command execution are discarded.
+ //
+ // The paths are relative to the working directory of the action execution.
+ // The paths are specified using a single forward slash (`/`) as a path
+ // separator, even if the execution platform natively uses a different
+ // separator. The path MUST NOT include a trailing slash, nor a leading slash,
+ // being a relative path. The special value of empty string is allowed,
+ // although not recommended, and can be used to capture the entire working
+ // directory tree, including inputs.
+ //
+ // In order to ensure consistent hashing of the same Action, the output paths
+ // MUST be sorted lexicographically by code point (or, equivalently, by UTF-8
+ // bytes).
+ //
+ // An output directory cannot be duplicated or have the same path as any of
+ // the listed output files. An output directory is allowed to be a parent of
+ // another output directory.
+ //
+ // Directories leading up to the output directories (but not the output
+ // directories themselves) are created by the worker prior to execution, even
+ // if they are not explicitly part of the input root.
+ //
+ // DEPRECATED since 2.1: Use `output_paths` instead.
+ //
+ // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+ OutputDirectories []string `protobuf:"bytes,4,rep,name=output_directories,json=outputDirectories,proto3" json:"output_directories,omitempty"`
+ // A list of the output paths that the client expects to retrieve from the
+ // action. Only the listed paths will be returned to the client as output.
+ // The type of the output (file or directory) is not specified, and will be
+ // determined by the server after action execution. If the resulting path is
+ // a file, it will be returned in an
+ // [OutputFile][build.bazel.remote.execution.v2.OutputFile] typed field.
+ // If the path is a directory, the entire directory structure will be returned
+ // as a [Tree][build.bazel.remote.execution.v2.Tree] message digest, see
+ // [OutputDirectory][build.bazel.remote.execution.v2.OutputDirectory]
+ // Other files or directories that may be created during command execution
+ // are discarded.
+ //
+ // The paths are relative to the working directory of the action execution.
+ // The paths are specified using a single forward slash (`/`) as a path
+ // separator, even if the execution platform natively uses a different
+ // separator. The path MUST NOT include a trailing slash, nor a leading slash,
+ // being a relative path.
+ //
+ // In order to ensure consistent hashing of the same Action, the output paths
+ // MUST be deduplicated and sorted lexicographically by code point (or,
+ // equivalently, by UTF-8 bytes).
+ //
+ // Directories leading up to the output paths are created by the worker prior
+ // to execution, even if they are not explicitly part of the input root.
+ //
+ // New in v2.1: this field supersedes the DEPRECATED `output_files` and
+ // `output_directories` fields. If `output_paths` is used, `output_files` and
+ // `output_directories` will be ignored!
+ OutputPaths []string `protobuf:"bytes,7,rep,name=output_paths,json=outputPaths,proto3" json:"output_paths,omitempty"`
+ // The platform requirements for the execution environment. The server MAY
+ // choose to execute the action on any worker satisfying the requirements, so
+ // the client SHOULD ensure that running the action on any such worker will
+ // have the same result. A detailed lexicon for this can be found in the
+ // accompanying platform.md.
+ // DEPRECATED as of v2.2: platform properties are now specified directly in
+ // the action. See documentation note in the
+ // [Action][build.bazel.remote.execution.v2.Action] for migration.
+ //
+ // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+ Platform *Platform `protobuf:"bytes,5,opt,name=platform,proto3" json:"platform,omitempty"`
+ // The working directory, relative to the input root, for the command to run
+ // in. It must be a directory which exists in the input tree. If it is left
+ // empty, then the action is run in the input root.
+ WorkingDirectory string `protobuf:"bytes,6,opt,name=working_directory,json=workingDirectory,proto3" json:"working_directory,omitempty"`
+ // A list of keys for node properties the client expects to retrieve for
+ // output files and directories. Keys are either names of string-based
+ // [NodeProperty][build.bazel.remote.execution.v2.NodeProperty] or
+ // names of fields in [NodeProperties][build.bazel.remote.execution.v2.NodeProperties].
+ // In order to ensure that equivalent `Action`s always hash to the same
+ // value, the node properties MUST be lexicographically sorted by name.
+ // Sorting of strings is done by code point, equivalently, by the UTF-8 bytes.
+ //
+ // The interpretation of string-based properties is server-dependent. If a
+ // property is not recognized by the server, the server will return an
+ // `INVALID_ARGUMENT`.
+ OutputNodeProperties []string `protobuf:"bytes,8,rep,name=output_node_properties,json=outputNodeProperties,proto3" json:"output_node_properties,omitempty"`
+ // The format that the worker should use to store the contents of
+ // output directories.
+ //
+ // In case this field is set to a value that is not supported by the
+ // worker, the worker SHOULD interpret this field as TREE_ONLY. The
+ // worker MAY store output directories in formats that are a superset
+ // of what was requested (e.g., interpreting DIRECTORY_ONLY as
+ // TREE_AND_DIRECTORY).
+ OutputDirectoryFormat Command_OutputDirectoryFormat `protobuf:"varint,9,opt,name=output_directory_format,json=outputDirectoryFormat,proto3,enum=build.bazel.remote.execution.v2.Command_OutputDirectoryFormat" json:"output_directory_format,omitempty"`
+}
+
+func (x *Command) Reset() {
+ *x = Command{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Command) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Command) ProtoMessage() {}
+
+func (x *Command) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Command.ProtoReflect.Descriptor instead.
+func (*Command) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Command) GetArguments() []string {
+ if x != nil {
+ return x.Arguments
+ }
+ return nil
+}
+
+func (x *Command) GetEnvironmentVariables() []*Command_EnvironmentVariable {
+ if x != nil {
+ return x.EnvironmentVariables
+ }
+ return nil
+}
+
+// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+func (x *Command) GetOutputFiles() []string {
+ if x != nil {
+ return x.OutputFiles
+ }
+ return nil
+}
+
+// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+func (x *Command) GetOutputDirectories() []string {
+ if x != nil {
+ return x.OutputDirectories
+ }
+ return nil
+}
+
+func (x *Command) GetOutputPaths() []string {
+ if x != nil {
+ return x.OutputPaths
+ }
+ return nil
+}
+
+// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+func (x *Command) GetPlatform() *Platform {
+ if x != nil {
+ return x.Platform
+ }
+ return nil
+}
+
+func (x *Command) GetWorkingDirectory() string {
+ if x != nil {
+ return x.WorkingDirectory
+ }
+ return ""
+}
+
+func (x *Command) GetOutputNodeProperties() []string {
+ if x != nil {
+ return x.OutputNodeProperties
+ }
+ return nil
+}
+
+func (x *Command) GetOutputDirectoryFormat() Command_OutputDirectoryFormat {
+ if x != nil {
+ return x.OutputDirectoryFormat
+ }
+ return Command_TREE_ONLY
+}
+
+// A `Platform` is a set of requirements, such as hardware, operating system, or
+// compiler toolchain, for an
+// [Action][build.bazel.remote.execution.v2.Action]'s execution
+// environment. A `Platform` is represented as a series of key-value pairs
+// representing the properties that are required of the platform.
+type Platform struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The properties that make up this platform. In order to ensure that
+ // equivalent `Platform`s always hash to the same value, the properties MUST
+ // be lexicographically sorted by name, and then by value. Sorting of strings
+ // is done by code point, equivalently, by the UTF-8 bytes.
+ Properties []*Platform_Property `protobuf:"bytes,1,rep,name=properties,proto3" json:"properties,omitempty"`
+}
+
+func (x *Platform) Reset() {
+ *x = Platform{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Platform) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Platform) ProtoMessage() {}
+
+func (x *Platform) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Platform.ProtoReflect.Descriptor instead.
+func (*Platform) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *Platform) GetProperties() []*Platform_Property {
+ if x != nil {
+ return x.Properties
+ }
+ return nil
+}
+
+// A `Directory` represents a directory node in a file tree, containing zero or
+// more children [FileNodes][build.bazel.remote.execution.v2.FileNode],
+// [DirectoryNodes][build.bazel.remote.execution.v2.DirectoryNode] and
+// [SymlinkNodes][build.bazel.remote.execution.v2.SymlinkNode].
+// Each `Node` contains its name in the directory, either the digest of its
+// content (either a file blob or a `Directory` proto) or a symlink target, as
+// well as possibly some metadata about the file or directory.
+//
+// In order to ensure that two equivalent directory trees hash to the same
+// value, the following restrictions MUST be obeyed when constructing a
+// a `Directory`:
+//
+// - Every child in the directory must have a path of exactly one segment.
+// Multiple levels of directory hierarchy may not be collapsed.
+// - Each child in the directory must have a unique path segment (file name).
+// Note that while the API itself is case-sensitive, the environment where
+// the Action is executed may or may not be case-sensitive. That is, it is
+// legal to call the API with a Directory that has both "Foo" and "foo" as
+// children, but the Action may be rejected by the remote system upon
+// execution.
+// - The files, directories and symlinks in the directory must each be sorted
+// in lexicographical order by path. The path strings must be sorted by code
+// point, equivalently, by UTF-8 bytes.
+// - The [NodeProperties][build.bazel.remote.execution.v2.NodeProperty] of files,
+// directories, and symlinks must be sorted in lexicographical order by
+// property name.
+//
+// A `Directory` that obeys the restrictions is said to be in canonical form.
+//
+// As an example, the following could be used for a file named `bar` and a
+// directory named `foo` with an executable file named `baz` (hashes shortened
+// for readability):
+//
+// ```json
+// // (Directory proto)
+//
+// {
+// files: [
+// {
+// name: "bar",
+// digest: {
+// hash: "4a73bc9d03...",
+// size: 65534
+// },
+// node_properties: [
+// {
+// "name": "MTime",
+// "value": "2017-01-15T01:30:15.01Z"
+// }
+// ]
+// }
+// ],
+// directories: [
+// {
+// name: "foo",
+// digest: {
+// hash: "4cf2eda940...",
+// size: 43
+// }
+// }
+// ]
+// }
+//
+// // (Directory proto with hash "4cf2eda940..." and size 43)
+//
+// {
+// files: [
+// {
+// name: "baz",
+// digest: {
+// hash: "b2c941073e...",
+// size: 1294,
+// },
+// is_executable: true
+// }
+// ]
+// }
+//
+// ```
+type Directory struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The files in the directory.
+ Files []*FileNode `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"`
+ // The subdirectories in the directory.
+ Directories []*DirectoryNode `protobuf:"bytes,2,rep,name=directories,proto3" json:"directories,omitempty"`
+ // The symlinks in the directory.
+ Symlinks []*SymlinkNode `protobuf:"bytes,3,rep,name=symlinks,proto3" json:"symlinks,omitempty"`
+ NodeProperties *NodeProperties `protobuf:"bytes,5,opt,name=node_properties,json=nodeProperties,proto3" json:"node_properties,omitempty"`
+}
+
+func (x *Directory) Reset() {
+ *x = Directory{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Directory) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Directory) ProtoMessage() {}
+
+func (x *Directory) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Directory.ProtoReflect.Descriptor instead.
+func (*Directory) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *Directory) GetFiles() []*FileNode {
+ if x != nil {
+ return x.Files
+ }
+ return nil
+}
+
+func (x *Directory) GetDirectories() []*DirectoryNode {
+ if x != nil {
+ return x.Directories
+ }
+ return nil
+}
+
+func (x *Directory) GetSymlinks() []*SymlinkNode {
+ if x != nil {
+ return x.Symlinks
+ }
+ return nil
+}
+
+func (x *Directory) GetNodeProperties() *NodeProperties {
+ if x != nil {
+ return x.NodeProperties
+ }
+ return nil
+}
+
+// A single property for [FileNodes][build.bazel.remote.execution.v2.FileNode],
+// [DirectoryNodes][build.bazel.remote.execution.v2.DirectoryNode], and
+// [SymlinkNodes][build.bazel.remote.execution.v2.SymlinkNode]. The server is
+// responsible for specifying the property `name`s that it accepts. If
+// permitted by the server, the same `name` may occur multiple times.
+type NodeProperty struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The property name.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The property value.
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *NodeProperty) Reset() {
+ *x = NodeProperty{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NodeProperty) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeProperty) ProtoMessage() {}
+
+func (x *NodeProperty) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeProperty.ProtoReflect.Descriptor instead.
+func (*NodeProperty) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *NodeProperty) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *NodeProperty) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+
+// Node properties for [FileNodes][build.bazel.remote.execution.v2.FileNode],
+// [DirectoryNodes][build.bazel.remote.execution.v2.DirectoryNode], and
+// [SymlinkNodes][build.bazel.remote.execution.v2.SymlinkNode]. The server is
+// responsible for specifying the properties that it accepts.
+type NodeProperties struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // A list of string-based
+ // [NodeProperties][build.bazel.remote.execution.v2.NodeProperty].
+ Properties []*NodeProperty `protobuf:"bytes,1,rep,name=properties,proto3" json:"properties,omitempty"`
+ // The file's last modification timestamp.
+ Mtime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"`
+ // The UNIX file mode, e.g., 0755.
+ UnixMode *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=unix_mode,json=unixMode,proto3" json:"unix_mode,omitempty"`
+}
+
+func (x *NodeProperties) Reset() {
+ *x = NodeProperties{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NodeProperties) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeProperties) ProtoMessage() {}
+
+func (x *NodeProperties) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeProperties.ProtoReflect.Descriptor instead.
+func (*NodeProperties) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *NodeProperties) GetProperties() []*NodeProperty {
+ if x != nil {
+ return x.Properties
+ }
+ return nil
+}
+
+func (x *NodeProperties) GetMtime() *timestamppb.Timestamp {
+ if x != nil {
+ return x.Mtime
+ }
+ return nil
+}
+
+func (x *NodeProperties) GetUnixMode() *wrapperspb.UInt32Value {
+ if x != nil {
+ return x.UnixMode
+ }
+ return nil
+}
+
+// A `FileNode` represents a single file and associated metadata.
+type FileNode struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name of the file.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The digest of the file's content.
+ Digest *Digest `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"`
+ // True if file is executable, false otherwise.
+ IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable,proto3" json:"is_executable,omitempty"`
+ NodeProperties *NodeProperties `protobuf:"bytes,6,opt,name=node_properties,json=nodeProperties,proto3" json:"node_properties,omitempty"`
+}
+
+func (x *FileNode) Reset() {
+ *x = FileNode{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *FileNode) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FileNode) ProtoMessage() {}
+
+func (x *FileNode) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FileNode.ProtoReflect.Descriptor instead.
+func (*FileNode) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *FileNode) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *FileNode) GetDigest() *Digest {
+ if x != nil {
+ return x.Digest
+ }
+ return nil
+}
+
+func (x *FileNode) GetIsExecutable() bool {
+ if x != nil {
+ return x.IsExecutable
+ }
+ return false
+}
+
+func (x *FileNode) GetNodeProperties() *NodeProperties {
+ if x != nil {
+ return x.NodeProperties
+ }
+ return nil
+}
+
+// A `DirectoryNode` represents a child of a
+// [Directory][build.bazel.remote.execution.v2.Directory] which is itself
+// a `Directory` and its associated metadata.
+type DirectoryNode struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name of the directory.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The digest of the
+ // [Directory][build.bazel.remote.execution.v2.Directory] object
+ // represented. See [Digest][build.bazel.remote.execution.v2.Digest]
+ // for information about how to take the digest of a proto message.
+ Digest *Digest `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"`
+}
+
+func (x *DirectoryNode) Reset() {
+ *x = DirectoryNode{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DirectoryNode) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DirectoryNode) ProtoMessage() {}
+
+func (x *DirectoryNode) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DirectoryNode.ProtoReflect.Descriptor instead.
+func (*DirectoryNode) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *DirectoryNode) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *DirectoryNode) GetDigest() *Digest {
+ if x != nil {
+ return x.Digest
+ }
+ return nil
+}
+
+// A `SymlinkNode` represents a symbolic link.
+type SymlinkNode struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name of the symlink.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The target path of the symlink. The path separator is a forward slash `/`.
+ // The target path can be relative to the parent directory of the symlink or
+ // it can be an absolute path starting with `/`. Support for absolute paths
+ // can be checked using the [Capabilities][build.bazel.remote.execution.v2.Capabilities]
+ // API. `..` components are allowed anywhere in the target path as logical
+ // canonicalization may lead to different behavior in the presence of
+ // directory symlinks (e.g. `foo/../bar` may not be the same as `bar`).
+ // To reduce potential cache misses, canonicalization is still recommended
+ // where this is possible without impacting correctness.
+ Target string `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"`
+ NodeProperties *NodeProperties `protobuf:"bytes,4,opt,name=node_properties,json=nodeProperties,proto3" json:"node_properties,omitempty"`
+}
+
+func (x *SymlinkNode) Reset() {
+ *x = SymlinkNode{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SymlinkNode) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SymlinkNode) ProtoMessage() {}
+
+func (x *SymlinkNode) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SymlinkNode.ProtoReflect.Descriptor instead.
+func (*SymlinkNode) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *SymlinkNode) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *SymlinkNode) GetTarget() string {
+ if x != nil {
+ return x.Target
+ }
+ return ""
+}
+
+func (x *SymlinkNode) GetNodeProperties() *NodeProperties {
+ if x != nil {
+ return x.NodeProperties
+ }
+ return nil
+}
+
+// A content digest. A digest for a given blob consists of the size of the blob
+// and its hash. The hash algorithm to use is defined by the server.
+//
+// The size is considered to be an integral part of the digest and cannot be
+// separated. That is, even if the `hash` field is correctly specified but
+// `size_bytes` is not, the server MUST reject the request.
+//
+// The reason for including the size in the digest is as follows: in a great
+// many cases, the server needs to know the size of the blob it is about to work
+// with prior to starting an operation with it, such as flattening Merkle tree
+// structures or streaming it to a worker. Technically, the server could
+// implement a separate metadata store, but this results in a significantly more
+// complicated implementation as opposed to having the client specify the size
+// up-front (or storing the size along with the digest in every message where
+// digests are embedded). This does mean that the API leaks some implementation
+// details of (what we consider to be) a reasonable server implementation, but
+// we consider this to be a worthwhile tradeoff.
+//
+// When a `Digest` is used to refer to a proto message, it always refers to the
+// message in binary encoded form. To ensure consistent hashing, clients and
+// servers MUST ensure that they serialize messages according to the following
+// rules, even if there are alternate valid encodings for the same message:
+//
+// * Fields are serialized in tag order.
+// * There are no unknown fields.
+// * There are no duplicate fields.
+// * Fields are serialized according to the default semantics for their type.
+//
+// Most protocol buffer implementations will always follow these rules when
+// serializing, but care should be taken to avoid shortcuts. For instance,
+// concatenating two messages to merge them may produce duplicate fields.
+type Digest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The hash. In the case of SHA-256, it will always be a lowercase hex string
+ // exactly 64 characters long.
+ Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
+ // The size of the blob, in bytes.
+ SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
+}
+
+func (x *Digest) Reset() {
+ *x = Digest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Digest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Digest) ProtoMessage() {}
+
+func (x *Digest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[9]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Digest.ProtoReflect.Descriptor instead.
+func (*Digest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *Digest) GetHash() string {
+ if x != nil {
+ return x.Hash
+ }
+ return ""
+}
+
+func (x *Digest) GetSizeBytes() int64 {
+ if x != nil {
+ return x.SizeBytes
+ }
+ return 0
+}
+
+// ExecutedActionMetadata contains details about a completed execution.
+type ExecutedActionMetadata struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name of the worker which ran the execution.
+ Worker string `protobuf:"bytes,1,opt,name=worker,proto3" json:"worker,omitempty"`
+ // When was the action added to the queue.
+ QueuedTimestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=queued_timestamp,json=queuedTimestamp,proto3" json:"queued_timestamp,omitempty"`
+ // When the worker received the action.
+ WorkerStartTimestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=worker_start_timestamp,json=workerStartTimestamp,proto3" json:"worker_start_timestamp,omitempty"`
+ // When the worker completed the action, including all stages.
+ WorkerCompletedTimestamp *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=worker_completed_timestamp,json=workerCompletedTimestamp,proto3" json:"worker_completed_timestamp,omitempty"`
+ // When the worker started fetching action inputs.
+ InputFetchStartTimestamp *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=input_fetch_start_timestamp,json=inputFetchStartTimestamp,proto3" json:"input_fetch_start_timestamp,omitempty"`
+ // When the worker finished fetching action inputs.
+ InputFetchCompletedTimestamp *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=input_fetch_completed_timestamp,json=inputFetchCompletedTimestamp,proto3" json:"input_fetch_completed_timestamp,omitempty"`
+ // When the worker started executing the action command.
+ ExecutionStartTimestamp *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=execution_start_timestamp,json=executionStartTimestamp,proto3" json:"execution_start_timestamp,omitempty"`
+ // When the worker completed executing the action command.
+ ExecutionCompletedTimestamp *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=execution_completed_timestamp,json=executionCompletedTimestamp,proto3" json:"execution_completed_timestamp,omitempty"`
+ // New in v2.3: the amount of time the worker spent executing the action
+ // command, potentially computed using a worker-specific virtual clock.
+ //
+ // The virtual execution duration is only intended to cover the "execution" of
+ // the specified action and not time in queue nor any overheads before or
+ // after execution such as marshalling inputs/outputs. The server SHOULD avoid
+ // including time spent the client doesn't have control over, and MAY extend
+ // or reduce the execution duration to account for delays or speedups that
+ // occur during execution itself (e.g., lazily loading data from the Content
+ // Addressable Storage, live migration of virtual machines, emulation
+ // overhead).
+ //
+ // The method of timekeeping used to compute the virtual execution duration
+ // MUST be consistent with what is used to enforce the
+ // [Action][[build.bazel.remote.execution.v2.Action]'s `timeout`. There is no
+ // relationship between the virtual execution duration and the values of
+ // `execution_start_timestamp` and `execution_completed_timestamp`.
+ VirtualExecutionDuration *durationpb.Duration `protobuf:"bytes,12,opt,name=virtual_execution_duration,json=virtualExecutionDuration,proto3" json:"virtual_execution_duration,omitempty"`
+ // When the worker started uploading action outputs.
+ OutputUploadStartTimestamp *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=output_upload_start_timestamp,json=outputUploadStartTimestamp,proto3" json:"output_upload_start_timestamp,omitempty"`
+ // When the worker finished uploading action outputs.
+ OutputUploadCompletedTimestamp *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=output_upload_completed_timestamp,json=outputUploadCompletedTimestamp,proto3" json:"output_upload_completed_timestamp,omitempty"`
+ // Details that are specific to the kind of worker used. For example,
+ // on POSIX-like systems this could contain a message with
+ // getrusage(2) statistics.
+ AuxiliaryMetadata []*anypb.Any `protobuf:"bytes,11,rep,name=auxiliary_metadata,json=auxiliaryMetadata,proto3" json:"auxiliary_metadata,omitempty"`
+}
+
+func (x *ExecutedActionMetadata) Reset() {
+ *x = ExecutedActionMetadata{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ExecutedActionMetadata) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutedActionMetadata) ProtoMessage() {}
+
+func (x *ExecutedActionMetadata) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[10]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExecutedActionMetadata.ProtoReflect.Descriptor instead.
+func (*ExecutedActionMetadata) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *ExecutedActionMetadata) GetWorker() string {
+ if x != nil {
+ return x.Worker
+ }
+ return ""
+}
+
+func (x *ExecutedActionMetadata) GetQueuedTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.QueuedTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetWorkerStartTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.WorkerStartTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetWorkerCompletedTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.WorkerCompletedTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetInputFetchStartTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.InputFetchStartTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetInputFetchCompletedTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.InputFetchCompletedTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetExecutionStartTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.ExecutionStartTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetExecutionCompletedTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.ExecutionCompletedTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetVirtualExecutionDuration() *durationpb.Duration {
+ if x != nil {
+ return x.VirtualExecutionDuration
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetOutputUploadStartTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.OutputUploadStartTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetOutputUploadCompletedTimestamp() *timestamppb.Timestamp {
+ if x != nil {
+ return x.OutputUploadCompletedTimestamp
+ }
+ return nil
+}
+
+func (x *ExecutedActionMetadata) GetAuxiliaryMetadata() []*anypb.Any {
+ if x != nil {
+ return x.AuxiliaryMetadata
+ }
+ return nil
+}
+
+// An ActionResult represents the result of an
+// [Action][build.bazel.remote.execution.v2.Action] being run.
+//
+// It is advised that at least one field (for example
+// `ActionResult.execution_metadata.Worker`) have a non-default value, to
+// ensure that the serialized value is non-empty, which can then be used
+// as a basic data sanity check.
+type ActionResult struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The output files of the action. For each output file requested in the
+ // `output_files` or `output_paths` field of the Action, if the corresponding
+ // file existed after the action completed, a single entry will be present
+ // either in this field, or the `output_file_symlinks` field if the file was
+ // a symbolic link to another file (`output_symlinks` field after v2.1).
+ //
+ // If an output listed in `output_files` was found, but was a directory rather
+ // than a regular file, the server will return a FAILED_PRECONDITION.
+ // If the action does not produce the requested output, then that output
+ // will be omitted from the list. The server is free to arrange the output
+ // list as desired; clients MUST NOT assume that the output list is sorted.
+ OutputFiles []*OutputFile `protobuf:"bytes,2,rep,name=output_files,json=outputFiles,proto3" json:"output_files,omitempty"`
+ // The output files of the action that are symbolic links to other files. Those
+ // may be links to other output files, or input files, or even absolute paths
+ // outside of the working directory, if the server supports
+ // [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.CacheCapabilities.SymlinkAbsolutePathStrategy].
+ // For each output file requested in the `output_files` or `output_paths`
+ // field of the Action, if the corresponding file existed after
+ // the action completed, a single entry will be present either in this field,
+ // or in the `output_files` field, if the file was not a symbolic link.
+ //
+ // If an output symbolic link of the same name as listed in `output_files` of
+ // the Command was found, but its target type was not a regular file, the
+ // server will return a FAILED_PRECONDITION.
+ // If the action does not produce the requested output, then that output
+ // will be omitted from the list. The server is free to arrange the output
+ // list as desired; clients MUST NOT assume that the output list is sorted.
+ //
+ // DEPRECATED as of v2.1. Servers that wish to be compatible with v2.0 API
+ // should still populate this field in addition to `output_symlinks`.
+ //
+ // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+ OutputFileSymlinks []*OutputSymlink `protobuf:"bytes,10,rep,name=output_file_symlinks,json=outputFileSymlinks,proto3" json:"output_file_symlinks,omitempty"`
+ // New in v2.1: this field will only be populated if the command
+ // `output_paths` field was used, and not the pre v2.1 `output_files` or
+ // `output_directories` fields.
+ // The output paths of the action that are symbolic links to other paths. Those
+ // may be links to other outputs, or inputs, or even absolute paths
+ // outside of the working directory, if the server supports
+ // [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.CacheCapabilities.SymlinkAbsolutePathStrategy].
+ // A single entry for each output requested in `output_paths`
+ // field of the Action, if the corresponding path existed after
+ // the action completed and was a symbolic link.
+ //
+ // If the action does not produce a requested output, then that output
+ // will be omitted from the list. The server is free to arrange the output
+ // list as desired; clients MUST NOT assume that the output list is sorted.
+ OutputSymlinks []*OutputSymlink `protobuf:"bytes,12,rep,name=output_symlinks,json=outputSymlinks,proto3" json:"output_symlinks,omitempty"`
+ // The output directories of the action. For each output directory requested
+ // in the `output_directories` or `output_paths` field of the Action, if the
+ // corresponding directory existed after the action completed, a single entry
+ // will be present in the output list, which will contain the digest of a
+ // [Tree][build.bazel.remote.execution.v2.Tree] message containing the
+ // directory tree, and the path equal exactly to the corresponding Action
+ // output_directories member.
+ //
+ // As an example, suppose the Action had an output directory `a/b/dir` and the
+ // execution produced the following contents in `a/b/dir`: a file named `bar`
+ // and a directory named `foo` with an executable file named `baz`. Then,
+ // output_directory will contain (hashes shortened for readability):
+ //
+ // ```json
+ // // OutputDirectory proto:
+ //
+ // {
+ // path: "a/b/dir"
+ // tree_digest: {
+ // hash: "4a73bc9d03...",
+ // size: 55
+ // }
+ // }
+ //
+ // // Tree proto with hash "4a73bc9d03..." and size 55:
+ //
+ // {
+ // root: {
+ // files: [
+ // {
+ // name: "bar",
+ // digest: {
+ // hash: "4a73bc9d03...",
+ // size: 65534
+ // }
+ // }
+ // ],
+ // directories: [
+ // {
+ // name: "foo",
+ // digest: {
+ // hash: "4cf2eda940...",
+ // size: 43
+ // }
+ // }
+ // ]
+ // }
+ // children : {
+ // // (Directory proto with hash "4cf2eda940..." and size 43)
+ // files: [
+ // {
+ // name: "baz",
+ // digest: {
+ // hash: "b2c941073e...",
+ // size: 1294,
+ // },
+ // is_executable: true
+ // }
+ // ]
+ // }
+ // }
+ //
+ // ```
+ // If an output of the same name as listed in `output_files` of
+ // the Command was found in `output_directories`, but was not a directory, the
+ // server will return a FAILED_PRECONDITION.
+ OutputDirectories []*OutputDirectory `protobuf:"bytes,3,rep,name=output_directories,json=outputDirectories,proto3" json:"output_directories,omitempty"`
+ // The output directories of the action that are symbolic links to other
+ // directories. Those may be links to other output directories, or input
+ // directories, or even absolute paths outside of the working directory,
+ // if the server supports
+ // [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.CacheCapabilities.SymlinkAbsolutePathStrategy].
+ // For each output directory requested in the `output_directories` field of
+ // the Action, if the directory existed after the action completed, a
+ // single entry will be present either in this field, or in the
+ // `output_directories` field, if the directory was not a symbolic link.
+ //
+ // If an output of the same name was found, but was a symbolic link to a file
+ // instead of a directory, the server will return a FAILED_PRECONDITION.
+ // If the action does not produce the requested output, then that output
+ // will be omitted from the list. The server is free to arrange the output
+ // list as desired; clients MUST NOT assume that the output list is sorted.
+ //
+ // DEPRECATED as of v2.1. Servers that wish to be compatible with v2.0 API
+ // should still populate this field in addition to `output_symlinks`.
+ //
+ // Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+ OutputDirectorySymlinks []*OutputSymlink `protobuf:"bytes,11,rep,name=output_directory_symlinks,json=outputDirectorySymlinks,proto3" json:"output_directory_symlinks,omitempty"`
+ // The exit code of the command.
+ ExitCode int32 `protobuf:"varint,4,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"`
+ // The standard output buffer of the action. The server SHOULD NOT inline
+ // stdout unless requested by the client in the
+ // [GetActionResultRequest][build.bazel.remote.execution.v2.GetActionResultRequest]
+ // message. The server MAY omit inlining, even if requested, and MUST do so if inlining
+ // would cause the response to exceed message size limits.
+ // Clients SHOULD NOT populate this field when uploading to the cache.
+ StdoutRaw []byte `protobuf:"bytes,5,opt,name=stdout_raw,json=stdoutRaw,proto3" json:"stdout_raw,omitempty"`
+ // The digest for a blob containing the standard output of the action, which
+ // can be retrieved from the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ StdoutDigest *Digest `protobuf:"bytes,6,opt,name=stdout_digest,json=stdoutDigest,proto3" json:"stdout_digest,omitempty"`
+ // The standard error buffer of the action. The server SHOULD NOT inline
+ // stderr unless requested by the client in the
+ // [GetActionResultRequest][build.bazel.remote.execution.v2.GetActionResultRequest]
+ // message. The server MAY omit inlining, even if requested, and MUST do so if inlining
+ // would cause the response to exceed message size limits.
+ // Clients SHOULD NOT populate this field when uploading to the cache.
+ StderrRaw []byte `protobuf:"bytes,7,opt,name=stderr_raw,json=stderrRaw,proto3" json:"stderr_raw,omitempty"`
+ // The digest for a blob containing the standard error of the action, which
+ // can be retrieved from the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ StderrDigest *Digest `protobuf:"bytes,8,opt,name=stderr_digest,json=stderrDigest,proto3" json:"stderr_digest,omitempty"`
+ // The details of the execution that originally produced this result.
+ ExecutionMetadata *ExecutedActionMetadata `protobuf:"bytes,9,opt,name=execution_metadata,json=executionMetadata,proto3" json:"execution_metadata,omitempty"`
+}
+
+func (x *ActionResult) Reset() {
+ *x = ActionResult{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ActionResult) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ActionResult) ProtoMessage() {}
+
+func (x *ActionResult) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[11]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ActionResult.ProtoReflect.Descriptor instead.
+func (*ActionResult) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *ActionResult) GetOutputFiles() []*OutputFile {
+ if x != nil {
+ return x.OutputFiles
+ }
+ return nil
+}
+
+// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+func (x *ActionResult) GetOutputFileSymlinks() []*OutputSymlink {
+ if x != nil {
+ return x.OutputFileSymlinks
+ }
+ return nil
+}
+
+func (x *ActionResult) GetOutputSymlinks() []*OutputSymlink {
+ if x != nil {
+ return x.OutputSymlinks
+ }
+ return nil
+}
+
+func (x *ActionResult) GetOutputDirectories() []*OutputDirectory {
+ if x != nil {
+ return x.OutputDirectories
+ }
+ return nil
+}
+
+// Deprecated: Marked as deprecated in build/bazel/remote/execution/v2/remote_execution.proto.
+func (x *ActionResult) GetOutputDirectorySymlinks() []*OutputSymlink {
+ if x != nil {
+ return x.OutputDirectorySymlinks
+ }
+ return nil
+}
+
+func (x *ActionResult) GetExitCode() int32 {
+ if x != nil {
+ return x.ExitCode
+ }
+ return 0
+}
+
+func (x *ActionResult) GetStdoutRaw() []byte {
+ if x != nil {
+ return x.StdoutRaw
+ }
+ return nil
+}
+
+func (x *ActionResult) GetStdoutDigest() *Digest {
+ if x != nil {
+ return x.StdoutDigest
+ }
+ return nil
+}
+
+func (x *ActionResult) GetStderrRaw() []byte {
+ if x != nil {
+ return x.StderrRaw
+ }
+ return nil
+}
+
+func (x *ActionResult) GetStderrDigest() *Digest {
+ if x != nil {
+ return x.StderrDigest
+ }
+ return nil
+}
+
+func (x *ActionResult) GetExecutionMetadata() *ExecutedActionMetadata {
+ if x != nil {
+ return x.ExecutionMetadata
+ }
+ return nil
+}
+
+// An `OutputFile` is similar to a
+// [FileNode][build.bazel.remote.execution.v2.FileNode], but it is used as an
+// output in an `ActionResult`. It allows a full file path rather than
+// only a name.
+type OutputFile struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The full path of the file relative to the working directory, including the
+ // filename. The path separator is a forward slash `/`. Since this is a
+ // relative path, it MUST NOT begin with a leading forward slash.
+ Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
+ // The digest of the file's content.
+ Digest *Digest `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"`
+ // True if file is executable, false otherwise.
+ IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable,proto3" json:"is_executable,omitempty"`
+ // The contents of the file if inlining was requested. The server SHOULD NOT inline
+ // file contents unless requested by the client in the
+ // [GetActionResultRequest][build.bazel.remote.execution.v2.GetActionResultRequest]
+ // message. The server MAY omit inlining, even if requested, and MUST do so if inlining
+ // would cause the response to exceed message size limits.
+ // Clients SHOULD NOT populate this field when uploading to the cache.
+ Contents []byte `protobuf:"bytes,5,opt,name=contents,proto3" json:"contents,omitempty"`
+ NodeProperties *NodeProperties `protobuf:"bytes,7,opt,name=node_properties,json=nodeProperties,proto3" json:"node_properties,omitempty"`
+}
+
+func (x *OutputFile) Reset() {
+ *x = OutputFile{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OutputFile) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OutputFile) ProtoMessage() {}
+
+func (x *OutputFile) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[12]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OutputFile.ProtoReflect.Descriptor instead.
+func (*OutputFile) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *OutputFile) GetPath() string {
+ if x != nil {
+ return x.Path
+ }
+ return ""
+}
+
+func (x *OutputFile) GetDigest() *Digest {
+ if x != nil {
+ return x.Digest
+ }
+ return nil
+}
+
+func (x *OutputFile) GetIsExecutable() bool {
+ if x != nil {
+ return x.IsExecutable
+ }
+ return false
+}
+
+func (x *OutputFile) GetContents() []byte {
+ if x != nil {
+ return x.Contents
+ }
+ return nil
+}
+
+func (x *OutputFile) GetNodeProperties() *NodeProperties {
+ if x != nil {
+ return x.NodeProperties
+ }
+ return nil
+}
+
+// A `Tree` contains all the
+// [Directory][build.bazel.remote.execution.v2.Directory] protos in a
+// single directory Merkle tree, compressed into one message.
+type Tree struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The root directory in the tree.
+ Root *Directory `protobuf:"bytes,1,opt,name=root,proto3" json:"root,omitempty"`
+ // All the child directories: the directories referred to by the root and,
+ // recursively, all its children. In order to reconstruct the directory tree,
+ // the client must take the digests of each of the child directories and then
+ // build up a tree starting from the `root`.
+ // Servers SHOULD ensure that these are ordered consistently such that two
+ // actions producing equivalent output directories on the same server
+ // implementation also produce Tree messages with matching digests.
+ Children []*Directory `protobuf:"bytes,2,rep,name=children,proto3" json:"children,omitempty"`
+}
+
+func (x *Tree) Reset() {
+ *x = Tree{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Tree) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Tree) ProtoMessage() {}
+
+func (x *Tree) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[13]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Tree.ProtoReflect.Descriptor instead.
+func (*Tree) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *Tree) GetRoot() *Directory {
+ if x != nil {
+ return x.Root
+ }
+ return nil
+}
+
+func (x *Tree) GetChildren() []*Directory {
+ if x != nil {
+ return x.Children
+ }
+ return nil
+}
+
+// An `OutputDirectory` is the output in an `ActionResult` corresponding to a
+// directory's full contents rather than a single file.
+type OutputDirectory struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The full path of the directory relative to the working directory. The path
+ // separator is a forward slash `/`. Since this is a relative path, it MUST
+ // NOT begin with a leading forward slash. The empty string value is allowed,
+ // and it denotes the entire working directory.
+ Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
+ // The digest of the encoded
+ // [Tree][build.bazel.remote.execution.v2.Tree] proto containing the
+ // directory's contents.
+ TreeDigest *Digest `protobuf:"bytes,3,opt,name=tree_digest,json=treeDigest,proto3" json:"tree_digest,omitempty"`
+ // If set, consumers MAY make the following assumptions about the
+ // directories contained in the the Tree, so that it may be
+ // instantiated on a local file system by scanning through it
+ // sequentially:
+ //
+ // - All directories with the same binary representation are stored
+ // exactly once.
+ // - All directories, apart from the root directory, are referenced by
+ // at least one parent directory.
+ // - Directories are stored in topological order, with parents being
+ // stored before the child. The root directory is thus the first to
+ // be stored.
+ //
+ // Additionally, the Tree MUST be encoded as a stream of records,
+ // where each record has the following format:
+ //
+ // - A tag byte, having one of the following two values:
+ // - (1 << 3) | 2 == 0x0a: First record (the root directory).
+ // - (2 << 3) | 2 == 0x12: Any subsequent records (child directories).
+ // - The size of the directory, encoded as a base 128 varint.
+ // - The contents of the directory, encoded as a binary serialized
+ // Protobuf message.
+ //
+ // This encoding is a subset of the Protobuf wire format of the Tree
+ // message. As it is only permitted to store data associated with
+ // field numbers 1 and 2, the tag MUST be encoded as a single byte.
+ // More details on the Protobuf wire format can be found here:
+ // https://developers.google.com/protocol-buffers/docs/encoding
+ //
+ // It is recommended that implementations using this feature construct
+ // Tree objects manually using the specification given above, as
+ // opposed to using a Protobuf library to marshal a full Tree message.
+ // As individual Directory messages already need to be marshaled to
+ // compute their digests, constructing the Tree object manually avoids
+ // redundant marshaling.
+ IsTopologicallySorted bool `protobuf:"varint,4,opt,name=is_topologically_sorted,json=isTopologicallySorted,proto3" json:"is_topologically_sorted,omitempty"`
+ // The digest of the encoded
+ // [Directory][build.bazel.remote.execution.v2.Directory] proto
+ // containing the contents the directory's root.
+ //
+ // If both `tree_digest` and `root_directory_digest` are set, this
+ // field MUST match the digest of the root directory contained in the
+ // Tree message.
+ RootDirectoryDigest *Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"`
+}
+
+func (x *OutputDirectory) Reset() {
+ *x = OutputDirectory{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OutputDirectory) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OutputDirectory) ProtoMessage() {}
+
+func (x *OutputDirectory) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[14]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OutputDirectory.ProtoReflect.Descriptor instead.
+func (*OutputDirectory) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *OutputDirectory) GetPath() string {
+ if x != nil {
+ return x.Path
+ }
+ return ""
+}
+
+func (x *OutputDirectory) GetTreeDigest() *Digest {
+ if x != nil {
+ return x.TreeDigest
+ }
+ return nil
+}
+
+func (x *OutputDirectory) GetIsTopologicallySorted() bool {
+ if x != nil {
+ return x.IsTopologicallySorted
+ }
+ return false
+}
+
+func (x *OutputDirectory) GetRootDirectoryDigest() *Digest {
+ if x != nil {
+ return x.RootDirectoryDigest
+ }
+ return nil
+}
+
+// An `OutputSymlink` is similar to a
+// [Symlink][build.bazel.remote.execution.v2.SymlinkNode], but it is used as an
+// output in an `ActionResult`.
+//
+// `OutputSymlink` is binary-compatible with `SymlinkNode`.
+type OutputSymlink struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The full path of the symlink relative to the working directory, including the
+ // filename. The path separator is a forward slash `/`. Since this is a
+ // relative path, it MUST NOT begin with a leading forward slash.
+ Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
+ // The target path of the symlink. The path separator is a forward slash `/`.
+ // The target path can be relative to the parent directory of the symlink or
+ // it can be an absolute path starting with `/`. Support for absolute paths
+ // can be checked using the [Capabilities][build.bazel.remote.execution.v2.Capabilities]
+ // API. `..` components are allowed anywhere in the target path.
+ Target string `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"`
+ NodeProperties *NodeProperties `protobuf:"bytes,4,opt,name=node_properties,json=nodeProperties,proto3" json:"node_properties,omitempty"`
+}
+
+func (x *OutputSymlink) Reset() {
+ *x = OutputSymlink{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OutputSymlink) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OutputSymlink) ProtoMessage() {}
+
+func (x *OutputSymlink) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[15]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OutputSymlink.ProtoReflect.Descriptor instead.
+func (*OutputSymlink) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *OutputSymlink) GetPath() string {
+ if x != nil {
+ return x.Path
+ }
+ return ""
+}
+
+func (x *OutputSymlink) GetTarget() string {
+ if x != nil {
+ return x.Target
+ }
+ return ""
+}
+
+func (x *OutputSymlink) GetNodeProperties() *NodeProperties {
+ if x != nil {
+ return x.NodeProperties
+ }
+ return nil
+}
+
+// An `ExecutionPolicy` can be used to control the scheduling of the action.
+type ExecutionPolicy struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The priority (relative importance) of this action. Generally, a lower value
+ // means that the action should be run sooner than actions having a greater
+ // priority value, but the interpretation of a given value is server-
+ // dependent. A priority of 0 means the *default* priority. Priorities may be
+ // positive or negative, and such actions should run later or sooner than
+ // actions having the default priority, respectively. The particular semantics
+ // of this field is up to the server. In particular, every server will have
+ // their own supported range of priorities, and will decide how these map into
+ // scheduling policy.
+ Priority int32 `protobuf:"varint,1,opt,name=priority,proto3" json:"priority,omitempty"`
+}
+
+func (x *ExecutionPolicy) Reset() {
+ *x = ExecutionPolicy{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ExecutionPolicy) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutionPolicy) ProtoMessage() {}
+
+func (x *ExecutionPolicy) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[16]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExecutionPolicy.ProtoReflect.Descriptor instead.
+func (*ExecutionPolicy) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *ExecutionPolicy) GetPriority() int32 {
+ if x != nil {
+ return x.Priority
+ }
+ return 0
+}
+
+// A `ResultsCachePolicy` is used for fine-grained control over how action
+// outputs are stored in the CAS and Action Cache.
+type ResultsCachePolicy struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The priority (relative importance) of this content in the overall cache.
+ // Generally, a lower value means a longer retention time or other advantage,
+ // but the interpretation of a given value is server-dependent. A priority of
+ // 0 means a *default* value, decided by the server.
+ //
+ // The particular semantics of this field is up to the server. In particular,
+ // every server will have their own supported range of priorities, and will
+ // decide how these map into retention/eviction policy.
+ Priority int32 `protobuf:"varint,1,opt,name=priority,proto3" json:"priority,omitempty"`
+}
+
+func (x *ResultsCachePolicy) Reset() {
+ *x = ResultsCachePolicy{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ResultsCachePolicy) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ResultsCachePolicy) ProtoMessage() {}
+
+func (x *ResultsCachePolicy) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[17]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ResultsCachePolicy.ProtoReflect.Descriptor instead.
+func (*ResultsCachePolicy) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *ResultsCachePolicy) GetPriority() int32 {
+ if x != nil {
+ return x.Priority
+ }
+ return 0
+}
+
+// A request message for
+// [Execution.Execute][build.bazel.remote.execution.v2.Execution.Execute].
+type ExecuteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // If true, the action will be executed even if its result is already
+ // present in the [ActionCache][build.bazel.remote.execution.v2.ActionCache].
+ // The execution is still allowed to be merged with other in-flight executions
+ // of the same action, however - semantically, the service MUST only guarantee
+ // that the results of an execution with this field set were not visible
+ // before the corresponding execution request was sent.
+ // Note that actions from execution requests setting this field set are still
+ // eligible to be entered into the action cache upon completion, and services
+ // SHOULD overwrite any existing entries that may exist. This allows
+ // skip_cache_lookup requests to be used as a mechanism for replacing action
+ // cache entries that reference outputs no longer available or that are
+ // poisoned in any way.
+ // If false, the result may be served from the action cache.
+ SkipCacheLookup bool `protobuf:"varint,3,opt,name=skip_cache_lookup,json=skipCacheLookup,proto3" json:"skip_cache_lookup,omitempty"`
+ // The digest of the [Action][build.bazel.remote.execution.v2.Action] to
+ // execute.
+ ActionDigest *Digest `protobuf:"bytes,6,opt,name=action_digest,json=actionDigest,proto3" json:"action_digest,omitempty"`
+ // An optional policy for execution of the action.
+ // The server will have a default policy if this is not provided.
+ ExecutionPolicy *ExecutionPolicy `protobuf:"bytes,7,opt,name=execution_policy,json=executionPolicy,proto3" json:"execution_policy,omitempty"`
+ // An optional policy for the results of this execution in the remote cache.
+ // The server will have a default policy if this is not provided.
+ // This may be applied to both the ActionResult and the associated blobs.
+ ResultsCachePolicy *ResultsCachePolicy `protobuf:"bytes,8,opt,name=results_cache_policy,json=resultsCachePolicy,proto3" json:"results_cache_policy,omitempty"`
+ // The digest function that was used to compute the action digest.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the action digest hash and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction DigestFunction_Value `protobuf:"varint,9,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"`
+}
+
+func (x *ExecuteRequest) Reset() {
+ *x = ExecuteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ExecuteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecuteRequest) ProtoMessage() {}
+
+func (x *ExecuteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[18]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExecuteRequest.ProtoReflect.Descriptor instead.
+func (*ExecuteRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *ExecuteRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *ExecuteRequest) GetSkipCacheLookup() bool {
+ if x != nil {
+ return x.SkipCacheLookup
+ }
+ return false
+}
+
+func (x *ExecuteRequest) GetActionDigest() *Digest {
+ if x != nil {
+ return x.ActionDigest
+ }
+ return nil
+}
+
+func (x *ExecuteRequest) GetExecutionPolicy() *ExecutionPolicy {
+ if x != nil {
+ return x.ExecutionPolicy
+ }
+ return nil
+}
+
+func (x *ExecuteRequest) GetResultsCachePolicy() *ResultsCachePolicy {
+ if x != nil {
+ return x.ResultsCachePolicy
+ }
+ return nil
+}
+
+func (x *ExecuteRequest) GetDigestFunction() DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunction
+ }
+ return DigestFunction_UNKNOWN
+}
+
+// A `LogFile` is a log stored in the CAS.
+type LogFile struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The digest of the log contents.
+ Digest *Digest `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"`
+ // This is a hint as to the purpose of the log, and is set to true if the log
+ // is human-readable text that can be usefully displayed to a user, and false
+ // otherwise. For instance, if a command-line client wishes to print the
+ // server logs to the terminal for a failed action, this allows it to avoid
+ // displaying a binary file.
+ HumanReadable bool `protobuf:"varint,2,opt,name=human_readable,json=humanReadable,proto3" json:"human_readable,omitempty"`
+}
+
+func (x *LogFile) Reset() {
+ *x = LogFile{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LogFile) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LogFile) ProtoMessage() {}
+
+func (x *LogFile) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[19]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LogFile.ProtoReflect.Descriptor instead.
+func (*LogFile) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *LogFile) GetDigest() *Digest {
+ if x != nil {
+ return x.Digest
+ }
+ return nil
+}
+
+func (x *LogFile) GetHumanReadable() bool {
+ if x != nil {
+ return x.HumanReadable
+ }
+ return false
+}
+
+// The response message for
+// [Execution.Execute][build.bazel.remote.execution.v2.Execution.Execute],
+// which will be contained in the [response
+// field][google.longrunning.Operation.response] of the
+// [Operation][google.longrunning.Operation].
+type ExecuteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The result of the action.
+ Result *ActionResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"`
+ // True if the result was served from cache, false if it was executed.
+ CachedResult bool `protobuf:"varint,2,opt,name=cached_result,json=cachedResult,proto3" json:"cached_result,omitempty"`
+ // If the status has a code other than `OK`, it indicates that the action did
+ // not finish execution. For example, if the operation times out during
+ // execution, the status will have a `DEADLINE_EXCEEDED` code. Servers MUST
+ // use this field for errors in execution, rather than the error field on the
+ // `Operation` object.
+ //
+ // If the status code is other than `OK`, then the result MUST NOT be cached.
+ // For an error status, the `result` field is optional; the server may
+ // populate the output-, stdout-, and stderr-related fields if it has any
+ // information available, such as the stdout and stderr of a timed-out action.
+ Status *status.Status `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"`
+ // An optional list of additional log outputs the server wishes to provide. A
+ // server can use this to return execution-specific logs however it wishes.
+ // This is intended primarily to make it easier for users to debug issues that
+ // may be outside of the actual job execution, such as by identifying the
+ // worker executing the action or by providing logs from the worker's setup
+ // phase. The keys SHOULD be human readable so that a client can display them
+ // to a user.
+ ServerLogs map[string]*LogFile `protobuf:"bytes,4,rep,name=server_logs,json=serverLogs,proto3" json:"server_logs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Freeform informational message with details on the execution of the action
+ // that may be displayed to the user upon failure or when requested explicitly.
+ Message string `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"`
+}
+
+func (x *ExecuteResponse) Reset() {
+ *x = ExecuteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ExecuteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecuteResponse) ProtoMessage() {}
+
+func (x *ExecuteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[20]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExecuteResponse.ProtoReflect.Descriptor instead.
+func (*ExecuteResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *ExecuteResponse) GetResult() *ActionResult {
+ if x != nil {
+ return x.Result
+ }
+ return nil
+}
+
+func (x *ExecuteResponse) GetCachedResult() bool {
+ if x != nil {
+ return x.CachedResult
+ }
+ return false
+}
+
+func (x *ExecuteResponse) GetStatus() *status.Status {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+
+func (x *ExecuteResponse) GetServerLogs() map[string]*LogFile {
+ if x != nil {
+ return x.ServerLogs
+ }
+ return nil
+}
+
+func (x *ExecuteResponse) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
+}
+
+// The current stage of action execution.
+//
+// Even though these stages are numbered according to the order in which
+// they generally occur, there is no requirement that the remote
+// execution system reports events along this order. For example, an
+// operation MAY transition from the EXECUTING stage back to QUEUED
+// in case the hardware on which the operation executes fails.
+//
+// If and only if the remote execution system reports that an operation
+// has reached the COMPLETED stage, it MUST set the [done
+// field][google.longrunning.Operation.done] of the
+// [Operation][google.longrunning.Operation] and terminate the stream.
+type ExecutionStage struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *ExecutionStage) Reset() {
+ *x = ExecutionStage{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ExecutionStage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutionStage) ProtoMessage() {}
+
+func (x *ExecutionStage) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[21]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExecutionStage.ProtoReflect.Descriptor instead.
+func (*ExecutionStage) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{21}
+}
+
+// Metadata about an ongoing
+// [execution][build.bazel.remote.execution.v2.Execution.Execute], which
+// will be contained in the [metadata
+// field][google.longrunning.Operation.response] of the
+// [Operation][google.longrunning.Operation].
+type ExecuteOperationMetadata struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The current stage of execution.
+ Stage ExecutionStage_Value `protobuf:"varint,1,opt,name=stage,proto3,enum=build.bazel.remote.execution.v2.ExecutionStage_Value" json:"stage,omitempty"`
+ // The digest of the [Action][build.bazel.remote.execution.v2.Action]
+ // being executed.
+ ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest,proto3" json:"action_digest,omitempty"`
+ // If set, the client can use this resource name with
+ // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the
+ // standard output from the endpoint hosting streamed responses.
+ StdoutStreamName string `protobuf:"bytes,3,opt,name=stdout_stream_name,json=stdoutStreamName,proto3" json:"stdout_stream_name,omitempty"`
+ // If set, the client can use this resource name with
+ // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the
+ // standard error from the endpoint hosting streamed responses.
+ StderrStreamName string `protobuf:"bytes,4,opt,name=stderr_stream_name,json=stderrStreamName,proto3" json:"stderr_stream_name,omitempty"`
+ // The client can read this field to view details about the ongoing
+ // execution.
+ PartialExecutionMetadata *ExecutedActionMetadata `protobuf:"bytes,5,opt,name=partial_execution_metadata,json=partialExecutionMetadata,proto3" json:"partial_execution_metadata,omitempty"`
+}
+
+func (x *ExecuteOperationMetadata) Reset() {
+ *x = ExecuteOperationMetadata{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ExecuteOperationMetadata) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecuteOperationMetadata) ProtoMessage() {}
+
+func (x *ExecuteOperationMetadata) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[22]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExecuteOperationMetadata.ProtoReflect.Descriptor instead.
+func (*ExecuteOperationMetadata) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *ExecuteOperationMetadata) GetStage() ExecutionStage_Value {
+ if x != nil {
+ return x.Stage
+ }
+ return ExecutionStage_UNKNOWN
+}
+
+func (x *ExecuteOperationMetadata) GetActionDigest() *Digest {
+ if x != nil {
+ return x.ActionDigest
+ }
+ return nil
+}
+
+func (x *ExecuteOperationMetadata) GetStdoutStreamName() string {
+ if x != nil {
+ return x.StdoutStreamName
+ }
+ return ""
+}
+
+func (x *ExecuteOperationMetadata) GetStderrStreamName() string {
+ if x != nil {
+ return x.StderrStreamName
+ }
+ return ""
+}
+
+func (x *ExecuteOperationMetadata) GetPartialExecutionMetadata() *ExecutedActionMetadata {
+ if x != nil {
+ return x.PartialExecutionMetadata
+ }
+ return nil
+}
+
+// A request message for
+// [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution].
+type WaitExecutionRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name of the [Operation][google.longrunning.Operation]
+ // returned by [Execute][build.bazel.remote.execution.v2.Execution.Execute].
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+}
+
+func (x *WaitExecutionRequest) Reset() {
+ *x = WaitExecutionRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *WaitExecutionRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WaitExecutionRequest) ProtoMessage() {}
+
+func (x *WaitExecutionRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[23]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WaitExecutionRequest.ProtoReflect.Descriptor instead.
+func (*WaitExecutionRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *WaitExecutionRequest) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+// A request message for
+// [ActionCache.GetActionResult][build.bazel.remote.execution.v2.ActionCache.GetActionResult].
+type GetActionResultRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The digest of the [Action][build.bazel.remote.execution.v2.Action]
+ // whose result is requested.
+ ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest,proto3" json:"action_digest,omitempty"`
+ // A hint to the server to request inlining stdout in the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] message.
+ InlineStdout bool `protobuf:"varint,3,opt,name=inline_stdout,json=inlineStdout,proto3" json:"inline_stdout,omitempty"`
+ // A hint to the server to request inlining stderr in the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] message.
+ InlineStderr bool `protobuf:"varint,4,opt,name=inline_stderr,json=inlineStderr,proto3" json:"inline_stderr,omitempty"`
+ // A hint to the server to inline the contents of the listed output files.
+ // Each path needs to exactly match one file path in either `output_paths` or
+ // `output_files` (DEPRECATED since v2.1) in the
+ // [Command][build.bazel.remote.execution.v2.Command] message.
+ InlineOutputFiles []string `protobuf:"bytes,5,rep,name=inline_output_files,json=inlineOutputFiles,proto3" json:"inline_output_files,omitempty"`
+ // The digest function that was used to compute the action digest.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the action digest hash and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction DigestFunction_Value `protobuf:"varint,6,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"`
+}
+
+func (x *GetActionResultRequest) Reset() {
+ *x = GetActionResultRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetActionResultRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetActionResultRequest) ProtoMessage() {}
+
+func (x *GetActionResultRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[24]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetActionResultRequest.ProtoReflect.Descriptor instead.
+func (*GetActionResultRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *GetActionResultRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *GetActionResultRequest) GetActionDigest() *Digest {
+ if x != nil {
+ return x.ActionDigest
+ }
+ return nil
+}
+
+func (x *GetActionResultRequest) GetInlineStdout() bool {
+ if x != nil {
+ return x.InlineStdout
+ }
+ return false
+}
+
+func (x *GetActionResultRequest) GetInlineStderr() bool {
+ if x != nil {
+ return x.InlineStderr
+ }
+ return false
+}
+
+func (x *GetActionResultRequest) GetInlineOutputFiles() []string {
+ if x != nil {
+ return x.InlineOutputFiles
+ }
+ return nil
+}
+
+func (x *GetActionResultRequest) GetDigestFunction() DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunction
+ }
+ return DigestFunction_UNKNOWN
+}
+
+// A request message for
+// [ActionCache.UpdateActionResult][build.bazel.remote.execution.v2.ActionCache.UpdateActionResult].
+type UpdateActionResultRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The digest of the [Action][build.bazel.remote.execution.v2.Action]
+ // whose result is being uploaded.
+ ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest,proto3" json:"action_digest,omitempty"`
+ // The [ActionResult][build.bazel.remote.execution.v2.ActionResult]
+ // to store in the cache.
+ ActionResult *ActionResult `protobuf:"bytes,3,opt,name=action_result,json=actionResult,proto3" json:"action_result,omitempty"`
+ // An optional policy for the results of this execution in the remote cache.
+ // The server will have a default policy if this is not provided.
+ // This may be applied to both the ActionResult and the associated blobs.
+ ResultsCachePolicy *ResultsCachePolicy `protobuf:"bytes,4,opt,name=results_cache_policy,json=resultsCachePolicy,proto3" json:"results_cache_policy,omitempty"`
+ // The digest function that was used to compute the action digest.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the action digest hash and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction DigestFunction_Value `protobuf:"varint,5,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"`
+}
+
+func (x *UpdateActionResultRequest) Reset() {
+ *x = UpdateActionResultRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdateActionResultRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateActionResultRequest) ProtoMessage() {}
+
+func (x *UpdateActionResultRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[25]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use UpdateActionResultRequest.ProtoReflect.Descriptor instead.
+func (*UpdateActionResultRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{25}
+}
+
+func (x *UpdateActionResultRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *UpdateActionResultRequest) GetActionDigest() *Digest {
+ if x != nil {
+ return x.ActionDigest
+ }
+ return nil
+}
+
+func (x *UpdateActionResultRequest) GetActionResult() *ActionResult {
+ if x != nil {
+ return x.ActionResult
+ }
+ return nil
+}
+
+func (x *UpdateActionResultRequest) GetResultsCachePolicy() *ResultsCachePolicy {
+ if x != nil {
+ return x.ResultsCachePolicy
+ }
+ return nil
+}
+
+func (x *UpdateActionResultRequest) GetDigestFunction() DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunction
+ }
+ return DigestFunction_UNKNOWN
+}
+
+// A request message for
+// [ContentAddressableStorage.FindMissingBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs].
+type FindMissingBlobsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // A list of the blobs to check. All digests MUST use the same digest
+ // function.
+ BlobDigests []*Digest `protobuf:"bytes,2,rep,name=blob_digests,json=blobDigests,proto3" json:"blob_digests,omitempty"`
+ // The digest function of the blobs whose existence is checked.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the blob digest hashes and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction DigestFunction_Value `protobuf:"varint,3,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"`
+}
+
+func (x *FindMissingBlobsRequest) Reset() {
+ *x = FindMissingBlobsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *FindMissingBlobsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindMissingBlobsRequest) ProtoMessage() {}
+
+func (x *FindMissingBlobsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[26]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindMissingBlobsRequest.ProtoReflect.Descriptor instead.
+func (*FindMissingBlobsRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *FindMissingBlobsRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *FindMissingBlobsRequest) GetBlobDigests() []*Digest {
+ if x != nil {
+ return x.BlobDigests
+ }
+ return nil
+}
+
+func (x *FindMissingBlobsRequest) GetDigestFunction() DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunction
+ }
+ return DigestFunction_UNKNOWN
+}
+
+// A response message for
+// [ContentAddressableStorage.FindMissingBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs].
+type FindMissingBlobsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // A list of the blobs requested *not* present in the storage.
+ MissingBlobDigests []*Digest `protobuf:"bytes,2,rep,name=missing_blob_digests,json=missingBlobDigests,proto3" json:"missing_blob_digests,omitempty"`
+}
+
+func (x *FindMissingBlobsResponse) Reset() {
+ *x = FindMissingBlobsResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *FindMissingBlobsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindMissingBlobsResponse) ProtoMessage() {}
+
+func (x *FindMissingBlobsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[27]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindMissingBlobsResponse.ProtoReflect.Descriptor instead.
+func (*FindMissingBlobsResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{27}
+}
+
+func (x *FindMissingBlobsResponse) GetMissingBlobDigests() []*Digest {
+ if x != nil {
+ return x.MissingBlobDigests
+ }
+ return nil
+}
+
+// A request message for
+// [ContentAddressableStorage.BatchUpdateBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs].
+type BatchUpdateBlobsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The individual upload requests.
+ Requests []*BatchUpdateBlobsRequest_Request `protobuf:"bytes,2,rep,name=requests,proto3" json:"requests,omitempty"`
+ // The digest function that was used to compute the digests of the
+ // blobs being uploaded.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the blob digest hashes and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction DigestFunction_Value `protobuf:"varint,5,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"`
+}
+
+func (x *BatchUpdateBlobsRequest) Reset() {
+ *x = BatchUpdateBlobsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchUpdateBlobsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchUpdateBlobsRequest) ProtoMessage() {}
+
+func (x *BatchUpdateBlobsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[28]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchUpdateBlobsRequest.ProtoReflect.Descriptor instead.
+func (*BatchUpdateBlobsRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *BatchUpdateBlobsRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *BatchUpdateBlobsRequest) GetRequests() []*BatchUpdateBlobsRequest_Request {
+ if x != nil {
+ return x.Requests
+ }
+ return nil
+}
+
+func (x *BatchUpdateBlobsRequest) GetDigestFunction() DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunction
+ }
+ return DigestFunction_UNKNOWN
+}
+
+// A response message for
+// [ContentAddressableStorage.BatchUpdateBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs].
+type BatchUpdateBlobsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The responses to the requests.
+ Responses []*BatchUpdateBlobsResponse_Response `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"`
+}
+
+func (x *BatchUpdateBlobsResponse) Reset() {
+ *x = BatchUpdateBlobsResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchUpdateBlobsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchUpdateBlobsResponse) ProtoMessage() {}
+
+func (x *BatchUpdateBlobsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[29]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchUpdateBlobsResponse.ProtoReflect.Descriptor instead.
+func (*BatchUpdateBlobsResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *BatchUpdateBlobsResponse) GetResponses() []*BatchUpdateBlobsResponse_Response {
+ if x != nil {
+ return x.Responses
+ }
+ return nil
+}
+
+// A request message for
+// [ContentAddressableStorage.BatchReadBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs].
+type BatchReadBlobsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The individual blob digests. All digests MUST use the same digest
+ // function.
+ Digests []*Digest `protobuf:"bytes,2,rep,name=digests,proto3" json:"digests,omitempty"`
+ // A list of acceptable encodings for the returned inlined data, in no
+ // particular order. `IDENTITY` is always allowed even if not specified here.
+ AcceptableCompressors []Compressor_Value `protobuf:"varint,3,rep,packed,name=acceptable_compressors,json=acceptableCompressors,proto3,enum=build.bazel.remote.execution.v2.Compressor_Value" json:"acceptable_compressors,omitempty"`
+ // The digest function of the blobs being requested.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the blob digest hashes and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction DigestFunction_Value `protobuf:"varint,4,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"`
+}
+
+func (x *BatchReadBlobsRequest) Reset() {
+ *x = BatchReadBlobsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchReadBlobsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchReadBlobsRequest) ProtoMessage() {}
+
+func (x *BatchReadBlobsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[30]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchReadBlobsRequest.ProtoReflect.Descriptor instead.
+func (*BatchReadBlobsRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{30}
+}
+
+func (x *BatchReadBlobsRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *BatchReadBlobsRequest) GetDigests() []*Digest {
+ if x != nil {
+ return x.Digests
+ }
+ return nil
+}
+
+func (x *BatchReadBlobsRequest) GetAcceptableCompressors() []Compressor_Value {
+ if x != nil {
+ return x.AcceptableCompressors
+ }
+ return nil
+}
+
+func (x *BatchReadBlobsRequest) GetDigestFunction() DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunction
+ }
+ return DigestFunction_UNKNOWN
+}
+
+// A response message for
+// [ContentAddressableStorage.BatchReadBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs].
+type BatchReadBlobsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The responses to the requests.
+ Responses []*BatchReadBlobsResponse_Response `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"`
+}
+
+func (x *BatchReadBlobsResponse) Reset() {
+ *x = BatchReadBlobsResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchReadBlobsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchReadBlobsResponse) ProtoMessage() {}
+
+func (x *BatchReadBlobsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[31]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchReadBlobsResponse.ProtoReflect.Descriptor instead.
+func (*BatchReadBlobsResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *BatchReadBlobsResponse) GetResponses() []*BatchReadBlobsResponse_Response {
+ if x != nil {
+ return x.Responses
+ }
+ return nil
+}
+
+// A request message for
+// [ContentAddressableStorage.GetTree][build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree].
+type GetTreeRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+ // The digest of the root, which must be an encoded
+ // [Directory][build.bazel.remote.execution.v2.Directory] message
+ // stored in the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ RootDigest *Digest `protobuf:"bytes,2,opt,name=root_digest,json=rootDigest,proto3" json:"root_digest,omitempty"`
+ // A maximum page size to request. If present, the server will request no more
+ // than this many items. Regardless of whether a page size is specified, the
+ // server may place its own limit on the number of items to be returned and
+ // require the client to retrieve more items using a subsequent request.
+ PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+ // A page token, which must be a value received in a previous
+ // [GetTreeResponse][build.bazel.remote.execution.v2.GetTreeResponse].
+ // If present, the server will use that token as an offset, returning only
+ // that page and the ones that succeed it.
+ PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+ // The digest function that was used to compute the digest of the root
+ // directory.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the root digest hash and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction DigestFunction_Value `protobuf:"varint,5,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"`
+}
+
+func (x *GetTreeRequest) Reset() {
+ *x = GetTreeRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetTreeRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetTreeRequest) ProtoMessage() {}
+
+func (x *GetTreeRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[32]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetTreeRequest.ProtoReflect.Descriptor instead.
+func (*GetTreeRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *GetTreeRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+func (x *GetTreeRequest) GetRootDigest() *Digest {
+ if x != nil {
+ return x.RootDigest
+ }
+ return nil
+}
+
+func (x *GetTreeRequest) GetPageSize() int32 {
+ if x != nil {
+ return x.PageSize
+ }
+ return 0
+}
+
+func (x *GetTreeRequest) GetPageToken() string {
+ if x != nil {
+ return x.PageToken
+ }
+ return ""
+}
+
+func (x *GetTreeRequest) GetDigestFunction() DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunction
+ }
+ return DigestFunction_UNKNOWN
+}
+
+// A response message for
+// [ContentAddressableStorage.GetTree][build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree].
+type GetTreeResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The directories descended from the requested root.
+ Directories []*Directory `protobuf:"bytes,1,rep,name=directories,proto3" json:"directories,omitempty"`
+ // If present, signifies that there are more results which the client can
+ // retrieve by passing this as the page_token in a subsequent
+ // [request][build.bazel.remote.execution.v2.GetTreeRequest].
+ // If empty, signifies that this is the last page of results.
+ NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+}
+
+func (x *GetTreeResponse) Reset() {
+ *x = GetTreeResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetTreeResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetTreeResponse) ProtoMessage() {}
+
+func (x *GetTreeResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[33]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetTreeResponse.ProtoReflect.Descriptor instead.
+func (*GetTreeResponse) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{33}
+}
+
+func (x *GetTreeResponse) GetDirectories() []*Directory {
+ if x != nil {
+ return x.Directories
+ }
+ return nil
+}
+
+func (x *GetTreeResponse) GetNextPageToken() string {
+ if x != nil {
+ return x.NextPageToken
+ }
+ return ""
+}
+
+// A request message for
+// [Capabilities.GetCapabilities][build.bazel.remote.execution.v2.Capabilities.GetCapabilities].
+type GetCapabilitiesRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The instance of the execution system to operate against. A server may
+ // support multiple instances of the execution system (with their own workers,
+ // storage, caches, etc.). The server MAY require use of this field to select
+ // between them in an implementation-defined fashion, otherwise it can be
+ // omitted.
+ InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"`
+}
+
+func (x *GetCapabilitiesRequest) Reset() {
+ *x = GetCapabilitiesRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[34]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetCapabilitiesRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetCapabilitiesRequest) ProtoMessage() {}
+
+func (x *GetCapabilitiesRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[34]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetCapabilitiesRequest.ProtoReflect.Descriptor instead.
+func (*GetCapabilitiesRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{34}
+}
+
+func (x *GetCapabilitiesRequest) GetInstanceName() string {
+ if x != nil {
+ return x.InstanceName
+ }
+ return ""
+}
+
+// A response message for
+// [Capabilities.GetCapabilities][build.bazel.remote.execution.v2.Capabilities.GetCapabilities].
+type ServerCapabilities struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Capabilities of the remote cache system.
+ CacheCapabilities *CacheCapabilities `protobuf:"bytes,1,opt,name=cache_capabilities,json=cacheCapabilities,proto3" json:"cache_capabilities,omitempty"`
+ // Capabilities of the remote execution system.
+ ExecutionCapabilities *ExecutionCapabilities `protobuf:"bytes,2,opt,name=execution_capabilities,json=executionCapabilities,proto3" json:"execution_capabilities,omitempty"`
+ // Earliest RE API version supported, including deprecated versions.
+ DeprecatedApiVersion *semver.SemVer `protobuf:"bytes,3,opt,name=deprecated_api_version,json=deprecatedApiVersion,proto3" json:"deprecated_api_version,omitempty"`
+ // Earliest non-deprecated RE API version supported.
+ LowApiVersion *semver.SemVer `protobuf:"bytes,4,opt,name=low_api_version,json=lowApiVersion,proto3" json:"low_api_version,omitempty"`
+ // Latest RE API version supported.
+ HighApiVersion *semver.SemVer `protobuf:"bytes,5,opt,name=high_api_version,json=highApiVersion,proto3" json:"high_api_version,omitempty"`
+}
+
+func (x *ServerCapabilities) Reset() {
+ *x = ServerCapabilities{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[35]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ServerCapabilities) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ServerCapabilities) ProtoMessage() {}
+
+func (x *ServerCapabilities) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[35]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ServerCapabilities.ProtoReflect.Descriptor instead.
+func (*ServerCapabilities) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{35}
+}
+
+func (x *ServerCapabilities) GetCacheCapabilities() *CacheCapabilities {
+ if x != nil {
+ return x.CacheCapabilities
+ }
+ return nil
+}
+
+func (x *ServerCapabilities) GetExecutionCapabilities() *ExecutionCapabilities {
+ if x != nil {
+ return x.ExecutionCapabilities
+ }
+ return nil
+}
+
+func (x *ServerCapabilities) GetDeprecatedApiVersion() *semver.SemVer {
+ if x != nil {
+ return x.DeprecatedApiVersion
+ }
+ return nil
+}
+
+func (x *ServerCapabilities) GetLowApiVersion() *semver.SemVer {
+ if x != nil {
+ return x.LowApiVersion
+ }
+ return nil
+}
+
+func (x *ServerCapabilities) GetHighApiVersion() *semver.SemVer {
+ if x != nil {
+ return x.HighApiVersion
+ }
+ return nil
+}
+
+// The digest function used for converting values into keys for CAS and Action
+// Cache.
+type DigestFunction struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *DigestFunction) Reset() {
+ *x = DigestFunction{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[36]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DigestFunction) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DigestFunction) ProtoMessage() {}
+
+func (x *DigestFunction) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[36]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DigestFunction.ProtoReflect.Descriptor instead.
+func (*DigestFunction) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{36}
+}
+
+// Describes the server/instance capabilities for updating the action cache.
+type ActionCacheUpdateCapabilities struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ UpdateEnabled bool `protobuf:"varint,1,opt,name=update_enabled,json=updateEnabled,proto3" json:"update_enabled,omitempty"`
+}
+
+func (x *ActionCacheUpdateCapabilities) Reset() {
+ *x = ActionCacheUpdateCapabilities{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[37]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ActionCacheUpdateCapabilities) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ActionCacheUpdateCapabilities) ProtoMessage() {}
+
+func (x *ActionCacheUpdateCapabilities) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[37]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ActionCacheUpdateCapabilities.ProtoReflect.Descriptor instead.
+func (*ActionCacheUpdateCapabilities) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{37}
+}
+
+func (x *ActionCacheUpdateCapabilities) GetUpdateEnabled() bool {
+ if x != nil {
+ return x.UpdateEnabled
+ }
+ return false
+}
+
+// Allowed values for priority in
+// [ResultsCachePolicy][build.bazel.remoteexecution.v2.ResultsCachePolicy] and
+// [ExecutionPolicy][build.bazel.remoteexecution.v2.ResultsCachePolicy]
+// Used for querying both cache and execution valid priority ranges.
+type PriorityCapabilities struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Priorities []*PriorityCapabilities_PriorityRange `protobuf:"bytes,1,rep,name=priorities,proto3" json:"priorities,omitempty"`
+}
+
+func (x *PriorityCapabilities) Reset() {
+ *x = PriorityCapabilities{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[38]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PriorityCapabilities) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PriorityCapabilities) ProtoMessage() {}
+
+func (x *PriorityCapabilities) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[38]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PriorityCapabilities.ProtoReflect.Descriptor instead.
+func (*PriorityCapabilities) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{38}
+}
+
+func (x *PriorityCapabilities) GetPriorities() []*PriorityCapabilities_PriorityRange {
+ if x != nil {
+ return x.Priorities
+ }
+ return nil
+}
+
+// Describes how the server treats absolute symlink targets.
+type SymlinkAbsolutePathStrategy struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *SymlinkAbsolutePathStrategy) Reset() {
+ *x = SymlinkAbsolutePathStrategy{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[39]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SymlinkAbsolutePathStrategy) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SymlinkAbsolutePathStrategy) ProtoMessage() {}
+
+func (x *SymlinkAbsolutePathStrategy) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[39]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SymlinkAbsolutePathStrategy.ProtoReflect.Descriptor instead.
+func (*SymlinkAbsolutePathStrategy) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{39}
+}
+
+// Compression formats which may be supported.
+type Compressor struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *Compressor) Reset() {
+ *x = Compressor{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[40]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Compressor) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Compressor) ProtoMessage() {}
+
+func (x *Compressor) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[40]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Compressor.ProtoReflect.Descriptor instead.
+func (*Compressor) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{40}
+}
+
+// Capabilities of the remote cache system.
+type CacheCapabilities struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // All the digest functions supported by the remote cache.
+ // Remote cache may support multiple digest functions simultaneously.
+ DigestFunctions []DigestFunction_Value `protobuf:"varint,1,rep,packed,name=digest_functions,json=digestFunctions,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_functions,omitempty"`
+ // Capabilities for updating the action cache.
+ ActionCacheUpdateCapabilities *ActionCacheUpdateCapabilities `protobuf:"bytes,2,opt,name=action_cache_update_capabilities,json=actionCacheUpdateCapabilities,proto3" json:"action_cache_update_capabilities,omitempty"`
+ // Supported cache priority range for both CAS and ActionCache.
+ CachePriorityCapabilities *PriorityCapabilities `protobuf:"bytes,3,opt,name=cache_priority_capabilities,json=cachePriorityCapabilities,proto3" json:"cache_priority_capabilities,omitempty"`
+ // Maximum total size of blobs to be uploaded/downloaded using
+ // batch methods. A value of 0 means no limit is set, although
+ // in practice there will always be a message size limitation
+ // of the protocol in use, e.g. GRPC.
+ MaxBatchTotalSizeBytes int64 `protobuf:"varint,4,opt,name=max_batch_total_size_bytes,json=maxBatchTotalSizeBytes,proto3" json:"max_batch_total_size_bytes,omitempty"`
+ // Whether absolute symlink targets are supported.
+ SymlinkAbsolutePathStrategy SymlinkAbsolutePathStrategy_Value `protobuf:"varint,5,opt,name=symlink_absolute_path_strategy,json=symlinkAbsolutePathStrategy,proto3,enum=build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy_Value" json:"symlink_absolute_path_strategy,omitempty"`
+ // Compressors supported by the "compressed-blobs" bytestream resources.
+ // Servers MUST support identity/no-compression, even if it is not listed
+ // here.
+ //
+ // Note that this does not imply which if any compressors are supported by
+ // the server at the gRPC level.
+ SupportedCompressors []Compressor_Value `protobuf:"varint,6,rep,packed,name=supported_compressors,json=supportedCompressors,proto3,enum=build.bazel.remote.execution.v2.Compressor_Value" json:"supported_compressors,omitempty"`
+ // Compressors supported for inlined data in
+ // [BatchUpdateBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs]
+ // requests.
+ SupportedBatchUpdateCompressors []Compressor_Value `protobuf:"varint,7,rep,packed,name=supported_batch_update_compressors,json=supportedBatchUpdateCompressors,proto3,enum=build.bazel.remote.execution.v2.Compressor_Value" json:"supported_batch_update_compressors,omitempty"`
+}
+
+func (x *CacheCapabilities) Reset() {
+ *x = CacheCapabilities{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[41]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CacheCapabilities) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CacheCapabilities) ProtoMessage() {}
+
+func (x *CacheCapabilities) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[41]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CacheCapabilities.ProtoReflect.Descriptor instead.
+func (*CacheCapabilities) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{41}
+}
+
+func (x *CacheCapabilities) GetDigestFunctions() []DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunctions
+ }
+ return nil
+}
+
+func (x *CacheCapabilities) GetActionCacheUpdateCapabilities() *ActionCacheUpdateCapabilities {
+ if x != nil {
+ return x.ActionCacheUpdateCapabilities
+ }
+ return nil
+}
+
+func (x *CacheCapabilities) GetCachePriorityCapabilities() *PriorityCapabilities {
+ if x != nil {
+ return x.CachePriorityCapabilities
+ }
+ return nil
+}
+
+func (x *CacheCapabilities) GetMaxBatchTotalSizeBytes() int64 {
+ if x != nil {
+ return x.MaxBatchTotalSizeBytes
+ }
+ return 0
+}
+
+func (x *CacheCapabilities) GetSymlinkAbsolutePathStrategy() SymlinkAbsolutePathStrategy_Value {
+ if x != nil {
+ return x.SymlinkAbsolutePathStrategy
+ }
+ return SymlinkAbsolutePathStrategy_UNKNOWN
+}
+
+func (x *CacheCapabilities) GetSupportedCompressors() []Compressor_Value {
+ if x != nil {
+ return x.SupportedCompressors
+ }
+ return nil
+}
+
+func (x *CacheCapabilities) GetSupportedBatchUpdateCompressors() []Compressor_Value {
+ if x != nil {
+ return x.SupportedBatchUpdateCompressors
+ }
+ return nil
+}
+
+// Capabilities of the remote execution system.
+type ExecutionCapabilities struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Legacy field for indicating which digest function is supported by the
+ // remote execution system. It MUST be set to a value other than UNKNOWN.
+ // Implementations should consider the repeated digest_functions field
+ // first, falling back to this singular field if digest_functions is unset.
+ DigestFunction DigestFunction_Value `protobuf:"varint,1,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"`
+ // Whether remote execution is enabled for the particular server/instance.
+ ExecEnabled bool `protobuf:"varint,2,opt,name=exec_enabled,json=execEnabled,proto3" json:"exec_enabled,omitempty"`
+ // Supported execution priority range.
+ ExecutionPriorityCapabilities *PriorityCapabilities `protobuf:"bytes,3,opt,name=execution_priority_capabilities,json=executionPriorityCapabilities,proto3" json:"execution_priority_capabilities,omitempty"`
+ // Supported node properties.
+ SupportedNodeProperties []string `protobuf:"bytes,4,rep,name=supported_node_properties,json=supportedNodeProperties,proto3" json:"supported_node_properties,omitempty"`
+ // All the digest functions supported by the remote execution system.
+ // If this field is set, it MUST also contain digest_function.
+ //
+ // Even if the remote execution system announces support for multiple
+ // digest functions, individual execution requests may only reference
+ // CAS objects using a single digest function. For example, it is not
+ // permitted to execute actions having both MD5 and SHA-256 hashed
+ // files in their input root.
+ //
+ // The CAS objects referenced by action results generated by the
+ // remote execution system MUST use the same digest function as the
+ // one used to construct the action.
+ DigestFunctions []DigestFunction_Value `protobuf:"varint,5,rep,packed,name=digest_functions,json=digestFunctions,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_functions,omitempty"`
+}
+
+func (x *ExecutionCapabilities) Reset() {
+ *x = ExecutionCapabilities{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[42]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ExecutionCapabilities) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExecutionCapabilities) ProtoMessage() {}
+
+func (x *ExecutionCapabilities) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[42]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ExecutionCapabilities.ProtoReflect.Descriptor instead.
+func (*ExecutionCapabilities) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{42}
+}
+
+func (x *ExecutionCapabilities) GetDigestFunction() DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunction
+ }
+ return DigestFunction_UNKNOWN
+}
+
+func (x *ExecutionCapabilities) GetExecEnabled() bool {
+ if x != nil {
+ return x.ExecEnabled
+ }
+ return false
+}
+
+func (x *ExecutionCapabilities) GetExecutionPriorityCapabilities() *PriorityCapabilities {
+ if x != nil {
+ return x.ExecutionPriorityCapabilities
+ }
+ return nil
+}
+
+func (x *ExecutionCapabilities) GetSupportedNodeProperties() []string {
+ if x != nil {
+ return x.SupportedNodeProperties
+ }
+ return nil
+}
+
+func (x *ExecutionCapabilities) GetDigestFunctions() []DigestFunction_Value {
+ if x != nil {
+ return x.DigestFunctions
+ }
+ return nil
+}
+
+// Details for the tool used to call the API.
+type ToolDetails struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Name of the tool, e.g. bazel.
+ ToolName string `protobuf:"bytes,1,opt,name=tool_name,json=toolName,proto3" json:"tool_name,omitempty"`
+ // Version of the tool used for the request, e.g. 5.0.3.
+ ToolVersion string `protobuf:"bytes,2,opt,name=tool_version,json=toolVersion,proto3" json:"tool_version,omitempty"`
+}
+
+func (x *ToolDetails) Reset() {
+ *x = ToolDetails{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[43]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ToolDetails) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ToolDetails) ProtoMessage() {}
+
+func (x *ToolDetails) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[43]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ToolDetails.ProtoReflect.Descriptor instead.
+func (*ToolDetails) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{43}
+}
+
+func (x *ToolDetails) GetToolName() string {
+ if x != nil {
+ return x.ToolName
+ }
+ return ""
+}
+
+func (x *ToolDetails) GetToolVersion() string {
+ if x != nil {
+ return x.ToolVersion
+ }
+ return ""
+}
+
+// An optional Metadata to attach to any RPC request to tell the server about an
+// external context of the request. The server may use this for logging or other
+// purposes. To use it, the client attaches the header to the call using the
+// canonical proto serialization:
+//
+// * name: `build.bazel.remote.execution.v2.requestmetadata-bin`
+// * contents: the base64 encoded binary `RequestMetadata` message.
+// Note: the gRPC library serializes binary headers encoded in base64 by
+// default (https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests).
+// Therefore, if the gRPC library is used to pass/retrieve this
+// metadata, the user may ignore the base64 encoding and assume it is simply
+// serialized as a binary message.
+type RequestMetadata struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The details for the tool invoking the requests.
+ ToolDetails *ToolDetails `protobuf:"bytes,1,opt,name=tool_details,json=toolDetails,proto3" json:"tool_details,omitempty"`
+ // An identifier that ties multiple requests to the same action.
+ // For example, multiple requests to the CAS, Action Cache, and Execution
+ // API are used in order to compile foo.cc.
+ ActionId string `protobuf:"bytes,2,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"`
+ // An identifier that ties multiple actions together to a final result.
+ // For example, multiple actions are required to build and run foo_test.
+ ToolInvocationId string `protobuf:"bytes,3,opt,name=tool_invocation_id,json=toolInvocationId,proto3" json:"tool_invocation_id,omitempty"`
+ // An identifier to tie multiple tool invocations together. For example,
+ // runs of foo_test, bar_test and baz_test on a post-submit of a given patch.
+ CorrelatedInvocationsId string `protobuf:"bytes,4,opt,name=correlated_invocations_id,json=correlatedInvocationsId,proto3" json:"correlated_invocations_id,omitempty"`
+ // A brief description of the kind of action, for example, CppCompile or GoLink.
+ // There is no standard agreed set of values for this, and they are expected to vary between different client tools.
+ ActionMnemonic string `protobuf:"bytes,5,opt,name=action_mnemonic,json=actionMnemonic,proto3" json:"action_mnemonic,omitempty"`
+ // An identifier for the target which produced this action.
+ // No guarantees are made around how many actions may relate to a single target.
+ TargetId string `protobuf:"bytes,6,opt,name=target_id,json=targetId,proto3" json:"target_id,omitempty"`
+ // An identifier for the configuration in which the target was built,
+ // e.g. for differentiating building host tools or different target platforms.
+ // There is no expectation that this value will have any particular structure,
+ // or equality across invocations, though some client tools may offer these guarantees.
+ ConfigurationId string `protobuf:"bytes,7,opt,name=configuration_id,json=configurationId,proto3" json:"configuration_id,omitempty"`
+}
+
+func (x *RequestMetadata) Reset() {
+ *x = RequestMetadata{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[44]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RequestMetadata) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RequestMetadata) ProtoMessage() {}
+
+func (x *RequestMetadata) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[44]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RequestMetadata.ProtoReflect.Descriptor instead.
+func (*RequestMetadata) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{44}
+}
+
+func (x *RequestMetadata) GetToolDetails() *ToolDetails {
+ if x != nil {
+ return x.ToolDetails
+ }
+ return nil
+}
+
+func (x *RequestMetadata) GetActionId() string {
+ if x != nil {
+ return x.ActionId
+ }
+ return ""
+}
+
+func (x *RequestMetadata) GetToolInvocationId() string {
+ if x != nil {
+ return x.ToolInvocationId
+ }
+ return ""
+}
+
+func (x *RequestMetadata) GetCorrelatedInvocationsId() string {
+ if x != nil {
+ return x.CorrelatedInvocationsId
+ }
+ return ""
+}
+
+func (x *RequestMetadata) GetActionMnemonic() string {
+ if x != nil {
+ return x.ActionMnemonic
+ }
+ return ""
+}
+
+func (x *RequestMetadata) GetTargetId() string {
+ if x != nil {
+ return x.TargetId
+ }
+ return ""
+}
+
+func (x *RequestMetadata) GetConfigurationId() string {
+ if x != nil {
+ return x.ConfigurationId
+ }
+ return ""
+}
+
+// An `EnvironmentVariable` is one variable to set in the running program's
+// environment.
+type Command_EnvironmentVariable struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The variable name.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The variable value.
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *Command_EnvironmentVariable) Reset() {
+ *x = Command_EnvironmentVariable{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[45]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Command_EnvironmentVariable) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Command_EnvironmentVariable) ProtoMessage() {}
+
+func (x *Command_EnvironmentVariable) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[45]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Command_EnvironmentVariable.ProtoReflect.Descriptor instead.
+func (*Command_EnvironmentVariable) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{1, 0}
+}
+
+func (x *Command_EnvironmentVariable) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Command_EnvironmentVariable) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+
+// A single property for the environment. The server is responsible for
+// specifying the property `name`s that it accepts. If an unknown `name` is
+// provided in the requirements for an
+// [Action][build.bazel.remote.execution.v2.Action], the server SHOULD
+// reject the execution request. If permitted by the server, the same `name`
+// may occur multiple times.
+//
+// The server is also responsible for specifying the interpretation of
+// property `value`s. For instance, a property describing how much RAM must be
+// available may be interpreted as allowing a worker with 16GB to fulfill a
+// request for 8GB, while a property describing the OS environment on which
+// the action must be performed may require an exact match with the worker's
+// OS.
+//
+// The server MAY use the `value` of one or more properties to determine how
+// it sets up the execution environment, such as by making specific system
+// files available to the worker.
+//
+// Both names and values are typically case-sensitive. Note that the platform
+// is implicitly part of the action digest, so even tiny changes in the names
+// or values (like changing case) may result in different action cache
+// entries.
+type Platform_Property struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The property name.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // The property value.
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *Platform_Property) Reset() {
+ *x = Platform_Property{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[46]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Platform_Property) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Platform_Property) ProtoMessage() {}
+
+func (x *Platform_Property) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[46]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Platform_Property.ProtoReflect.Descriptor instead.
+func (*Platform_Property) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{2, 0}
+}
+
+func (x *Platform_Property) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Platform_Property) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+
+// A request corresponding to a single blob that the client wants to upload.
+type BatchUpdateBlobsRequest_Request struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The digest of the blob. This MUST be the digest of `data`. All
+ // digests MUST use the same digest function.
+ Digest *Digest `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"`
+ // The raw binary data.
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+ // The format of `data`. Must be `IDENTITY`/unspecified, or one of the
+ // compressors advertised by the
+ // [CacheCapabilities.supported_batch_compressors][build.bazel.remote.execution.v2.CacheCapabilities.supported_batch_compressors]
+ // field.
+ Compressor Compressor_Value `protobuf:"varint,3,opt,name=compressor,proto3,enum=build.bazel.remote.execution.v2.Compressor_Value" json:"compressor,omitempty"`
+}
+
+func (x *BatchUpdateBlobsRequest_Request) Reset() {
+ *x = BatchUpdateBlobsRequest_Request{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[48]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchUpdateBlobsRequest_Request) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchUpdateBlobsRequest_Request) ProtoMessage() {}
+
+func (x *BatchUpdateBlobsRequest_Request) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[48]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchUpdateBlobsRequest_Request.ProtoReflect.Descriptor instead.
+func (*BatchUpdateBlobsRequest_Request) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{28, 0}
+}
+
+func (x *BatchUpdateBlobsRequest_Request) GetDigest() *Digest {
+ if x != nil {
+ return x.Digest
+ }
+ return nil
+}
+
+func (x *BatchUpdateBlobsRequest_Request) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *BatchUpdateBlobsRequest_Request) GetCompressor() Compressor_Value {
+ if x != nil {
+ return x.Compressor
+ }
+ return Compressor_IDENTITY
+}
+
+// A response corresponding to a single blob that the client tried to upload.
+type BatchUpdateBlobsResponse_Response struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The blob digest to which this response corresponds.
+ Digest *Digest `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"`
+ // The result of attempting to upload that blob.
+ Status *status.Status `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
+}
+
+func (x *BatchUpdateBlobsResponse_Response) Reset() {
+ *x = BatchUpdateBlobsResponse_Response{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[49]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchUpdateBlobsResponse_Response) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchUpdateBlobsResponse_Response) ProtoMessage() {}
+
+func (x *BatchUpdateBlobsResponse_Response) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[49]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchUpdateBlobsResponse_Response.ProtoReflect.Descriptor instead.
+func (*BatchUpdateBlobsResponse_Response) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{29, 0}
+}
+
+func (x *BatchUpdateBlobsResponse_Response) GetDigest() *Digest {
+ if x != nil {
+ return x.Digest
+ }
+ return nil
+}
+
+func (x *BatchUpdateBlobsResponse_Response) GetStatus() *status.Status {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+
+// A response corresponding to a single blob that the client tried to download.
+type BatchReadBlobsResponse_Response struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The digest to which this response corresponds.
+ Digest *Digest `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"`
+ // The raw binary data.
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+ // The format the data is encoded in. MUST be `IDENTITY`/unspecified,
+ // or one of the acceptable compressors specified in the `BatchReadBlobsRequest`.
+ Compressor Compressor_Value `protobuf:"varint,4,opt,name=compressor,proto3,enum=build.bazel.remote.execution.v2.Compressor_Value" json:"compressor,omitempty"`
+ // The result of attempting to download that blob.
+ Status *status.Status `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"`
+}
+
+func (x *BatchReadBlobsResponse_Response) Reset() {
+ *x = BatchReadBlobsResponse_Response{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[50]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchReadBlobsResponse_Response) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchReadBlobsResponse_Response) ProtoMessage() {}
+
+func (x *BatchReadBlobsResponse_Response) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[50]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchReadBlobsResponse_Response.ProtoReflect.Descriptor instead.
+func (*BatchReadBlobsResponse_Response) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{31, 0}
+}
+
+func (x *BatchReadBlobsResponse_Response) GetDigest() *Digest {
+ if x != nil {
+ return x.Digest
+ }
+ return nil
+}
+
+func (x *BatchReadBlobsResponse_Response) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *BatchReadBlobsResponse_Response) GetCompressor() Compressor_Value {
+ if x != nil {
+ return x.Compressor
+ }
+ return Compressor_IDENTITY
+}
+
+func (x *BatchReadBlobsResponse_Response) GetStatus() *status.Status {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+
+// Supported range of priorities, including boundaries.
+type PriorityCapabilities_PriorityRange struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The minimum numeric value for this priority range, which represents the
+ // most urgent task or longest retained item.
+ MinPriority int32 `protobuf:"varint,1,opt,name=min_priority,json=minPriority,proto3" json:"min_priority,omitempty"`
+ // The maximum numeric value for this priority range, which represents the
+ // least urgent task or shortest retained item.
+ MaxPriority int32 `protobuf:"varint,2,opt,name=max_priority,json=maxPriority,proto3" json:"max_priority,omitempty"`
+}
+
+func (x *PriorityCapabilities_PriorityRange) Reset() {
+ *x = PriorityCapabilities_PriorityRange{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[51]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PriorityCapabilities_PriorityRange) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PriorityCapabilities_PriorityRange) ProtoMessage() {}
+
+func (x *PriorityCapabilities_PriorityRange) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[51]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PriorityCapabilities_PriorityRange.ProtoReflect.Descriptor instead.
+func (*PriorityCapabilities_PriorityRange) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP(), []int{38, 0}
+}
+
+func (x *PriorityCapabilities_PriorityRange) GetMinPriority() int32 {
+ if x != nil {
+ return x.MinPriority
+ }
+ return 0
+}
+
+func (x *PriorityCapabilities_PriorityRange) GetMaxPriority() int32 {
+ if x != nil {
+ return x.MaxPriority
+ }
+ return 0
+}
+
+var File_build_bazel_remote_execution_v2_remote_execution_proto protoreflect.FileDescriptor
+
+var file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = []byte{
+ 0x0a, 0x36, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76,
+ 0x32, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x1f, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x2f, 0x73, 0x65,
+ 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x70, 0x65,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61,
+ 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
+ 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70,
+ 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x22, 0xeb, 0x02, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a,
+ 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61,
+ 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0d,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a,
+ 0x11, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x52, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x44, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07,
+ 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x6f, 0x5f, 0x6e, 0x6f,
+ 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64,
+ 0x6f, 0x4e, 0x6f, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x61, 0x6c,
+ 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x12, 0x45, 0x0a,
+ 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x29, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74,
+ 0x66, 0x6f, 0x72, 0x6d, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09,
+ 0x22, 0xd2, 0x05, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09,
+ 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x71, 0x0a, 0x15, 0x65, 0x6e,
+ 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62,
+ 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56,
+ 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
+ 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a,
+ 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20,
+ 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46,
+ 0x69, 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64,
+ 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09,
+ 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65,
+ 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75,
+ 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f,
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x70, 0x6c,
+ 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50,
+ 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61,
+ 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67,
+ 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6e, 0x6f, 0x64,
+ 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x76, 0x0a, 0x17, 0x6f, 0x75, 0x74, 0x70,
+ 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74,
+ 0x6f, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x15, 0x6f, 0x75, 0x74, 0x70, 0x75,
+ 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x1a, 0x3f, 0x0a, 0x13, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56,
+ 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x22, 0x52, 0x0a, 0x15, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63,
+ 0x74, 0x6f, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x52,
+ 0x45, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x49, 0x52,
+ 0x45, 0x43, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x16, 0x0a,
+ 0x12, 0x54, 0x52, 0x45, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54,
+ 0x4f, 0x52, 0x59, 0x10, 0x02, 0x22, 0x94, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
+ 0x72, 0x6d, 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
+ 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x34, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc8, 0x02, 0x0a,
+ 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x05, 0x66, 0x69,
+ 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6c, 0x65,
+ 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x64,
+ 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x32, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65,
+ 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x48, 0x0a,
+ 0x08, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x73,
+ 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x38, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x50,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x22, 0xcc, 0x01, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x69, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+ 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x69, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05,
+ 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6d, 0x6f,
+ 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33,
+ 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x78, 0x4d, 0x6f, 0x64, 0x65,
+ 0x22, 0xea, 0x01, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e,
+ 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x45, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x64, 0x0a,
+ 0x0d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12,
+ 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67,
+ 0x65, 0x73, 0x74, 0x22, 0x99, 0x01, 0x0a, 0x0b, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x4e,
+ 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12,
+ 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+ 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22,
+ 0x3b, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73,
+ 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x1d, 0x0a,
+ 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xfd, 0x07, 0x0a,
+ 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65,
+ 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12,
+ 0x45, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
+ 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
+ 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x54, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x50, 0x0a, 0x16, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
+ 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+ 0x6d, 0x70, 0x52, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54,
+ 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x58, 0x0a, 0x1a, 0x77, 0x6f, 0x72, 0x6b,
+ 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
+ 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x18, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
+ 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+ 0x6d, 0x70, 0x12, 0x59, 0x0a, 0x1b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x74, 0x63,
+ 0x68, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+ 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
+ 0x61, 0x6d, 0x70, 0x52, 0x18, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53,
+ 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x61, 0x0a,
+ 0x1f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6d,
+ 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+ 0x6d, 0x70, 0x52, 0x1c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x6f,
+ 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x12, 0x56, 0x0a, 0x19, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
+ 0x17, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54,
+ 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x5e, 0x0a, 0x1d, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f,
+ 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+ 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1b, 0x65, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54,
+ 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x57, 0x0a, 0x1a, 0x76, 0x69, 0x72, 0x74,
+ 0x75, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
+ 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c,
+ 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x12, 0x5d, 0x0a, 0x1d, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f,
+ 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+ 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
+ 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x55, 0x70, 0x6c, 0x6f,
+ 0x61, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x12, 0x65, 0x0a, 0x21, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61,
+ 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65,
+ 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x55,
+ 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x54, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x43, 0x0a, 0x12, 0x61, 0x75, 0x78, 0x69, 0x6c,
+ 0x69, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x11, 0x61, 0x75, 0x78, 0x69, 0x6c,
+ 0x69, 0x61, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd3, 0x06, 0x0a,
+ 0x0c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4e, 0x0a,
+ 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65,
+ 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x64, 0x0a,
+ 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x79, 0x6d,
+ 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x02, 0x18, 0x01, 0x52,
+ 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79, 0x6d, 0x6c, 0x69,
+ 0x6e, 0x6b, 0x73, 0x12, 0x57, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x79,
+ 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f,
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x0e, 0x6f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x5f, 0x0a, 0x12,
+ 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69,
+ 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75,
+ 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70,
+ 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x6e, 0x0a,
+ 0x19, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x79, 0x5f, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b,
+ 0x42, 0x02, 0x18, 0x01, 0x52, 0x17, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65,
+ 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x1b, 0x0a,
+ 0x09, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
+ 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74,
+ 0x64, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x61, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09,
+ 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x77, 0x12, 0x4c, 0x0a, 0x0d, 0x73, 0x74, 0x64,
+ 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x73, 0x74, 0x64, 0x6f, 0x75,
+ 0x74, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x64, 0x65, 0x72,
+ 0x72, 0x5f, 0x72, 0x61, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x74, 0x64,
+ 0x65, 0x72, 0x72, 0x52, 0x61, 0x77, 0x12, 0x4c, 0x0a, 0x0d, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72,
+ 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e,
+ 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x44, 0x69,
+ 0x67, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x04, 0x08, 0x01,
+ 0x10, 0x02, 0x22, 0x88, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c,
+ 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61,
+ 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06,
+ 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69,
+ 0x73, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x8e, 0x01,
+ 0x0a, 0x04, 0x54, 0x72, 0x65, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79,
+ 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x46, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72,
+ 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x8a,
+ 0x02, 0x0a, 0x0f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x48, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x64,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69,
+ 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x74, 0x72, 0x65, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74,
+ 0x12, 0x36, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63,
+ 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x15, 0x69, 0x73, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c,
+ 0x6c, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74,
+ 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74,
+ 0x52, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x44,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x9b, 0x01, 0x0a, 0x0d,
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x0a,
+ 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74,
+ 0x68, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x58, 0x0a, 0x0f, 0x6e, 0x6f, 0x64,
+ 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x69, 0x65, 0x73, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x2d, 0x0a, 0x0f, 0x45, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1a, 0x0a, 0x08,
+ 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
+ 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x30, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1a,
+ 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+ 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0xe5, 0x03, 0x0a, 0x0e, 0x45,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a,
+ 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61,
+ 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65,
+ 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73,
+ 0x6b, 0x69, 0x70, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x4c,
+ 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18,
+ 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61,
+ 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x10,
+ 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x65, 0x0a, 0x14, 0x72, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x12, 0x72, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05,
+ 0x10, 0x06, 0x22, 0x71, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x3f, 0x0a,
+ 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e,
+ 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x25,
+ 0x0a, 0x0e, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x65, 0x61,
+ 0x64, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x8f, 0x03, 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x52,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72,
+ 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x12, 0x61, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x73,
+ 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c,
+ 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x67,
+ 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x61, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x22, 0x4f, 0x0a, 0x05, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
+ 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x01,
+ 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09,
+ 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x43,
+ 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x04, 0x22, 0x88, 0x03, 0x0a, 0x18, 0x45,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73,
+ 0x74, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69,
+ 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72,
+ 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10,
+ 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65,
+ 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61,
+ 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x74,
+ 0x64, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x75,
+ 0x0a, 0x1a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x18, 0x70, 0x61, 0x72,
+ 0x74, 0x69, 0x61, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2a, 0x0a, 0x14, 0x57, 0x61, 0x69, 0x74, 0x45, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x22, 0xe5, 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d,
+ 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d,
+ 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12,
+ 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74,
+ 0x64, 0x6f, 0x75, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73,
+ 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x6c,
+ 0x69, 0x6e, 0x65, 0x53, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x6c,
+ 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73,
+ 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67,
+ 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x03, 0x0a, 0x19, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61,
+ 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
+ 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0d,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x0d, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e,
+ 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x65,
+ 0x0a, 0x14, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x52, 0x12, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35,
+ 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32,
+ 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xea, 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69,
+ 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61,
+ 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e,
+ 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x64,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x44, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69,
+ 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x75, 0x0a, 0x18, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e,
+ 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59,
+ 0x0a, 0x14, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x64,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x12, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c,
+ 0x6f, 0x62, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x22, 0xb0, 0x03, 0x0a, 0x17, 0x42, 0x61,
+ 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63,
+ 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e,
+ 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x72, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42,
+ 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08,
+ 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e,
+ 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74,
+ 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb1, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x51, 0x0a, 0x0a, 0x63, 0x6f, 0x6d,
+ 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e,
+ 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x22, 0xf5, 0x01, 0x0a,
+ 0x18, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x09, 0x72, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42,
+ 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0x77, 0x0a, 0x08, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74,
+ 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x22, 0xc9, 0x02, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65,
+ 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23,
+ 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e,
+ 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x07, 0x64,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x68, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73,
+ 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73,
+ 0x73, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, 0x63, 0x63, 0x65, 0x70,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73,
+ 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0xd9, 0x02, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c,
+ 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x09, 0x72,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40,
+ 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32,
+ 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0xde, 0x01, 0x0a, 0x08,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
+ 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x51, 0x0a,
+ 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e,
+ 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9b, 0x02, 0x0a,
+ 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
+ 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x67,
+ 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x52, 0x0a, 0x72, 0x6f, 0x6f, 0x74, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1b,
+ 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70,
+ 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69,
+ 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x0f, 0x47,
+ 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c,
+ 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52,
+ 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f,
+ 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54,
+ 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62,
+ 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23,
+ 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e,
+ 0x61, 0x6d, 0x65, 0x22, 0xc2, 0x03, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61,
+ 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x12, 0x63, 0x61,
+ 0x63, 0x68, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x61,
+ 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x11, 0x63, 0x61, 0x63, 0x68,
+ 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x6d, 0x0a,
+ 0x16, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62,
+ 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e,
+ 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x15, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x16,
+ 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x6d, 0x76, 0x65,
+ 0x72, 0x2e, 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x52, 0x14, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63,
+ 0x61, 0x74, 0x65, 0x64, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42,
+ 0x0a, 0x0f, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6d,
+ 0x56, 0x65, 0x72, 0x52, 0x0d, 0x6c, 0x6f, 0x77, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x10, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x6d, 0x76, 0x65,
+ 0x72, 0x2e, 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x41, 0x70,
+ 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x8f, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x67,
+ 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x05, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
+ 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x08, 0x0a,
+ 0x04, 0x53, 0x48, 0x41, 0x31, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x44, 0x35, 0x10, 0x03,
+ 0x12, 0x07, 0x0a, 0x03, 0x56, 0x53, 0x4f, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41,
+ 0x33, 0x38, 0x34, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x10,
+ 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x55, 0x52, 0x4d, 0x55, 0x52, 0x33, 0x10, 0x07, 0x12, 0x0e,
+ 0x0a, 0x0a, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x54, 0x52, 0x45, 0x45, 0x10, 0x08, 0x12, 0x0a,
+ 0x0a, 0x06, 0x42, 0x4c, 0x41, 0x4b, 0x45, 0x33, 0x10, 0x09, 0x22, 0x46, 0x0a, 0x1d, 0x41, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43,
+ 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x75,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c,
+ 0x65, 0x64, 0x22, 0xd2, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43,
+ 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x0a, 0x70,
+ 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x43, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
+ 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52,
+ 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x1a, 0x55, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x61, 0x6e, 0x67,
+ 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74,
+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x6f,
+ 0x72, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x69, 0x6f,
+ 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x50,
+ 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x50, 0x0a, 0x1b, 0x53, 0x79, 0x6d, 0x6c, 0x69,
+ 0x6e, 0x6b, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x53, 0x74,
+ 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x31, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
+ 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a,
+ 0x44, 0x49, 0x53, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07,
+ 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x10, 0x02, 0x22, 0x46, 0x0a, 0x0a, 0x43, 0x6f, 0x6d,
+ 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x22, 0x38, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x10, 0x00, 0x12, 0x08,
+ 0x0a, 0x04, 0x5a, 0x53, 0x54, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x4c,
+ 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x52, 0x4f, 0x54, 0x4c, 0x49, 0x10,
+ 0x03, 0x22, 0xa4, 0x06, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62,
+ 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x64, 0x69, 0x67, 0x65, 0x73,
+ 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+ 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e,
+ 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74,
+ 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63,
+ 0x68, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x52, 0x1d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68,
+ 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x12, 0x75, 0x0a, 0x1b, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x72, 0x69,
+ 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72,
+ 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52,
+ 0x19, 0x63, 0x61, 0x63, 0x68, 0x65, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x61,
+ 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x1a, 0x6d, 0x61,
+ 0x78, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69,
+ 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16,
+ 0x6d, 0x61, 0x78, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a,
+ 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x1e, 0x73, 0x79, 0x6d, 0x6c, 0x69,
+ 0x6e, 0x6b, 0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68,
+ 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
+ 0x42, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74,
+ 0x65, 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x2e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x1b, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x62, 0x73, 0x6f,
+ 0x6c, 0x75, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79,
+ 0x12, 0x66, 0x0a, 0x15, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f,
+ 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32,
+ 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x14, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d,
+ 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x12, 0x7e, 0x0a, 0x22, 0x73, 0x75, 0x70, 0x70,
+ 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x18, 0x07,
+ 0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
+ 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d,
+ 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x22, 0xb7, 0x03, 0x0a, 0x15, 0x45, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69,
+ 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+ 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x45, 0x6e,
+ 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x7d, 0x0a, 0x1f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x61,
+ 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35,
+ 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32,
+ 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x1d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65,
+ 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
+ 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
+ 0x12, 0x60, 0x0a, 0x10, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69,
+ 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e,
+ 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67,
+ 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x52, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x22, 0x4d, 0x0a, 0x0b, 0x54, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
+ 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21,
+ 0x0a, 0x0c, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x6f, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x22, 0xda, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x0c, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65,
+ 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f,
+ 0x6f, 0x6c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x0b, 0x74, 0x6f, 0x6f, 0x6c, 0x44,
+ 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x76, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
+ 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f,
+ 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64,
+ 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x64, 0x12, 0x27, 0x0a,
+ 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6e,
+ 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
+ 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xb9,
+ 0x02, 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8e, 0x01, 0x0a,
+ 0x07, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f,
+ 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b,
+ 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e,
+ 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x30, 0x01, 0x12, 0x9a, 0x01,
+ 0x0a, 0x0d, 0x57, 0x61, 0x69, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a,
+ 0x22, 0x26, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6f, 0x70, 0x65, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2a, 0x7d, 0x3a, 0x77, 0x61, 0x69, 0x74, 0x45,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x32, 0xd6, 0x03, 0x0a, 0x0b, 0x41,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0xd7, 0x01, 0x0a, 0x0f, 0x47,
+ 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x37,
+ 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32,
+ 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x12, 0x54,
+ 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67,
+ 0x65, 0x73, 0x74, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x7d, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79,
+ 0x74, 0x65, 0x73, 0x7d, 0x12, 0xec, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x3a, 0x0d,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x54, 0x2f,
+ 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x67, 0x65,
+ 0x73, 0x74, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x7d, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74,
+ 0x65, 0x73, 0x7d, 0x32, 0x9b, 0x06, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67,
+ 0x65, 0x12, 0xbc, 0x01, 0x0a, 0x10, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e,
+ 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x38, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73,
+ 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x39, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x42, 0x6c,
+ 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4,
+ 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73,
+ 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x62,
+ 0x6c, 0x6f, 0x62, 0x73, 0x3a, 0x66, 0x69, 0x6e, 0x64, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67,
+ 0x12, 0xbc, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x38, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61,
+ 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x39, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f,
+ 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93,
+ 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74,
+ 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x62, 0x6c,
+ 0x6f, 0x62, 0x73, 0x3a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12,
+ 0xb4, 0x01, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f,
+ 0x62, 0x73, 0x12, 0x36, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c,
+ 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x75, 0x69,
+ 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e,
+ 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74,
+ 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26,
+ 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x3a, 0x62, 0x61, 0x74,
+ 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x12, 0xc8, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x72,
+ 0x65, 0x65, 0x12, 0x2f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x12, 0x50, 0x2f,
+ 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x72, 0x6f, 0x6f,
+ 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x7d, 0x2f, 0x7b,
+ 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65,
+ 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x7d, 0x3a, 0x67, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x30,
+ 0x01, 0x32, 0xbd, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
+ 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61,
+ 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x32, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76,
+ 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65,
+ 0x73, 0x42, 0xb4, 0x01, 0x0a, 0x1f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65,
+ 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x45, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x51, 0x67,
+ 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x62,
+ 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x73,
+ 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32,
+ 0x3b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0xa2, 0x02, 0x03, 0x52, 0x45, 0x58, 0xaa, 0x02, 0x1f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x42,
+ 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescOnce sync.Once
+ file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescData = file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc
+)
+
+func file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescGZIP() []byte {
+ file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescOnce.Do(func() {
+ file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescData = protoimpl.X.CompressGZIP(file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescData)
+ })
+ return file_build_bazel_remote_execution_v2_remote_execution_proto_rawDescData
+}
+
+var file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
+var file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes = make([]protoimpl.MessageInfo, 52)
+var file_build_bazel_remote_execution_v2_remote_execution_proto_goTypes = []interface{}{
+ (Command_OutputDirectoryFormat)(0), // 0: build.bazel.remote.execution.v2.Command.OutputDirectoryFormat
+ (ExecutionStage_Value)(0), // 1: build.bazel.remote.execution.v2.ExecutionStage.Value
+ (DigestFunction_Value)(0), // 2: build.bazel.remote.execution.v2.DigestFunction.Value
+ (SymlinkAbsolutePathStrategy_Value)(0), // 3: build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy.Value
+ (Compressor_Value)(0), // 4: build.bazel.remote.execution.v2.Compressor.Value
+ (*Action)(nil), // 5: build.bazel.remote.execution.v2.Action
+ (*Command)(nil), // 6: build.bazel.remote.execution.v2.Command
+ (*Platform)(nil), // 7: build.bazel.remote.execution.v2.Platform
+ (*Directory)(nil), // 8: build.bazel.remote.execution.v2.Directory
+ (*NodeProperty)(nil), // 9: build.bazel.remote.execution.v2.NodeProperty
+ (*NodeProperties)(nil), // 10: build.bazel.remote.execution.v2.NodeProperties
+ (*FileNode)(nil), // 11: build.bazel.remote.execution.v2.FileNode
+ (*DirectoryNode)(nil), // 12: build.bazel.remote.execution.v2.DirectoryNode
+ (*SymlinkNode)(nil), // 13: build.bazel.remote.execution.v2.SymlinkNode
+ (*Digest)(nil), // 14: build.bazel.remote.execution.v2.Digest
+ (*ExecutedActionMetadata)(nil), // 15: build.bazel.remote.execution.v2.ExecutedActionMetadata
+ (*ActionResult)(nil), // 16: build.bazel.remote.execution.v2.ActionResult
+ (*OutputFile)(nil), // 17: build.bazel.remote.execution.v2.OutputFile
+ (*Tree)(nil), // 18: build.bazel.remote.execution.v2.Tree
+ (*OutputDirectory)(nil), // 19: build.bazel.remote.execution.v2.OutputDirectory
+ (*OutputSymlink)(nil), // 20: build.bazel.remote.execution.v2.OutputSymlink
+ (*ExecutionPolicy)(nil), // 21: build.bazel.remote.execution.v2.ExecutionPolicy
+ (*ResultsCachePolicy)(nil), // 22: build.bazel.remote.execution.v2.ResultsCachePolicy
+ (*ExecuteRequest)(nil), // 23: build.bazel.remote.execution.v2.ExecuteRequest
+ (*LogFile)(nil), // 24: build.bazel.remote.execution.v2.LogFile
+ (*ExecuteResponse)(nil), // 25: build.bazel.remote.execution.v2.ExecuteResponse
+ (*ExecutionStage)(nil), // 26: build.bazel.remote.execution.v2.ExecutionStage
+ (*ExecuteOperationMetadata)(nil), // 27: build.bazel.remote.execution.v2.ExecuteOperationMetadata
+ (*WaitExecutionRequest)(nil), // 28: build.bazel.remote.execution.v2.WaitExecutionRequest
+ (*GetActionResultRequest)(nil), // 29: build.bazel.remote.execution.v2.GetActionResultRequest
+ (*UpdateActionResultRequest)(nil), // 30: build.bazel.remote.execution.v2.UpdateActionResultRequest
+ (*FindMissingBlobsRequest)(nil), // 31: build.bazel.remote.execution.v2.FindMissingBlobsRequest
+ (*FindMissingBlobsResponse)(nil), // 32: build.bazel.remote.execution.v2.FindMissingBlobsResponse
+ (*BatchUpdateBlobsRequest)(nil), // 33: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest
+ (*BatchUpdateBlobsResponse)(nil), // 34: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse
+ (*BatchReadBlobsRequest)(nil), // 35: build.bazel.remote.execution.v2.BatchReadBlobsRequest
+ (*BatchReadBlobsResponse)(nil), // 36: build.bazel.remote.execution.v2.BatchReadBlobsResponse
+ (*GetTreeRequest)(nil), // 37: build.bazel.remote.execution.v2.GetTreeRequest
+ (*GetTreeResponse)(nil), // 38: build.bazel.remote.execution.v2.GetTreeResponse
+ (*GetCapabilitiesRequest)(nil), // 39: build.bazel.remote.execution.v2.GetCapabilitiesRequest
+ (*ServerCapabilities)(nil), // 40: build.bazel.remote.execution.v2.ServerCapabilities
+ (*DigestFunction)(nil), // 41: build.bazel.remote.execution.v2.DigestFunction
+ (*ActionCacheUpdateCapabilities)(nil), // 42: build.bazel.remote.execution.v2.ActionCacheUpdateCapabilities
+ (*PriorityCapabilities)(nil), // 43: build.bazel.remote.execution.v2.PriorityCapabilities
+ (*SymlinkAbsolutePathStrategy)(nil), // 44: build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy
+ (*Compressor)(nil), // 45: build.bazel.remote.execution.v2.Compressor
+ (*CacheCapabilities)(nil), // 46: build.bazel.remote.execution.v2.CacheCapabilities
+ (*ExecutionCapabilities)(nil), // 47: build.bazel.remote.execution.v2.ExecutionCapabilities
+ (*ToolDetails)(nil), // 48: build.bazel.remote.execution.v2.ToolDetails
+ (*RequestMetadata)(nil), // 49: build.bazel.remote.execution.v2.RequestMetadata
+ (*Command_EnvironmentVariable)(nil), // 50: build.bazel.remote.execution.v2.Command.EnvironmentVariable
+ (*Platform_Property)(nil), // 51: build.bazel.remote.execution.v2.Platform.Property
+ nil, // 52: build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry
+ (*BatchUpdateBlobsRequest_Request)(nil), // 53: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request
+ (*BatchUpdateBlobsResponse_Response)(nil), // 54: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response
+ (*BatchReadBlobsResponse_Response)(nil), // 55: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response
+ (*PriorityCapabilities_PriorityRange)(nil), // 56: build.bazel.remote.execution.v2.PriorityCapabilities.PriorityRange
+ (*durationpb.Duration)(nil), // 57: google.protobuf.Duration
+ (*timestamppb.Timestamp)(nil), // 58: google.protobuf.Timestamp
+ (*wrapperspb.UInt32Value)(nil), // 59: google.protobuf.UInt32Value
+ (*anypb.Any)(nil), // 60: google.protobuf.Any
+ (*status.Status)(nil), // 61: google.rpc.Status
+ (*semver.SemVer)(nil), // 62: build.bazel.semver.SemVer
+ (*longrunning.Operation)(nil), // 63: google.longrunning.Operation
+}
+var file_build_bazel_remote_execution_v2_remote_execution_proto_depIdxs = []int32{
+ 14, // 0: build.bazel.remote.execution.v2.Action.command_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 14, // 1: build.bazel.remote.execution.v2.Action.input_root_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 57, // 2: build.bazel.remote.execution.v2.Action.timeout:type_name -> google.protobuf.Duration
+ 7, // 3: build.bazel.remote.execution.v2.Action.platform:type_name -> build.bazel.remote.execution.v2.Platform
+ 50, // 4: build.bazel.remote.execution.v2.Command.environment_variables:type_name -> build.bazel.remote.execution.v2.Command.EnvironmentVariable
+ 7, // 5: build.bazel.remote.execution.v2.Command.platform:type_name -> build.bazel.remote.execution.v2.Platform
+ 0, // 6: build.bazel.remote.execution.v2.Command.output_directory_format:type_name -> build.bazel.remote.execution.v2.Command.OutputDirectoryFormat
+ 51, // 7: build.bazel.remote.execution.v2.Platform.properties:type_name -> build.bazel.remote.execution.v2.Platform.Property
+ 11, // 8: build.bazel.remote.execution.v2.Directory.files:type_name -> build.bazel.remote.execution.v2.FileNode
+ 12, // 9: build.bazel.remote.execution.v2.Directory.directories:type_name -> build.bazel.remote.execution.v2.DirectoryNode
+ 13, // 10: build.bazel.remote.execution.v2.Directory.symlinks:type_name -> build.bazel.remote.execution.v2.SymlinkNode
+ 10, // 11: build.bazel.remote.execution.v2.Directory.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties
+ 9, // 12: build.bazel.remote.execution.v2.NodeProperties.properties:type_name -> build.bazel.remote.execution.v2.NodeProperty
+ 58, // 13: build.bazel.remote.execution.v2.NodeProperties.mtime:type_name -> google.protobuf.Timestamp
+ 59, // 14: build.bazel.remote.execution.v2.NodeProperties.unix_mode:type_name -> google.protobuf.UInt32Value
+ 14, // 15: build.bazel.remote.execution.v2.FileNode.digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 10, // 16: build.bazel.remote.execution.v2.FileNode.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties
+ 14, // 17: build.bazel.remote.execution.v2.DirectoryNode.digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 10, // 18: build.bazel.remote.execution.v2.SymlinkNode.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties
+ 58, // 19: build.bazel.remote.execution.v2.ExecutedActionMetadata.queued_timestamp:type_name -> google.protobuf.Timestamp
+ 58, // 20: build.bazel.remote.execution.v2.ExecutedActionMetadata.worker_start_timestamp:type_name -> google.protobuf.Timestamp
+ 58, // 21: build.bazel.remote.execution.v2.ExecutedActionMetadata.worker_completed_timestamp:type_name -> google.protobuf.Timestamp
+ 58, // 22: build.bazel.remote.execution.v2.ExecutedActionMetadata.input_fetch_start_timestamp:type_name -> google.protobuf.Timestamp
+ 58, // 23: build.bazel.remote.execution.v2.ExecutedActionMetadata.input_fetch_completed_timestamp:type_name -> google.protobuf.Timestamp
+ 58, // 24: build.bazel.remote.execution.v2.ExecutedActionMetadata.execution_start_timestamp:type_name -> google.protobuf.Timestamp
+ 58, // 25: build.bazel.remote.execution.v2.ExecutedActionMetadata.execution_completed_timestamp:type_name -> google.protobuf.Timestamp
+ 57, // 26: build.bazel.remote.execution.v2.ExecutedActionMetadata.virtual_execution_duration:type_name -> google.protobuf.Duration
+ 58, // 27: build.bazel.remote.execution.v2.ExecutedActionMetadata.output_upload_start_timestamp:type_name -> google.protobuf.Timestamp
+ 58, // 28: build.bazel.remote.execution.v2.ExecutedActionMetadata.output_upload_completed_timestamp:type_name -> google.protobuf.Timestamp
+ 60, // 29: build.bazel.remote.execution.v2.ExecutedActionMetadata.auxiliary_metadata:type_name -> google.protobuf.Any
+ 17, // 30: build.bazel.remote.execution.v2.ActionResult.output_files:type_name -> build.bazel.remote.execution.v2.OutputFile
+ 20, // 31: build.bazel.remote.execution.v2.ActionResult.output_file_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink
+ 20, // 32: build.bazel.remote.execution.v2.ActionResult.output_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink
+ 19, // 33: build.bazel.remote.execution.v2.ActionResult.output_directories:type_name -> build.bazel.remote.execution.v2.OutputDirectory
+ 20, // 34: build.bazel.remote.execution.v2.ActionResult.output_directory_symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink
+ 14, // 35: build.bazel.remote.execution.v2.ActionResult.stdout_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 14, // 36: build.bazel.remote.execution.v2.ActionResult.stderr_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 15, // 37: build.bazel.remote.execution.v2.ActionResult.execution_metadata:type_name -> build.bazel.remote.execution.v2.ExecutedActionMetadata
+ 14, // 38: build.bazel.remote.execution.v2.OutputFile.digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 10, // 39: build.bazel.remote.execution.v2.OutputFile.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties
+ 8, // 40: build.bazel.remote.execution.v2.Tree.root:type_name -> build.bazel.remote.execution.v2.Directory
+ 8, // 41: build.bazel.remote.execution.v2.Tree.children:type_name -> build.bazel.remote.execution.v2.Directory
+ 14, // 42: build.bazel.remote.execution.v2.OutputDirectory.tree_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 14, // 43: build.bazel.remote.execution.v2.OutputDirectory.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 10, // 44: build.bazel.remote.execution.v2.OutputSymlink.node_properties:type_name -> build.bazel.remote.execution.v2.NodeProperties
+ 14, // 45: build.bazel.remote.execution.v2.ExecuteRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 21, // 46: build.bazel.remote.execution.v2.ExecuteRequest.execution_policy:type_name -> build.bazel.remote.execution.v2.ExecutionPolicy
+ 22, // 47: build.bazel.remote.execution.v2.ExecuteRequest.results_cache_policy:type_name -> build.bazel.remote.execution.v2.ResultsCachePolicy
+ 2, // 48: build.bazel.remote.execution.v2.ExecuteRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 14, // 49: build.bazel.remote.execution.v2.LogFile.digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 16, // 50: build.bazel.remote.execution.v2.ExecuteResponse.result:type_name -> build.bazel.remote.execution.v2.ActionResult
+ 61, // 51: build.bazel.remote.execution.v2.ExecuteResponse.status:type_name -> google.rpc.Status
+ 52, // 52: build.bazel.remote.execution.v2.ExecuteResponse.server_logs:type_name -> build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry
+ 1, // 53: build.bazel.remote.execution.v2.ExecuteOperationMetadata.stage:type_name -> build.bazel.remote.execution.v2.ExecutionStage.Value
+ 14, // 54: build.bazel.remote.execution.v2.ExecuteOperationMetadata.action_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 15, // 55: build.bazel.remote.execution.v2.ExecuteOperationMetadata.partial_execution_metadata:type_name -> build.bazel.remote.execution.v2.ExecutedActionMetadata
+ 14, // 56: build.bazel.remote.execution.v2.GetActionResultRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 2, // 57: build.bazel.remote.execution.v2.GetActionResultRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 14, // 58: build.bazel.remote.execution.v2.UpdateActionResultRequest.action_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 16, // 59: build.bazel.remote.execution.v2.UpdateActionResultRequest.action_result:type_name -> build.bazel.remote.execution.v2.ActionResult
+ 22, // 60: build.bazel.remote.execution.v2.UpdateActionResultRequest.results_cache_policy:type_name -> build.bazel.remote.execution.v2.ResultsCachePolicy
+ 2, // 61: build.bazel.remote.execution.v2.UpdateActionResultRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 14, // 62: build.bazel.remote.execution.v2.FindMissingBlobsRequest.blob_digests:type_name -> build.bazel.remote.execution.v2.Digest
+ 2, // 63: build.bazel.remote.execution.v2.FindMissingBlobsRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 14, // 64: build.bazel.remote.execution.v2.FindMissingBlobsResponse.missing_blob_digests:type_name -> build.bazel.remote.execution.v2.Digest
+ 53, // 65: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.requests:type_name -> build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request
+ 2, // 66: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 54, // 67: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.responses:type_name -> build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response
+ 14, // 68: build.bazel.remote.execution.v2.BatchReadBlobsRequest.digests:type_name -> build.bazel.remote.execution.v2.Digest
+ 4, // 69: build.bazel.remote.execution.v2.BatchReadBlobsRequest.acceptable_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value
+ 2, // 70: build.bazel.remote.execution.v2.BatchReadBlobsRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 55, // 71: build.bazel.remote.execution.v2.BatchReadBlobsResponse.responses:type_name -> build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response
+ 14, // 72: build.bazel.remote.execution.v2.GetTreeRequest.root_digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 2, // 73: build.bazel.remote.execution.v2.GetTreeRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 8, // 74: build.bazel.remote.execution.v2.GetTreeResponse.directories:type_name -> build.bazel.remote.execution.v2.Directory
+ 46, // 75: build.bazel.remote.execution.v2.ServerCapabilities.cache_capabilities:type_name -> build.bazel.remote.execution.v2.CacheCapabilities
+ 47, // 76: build.bazel.remote.execution.v2.ServerCapabilities.execution_capabilities:type_name -> build.bazel.remote.execution.v2.ExecutionCapabilities
+ 62, // 77: build.bazel.remote.execution.v2.ServerCapabilities.deprecated_api_version:type_name -> build.bazel.semver.SemVer
+ 62, // 78: build.bazel.remote.execution.v2.ServerCapabilities.low_api_version:type_name -> build.bazel.semver.SemVer
+ 62, // 79: build.bazel.remote.execution.v2.ServerCapabilities.high_api_version:type_name -> build.bazel.semver.SemVer
+ 56, // 80: build.bazel.remote.execution.v2.PriorityCapabilities.priorities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities.PriorityRange
+ 2, // 81: build.bazel.remote.execution.v2.CacheCapabilities.digest_functions:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 42, // 82: build.bazel.remote.execution.v2.CacheCapabilities.action_cache_update_capabilities:type_name -> build.bazel.remote.execution.v2.ActionCacheUpdateCapabilities
+ 43, // 83: build.bazel.remote.execution.v2.CacheCapabilities.cache_priority_capabilities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities
+ 3, // 84: build.bazel.remote.execution.v2.CacheCapabilities.symlink_absolute_path_strategy:type_name -> build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy.Value
+ 4, // 85: build.bazel.remote.execution.v2.CacheCapabilities.supported_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value
+ 4, // 86: build.bazel.remote.execution.v2.CacheCapabilities.supported_batch_update_compressors:type_name -> build.bazel.remote.execution.v2.Compressor.Value
+ 2, // 87: build.bazel.remote.execution.v2.ExecutionCapabilities.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 43, // 88: build.bazel.remote.execution.v2.ExecutionCapabilities.execution_priority_capabilities:type_name -> build.bazel.remote.execution.v2.PriorityCapabilities
+ 2, // 89: build.bazel.remote.execution.v2.ExecutionCapabilities.digest_functions:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value
+ 48, // 90: build.bazel.remote.execution.v2.RequestMetadata.tool_details:type_name -> build.bazel.remote.execution.v2.ToolDetails
+ 24, // 91: build.bazel.remote.execution.v2.ExecuteResponse.ServerLogsEntry.value:type_name -> build.bazel.remote.execution.v2.LogFile
+ 14, // 92: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request.digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 4, // 93: build.bazel.remote.execution.v2.BatchUpdateBlobsRequest.Request.compressor:type_name -> build.bazel.remote.execution.v2.Compressor.Value
+ 14, // 94: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response.digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 61, // 95: build.bazel.remote.execution.v2.BatchUpdateBlobsResponse.Response.status:type_name -> google.rpc.Status
+ 14, // 96: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.digest:type_name -> build.bazel.remote.execution.v2.Digest
+ 4, // 97: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.compressor:type_name -> build.bazel.remote.execution.v2.Compressor.Value
+ 61, // 98: build.bazel.remote.execution.v2.BatchReadBlobsResponse.Response.status:type_name -> google.rpc.Status
+ 23, // 99: build.bazel.remote.execution.v2.Execution.Execute:input_type -> build.bazel.remote.execution.v2.ExecuteRequest
+ 28, // 100: build.bazel.remote.execution.v2.Execution.WaitExecution:input_type -> build.bazel.remote.execution.v2.WaitExecutionRequest
+ 29, // 101: build.bazel.remote.execution.v2.ActionCache.GetActionResult:input_type -> build.bazel.remote.execution.v2.GetActionResultRequest
+ 30, // 102: build.bazel.remote.execution.v2.ActionCache.UpdateActionResult:input_type -> build.bazel.remote.execution.v2.UpdateActionResultRequest
+ 31, // 103: build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs:input_type -> build.bazel.remote.execution.v2.FindMissingBlobsRequest
+ 33, // 104: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs:input_type -> build.bazel.remote.execution.v2.BatchUpdateBlobsRequest
+ 35, // 105: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs:input_type -> build.bazel.remote.execution.v2.BatchReadBlobsRequest
+ 37, // 106: build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree:input_type -> build.bazel.remote.execution.v2.GetTreeRequest
+ 39, // 107: build.bazel.remote.execution.v2.Capabilities.GetCapabilities:input_type -> build.bazel.remote.execution.v2.GetCapabilitiesRequest
+ 63, // 108: build.bazel.remote.execution.v2.Execution.Execute:output_type -> google.longrunning.Operation
+ 63, // 109: build.bazel.remote.execution.v2.Execution.WaitExecution:output_type -> google.longrunning.Operation
+ 16, // 110: build.bazel.remote.execution.v2.ActionCache.GetActionResult:output_type -> build.bazel.remote.execution.v2.ActionResult
+ 16, // 111: build.bazel.remote.execution.v2.ActionCache.UpdateActionResult:output_type -> build.bazel.remote.execution.v2.ActionResult
+ 32, // 112: build.bazel.remote.execution.v2.ContentAddressableStorage.FindMissingBlobs:output_type -> build.bazel.remote.execution.v2.FindMissingBlobsResponse
+ 34, // 113: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs:output_type -> build.bazel.remote.execution.v2.BatchUpdateBlobsResponse
+ 36, // 114: build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs:output_type -> build.bazel.remote.execution.v2.BatchReadBlobsResponse
+ 38, // 115: build.bazel.remote.execution.v2.ContentAddressableStorage.GetTree:output_type -> build.bazel.remote.execution.v2.GetTreeResponse
+ 40, // 116: build.bazel.remote.execution.v2.Capabilities.GetCapabilities:output_type -> build.bazel.remote.execution.v2.ServerCapabilities
+ 108, // [108:117] is the sub-list for method output_type
+ 99, // [99:108] is the sub-list for method input_type
+ 99, // [99:99] is the sub-list for extension type_name
+ 99, // [99:99] is the sub-list for extension extendee
+ 0, // [0:99] is the sub-list for field type_name
+}
+
+func init() { file_build_bazel_remote_execution_v2_remote_execution_proto_init() }
+func file_build_bazel_remote_execution_v2_remote_execution_proto_init() {
+ if File_build_bazel_remote_execution_v2_remote_execution_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Action); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Command); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Platform); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Directory); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NodeProperty); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NodeProperties); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FileNode); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DirectoryNode); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SymlinkNode); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Digest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ExecutedActionMetadata); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ActionResult); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OutputFile); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Tree); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OutputDirectory); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OutputSymlink); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ExecutionPolicy); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ResultsCachePolicy); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ExecuteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LogFile); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ExecuteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ExecutionStage); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ExecuteOperationMetadata); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*WaitExecutionRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetActionResultRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdateActionResultRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FindMissingBlobsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*FindMissingBlobsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchUpdateBlobsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchUpdateBlobsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchReadBlobsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchReadBlobsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetTreeRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetTreeResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetCapabilitiesRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ServerCapabilities); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DigestFunction); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ActionCacheUpdateCapabilities); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PriorityCapabilities); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SymlinkAbsolutePathStrategy); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Compressor); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CacheCapabilities); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ExecutionCapabilities); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ToolDetails); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RequestMetadata); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Command_EnvironmentVariable); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Platform_Property); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchUpdateBlobsRequest_Request); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchUpdateBlobsResponse_Response); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchReadBlobsResponse_Response); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PriorityCapabilities_PriorityRange); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc,
+ NumEnums: 5,
+ NumMessages: 52,
+ NumExtensions: 0,
+ NumServices: 4,
+ },
+ GoTypes: file_build_bazel_remote_execution_v2_remote_execution_proto_goTypes,
+ DependencyIndexes: file_build_bazel_remote_execution_v2_remote_execution_proto_depIdxs,
+ EnumInfos: file_build_bazel_remote_execution_v2_remote_execution_proto_enumTypes,
+ MessageInfos: file_build_bazel_remote_execution_v2_remote_execution_proto_msgTypes,
+ }.Build()
+ File_build_bazel_remote_execution_v2_remote_execution_proto = out.File
+ file_build_bazel_remote_execution_v2_remote_execution_proto_rawDesc = nil
+ file_build_bazel_remote_execution_v2_remote_execution_proto_goTypes = nil
+ file_build_bazel_remote_execution_v2_remote_execution_proto_depIdxs = nil
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ExecutionClient is the client API for Execution service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ExecutionClient interface {
+ // Execute an action remotely.
+ //
+ // In order to execute an action, the client must first upload all of the
+ // inputs, the
+ // [Command][build.bazel.remote.execution.v2.Command] to run, and the
+ // [Action][build.bazel.remote.execution.v2.Action] into the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ // It then calls `Execute` with an `action_digest` referring to them. The
+ // server will run the action and eventually return the result.
+ //
+ // The input `Action`'s fields MUST meet the various canonicalization
+ // requirements specified in the documentation for their types so that it has
+ // the same digest as other logically equivalent `Action`s. The server MAY
+ // enforce the requirements and return errors if a non-canonical input is
+ // received. It MAY also proceed without verifying some or all of the
+ // requirements, such as for performance reasons. If the server does not
+ // verify the requirement, then it will treat the `Action` as distinct from
+ // another logically equivalent action if they hash differently.
+ //
+ // Returns a stream of
+ // [google.longrunning.Operation][google.longrunning.Operation] messages
+ // describing the resulting execution, with eventual `response`
+ // [ExecuteResponse][build.bazel.remote.execution.v2.ExecuteResponse]. The
+ // `metadata` on the operation is of type
+ // [ExecuteOperationMetadata][build.bazel.remote.execution.v2.ExecuteOperationMetadata].
+ //
+ // If the client remains connected after the first response is returned after
+ // the server, then updates are streamed as if the client had called
+ // [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution]
+ // until the execution completes or the request reaches an error. The
+ // operation can also be queried using [Operations
+ // API][google.longrunning.Operations.GetOperation].
+ //
+ // The server NEED NOT implement other methods or functionality of the
+ // Operations API.
+ //
+ // Errors discovered during creation of the `Operation` will be reported
+ // as gRPC Status errors, while errors that occurred while running the
+ // action will be reported in the `status` field of the `ExecuteResponse`. The
+ // server MUST NOT set the `error` field of the `Operation` proto.
+ // The possible errors include:
+ //
+ // - `INVALID_ARGUMENT`: One or more arguments are invalid.
+ // - `FAILED_PRECONDITION`: One or more errors occurred in setting up the
+ // action requested, such as a missing input or command or no worker being
+ // available. The client may be able to fix the errors and retry.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run
+ // the action.
+ // - `UNAVAILABLE`: Due to a transient condition, such as all workers being
+ // occupied (and the server does not support a queue), the action could not
+ // be started. The client should retry.
+ // - `INTERNAL`: An internal error occurred in the execution engine or the
+ // worker.
+ // - `DEADLINE_EXCEEDED`: The execution timed out.
+ // - `CANCELLED`: The operation was cancelled by the client. This status is
+ // only possible if the server implements the Operations API CancelOperation
+ // method, and it was called for the current execution.
+ //
+ // In the case of a missing input or command, the server SHOULD additionally
+ // send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail
+ // where, for each requested blob not present in the CAS, there is a
+ // `Violation` with a `type` of `MISSING` and a `subject` of
+ // `"blobs/{digest_function/}{hash}/{size}"` indicating the digest of the
+ // missing blob. The `subject` is formatted the same way as the
+ // `resource_name` provided to
+ // [ByteStream.Read][google.bytestream.ByteStream.Read], with the leading
+ // instance name omitted. `digest_function` MUST thus be omitted if its value
+ // is one of MD5, MURMUR3, SHA1, SHA256, SHA384, SHA512, or VSO.
+ //
+ // The server does not need to guarantee that a call to this method leads to
+ // at most one execution of the action. The server MAY execute the action
+ // multiple times, potentially in parallel. These redundant executions MAY
+ // continue to run, even if the operation is completed.
+ Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (Execution_ExecuteClient, error)
+ // Wait for an execution operation to complete. When the client initially
+ // makes the request, the server immediately responds with the current status
+ // of the execution. The server will leave the request stream open until the
+ // operation completes, and then respond with the completed operation. The
+ // server MAY choose to stream additional updates as execution progresses,
+ // such as to provide an update as to the state of the execution.
+ //
+ // In addition to the cases describe for Execute, the WaitExecution method
+ // may fail as follows:
+ //
+ // - `NOT_FOUND`: The operation no longer exists due to any of a transient
+ // condition, an unknown operation name, or if the server implements the
+ // Operations API DeleteOperation method and it was called for the current
+ // execution. The client should call `Execute` to retry.
+ WaitExecution(ctx context.Context, in *WaitExecutionRequest, opts ...grpc.CallOption) (Execution_WaitExecutionClient, error)
+}
+
+type executionClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewExecutionClient(cc grpc.ClientConnInterface) ExecutionClient {
+ return &executionClient{cc}
+}
+
+func (c *executionClient) Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (Execution_ExecuteClient, error) {
+ stream, err := c.cc.NewStream(ctx, &_Execution_serviceDesc.Streams[0], "/build.bazel.remote.execution.v2.Execution/Execute", opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &executionExecuteClient{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type Execution_ExecuteClient interface {
+ Recv() (*longrunning.Operation, error)
+ grpc.ClientStream
+}
+
+type executionExecuteClient struct {
+ grpc.ClientStream
+}
+
+func (x *executionExecuteClient) Recv() (*longrunning.Operation, error) {
+ m := new(longrunning.Operation)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+func (c *executionClient) WaitExecution(ctx context.Context, in *WaitExecutionRequest, opts ...grpc.CallOption) (Execution_WaitExecutionClient, error) {
+ stream, err := c.cc.NewStream(ctx, &_Execution_serviceDesc.Streams[1], "/build.bazel.remote.execution.v2.Execution/WaitExecution", opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &executionWaitExecutionClient{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type Execution_WaitExecutionClient interface {
+ Recv() (*longrunning.Operation, error)
+ grpc.ClientStream
+}
+
+type executionWaitExecutionClient struct {
+ grpc.ClientStream
+}
+
+func (x *executionWaitExecutionClient) Recv() (*longrunning.Operation, error) {
+ m := new(longrunning.Operation)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+// ExecutionServer is the server API for Execution service.
+type ExecutionServer interface {
+ // Execute an action remotely.
+ //
+ // In order to execute an action, the client must first upload all of the
+ // inputs, the
+ // [Command][build.bazel.remote.execution.v2.Command] to run, and the
+ // [Action][build.bazel.remote.execution.v2.Action] into the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
+ // It then calls `Execute` with an `action_digest` referring to them. The
+ // server will run the action and eventually return the result.
+ //
+ // The input `Action`'s fields MUST meet the various canonicalization
+ // requirements specified in the documentation for their types so that it has
+ // the same digest as other logically equivalent `Action`s. The server MAY
+ // enforce the requirements and return errors if a non-canonical input is
+ // received. It MAY also proceed without verifying some or all of the
+ // requirements, such as for performance reasons. If the server does not
+ // verify the requirement, then it will treat the `Action` as distinct from
+ // another logically equivalent action if they hash differently.
+ //
+ // Returns a stream of
+ // [google.longrunning.Operation][google.longrunning.Operation] messages
+ // describing the resulting execution, with eventual `response`
+ // [ExecuteResponse][build.bazel.remote.execution.v2.ExecuteResponse]. The
+ // `metadata` on the operation is of type
+ // [ExecuteOperationMetadata][build.bazel.remote.execution.v2.ExecuteOperationMetadata].
+ //
+ // If the client remains connected after the first response is returned after
+ // the server, then updates are streamed as if the client had called
+ // [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution]
+ // until the execution completes or the request reaches an error. The
+ // operation can also be queried using [Operations
+ // API][google.longrunning.Operations.GetOperation].
+ //
+ // The server NEED NOT implement other methods or functionality of the
+ // Operations API.
+ //
+ // Errors discovered during creation of the `Operation` will be reported
+ // as gRPC Status errors, while errors that occurred while running the
+ // action will be reported in the `status` field of the `ExecuteResponse`. The
+ // server MUST NOT set the `error` field of the `Operation` proto.
+ // The possible errors include:
+ //
+ // - `INVALID_ARGUMENT`: One or more arguments are invalid.
+ // - `FAILED_PRECONDITION`: One or more errors occurred in setting up the
+ // action requested, such as a missing input or command or no worker being
+ // available. The client may be able to fix the errors and retry.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run
+ // the action.
+ // - `UNAVAILABLE`: Due to a transient condition, such as all workers being
+ // occupied (and the server does not support a queue), the action could not
+ // be started. The client should retry.
+ // - `INTERNAL`: An internal error occurred in the execution engine or the
+ // worker.
+ // - `DEADLINE_EXCEEDED`: The execution timed out.
+ // - `CANCELLED`: The operation was cancelled by the client. This status is
+ // only possible if the server implements the Operations API CancelOperation
+ // method, and it was called for the current execution.
+ //
+ // In the case of a missing input or command, the server SHOULD additionally
+ // send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail
+ // where, for each requested blob not present in the CAS, there is a
+ // `Violation` with a `type` of `MISSING` and a `subject` of
+ // `"blobs/{digest_function/}{hash}/{size}"` indicating the digest of the
+ // missing blob. The `subject` is formatted the same way as the
+ // `resource_name` provided to
+ // [ByteStream.Read][google.bytestream.ByteStream.Read], with the leading
+ // instance name omitted. `digest_function` MUST thus be omitted if its value
+ // is one of MD5, MURMUR3, SHA1, SHA256, SHA384, SHA512, or VSO.
+ //
+ // The server does not need to guarantee that a call to this method leads to
+ // at most one execution of the action. The server MAY execute the action
+ // multiple times, potentially in parallel. These redundant executions MAY
+ // continue to run, even if the operation is completed.
+ Execute(*ExecuteRequest, Execution_ExecuteServer) error
+ // Wait for an execution operation to complete. When the client initially
+ // makes the request, the server immediately responds with the current status
+ // of the execution. The server will leave the request stream open until the
+ // operation completes, and then respond with the completed operation. The
+ // server MAY choose to stream additional updates as execution progresses,
+ // such as to provide an update as to the state of the execution.
+ //
+ // In addition to the cases describe for Execute, the WaitExecution method
+ // may fail as follows:
+ //
+ // - `NOT_FOUND`: The operation no longer exists due to any of a transient
+ // condition, an unknown operation name, or if the server implements the
+ // Operations API DeleteOperation method and it was called for the current
+ // execution. The client should call `Execute` to retry.
+ WaitExecution(*WaitExecutionRequest, Execution_WaitExecutionServer) error
+}
+
+// UnimplementedExecutionServer can be embedded to have forward compatible implementations.
+type UnimplementedExecutionServer struct {
+}
+
+func (*UnimplementedExecutionServer) Execute(*ExecuteRequest, Execution_ExecuteServer) error {
+ return status1.Errorf(codes.Unimplemented, "method Execute not implemented")
+}
+func (*UnimplementedExecutionServer) WaitExecution(*WaitExecutionRequest, Execution_WaitExecutionServer) error {
+ return status1.Errorf(codes.Unimplemented, "method WaitExecution not implemented")
+}
+
+func RegisterExecutionServer(s *grpc.Server, srv ExecutionServer) {
+ s.RegisterService(&_Execution_serviceDesc, srv)
+}
+
+func _Execution_Execute_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(ExecuteRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(ExecutionServer).Execute(m, &executionExecuteServer{stream})
+}
+
+type Execution_ExecuteServer interface {
+ Send(*longrunning.Operation) error
+ grpc.ServerStream
+}
+
+type executionExecuteServer struct {
+ grpc.ServerStream
+}
+
+func (x *executionExecuteServer) Send(m *longrunning.Operation) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func _Execution_WaitExecution_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(WaitExecutionRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(ExecutionServer).WaitExecution(m, &executionWaitExecutionServer{stream})
+}
+
+type Execution_WaitExecutionServer interface {
+ Send(*longrunning.Operation) error
+ grpc.ServerStream
+}
+
+type executionWaitExecutionServer struct {
+ grpc.ServerStream
+}
+
+func (x *executionWaitExecutionServer) Send(m *longrunning.Operation) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+var _Execution_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "build.bazel.remote.execution.v2.Execution",
+ HandlerType: (*ExecutionServer)(nil),
+ Methods: []grpc.MethodDesc{},
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "Execute",
+ Handler: _Execution_Execute_Handler,
+ ServerStreams: true,
+ },
+ {
+ StreamName: "WaitExecution",
+ Handler: _Execution_WaitExecution_Handler,
+ ServerStreams: true,
+ },
+ },
+ Metadata: "build/bazel/remote/execution/v2/remote_execution.proto",
+}
+
+// ActionCacheClient is the client API for ActionCache service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ActionCacheClient interface {
+ // Retrieve a cached execution result.
+ //
+ // Implementations SHOULD ensure that any blobs referenced from the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]
+ // are available at the time of returning the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] and will be
+ // for some period of time afterwards. The lifetimes of the referenced blobs SHOULD be increased
+ // if necessary and applicable.
+ //
+ // Errors:
+ //
+ // * `NOT_FOUND`: The requested `ActionResult` is not in the cache.
+ GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error)
+ // Upload a new execution result.
+ //
+ // In order to allow the server to perform access control based on the type of
+ // action, and to assist with client debugging, the client MUST first upload
+ // the [Action][build.bazel.remote.execution.v2.Execution] that produced the
+ // result, along with its
+ // [Command][build.bazel.remote.execution.v2.Command], into the
+ // `ContentAddressableStorage`.
+ //
+ // Server implementations MAY modify the
+ // `UpdateActionResultRequest.action_result` and return an equivalent value.
+ //
+ // Errors:
+ //
+ // - `INVALID_ARGUMENT`: One or more arguments are invalid.
+ // - `FAILED_PRECONDITION`: One or more errors occurred in updating the
+ // action result, such as a missing command or action.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the
+ // entry to the cache.
+ UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error)
+}
+
+type actionCacheClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewActionCacheClient(cc grpc.ClientConnInterface) ActionCacheClient {
+ return &actionCacheClient{cc}
+}
+
+func (c *actionCacheClient) GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) {
+ out := new(ActionResult)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ActionCache/GetActionResult", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *actionCacheClient) UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) {
+ out := new(ActionResult)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ActionCache/UpdateActionResult", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// ActionCacheServer is the server API for ActionCache service.
+type ActionCacheServer interface {
+ // Retrieve a cached execution result.
+ //
+ // Implementations SHOULD ensure that any blobs referenced from the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]
+ // are available at the time of returning the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] and will be
+ // for some period of time afterwards. The lifetimes of the referenced blobs SHOULD be increased
+ // if necessary and applicable.
+ //
+ // Errors:
+ //
+ // * `NOT_FOUND`: The requested `ActionResult` is not in the cache.
+ GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error)
+ // Upload a new execution result.
+ //
+ // In order to allow the server to perform access control based on the type of
+ // action, and to assist with client debugging, the client MUST first upload
+ // the [Action][build.bazel.remote.execution.v2.Execution] that produced the
+ // result, along with its
+ // [Command][build.bazel.remote.execution.v2.Command], into the
+ // `ContentAddressableStorage`.
+ //
+ // Server implementations MAY modify the
+ // `UpdateActionResultRequest.action_result` and return an equivalent value.
+ //
+ // Errors:
+ //
+ // - `INVALID_ARGUMENT`: One or more arguments are invalid.
+ // - `FAILED_PRECONDITION`: One or more errors occurred in updating the
+ // action result, such as a missing command or action.
+ // - `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the
+ // entry to the cache.
+ UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error)
+}
+
+// UnimplementedActionCacheServer can be embedded to have forward compatible implementations.
+type UnimplementedActionCacheServer struct {
+}
+
+func (*UnimplementedActionCacheServer) GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method GetActionResult not implemented")
+}
+func (*UnimplementedActionCacheServer) UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method UpdateActionResult not implemented")
+}
+
+func RegisterActionCacheServer(s *grpc.Server, srv ActionCacheServer) {
+ s.RegisterService(&_ActionCache_serviceDesc, srv)
+}
+
+func _ActionCache_GetActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetActionResultRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ActionCacheServer).GetActionResult(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.execution.v2.ActionCache/GetActionResult",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ActionCacheServer).GetActionResult(ctx, req.(*GetActionResultRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ActionCache_UpdateActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(UpdateActionResultRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ActionCacheServer).UpdateActionResult(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.execution.v2.ActionCache/UpdateActionResult",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ActionCacheServer).UpdateActionResult(ctx, req.(*UpdateActionResultRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _ActionCache_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "build.bazel.remote.execution.v2.ActionCache",
+ HandlerType: (*ActionCacheServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "GetActionResult",
+ Handler: _ActionCache_GetActionResult_Handler,
+ },
+ {
+ MethodName: "UpdateActionResult",
+ Handler: _ActionCache_UpdateActionResult_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "build/bazel/remote/execution/v2/remote_execution.proto",
+}
+
+// ContentAddressableStorageClient is the client API for ContentAddressableStorage service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ContentAddressableStorageClient interface {
+ // Determine if blobs are present in the CAS.
+ //
+ // Clients can use this API before uploading blobs to determine which ones are
+ // already present in the CAS and do not need to be uploaded again.
+ //
+ // Servers SHOULD increase the lifetimes of the referenced blobs if necessary and
+ // applicable.
+ //
+ // There are no method-specific errors.
+ FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error)
+ // Upload many blobs at once.
+ //
+ // The server may enforce a limit of the combined total size of blobs
+ // to be uploaded using this API. This limit may be obtained using the
+ // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API.
+ // Requests exceeding the limit should either be split into smaller
+ // chunks or uploaded using the
+ // [ByteStream API][google.bytestream.ByteStream], as appropriate.
+ //
+ // This request is equivalent to calling a Bytestream `Write` request
+ // on each individual blob, in parallel. The requests may succeed or fail
+ // independently.
+ //
+ // Errors:
+ //
+ // - `INVALID_ARGUMENT`: The client attempted to upload more than the
+ // server supported limit.
+ //
+ // Individual requests may return the following errors, additionally:
+ //
+ // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob.
+ // * `INVALID_ARGUMENT`: The
+ // [Digest][build.bazel.remote.execution.v2.Digest] does not match the
+ // provided data.
+ BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error)
+ // Download many blobs at once.
+ //
+ // The server may enforce a limit of the combined total size of blobs
+ // to be downloaded using this API. This limit may be obtained using the
+ // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API.
+ // Requests exceeding the limit should either be split into smaller
+ // chunks or downloaded using the
+ // [ByteStream API][google.bytestream.ByteStream], as appropriate.
+ //
+ // This request is equivalent to calling a Bytestream `Read` request
+ // on each individual blob, in parallel. The requests may succeed or fail
+ // independently.
+ //
+ // Errors:
+ //
+ // - `INVALID_ARGUMENT`: The client attempted to read more than the
+ // server supported limit.
+ //
+ // Every error on individual read will be returned in the corresponding digest
+ // status.
+ BatchReadBlobs(ctx context.Context, in *BatchReadBlobsRequest, opts ...grpc.CallOption) (*BatchReadBlobsResponse, error)
+ // Fetch the entire directory tree rooted at a node.
+ //
+ // This request must be targeted at a
+ // [Directory][build.bazel.remote.execution.v2.Directory] stored in the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]
+ // (CAS). The server will enumerate the `Directory` tree recursively and
+ // return every node descended from the root.
+ //
+ // The GetTreeRequest.page_token parameter can be used to skip ahead in
+ // the stream (e.g. when retrying a partially completed and aborted request),
+ // by setting it to a value taken from GetTreeResponse.next_page_token of the
+ // last successfully processed GetTreeResponse).
+ //
+ // The exact traversal order is unspecified and, unless retrieving subsequent
+ // pages from an earlier request, is not guaranteed to be stable across
+ // multiple invocations of `GetTree`.
+ //
+ // If part of the tree is missing from the CAS, the server will return the
+ // portion present and omit the rest.
+ //
+ // Errors:
+ //
+ // * `NOT_FOUND`: The requested tree root is not present in the CAS.
+ GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (ContentAddressableStorage_GetTreeClient, error)
+}
+
+type contentAddressableStorageClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewContentAddressableStorageClient(cc grpc.ClientConnInterface) ContentAddressableStorageClient {
+ return &contentAddressableStorageClient{cc}
+}
+
+func (c *contentAddressableStorageClient) FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) {
+ out := new(FindMissingBlobsResponse)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ContentAddressableStorage/FindMissingBlobs", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *contentAddressableStorageClient) BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) {
+ out := new(BatchUpdateBlobsResponse)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchUpdateBlobs", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *contentAddressableStorageClient) BatchReadBlobs(ctx context.Context, in *BatchReadBlobsRequest, opts ...grpc.CallOption) (*BatchReadBlobsResponse, error) {
+ out := new(BatchReadBlobsResponse)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchReadBlobs", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *contentAddressableStorageClient) GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (ContentAddressableStorage_GetTreeClient, error) {
+ stream, err := c.cc.NewStream(ctx, &_ContentAddressableStorage_serviceDesc.Streams[0], "/build.bazel.remote.execution.v2.ContentAddressableStorage/GetTree", opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &contentAddressableStorageGetTreeClient{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type ContentAddressableStorage_GetTreeClient interface {
+ Recv() (*GetTreeResponse, error)
+ grpc.ClientStream
+}
+
+type contentAddressableStorageGetTreeClient struct {
+ grpc.ClientStream
+}
+
+func (x *contentAddressableStorageGetTreeClient) Recv() (*GetTreeResponse, error) {
+ m := new(GetTreeResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+// ContentAddressableStorageServer is the server API for ContentAddressableStorage service.
+type ContentAddressableStorageServer interface {
+ // Determine if blobs are present in the CAS.
+ //
+ // Clients can use this API before uploading blobs to determine which ones are
+ // already present in the CAS and do not need to be uploaded again.
+ //
+ // Servers SHOULD increase the lifetimes of the referenced blobs if necessary and
+ // applicable.
+ //
+ // There are no method-specific errors.
+ FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error)
+ // Upload many blobs at once.
+ //
+ // The server may enforce a limit of the combined total size of blobs
+ // to be uploaded using this API. This limit may be obtained using the
+ // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API.
+ // Requests exceeding the limit should either be split into smaller
+ // chunks or uploaded using the
+ // [ByteStream API][google.bytestream.ByteStream], as appropriate.
+ //
+ // This request is equivalent to calling a Bytestream `Write` request
+ // on each individual blob, in parallel. The requests may succeed or fail
+ // independently.
+ //
+ // Errors:
+ //
+ // - `INVALID_ARGUMENT`: The client attempted to upload more than the
+ // server supported limit.
+ //
+ // Individual requests may return the following errors, additionally:
+ //
+ // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob.
+ // * `INVALID_ARGUMENT`: The
+ // [Digest][build.bazel.remote.execution.v2.Digest] does not match the
+ // provided data.
+ BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error)
+ // Download many blobs at once.
+ //
+ // The server may enforce a limit of the combined total size of blobs
+ // to be downloaded using this API. This limit may be obtained using the
+ // [Capabilities][build.bazel.remote.execution.v2.Capabilities] API.
+ // Requests exceeding the limit should either be split into smaller
+ // chunks or downloaded using the
+ // [ByteStream API][google.bytestream.ByteStream], as appropriate.
+ //
+ // This request is equivalent to calling a Bytestream `Read` request
+ // on each individual blob, in parallel. The requests may succeed or fail
+ // independently.
+ //
+ // Errors:
+ //
+ // - `INVALID_ARGUMENT`: The client attempted to read more than the
+ // server supported limit.
+ //
+ // Every error on individual read will be returned in the corresponding digest
+ // status.
+ BatchReadBlobs(context.Context, *BatchReadBlobsRequest) (*BatchReadBlobsResponse, error)
+ // Fetch the entire directory tree rooted at a node.
+ //
+ // This request must be targeted at a
+ // [Directory][build.bazel.remote.execution.v2.Directory] stored in the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]
+ // (CAS). The server will enumerate the `Directory` tree recursively and
+ // return every node descended from the root.
+ //
+ // The GetTreeRequest.page_token parameter can be used to skip ahead in
+ // the stream (e.g. when retrying a partially completed and aborted request),
+ // by setting it to a value taken from GetTreeResponse.next_page_token of the
+ // last successfully processed GetTreeResponse).
+ //
+ // The exact traversal order is unspecified and, unless retrieving subsequent
+ // pages from an earlier request, is not guaranteed to be stable across
+ // multiple invocations of `GetTree`.
+ //
+ // If part of the tree is missing from the CAS, the server will return the
+ // portion present and omit the rest.
+ //
+ // Errors:
+ //
+ // * `NOT_FOUND`: The requested tree root is not present in the CAS.
+ GetTree(*GetTreeRequest, ContentAddressableStorage_GetTreeServer) error
+}
+
+// UnimplementedContentAddressableStorageServer can be embedded to have forward compatible implementations.
+type UnimplementedContentAddressableStorageServer struct {
+}
+
+func (*UnimplementedContentAddressableStorageServer) FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method FindMissingBlobs not implemented")
+}
+func (*UnimplementedContentAddressableStorageServer) BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method BatchUpdateBlobs not implemented")
+}
+func (*UnimplementedContentAddressableStorageServer) BatchReadBlobs(context.Context, *BatchReadBlobsRequest) (*BatchReadBlobsResponse, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method BatchReadBlobs not implemented")
+}
+func (*UnimplementedContentAddressableStorageServer) GetTree(*GetTreeRequest, ContentAddressableStorage_GetTreeServer) error {
+ return status1.Errorf(codes.Unimplemented, "method GetTree not implemented")
+}
+
+func RegisterContentAddressableStorageServer(s *grpc.Server, srv ContentAddressableStorageServer) {
+ s.RegisterService(&_ContentAddressableStorage_serviceDesc, srv)
+}
+
+func _ContentAddressableStorage_FindMissingBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(FindMissingBlobsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.execution.v2.ContentAddressableStorage/FindMissingBlobs",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, req.(*FindMissingBlobsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ContentAddressableStorage_BatchUpdateBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(BatchUpdateBlobsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchUpdateBlobs",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, req.(*BatchUpdateBlobsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ContentAddressableStorage_BatchReadBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(BatchReadBlobsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ContentAddressableStorageServer).BatchReadBlobs(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.execution.v2.ContentAddressableStorage/BatchReadBlobs",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ContentAddressableStorageServer).BatchReadBlobs(ctx, req.(*BatchReadBlobsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ContentAddressableStorage_GetTree_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(GetTreeRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(ContentAddressableStorageServer).GetTree(m, &contentAddressableStorageGetTreeServer{stream})
+}
+
+type ContentAddressableStorage_GetTreeServer interface {
+ Send(*GetTreeResponse) error
+ grpc.ServerStream
+}
+
+type contentAddressableStorageGetTreeServer struct {
+ grpc.ServerStream
+}
+
+func (x *contentAddressableStorageGetTreeServer) Send(m *GetTreeResponse) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+var _ContentAddressableStorage_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "build.bazel.remote.execution.v2.ContentAddressableStorage",
+ HandlerType: (*ContentAddressableStorageServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "FindMissingBlobs",
+ Handler: _ContentAddressableStorage_FindMissingBlobs_Handler,
+ },
+ {
+ MethodName: "BatchUpdateBlobs",
+ Handler: _ContentAddressableStorage_BatchUpdateBlobs_Handler,
+ },
+ {
+ MethodName: "BatchReadBlobs",
+ Handler: _ContentAddressableStorage_BatchReadBlobs_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "GetTree",
+ Handler: _ContentAddressableStorage_GetTree_Handler,
+ ServerStreams: true,
+ },
+ },
+ Metadata: "build/bazel/remote/execution/v2/remote_execution.proto",
+}
+
+// CapabilitiesClient is the client API for Capabilities service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CapabilitiesClient interface {
+ // GetCapabilities returns the server capabilities configuration of the
+ // remote endpoint.
+ // Only the capabilities of the services supported by the endpoint will
+ // be returned:
+ // - Execution + CAS + Action Cache endpoints should return both
+ // CacheCapabilities and ExecutionCapabilities.
+ // - Execution only endpoints should return ExecutionCapabilities.
+ // - CAS + Action Cache only endpoints should return CacheCapabilities.
+ //
+ // There are no method-specific errors.
+ GetCapabilities(ctx context.Context, in *GetCapabilitiesRequest, opts ...grpc.CallOption) (*ServerCapabilities, error)
+}
+
+type capabilitiesClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewCapabilitiesClient(cc grpc.ClientConnInterface) CapabilitiesClient {
+ return &capabilitiesClient{cc}
+}
+
+func (c *capabilitiesClient) GetCapabilities(ctx context.Context, in *GetCapabilitiesRequest, opts ...grpc.CallOption) (*ServerCapabilities, error) {
+ out := new(ServerCapabilities)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.execution.v2.Capabilities/GetCapabilities", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// CapabilitiesServer is the server API for Capabilities service.
+type CapabilitiesServer interface {
+ // GetCapabilities returns the server capabilities configuration of the
+ // remote endpoint.
+ // Only the capabilities of the services supported by the endpoint will
+ // be returned:
+ // - Execution + CAS + Action Cache endpoints should return both
+ // CacheCapabilities and ExecutionCapabilities.
+ // - Execution only endpoints should return ExecutionCapabilities.
+ // - CAS + Action Cache only endpoints should return CacheCapabilities.
+ //
+ // There are no method-specific errors.
+ GetCapabilities(context.Context, *GetCapabilitiesRequest) (*ServerCapabilities, error)
+}
+
+// UnimplementedCapabilitiesServer can be embedded to have forward compatible implementations.
+type UnimplementedCapabilitiesServer struct {
+}
+
+func (*UnimplementedCapabilitiesServer) GetCapabilities(context.Context, *GetCapabilitiesRequest) (*ServerCapabilities, error) {
+ return nil, status1.Errorf(codes.Unimplemented, "method GetCapabilities not implemented")
+}
+
+func RegisterCapabilitiesServer(s *grpc.Server, srv CapabilitiesServer) {
+ s.RegisterService(&_Capabilities_serviceDesc, srv)
+}
+
+func _Capabilities_GetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetCapabilitiesRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CapabilitiesServer).GetCapabilities(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.execution.v2.Capabilities/GetCapabilities",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CapabilitiesServer).GetCapabilities(ctx, req.(*GetCapabilitiesRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _Capabilities_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "build.bazel.remote.execution.v2.Capabilities",
+ HandlerType: (*CapabilitiesServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "GetCapabilities",
+ Handler: _Capabilities_GetCapabilities_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "build/bazel/remote/execution/v2/remote_execution.proto",
+}
diff --git a/build/bazel/remote/execution/v2/remote_execution.proto b/build/bazel/remote/execution/v2/remote_execution.proto
index ca96a34..31e20dc 100644
--- a/build/bazel/remote/execution/v2/remote_execution.proto
+++ b/build/bazel/remote/execution/v2/remote_execution.proto
@@ -19,12 +19,14 @@ package build.bazel.remote.execution.v2;
import "build/bazel/semver/semver.proto";
import "google/api/annotations.proto";
import "google/longrunning/operations.proto";
+import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
+import "google/protobuf/wrappers.proto";
import "google/rpc/status.proto";
option csharp_namespace = "Build.Bazel.Remote.Execution.V2";
-option go_package = "remoteexecution";
+option go_package = "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2;remoteexecution";
option java_multiple_files = true;
option java_outer_classname = "RemoteExecutionProto";
option java_package = "build.bazel.remote.execution.v2";
@@ -102,7 +104,17 @@ service Execution {
// send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail
// where, for each requested blob not present in the CAS, there is a
// `Violation` with a `type` of `MISSING` and a `subject` of
- // `"blobs/{hash}/{size}"` indicating the digest of the missing blob.
+ // `"blobs/{digest_function/}{hash}/{size}"` indicating the digest of the
+ // missing blob. The `subject` is formatted the same way as the
+ // `resource_name` provided to
+ // [ByteStream.Read][google.bytestream.ByteStream.Read], with the leading
+ // instance name omitted. `digest_function` MUST thus be omitted if its value
+ // is one of MD5, MURMUR3, SHA1, SHA256, SHA384, SHA512, or VSO.
+ //
+ // The server does not need to guarantee that a call to this method leads to
+ // at most one execution of the action. The server MAY execute the action
+ // multiple times, potentially in parallel. These redundant executions MAY
+ // continue to run, even if the operation is completed.
rpc Execute(ExecuteRequest) returns (stream google.longrunning.Operation) {
option (google.api.http) = { post: "/v2/{instance_name=**}/actions:execute" body: "*" };
}
@@ -113,6 +125,14 @@ service Execution {
// operation completes, and then respond with the completed operation. The
// server MAY choose to stream additional updates as execution progresses,
// such as to provide an update as to the state of the execution.
+ //
+ // In addition to the cases describe for Execute, the WaitExecution method
+ // may fail as follows:
+ //
+ // * `NOT_FOUND`: The operation no longer exists due to any of a transient
+ // condition, an unknown operation name, or if the server implements the
+ // Operations API DeleteOperation method and it was called for the current
+ // execution. The client should call `Execute` to retry.
rpc WaitExecution(WaitExecutionRequest) returns (stream google.longrunning.Operation) {
option (google.api.http) = { post: "/v2/{name=operations/**}:waitExecution" body: "*" };
}
@@ -128,10 +148,7 @@ service Execution {
//
// The lifetime of entries in the action cache is implementation-specific, but
// the server SHOULD assume that more recently used entries are more likely to
-// be used again. Additionally, action cache implementations SHOULD ensure that
-// any blobs referenced in the
-// [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]
-// are still valid when returning a result.
+// be used again.
//
// As with other services in the Remote Execution API, any call may return an
// error with a [RetryInfo][google.rpc.RetryInfo] error detail providing
@@ -140,6 +157,13 @@ service Execution {
service ActionCache {
// Retrieve a cached execution result.
//
+ // Implementations SHOULD ensure that any blobs referenced from the
+ // [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]
+ // are available at the time of returning the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] and will be
+ // for some period of time afterwards. The lifetimes of the referenced blobs SHOULD be increased
+ // if necessary and applicable.
+ //
// Errors:
//
// * `NOT_FOUND`: The requested `ActionResult` is not in the cache.
@@ -156,6 +180,9 @@ service ActionCache {
// [Command][build.bazel.remote.execution.v2.Command], into the
// `ContentAddressableStorage`.
//
+ // Server implementations MAY modify the
+ // `UpdateActionResultRequest.action_result` and return an equivalent value.
+ //
// Errors:
//
// * `INVALID_ARGUMENT`: One or more arguments are invalid.
@@ -185,53 +212,128 @@ service ActionCache {
//
// For small file uploads the client should group them together and call
// [BatchUpdateBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs].
+//
// For large uploads, the client must use the
-// [Write method][google.bytestream.ByteStream.Write] of the ByteStream API. The
-// `resource_name` is `{instance_name}/uploads/{uuid}/blobs/{hash}/{size}`,
-// where `instance_name` is as described in the next paragraph, `uuid` is a
-// version 4 UUID generated by the client, and `hash` and `size` are the
-// [Digest][build.bazel.remote.execution.v2.Digest] of the blob. The
-// `uuid` is used only to avoid collisions when multiple clients try to upload
-// the same file (or the same client tries to upload the file multiple times at
-// once on different threads), so the client MAY reuse the `uuid` for uploading
-// different blobs. The `resource_name` may optionally have a trailing filename
-// (or other metadata) for a client to use if it is storing URLs, as in
-// `{instance}/uploads/{uuid}/blobs/{hash}/{size}/foo/bar/baz.cc`. Anything
-// after the `size` is ignored.
+// [Write method][google.bytestream.ByteStream.Write] of the ByteStream API.
+//
+// For uncompressed data, The `WriteRequest.resource_name` is of the following form:
+// `{instance_name}/uploads/{uuid}/blobs/{digest_function/}{hash}/{size}{/optional_metadata}`
+//
+// Where:
+// * `instance_name` is an identifier used to distinguish between the various
+// instances on the server. Syntax and semantics of this field are defined
+// by the server; Clients must not make any assumptions about it (e.g.,
+// whether it spans multiple path segments or not). If it is the empty path,
+// the leading slash is omitted, so that the `resource_name` becomes
+// `uploads/{uuid}/blobs/{digest_function/}{hash}/{size}{/optional_metadata}`.
+// To simplify parsing, a path segment cannot equal any of the following
+// keywords: `blobs`, `uploads`, `actions`, `actionResults`, `operations`,
+// `capabilities` or `compressed-blobs`.
+// * `uuid` is a version 4 UUID generated by the client, used to avoid
+// collisions between concurrent uploads of the same data. Clients MAY
+// reuse the same `uuid` for uploading different blobs.
+// * `digest_function` is a lowercase string form of a `DigestFunction.Value`
+// enum, indicating which digest function was used to compute `hash`. If the
+// digest function used is one of MD5, MURMUR3, SHA1, SHA256, SHA384, SHA512,
+// or VSO, this component MUST be omitted. In that case the server SHOULD
+// infer the digest function using the length of the `hash` and the digest
+// functions announced in the server's capabilities.
+// * `hash` and `size` refer to the [Digest][build.bazel.remote.execution.v2.Digest]
+// of the data being uploaded.
+// * `optional_metadata` is implementation specific data, which clients MAY omit.
+// Servers MAY ignore this metadata.
+//
+// Data can alternatively be uploaded in compressed form, with the following
+// `WriteRequest.resource_name` form:
+// `{instance_name}/uploads/{uuid}/compressed-blobs/{compressor}/{digest_function/}{uncompressed_hash}/{uncompressed_size}{/optional_metadata}`
//
-// A single server MAY support multiple instances of the execution system, each
-// with their own workers, storage, cache, etc. The exact relationship between
-// instances is up to the server. If the server does, then the `instance_name`
-// is an identifier, possibly containing multiple path segments, used to
-// distinguish between the various instances on the server, in a manner defined
-// by the server. For servers which do not support multiple instances, then the
-// `instance_name` is the empty path and the leading slash is omitted, so that
-// the `resource_name` becomes `uploads/{uuid}/blobs/{hash}/{size}`.
-// To simplify parsing, a path segment cannot equal any of the following
-// keywords: `blobs`, `uploads`, `actions`, `actionResults`, `operations` and
-// `capabilities`.
+// Where:
+// * `instance_name`, `uuid`, `digest_function` and `optional_metadata` are
+// defined as above.
+// * `compressor` is a lowercase string form of a `Compressor.Value` enum
+// other than `identity`, which is supported by the server and advertised in
+// [CacheCapabilities.supported_compressor][build.bazel.remote.execution.v2.CacheCapabilities.supported_compressor].
+// * `uncompressed_hash` and `uncompressed_size` refer to the
+// [Digest][build.bazel.remote.execution.v2.Digest] of the data being
+// uploaded, once uncompressed. Servers MUST verify that these match
+// the uploaded data once uncompressed, and MUST return an
+// `INVALID_ARGUMENT` error in the case of mismatch.
+//
+// Note that when writing compressed blobs, the `WriteRequest.write_offset` in
+// the initial request in a stream refers to the offset in the uncompressed form
+// of the blob. In subsequent requests, `WriteRequest.write_offset` MUST be the
+// sum of the first request's 'WriteRequest.write_offset' and the total size of
+// all the compressed data bundles in the previous requests.
+// Note that this mixes an uncompressed offset with a compressed byte length,
+// which is nonsensical, but it is done to fit the semantics of the existing
+// ByteStream protocol.
+//
+// Uploads of the same data MAY occur concurrently in any form, compressed or
+// uncompressed.
+//
+// Clients SHOULD NOT use gRPC-level compression for ByteStream API `Write`
+// calls of compressed blobs, since this would compress already-compressed data.
//
// When attempting an upload, if another client has already completed the upload
// (which may occur in the middle of a single upload if another client uploads
-// the same blob concurrently), the request will terminate immediately with
-// a response whose `committed_size` is the full size of the uploaded file
-// (regardless of how much data was transmitted by the client). If the client
-// completes the upload but the
+// the same blob concurrently), the request will terminate immediately without
+// error, and with a response whose `committed_size` is the value `-1` if this
+// is a compressed upload, or with the full size of the uploaded file if this is
+// an uncompressed upload (regardless of how much data was transmitted by the
+// client). If the client completes the upload but the
// [Digest][build.bazel.remote.execution.v2.Digest] does not match, an
// `INVALID_ARGUMENT` error will be returned. In either case, the client should
// not attempt to retry the upload.
//
-// For downloading blobs, the client must use the
-// [Read method][google.bytestream.ByteStream.Read] of the ByteStream API, with
-// a `resource_name` of `"{instance_name}/blobs/{hash}/{size}"`, where
-// `instance_name` is the instance name (see above), and `hash` and `size` are
-// the [Digest][build.bazel.remote.execution.v2.Digest] of the blob.
+// Small downloads can be grouped and requested in a batch via
+// [BatchReadBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchReadBlobs].
+//
+// For large downloads, the client must use the
+// [Read method][google.bytestream.ByteStream.Read] of the ByteStream API.
+//
+// For uncompressed data, The `ReadRequest.resource_name` is of the following form:
+// `{instance_name}/blobs/{digest_function/}{hash}/{size}`
+// Where `instance_name`, `digest_function`, `hash` and `size` are defined as
+// for uploads.
+//
+// Data can alternatively be downloaded in compressed form, with the following
+// `ReadRequest.resource_name` form:
+// `{instance_name}/compressed-blobs/{compressor}/{digest_function/}{uncompressed_hash}/{uncompressed_size}`
+//
+// Where:
+// * `instance_name`, `compressor` and `digest_function` are defined as for
+// uploads.
+// * `uncompressed_hash` and `uncompressed_size` refer to the
+// [Digest][build.bazel.remote.execution.v2.Digest] of the data being
+// downloaded, once uncompressed. Clients MUST verify that these match
+// the downloaded data once uncompressed, and take appropriate steps in
+// the case of failure such as retrying a limited number of times or
+// surfacing an error to the user.
+//
+// When downloading compressed blobs:
+// * `ReadRequest.read_offset` refers to the offset in the uncompressed form
+// of the blob.
+// * Servers MUST return `INVALID_ARGUMENT` if `ReadRequest.read_limit` is
+// non-zero.
+// * Servers MAY use any compression level they choose, including different
+// levels for different blobs (e.g. choosing a level designed for maximum
+// speed for data known to be incompressible).
+// * Clients SHOULD NOT use gRPC-level compression, since this would compress
+// already-compressed data.
+//
+// Servers MUST be able to provide data for all recently advertised blobs in
+// each of the compression formats that the server supports, as well as in
+// uncompressed form.
//
// The lifetime of entries in the CAS is implementation specific, but it SHOULD
// be long enough to allow for newly-added and recently looked-up entries to be
// used in subsequent calls (e.g. to
// [Execute][build.bazel.remote.execution.v2.Execution.Execute]).
//
+// Servers MUST behave as though empty blobs are always available, even if they
+// have not been uploaded. Clients MAY optimize away the uploading or
+// downloading of empty blobs.
+//
// As with other services in the Remote Execution API, any call may return an
// error with a [RetryInfo][google.rpc.RetryInfo] error detail providing
// information about when the client should retry the request; clients SHOULD
@@ -242,6 +344,9 @@ service ContentAddressableStorage {
// Clients can use this API before uploading blobs to determine which ones are
// already present in the CAS and do not need to be uploaded again.
//
+ // Servers SHOULD increase the lifetimes of the referenced blobs if necessary and
+ // applicable.
+ //
// There are no method-specific errors.
rpc FindMissingBlobs(FindMissingBlobsRequest) returns (FindMissingBlobsResponse) {
option (google.api.http) = { post: "/v2/{instance_name=**}/blobs:findMissing" body: "*" };
@@ -319,6 +424,8 @@ service ContentAddressableStorage {
// If part of the tree is missing from the CAS, the server will return the
// portion present and omit the rest.
//
+ // Errors:
+ //
// * `NOT_FOUND`: The requested tree root is not present in the CAS.
rpc GetTree(GetTreeRequest) returns (stream GetTreeResponse) {
option (google.api.http) = { get: "/v2/{instance_name=**}/blobs/{root_digest.hash}/{root_digest.size_bytes}:getTree" };
@@ -332,7 +439,16 @@ service ContentAddressableStorage {
// The query may include a particular `instance_name`, in which case the values
// returned will pertain to that instance.
service Capabilities {
- // GetCapabilities returns the server capabilities configuration.
+ // GetCapabilities returns the server capabilities configuration of the
+ // remote endpoint.
+ // Only the capabilities of the services supported by the endpoint will
+ // be returned:
+ // * Execution + CAS + Action Cache endpoints should return both
+ // CacheCapabilities and ExecutionCapabilities.
+ // * Execution only endpoints should return ExecutionCapabilities.
+ // * CAS + Action Cache only endpoints should return CacheCapabilities.
+ //
+ // There are no method-specific errors.
rpc GetCapabilities(GetCapabilitiesRequest) returns (ServerCapabilities) {
option (google.api.http) = {
get: "/v2/{instance_name=**}/capabilities"
@@ -385,6 +501,14 @@ message Action {
// timeout that is longer than the server's maximum timeout, the server MUST
// reject the request.
//
+ // The timeout is only intended to cover the "execution" of the specified
+ // action and not time in queue nor any overheads before or after execution
+ // such as marshalling inputs/outputs. The server SHOULD avoid including time
+ // spent the client doesn't have control over, and MAY extend or reduce the
+ // timeout to account for delays or speedups that occur during execution
+ // itself (e.g., lazily loading data from the Content Addressable Storage,
+ // live migration of virtual machines, emulation overhead).
+ //
// The timeout is a part of the
// [Action][build.bazel.remote.execution.v2.Action] message, and
// therefore two `Actions` with different timeouts are different, even if they
@@ -399,6 +523,26 @@ message Action {
// If true, then the `Action`'s result cannot be cached, and in-flight
// requests for the same `Action` may not be merged.
bool do_not_cache = 7;
+
+ reserved 8; // Used for field moved to [Command][build.bazel.remote.execution.v2.Command].
+
+ // An optional additional salt value used to place this `Action` into a
+ // separate cache namespace from other instances having the same field
+ // contents. This salt typically comes from operational configuration
+ // specific to sources such as repo and service configuration,
+ // and allows disowning an entire set of ActionResults that might have been
+ // poisoned by buggy software or tool failures.
+ bytes salt = 9;
+
+ // The optional platform requirements for the execution environment. The
+ // server MAY choose to execute the action on any worker satisfying the
+ // requirements, so the client SHOULD ensure that running the action on any
+ // such worker will have the same result. A detailed lexicon for this can be
+ // found in the accompanying platform.md.
+ // New in version 2.2: clients SHOULD set these platform properties as well
+ // as those in the [Command][build.bazel.remote.execution.v2.Command]. Servers
+ // SHOULD prefer those set here.
+ Platform platform = 10;
}
// A `Command` is the actual command executed by a worker running an
@@ -419,9 +563,21 @@ message Command {
string value = 2;
}
- // The arguments to the command. The first argument must be the path to the
- // executable, which must be either a relative path, in which case it is
- // evaluated with respect to the input root, or an absolute path.
+ // The arguments to the command.
+ //
+ // The first argument specifies the command to run, which may be either an
+ // absolute path, a path relative to the working directory, or an unqualified
+ // path (without path separators) which will be resolved using the operating
+ // system's equivalent of the PATH environment variable. Path separators
+ // native to the operating system running on the worker SHOULD be used. If the
+ // `environment_variables` list contains an entry for the PATH environment
+ // variable, it SHOULD be respected. If not, the resolution process is
+ // implementation-defined.
+ //
+ // Changed in v2.3. v2.2 and older require that no PATH lookups are performed,
+ // and that relative paths are resolved relative to the input root. This
+ // behavior can, however, not be relied upon, as most implementations already
+ // followed the rules described above.
repeated string arguments = 1;
// The environment variables to set when running the program. The worker may
@@ -455,7 +611,9 @@ message Command {
//
// Directories leading up to the output files are created by the worker prior
// to execution, even if they are not explicitly part of the input root.
- repeated string output_files = 3;
+ //
+ // DEPRECATED since v2.1: Use `output_paths` instead.
+ repeated string output_files = 3 [ deprecated = true ];
// A list of the output directories that the client expects to retrieve from
// the action. Only the listed directories will be returned (an entire
@@ -478,23 +636,100 @@ message Command {
// bytes).
//
// An output directory cannot be duplicated or have the same path as any of
- // the listed output files.
+ // the listed output files. An output directory is allowed to be a parent of
+ // another output directory.
//
// Directories leading up to the output directories (but not the output
// directories themselves) are created by the worker prior to execution, even
// if they are not explicitly part of the input root.
- repeated string output_directories = 4;
+ //
+ // DEPRECATED since 2.1: Use `output_paths` instead.
+ repeated string output_directories = 4 [ deprecated = true ];
+
+ // A list of the output paths that the client expects to retrieve from the
+ // action. Only the listed paths will be returned to the client as output.
+ // The type of the output (file or directory) is not specified, and will be
+ // determined by the server after action execution. If the resulting path is
+ // a file, it will be returned in an
+ // [OutputFile][build.bazel.remote.execution.v2.OutputFile] typed field.
+ // If the path is a directory, the entire directory structure will be returned
+ // as a [Tree][build.bazel.remote.execution.v2.Tree] message digest, see
+ // [OutputDirectory][build.bazel.remote.execution.v2.OutputDirectory]
+ // Other files or directories that may be created during command execution
+ // are discarded.
+ //
+ // The paths are relative to the working directory of the action execution.
+ // The paths are specified using a single forward slash (`/`) as a path
+ // separator, even if the execution platform natively uses a different
+ // separator. The path MUST NOT include a trailing slash, nor a leading slash,
+ // being a relative path.
+ //
+ // In order to ensure consistent hashing of the same Action, the output paths
+ // MUST be deduplicated and sorted lexicographically by code point (or,
+ // equivalently, by UTF-8 bytes).
+ //
+ // Directories leading up to the output paths are created by the worker prior
+ // to execution, even if they are not explicitly part of the input root.
+ //
+ // New in v2.1: this field supersedes the DEPRECATED `output_files` and
+ // `output_directories` fields. If `output_paths` is used, `output_files` and
+ // `output_directories` will be ignored!
+ repeated string output_paths = 7;
// The platform requirements for the execution environment. The server MAY
// choose to execute the action on any worker satisfying the requirements, so
// the client SHOULD ensure that running the action on any such worker will
- // have the same result.
- Platform platform = 5;
+ // have the same result. A detailed lexicon for this can be found in the
+ // accompanying platform.md.
+ // DEPRECATED as of v2.2: platform properties are now specified directly in
+ // the action. See documentation note in the
+ // [Action][build.bazel.remote.execution.v2.Action] for migration.
+ Platform platform = 5 [ deprecated = true ];
// The working directory, relative to the input root, for the command to run
// in. It must be a directory which exists in the input tree. If it is left
// empty, then the action is run in the input root.
string working_directory = 6;
+
+ // A list of keys for node properties the client expects to retrieve for
+ // output files and directories. Keys are either names of string-based
+ // [NodeProperty][build.bazel.remote.execution.v2.NodeProperty] or
+ // names of fields in [NodeProperties][build.bazel.remote.execution.v2.NodeProperties].
+ // In order to ensure that equivalent `Action`s always hash to the same
+ // value, the node properties MUST be lexicographically sorted by name.
+ // Sorting of strings is done by code point, equivalently, by the UTF-8 bytes.
+ //
+ // The interpretation of string-based properties is server-dependent. If a
+ // property is not recognized by the server, the server will return an
+ // `INVALID_ARGUMENT`.
+ repeated string output_node_properties = 8;
+
+ enum OutputDirectoryFormat {
+ // The client is only interested in receiving output directories in
+ // the form of a single Tree object, using the `tree_digest` field.
+ TREE_ONLY = 0;
+
+ // The client is only interested in receiving output directories in
+ // the form of a hierarchy of separately stored Directory objects,
+ // using the `root_directory_digest` field.
+ DIRECTORY_ONLY = 1;
+
+ // The client is interested in receiving output directories both in
+ // the form of a single Tree object and a hierarchy of separately
+ // stored Directory objects, using both the `tree_digest` and
+ // `root_directory_digest` fields.
+ TREE_AND_DIRECTORY = 2;
+ }
+
+ // The format that the worker should use to store the contents of
+ // output directories.
+ //
+ // In case this field is set to a value that is not supported by the
+ // worker, the worker SHOULD interpret this field as TREE_ONLY. The
+ // worker MAY store output directories in formats that are a superset
+ // of what was requested (e.g., interpreting DIRECTORY_ONLY as
+ // TREE_AND_DIRECTORY).
+ OutputDirectoryFormat output_directory_format = 9;
}
// A `Platform` is a set of requirements, such as hardware, operating system, or
@@ -520,6 +755,11 @@ message Platform {
// The server MAY use the `value` of one or more properties to determine how
// it sets up the execution environment, such as by making specific system
// files available to the worker.
+ //
+ // Both names and values are typically case-sensitive. Note that the platform
+ // is implicitly part of the action digest, so even tiny changes in the names
+ // or values (like changing case) may result in different action cache
+ // entries.
message Property {
// The property name.
string name = 1;
@@ -558,6 +798,9 @@ message Platform {
// * The files, directories and symlinks in the directory must each be sorted
// in lexicographical order by path. The path strings must be sorted by code
// point, equivalently, by UTF-8 bytes.
+// * The [NodeProperties][build.bazel.remote.execution.v2.NodeProperty] of files,
+// directories, and symlinks must be sorted in lexicographical order by
+// property name.
//
// A `Directory` that obeys the restrictions is said to be in canonical form.
//
@@ -574,7 +817,13 @@ message Platform {
// digest: {
// hash: "4a73bc9d03...",
// size: 65534
-// }
+// },
+// node_properties: [
+// {
+// "name": "MTime",
+// "value": "2017-01-15T01:30:15.01Z"
+// }
+// ]
// }
// ],
// directories: [
@@ -611,6 +860,40 @@ message Directory {
// The symlinks in the directory.
repeated SymlinkNode symlinks = 3;
+
+ // The node properties of the Directory.
+ reserved 4;
+ NodeProperties node_properties = 5;
+}
+
+// A single property for [FileNodes][build.bazel.remote.execution.v2.FileNode],
+// [DirectoryNodes][build.bazel.remote.execution.v2.DirectoryNode], and
+// [SymlinkNodes][build.bazel.remote.execution.v2.SymlinkNode]. The server is
+// responsible for specifying the property `name`s that it accepts. If
+// permitted by the server, the same `name` may occur multiple times.
+message NodeProperty {
+ // The property name.
+ string name = 1;
+
+ // The property value.
+ string value = 2;
+}
+
+// Node properties for [FileNodes][build.bazel.remote.execution.v2.FileNode],
+// [DirectoryNodes][build.bazel.remote.execution.v2.DirectoryNode], and
+// [SymlinkNodes][build.bazel.remote.execution.v2.SymlinkNode]. The server is
+// responsible for specifying the properties that it accepts.
+//
+message NodeProperties {
+ // A list of string-based
+ // [NodeProperties][build.bazel.remote.execution.v2.NodeProperty].
+ repeated NodeProperty properties = 1;
+
+ // The file's last modification timestamp.
+ google.protobuf.Timestamp mtime = 2;
+
+ // The UNIX file mode, e.g., 0755.
+ google.protobuf.UInt32Value unix_mode = 3;
}
// A `FileNode` represents a single file and associated metadata.
@@ -625,6 +908,10 @@ message FileNode {
// True if file is executable, false otherwise.
bool is_executable = 4;
+
+ // The node properties of the FileNode.
+ reserved 5;
+ NodeProperties node_properties = 6;
}
// A `DirectoryNode` represents a child of a
@@ -650,14 +937,20 @@ message SymlinkNode {
// The target path can be relative to the parent directory of the symlink or
// it can be an absolute path starting with `/`. Support for absolute paths
// can be checked using the [Capabilities][build.bazel.remote.execution.v2.Capabilities]
- // API. The canonical form forbids the substrings `/./` and `//` in the target
- // path. `..` components are allowed anywhere in the target path.
+ // API. `..` components are allowed anywhere in the target path as logical
+ // canonicalization may lead to different behavior in the presence of
+ // directory symlinks (e.g. `foo/../bar` may not be the same as `bar`).
+ // To reduce potential cache misses, canonicalization is still recommended
+ // where this is possible without impacting correctness.
string target = 2;
+
+ // The node properties of the SymlinkNode.
+ reserved 3;
+ NodeProperties node_properties = 4;
}
// A content digest. A digest for a given blob consists of the size of the blob
-// and its hash. The hash algorithm to use is defined by the server, but servers
-// SHOULD use SHA-256.
+// and its hash. The hash algorithm to use is defined by the server.
//
// The size is considered to be an integral part of the digest and cannot be
// separated. That is, even if the `hash` field is correctly specified but
@@ -688,8 +981,8 @@ message SymlinkNode {
// serializing, but care should be taken to avoid shortcuts. For instance,
// concatenating two messages to merge them may produce duplicate fields.
message Digest {
- // The hash. In the case of SHA-256, it will always be a lowercase hex string
- // exactly 64 characters long.
+ // The hash, represented as a lowercase hexadecimal string, padded with
+ // leading zeroes up to the hash function length.
string hash = 1;
// The size of the blob, in bytes.
@@ -722,26 +1015,56 @@ message ExecutedActionMetadata {
// When the worker completed executing the action command.
google.protobuf.Timestamp execution_completed_timestamp = 8;
+ // New in v2.3: the amount of time the worker spent executing the action
+ // command, potentially computed using a worker-specific virtual clock.
+ //
+ // The virtual execution duration is only intended to cover the "execution" of
+ // the specified action and not time in queue nor any overheads before or
+ // after execution such as marshalling inputs/outputs. The server SHOULD avoid
+ // including time spent the client doesn't have control over, and MAY extend
+ // or reduce the execution duration to account for delays or speedups that
+ // occur during execution itself (e.g., lazily loading data from the Content
+ // Addressable Storage, live migration of virtual machines, emulation
+ // overhead).
+ //
+ // The method of timekeeping used to compute the virtual execution duration
+ // MUST be consistent with what is used to enforce the
+ // [Action][[build.bazel.remote.execution.v2.Action]'s `timeout`. There is no
+ // relationship between the virtual execution duration and the values of
+ // `execution_start_timestamp` and `execution_completed_timestamp`.
+ google.protobuf.Duration virtual_execution_duration = 12;
+
// When the worker started uploading action outputs.
google.protobuf.Timestamp output_upload_start_timestamp = 9;
// When the worker finished uploading action outputs.
google.protobuf.Timestamp output_upload_completed_timestamp = 10;
+
+ // Details that are specific to the kind of worker used. For example,
+ // on POSIX-like systems this could contain a message with
+ // getrusage(2) statistics.
+ repeated google.protobuf.Any auxiliary_metadata = 11;
}
// An ActionResult represents the result of an
// [Action][build.bazel.remote.execution.v2.Action] being run.
+//
+// It is advised that at least one field (for example
+// `ActionResult.execution_metadata.Worker`) have a non-default value, to
+// ensure that the serialized value is non-empty, which can then be used
+// as a basic data sanity check.
message ActionResult {
reserved 1; // Reserved for use as the resource name.
// The output files of the action. For each output file requested in the
- // `output_files` field of the Action, if the corresponding file existed after
- // the action completed, a single entry will be present either in this field,
- // or in the output_file_symlinks field, if the file was a symbolic link to
- // another file.
+ // `output_files` or `output_paths` field of the Action, if the corresponding
+ // file existed after the action completed, a single entry will be present
+ // either in this field, or the `output_file_symlinks` field if the file was
+ // a symbolic link to another file (`output_symlinks` field after v2.1).
//
- // If the action does not produce the requested output, or produces a
- // directory where a regular file is expected or vice versa, then that output
+ // If an output listed in `output_files` was found, but was a directory rather
+ // than a regular file, the server will return a FAILED_PRECONDITION.
+ // If the action does not produce the requested output, then that output
// will be omitted from the list. The server is free to arrange the output
// list as desired; clients MUST NOT assume that the output list is sorted.
repeated OutputFile output_files = 2;
@@ -750,21 +1073,42 @@ message ActionResult {
// may be links to other output files, or input files, or even absolute paths
// outside of the working directory, if the server supports
// [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.CacheCapabilities.SymlinkAbsolutePathStrategy].
- // For each output file requested in the `output_files` field of the Action,
- // if the corresponding file existed after
+ // For each output file requested in the `output_files` or `output_paths`
+ // field of the Action, if the corresponding file existed after
// the action completed, a single entry will be present either in this field,
// or in the `output_files` field, if the file was not a symbolic link.
//
- // If the action does not produce the requested output, or produces a
- // directory where a regular file is expected or vice versa, then that output
+ // If an output symbolic link of the same name as listed in `output_files` of
+ // the Command was found, but its target type was not a regular file, the
+ // server will return a FAILED_PRECONDITION.
+ // If the action does not produce the requested output, then that output
// will be omitted from the list. The server is free to arrange the output
// list as desired; clients MUST NOT assume that the output list is sorted.
- repeated OutputSymlink output_file_symlinks = 10;
+ //
+ // DEPRECATED as of v2.1. Servers that wish to be compatible with v2.0 API
+ // should still populate this field in addition to `output_symlinks`.
+ repeated OutputSymlink output_file_symlinks = 10 [ deprecated = true ];
+
+ // New in v2.1: this field will only be populated if the command
+ // `output_paths` field was used, and not the pre v2.1 `output_files` or
+ // `output_directories` fields.
+ // The output paths of the action that are symbolic links to other paths. Those
+ // may be links to other outputs, or inputs, or even absolute paths
+ // outside of the working directory, if the server supports
+ // [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.CacheCapabilities.SymlinkAbsolutePathStrategy].
+ // A single entry for each output requested in `output_paths`
+ // field of the Action, if the corresponding path existed after
+ // the action completed and was a symbolic link.
+ //
+ // If the action does not produce a requested output, then that output
+ // will be omitted from the list. The server is free to arrange the output
+ // list as desired; clients MUST NOT assume that the output list is sorted.
+ repeated OutputSymlink output_symlinks = 12;
// The output directories of the action. For each output directory requested
- // in the `output_directories` field of the Action, if the corresponding
- // directory existed after the action completed, a single entry will be
- // present in the output list, which will contain the digest of a
+ // in the `output_directories` or `output_paths` field of the Action, if the
+ // corresponding directory existed after the action completed, a single entry
+ // will be present in the output list, which will contain the digest of a
// [Tree][build.bazel.remote.execution.v2.Tree] message containing the
// directory tree, and the path equal exactly to the corresponding Action
// output_directories member.
@@ -820,6 +1164,9 @@ message ActionResult {
// }
// }
// ```
+ // If an output of the same name as listed in `output_files` of
+ // the Command was found in `output_directories`, but was not a directory, the
+ // server will return a FAILED_PRECONDITION.
repeated OutputDirectory output_directories = 3;
// The output directories of the action that are symbolic links to other
@@ -828,45 +1175,47 @@ message ActionResult {
// if the server supports
// [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.CacheCapabilities.SymlinkAbsolutePathStrategy].
// For each output directory requested in the `output_directories` field of
- // the Action, if the directory file existed after
- // the action completed, a single entry will be present either in this field,
- // or in the `output_directories` field, if the directory was not a symbolic link.
+ // the Action, if the directory existed after the action completed, a
+ // single entry will be present either in this field, or in the
+ // `output_directories` field, if the directory was not a symbolic link.
//
- // If the action does not produce the requested output, or produces a
- // file where a directory is expected or vice versa, then that output
+ // If an output of the same name was found, but was a symbolic link to a file
+ // instead of a directory, the server will return a FAILED_PRECONDITION.
+ // If the action does not produce the requested output, then that output
// will be omitted from the list. The server is free to arrange the output
// list as desired; clients MUST NOT assume that the output list is sorted.
- repeated OutputSymlink output_directory_symlinks = 11;
+ //
+ // DEPRECATED as of v2.1. Servers that wish to be compatible with v2.0 API
+ // should still populate this field in addition to `output_symlinks`.
+ repeated OutputSymlink output_directory_symlinks = 11 [ deprecated = true ];
// The exit code of the command.
int32 exit_code = 4;
- // The standard output buffer of the action. The server will determine, based
- // on the size of the buffer, whether to return it in raw form or to return
- // a digest in `stdout_digest` that points to the buffer. If neither is set,
- // then the buffer is empty. The client SHOULD NOT assume it will get one of
- // the raw buffer or a digest on any given request and should be prepared to
- // handle either.
+ // The standard output buffer of the action. The server SHOULD NOT inline
+ // stdout unless requested by the client in the
+ // [GetActionResultRequest][build.bazel.remote.execution.v2.GetActionResultRequest]
+ // message. The server MAY omit inlining, even if requested, and MUST do so if inlining
+ // would cause the response to exceed message size limits.
+ // Clients SHOULD NOT populate this field when uploading to the cache.
bytes stdout_raw = 5;
// The digest for a blob containing the standard output of the action, which
// can be retrieved from the
// [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
- // See `stdout_raw` for when this will be set.
Digest stdout_digest = 6;
- // The standard error buffer of the action. The server will determine, based
- // on the size of the buffer, whether to return it in raw form or to return
- // a digest in `stderr_digest` that points to the buffer. If neither is set,
- // then the buffer is empty. The client SHOULD NOT assume it will get one of
- // the raw buffer or a digest on any given request and should be prepared to
- // handle either.
+ // The standard error buffer of the action. The server SHOULD NOT inline
+ // stderr unless requested by the client in the
+ // [GetActionResultRequest][build.bazel.remote.execution.v2.GetActionResultRequest]
+ // message. The server MAY omit inlining, even if requested, and MUST do so if inlining
+ // would cause the response to exceed message size limits.
+ // Clients SHOULD NOT populate this field when uploading to the cache.
bytes stderr_raw = 7;
// The digest for a blob containing the standard error of the action, which
// can be retrieved from the
// [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
- // See `stderr_raw` for when this will be set.
Digest stderr_digest = 8;
// The details of the execution that originally produced this result.
@@ -877,8 +1226,6 @@ message ActionResult {
// [FileNode][build.bazel.remote.execution.v2.FileNode], but it is used as an
// output in an `ActionResult`. It allows a full file path rather than
// only a name.
-//
-// `OutputFile` is binary-compatible with `FileNode`.
message OutputFile {
// The full path of the file relative to the working directory, including the
// filename. The path separator is a forward slash `/`. Since this is a
@@ -892,6 +1239,18 @@ message OutputFile {
// True if file is executable, false otherwise.
bool is_executable = 4;
+
+ // The contents of the file if inlining was requested. The server SHOULD NOT inline
+ // file contents unless requested by the client in the
+ // [GetActionResultRequest][build.bazel.remote.execution.v2.GetActionResultRequest]
+ // message. The server MAY omit inlining, even if requested, and MUST do so if inlining
+ // would cause the response to exceed message size limits.
+ // Clients SHOULD NOT populate this field when uploading to the cache.
+ bytes contents = 5;
+
+ // The supported node properties of the OutputFile, if requested by the Action.
+ reserved 6;
+ NodeProperties node_properties = 7;
}
// A `Tree` contains all the
@@ -905,6 +1264,9 @@ message Tree {
// recursively, all its children. In order to reconstruct the directory tree,
// the client must take the digests of each of the child directories and then
// build up a tree starting from the `root`.
+ // Servers SHOULD ensure that these are ordered consistently such that two
+ // actions producing equivalent output directories on the same server
+ // implementation also produce Tree messages with matching digests.
repeated Directory children = 2;
}
@@ -923,6 +1285,52 @@ message OutputDirectory {
// [Tree][build.bazel.remote.execution.v2.Tree] proto containing the
// directory's contents.
Digest tree_digest = 3;
+
+ // If set, consumers MAY make the following assumptions about the
+ // directories contained in the the Tree, so that it may be
+ // instantiated on a local file system by scanning through it
+ // sequentially:
+ //
+ // - All directories with the same binary representation are stored
+ // exactly once.
+ // - All directories, apart from the root directory, are referenced by
+ // at least one parent directory.
+ // - Directories are stored in topological order, with parents being
+ // stored before the child. The root directory is thus the first to
+ // be stored.
+ //
+ // Additionally, the Tree MUST be encoded as a stream of records,
+ // where each record has the following format:
+ //
+ // - A tag byte, having one of the following two values:
+ // - (1 << 3) | 2 == 0x0a: First record (the root directory).
+ // - (2 << 3) | 2 == 0x12: Any subsequent records (child directories).
+ // - The size of the directory, encoded as a base 128 varint.
+ // - The contents of the directory, encoded as a binary serialized
+ // Protobuf message.
+ //
+ // This encoding is a subset of the Protobuf wire format of the Tree
+ // message. As it is only permitted to store data associated with
+ // field numbers 1 and 2, the tag MUST be encoded as a single byte.
+ // More details on the Protobuf wire format can be found here:
+ // https://developers.google.com/protocol-buffers/docs/encoding
+ //
+ // It is recommended that implementations using this feature construct
+ // Tree objects manually using the specification given above, as
+ // opposed to using a Protobuf library to marshal a full Tree message.
+ // As individual Directory messages already need to be marshaled to
+ // compute their digests, constructing the Tree object manually avoids
+ // redundant marshaling.
+ bool is_topologically_sorted = 4;
+
+ // The digest of the encoded
+ // [Directory][build.bazel.remote.execution.v2.Directory] proto
+ // containing the contents the directory's root.
+ //
+ // If both `tree_digest` and `root_directory_digest` are set, this
+ // field MUST match the digest of the root directory contained in the
+ // Tree message.
+ Digest root_directory_digest = 5;
}
// An `OutputSymlink` is similar to a
@@ -940,9 +1348,13 @@ message OutputSymlink {
// The target path can be relative to the parent directory of the symlink or
// it can be an absolute path starting with `/`. Support for absolute paths
// can be checked using the [Capabilities][build.bazel.remote.execution.v2.Capabilities]
- // API. The canonical form forbids the substrings `/./` and `//` in the target
- // path. `..` components are allowed anywhere in the target path.
+ // API. `..` components are allowed anywhere in the target path.
string target = 2;
+
+ // The supported node properties of the OutputSymlink, if requested by the
+ // Action.
+ reserved 3;
+ NodeProperties node_properties = 4;
}
// An `ExecutionPolicy` can be used to control the scheduling of the action.
@@ -1012,6 +1424,29 @@ message ExecuteRequest {
// The server will have a default policy if this is not provided.
// This may be applied to both the ActionResult and the associated blobs.
ResultsCachePolicy results_cache_policy = 8;
+
+ // The digest function that was used to compute the action digest.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the action digest hash and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction.Value digest_function = 9;
+
+ // A hint to the server to request inlining stdout in the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] message.
+ bool inline_stdout = 10;
+
+ // A hint to the server to request inlining stderr in the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] message.
+ bool inline_stderr = 11;
+
+ // A hint to the server to inline the contents of the listed output files.
+ // Each path needs to exactly match one file path in either `output_paths` or
+ // `output_files` (DEPRECATED since v2.1) in the
+ // [Command][build.bazel.remote.execution.v2.Command] message.
+ repeated string inline_output_files = 12;
}
// A `LogFile` is a log stored in the CAS.
@@ -1065,14 +1500,21 @@ message ExecuteResponse {
string message = 5;
}
-// Metadata about an ongoing
-// [execution][build.bazel.remote.execution.v2.Execution.Execute], which
-// will be contained in the [metadata
-// field][google.longrunning.Operation.response] of the
-// [Operation][google.longrunning.Operation].
-message ExecuteOperationMetadata {
- // The current stage of execution.
- enum Stage {
+// The current stage of action execution.
+//
+// Even though these stages are numbered according to the order in which
+// they generally occur, there is no requirement that the remote
+// execution system reports events along this order. For example, an
+// operation MAY transition from the EXECUTING stage back to QUEUED
+// in case the hardware on which the operation executes fails.
+//
+// If and only if the remote execution system reports that an operation
+// has reached the COMPLETED stage, it MUST set the [done
+// field][google.longrunning.Operation.done] of the
+// [Operation][google.longrunning.Operation] and terminate the stream.
+message ExecutionStage {
+ enum Value {
+ // Invalid value.
UNKNOWN = 0;
// Checking the result against the cache.
@@ -1087,22 +1529,34 @@ message ExecuteOperationMetadata {
// Finished execution.
COMPLETED = 4;
}
+}
- Stage stage = 1;
+// Metadata about an ongoing
+// [execution][build.bazel.remote.execution.v2.Execution.Execute], which
+// will be contained in the [metadata
+// field][google.longrunning.Operation.response] of the
+// [Operation][google.longrunning.Operation].
+message ExecuteOperationMetadata {
+ // The current stage of execution.
+ ExecutionStage.Value stage = 1;
// The digest of the [Action][build.bazel.remote.execution.v2.Action]
// being executed.
Digest action_digest = 2;
- // If set, the client can use this name with
+ // If set, the client can use this resource name with
// [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the
- // standard output.
+ // standard output from the endpoint hosting streamed responses.
string stdout_stream_name = 3;
- // If set, the client can use this name with
+ // If set, the client can use this resource name with
// [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the
- // standard error.
+ // standard error from the endpoint hosting streamed responses.
string stderr_stream_name = 4;
+
+ // The client can read this field to view details about the ongoing
+ // execution.
+ ExecutedActionMetadata partial_execution_metadata = 5;
}
// A request message for
@@ -1126,6 +1580,29 @@ message GetActionResultRequest {
// The digest of the [Action][build.bazel.remote.execution.v2.Action]
// whose result is requested.
Digest action_digest = 2;
+
+ // A hint to the server to request inlining stdout in the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] message.
+ bool inline_stdout = 3;
+
+ // A hint to the server to request inlining stderr in the
+ // [ActionResult][build.bazel.remote.execution.v2.ActionResult] message.
+ bool inline_stderr = 4;
+
+ // A hint to the server to inline the contents of the listed output files.
+ // Each path needs to exactly match one file path in either `output_paths` or
+ // `output_files` (DEPRECATED since v2.1) in the
+ // [Command][build.bazel.remote.execution.v2.Command] message.
+ repeated string inline_output_files = 5;
+
+ // The digest function that was used to compute the action digest.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the action digest hash and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction.Value digest_function = 6;
}
// A request message for
@@ -1150,6 +1627,15 @@ message UpdateActionResultRequest {
// The server will have a default policy if this is not provided.
// This may be applied to both the ActionResult and the associated blobs.
ResultsCachePolicy results_cache_policy = 4;
+
+ // The digest function that was used to compute the action digest.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the action digest hash and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction.Value digest_function = 5;
}
// A request message for
@@ -1162,8 +1648,18 @@ message FindMissingBlobsRequest {
// omitted.
string instance_name = 1;
- // A list of the blobs to check.
+ // A list of the blobs to check. All digests MUST use the same digest
+ // function.
repeated Digest blob_digests = 2;
+
+ // The digest function of the blobs whose existence is checked.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the blob digest hashes and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction.Value digest_function = 3;
}
// A response message for
@@ -1178,11 +1674,18 @@ message FindMissingBlobsResponse {
message BatchUpdateBlobsRequest {
// A request corresponding to a single blob that the client wants to upload.
message Request {
- // The digest of the blob. This MUST be the digest of `data`.
+ // The digest of the blob. This MUST be the digest of `data`. All
+ // digests MUST use the same digest function.
Digest digest = 1;
// The raw binary data.
bytes data = 2;
+
+ // The format of `data`. Must be `IDENTITY`/unspecified, or one of the
+ // compressors advertised by the
+ // [CacheCapabilities.supported_batch_compressors][build.bazel.remote.execution.v2.CacheCapabilities.supported_batch_compressors]
+ // field.
+ Compressor.Value compressor = 3;
}
// The instance of the execution system to operate against. A server may
@@ -1194,6 +1697,16 @@ message BatchUpdateBlobsRequest {
// The individual upload requests.
repeated Request requests = 2;
+
+ // The digest function that was used to compute the digests of the
+ // blobs being uploaded.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the blob digest hashes and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction.Value digest_function = 5;
}
// A response message for
@@ -1222,8 +1735,22 @@ message BatchReadBlobsRequest {
// omitted.
string instance_name = 1;
- // The individual blob digests.
+ // The individual blob digests. All digests MUST use the same digest
+ // function.
repeated Digest digests = 2;
+
+ // A list of acceptable encodings for the returned inlined data, in no
+ // particular order. `IDENTITY` is always allowed even if not specified here.
+ repeated Compressor.Value acceptable_compressors = 3;
+
+ // The digest function of the blobs being requested.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the blob digest hashes and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction.Value digest_function = 4;
}
// A response message for
@@ -1237,6 +1764,10 @@ message BatchReadBlobsResponse {
// The raw binary data.
bytes data = 2;
+ // The format the data is encoded in. MUST be `IDENTITY`/unspecified,
+ // or one of the acceptable compressors specified in the `BatchReadBlobsRequest`.
+ Compressor.Value compressor = 4;
+
// The result of attempting to download that blob.
google.rpc.Status status = 3;
}
@@ -1269,8 +1800,19 @@ message GetTreeRequest {
// A page token, which must be a value received in a previous
// [GetTreeResponse][build.bazel.remote.execution.v2.GetTreeResponse].
- // If present, the server will use it to return the following page of results.
+ // If present, the server will use that token as an offset, returning only
+ // that page and the ones that succeed it.
string page_token = 4;
+
+ // The digest function that was used to compute the digest of the root
+ // directory.
+ //
+ // If the digest function used is one of MD5, MURMUR3, SHA1, SHA256,
+ // SHA384, SHA512, or VSO, the client MAY leave this field unset. In
+ // that case the server SHOULD infer the digest function using the
+ // length of the root digest hash and the digest functions announced
+ // in the server's capabilities.
+ DigestFunction.Value digest_function = 5;
}
// A response message for
@@ -1318,18 +1860,95 @@ message ServerCapabilities {
// The digest function used for converting values into keys for CAS and Action
// Cache.
-enum DigestFunction {
- // It is an error for the server to return this value.
- UNKNOWN = 0;
-
- // The Sha-256 digest function.
- SHA256 = 1;
-
- // The Sha-1 digest function.
- SHA1 = 2;
+message DigestFunction {
+ enum Value {
+ // It is an error for the server to return this value.
+ UNKNOWN = 0;
- // The MD5 digest function.
- MD5 = 3;
+ // The SHA-256 digest function.
+ SHA256 = 1;
+
+ // The SHA-1 digest function.
+ SHA1 = 2;
+
+ // The MD5 digest function.
+ MD5 = 3;
+
+ // The Microsoft "VSO-Hash" paged SHA256 digest function.
+ // See https://github.com/microsoft/BuildXL/blob/master/Documentation/Specs/PagedHash.md .
+ VSO = 4;
+
+ // The SHA-384 digest function.
+ SHA384 = 5;
+
+ // The SHA-512 digest function.
+ SHA512 = 6;
+
+ // Murmur3 128-bit digest function, x64 variant. Note that this is not a
+ // cryptographic hash function and its collision properties are not strongly guaranteed.
+ // See https://github.com/aappleby/smhasher/wiki/MurmurHash3 .
+ MURMUR3 = 7;
+
+ // The SHA-256 digest function, modified to use a Merkle tree for
+ // large objects. This permits implementations to store large blobs
+ // as a decomposed sequence of 2^j sized chunks, where j >= 10,
+ // while being able to validate integrity at the chunk level.
+ //
+ // Furthermore, on systems that do not offer dedicated instructions
+ // for computing SHA-256 hashes (e.g., the Intel SHA and ARMv8
+ // cryptographic extensions), SHA256TREE hashes can be computed more
+ // efficiently than plain SHA-256 hashes by using generic SIMD
+ // extensions, such as Intel AVX2 or ARM NEON.
+ //
+ // SHA256TREE hashes are computed as follows:
+ //
+ // - For blobs that are 1024 bytes or smaller, the hash is computed
+ // using the regular SHA-256 digest function.
+ //
+ // - For blobs that are more than 1024 bytes in size, the hash is
+ // computed as follows:
+ //
+ // 1. The blob is partitioned into a left (leading) and right
+ // (trailing) blob. These blobs have lengths m and n
+ // respectively, where m = 2^k and 0 < n <= m.
+ //
+ // 2. Hashes of the left and right blob, Hash(left) and
+ // Hash(right) respectively, are computed by recursively
+ // applying the SHA256TREE algorithm.
+ //
+ // 3. A single invocation is made to the SHA-256 block cipher with
+ // the following parameters:
+ //
+ // M = Hash(left) || Hash(right)
+ // H = {
+ // 0xcbbb9d5d, 0x629a292a, 0x9159015a, 0x152fecd8,
+ // 0x67332667, 0x8eb44a87, 0xdb0c2e0d, 0x47b5481d,
+ // }
+ //
+ // The values of H are the leading fractional parts of the
+ // square roots of the 9th to the 16th prime number (23 to 53).
+ // This differs from plain SHA-256, where the first eight prime
+ // numbers (2 to 19) are used, thereby preventing trivial hash
+ // collisions between small and large objects.
+ //
+ // 4. The hash of the full blob can then be obtained by
+ // concatenating the outputs of the block cipher:
+ //
+ // Hash(blob) = a || b || c || d || e || f || g || h
+ //
+ // Addition of the original values of H, as normally done
+ // through the use of the Davies-Meyer structure, is not
+ // performed. This isn't necessary, as the block cipher is only
+ // invoked once.
+ //
+ // Test vectors of this digest function can be found in the
+ // accompanying sha256tree_test_vectors.txt file.
+ SHA256TREE = 8;
+
+ // The BLAKE3 hash function.
+ // See https://github.com/BLAKE3-team/BLAKE3.
+ BLAKE3 = 9;
+ }
}
// Describes the server/instance capabilities for updating the action cache.
@@ -1338,21 +1957,26 @@ message ActionCacheUpdateCapabilities {
}
// Allowed values for priority in
-// [ResultsCachePolicy][google.devtools.remoteexecution.v2.ResultsCachePolicy]
+// [ResultsCachePolicy][build.bazel.remoteexecution.v2.ResultsCachePolicy] and
+// [ExecutionPolicy][build.bazel.remoteexecution.v2.ResultsCachePolicy]
// Used for querying both cache and execution valid priority ranges.
message PriorityCapabilities {
// Supported range of priorities, including boundaries.
message PriorityRange {
+ // The minimum numeric value for this priority range, which represents the
+ // most urgent task or longest retained item.
int32 min_priority = 1;
+ // The maximum numeric value for this priority range, which represents the
+ // least urgent task or shortest retained item.
int32 max_priority = 2;
}
repeated PriorityRange priorities = 1;
}
-// Capabilities of the remote cache system.
-message CacheCapabilities {
- // Describes how the server treats absolute symlink targets.
- enum SymlinkAbsolutePathStrategy {
+// Describes how the server treats absolute symlink targets.
+message SymlinkAbsolutePathStrategy {
+ enum Value {
+ // Invalid value.
UNKNOWN = 0;
// Server will return an `INVALID_ARGUMENT` on input symlinks with absolute
@@ -1365,10 +1989,36 @@ message CacheCapabilities {
// resulting in non-hermetic builds.
ALLOWED = 2;
}
+}
+
+// Compression formats which may be supported.
+message Compressor {
+ enum Value {
+ // No compression. Servers and clients MUST always support this, and do
+ // not need to advertise it.
+ IDENTITY = 0;
+
+ // Zstandard compression.
+ ZSTD = 1;
+
+ // RFC 1951 Deflate. This format is identical to what is used by ZIP
+ // files. Headers such as the one generated by gzip are not
+ // included.
+ //
+ // It is advised to use algorithms such as Zstandard instead, as
+ // those are faster and/or provide a better compression ratio.
+ DEFLATE = 2;
+
+ // Brotli compression.
+ BROTLI = 3;
+ }
+}
+// Capabilities of the remote cache system.
+message CacheCapabilities {
// All the digest functions supported by the remote cache.
// Remote cache may support multiple digest functions simultaneously.
- repeated DigestFunction digest_function = 1;
+ repeated DigestFunction.Value digest_functions = 1;
// Capabilities for updating the action cache.
ActionCacheUpdateCapabilities action_cache_update_capabilities = 2;
@@ -1383,19 +2033,52 @@ message CacheCapabilities {
int64 max_batch_total_size_bytes = 4;
// Whether absolute symlink targets are supported.
- SymlinkAbsolutePathStrategy symlink_absolute_path_strategy = 5;
+ SymlinkAbsolutePathStrategy.Value symlink_absolute_path_strategy = 5;
+
+ // Compressors supported by the "compressed-blobs" bytestream resources.
+ // Servers MUST support identity/no-compression, even if it is not listed
+ // here.
+ //
+ // Note that this does not imply which if any compressors are supported by
+ // the server at the gRPC level.
+ repeated Compressor.Value supported_compressors = 6;
+
+ // Compressors supported for inlined data in
+ // [BatchUpdateBlobs][build.bazel.remote.execution.v2.ContentAddressableStorage.BatchUpdateBlobs]
+ // requests.
+ repeated Compressor.Value supported_batch_update_compressors = 7;
}
// Capabilities of the remote execution system.
message ExecutionCapabilities {
- // Remote execution may only support a single digest function.
- DigestFunction digest_function = 1;
+ // Legacy field for indicating which digest function is supported by the
+ // remote execution system. It MUST be set to a value other than UNKNOWN.
+ // Implementations should consider the repeated digest_functions field
+ // first, falling back to this singular field if digest_functions is unset.
+ DigestFunction.Value digest_function = 1;
// Whether remote execution is enabled for the particular server/instance.
bool exec_enabled = 2;
// Supported execution priority range.
PriorityCapabilities execution_priority_capabilities = 3;
+
+ // Supported node properties.
+ repeated string supported_node_properties = 4;
+
+ // All the digest functions supported by the remote execution system.
+ // If this field is set, it MUST also contain digest_function.
+ //
+ // Even if the remote execution system announces support for multiple
+ // digest functions, individual execution requests may only reference
+ // CAS objects using a single digest function. For example, it is not
+ // permitted to execute actions having both MD5 and SHA-256 hashed
+ // files in their input root.
+ //
+ // The CAS objects referenced by action results generated by the
+ // remote execution system MUST use the same digest function as the
+ // one used to construct the action.
+ repeated DigestFunction.Value digest_functions = 5;
}
// Details for the tool used to call the API.
@@ -1414,6 +2097,11 @@ message ToolDetails {
//
// * name: `build.bazel.remote.execution.v2.requestmetadata-bin`
// * contents: the base64 encoded binary `RequestMetadata` message.
+// Note: the gRPC library serializes binary headers encoded in base64 by
+// default (https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests).
+// Therefore, if the gRPC library is used to pass/retrieve this
+// metadata, the user may ignore the base64 encoding and assume it is simply
+// serialized as a binary message.
message RequestMetadata {
// The details for the tool invoking the requests.
ToolDetails tool_details = 1;
@@ -1430,4 +2118,18 @@ message RequestMetadata {
// An identifier to tie multiple tool invocations together. For example,
// runs of foo_test, bar_test and baz_test on a post-submit of a given patch.
string correlated_invocations_id = 4;
+
+ // A brief description of the kind of action, for example, CppCompile or GoLink.
+ // There is no standard agreed set of values for this, and they are expected to vary between different client tools.
+ string action_mnemonic = 5;
+
+ // An identifier for the target which produced this action.
+ // No guarantees are made around how many actions may relate to a single target.
+ string target_id = 6;
+
+ // An identifier for the configuration in which the target was built,
+ // e.g. for differentiating building host tools or different target platforms.
+ // There is no expectation that this value will have any particular structure,
+ // or equality across invocations, though some client tools may offer these guarantees.
+ string configuration_id = 7;
}
diff --git a/build/bazel/remote/execution/v2/sha256tree_test_vectors.txt b/build/bazel/remote/execution/v2/sha256tree_test_vectors.txt
new file mode 100644
index 0000000..d048317
--- /dev/null
+++ b/build/bazel/remote/execution/v2/sha256tree_test_vectors.txt
@@ -0,0 +1,27 @@
+# Test vectors for the SHA256TREE digest function
+#
+# Each test vector corresponds to the hash of a repeating sequence of
+# 251 bytes: 0, 1, 2, ..., 249, 250, 0, 1, ..., and so on. The number in
+# the first column corresponds to the length of the sequence, in bytes.
+#
+# Test vectors for input lengths 1024 and less are not provided, as
+# those are identical to those of plain SHA-256.
+
+1025 36c0998b21839ef74300b9de47d96d1f62323dc81f2b4231e98ce70cd6ffe750
+2048 b584996386f01793751c5cf0c39561f51b7e9924b818943b3cb2f6928cea0fa9
+2049 7318d2029b0392edf4cf109edb5a086b4bdadbb7950f710a1483eb881d9e5d44
+3072 dfc61c0a041f79d55d53bfe31c6cda7df77fdc8e6fbac1143d70b7144fdf6937
+3073 517d20c0e5835f060a1bd6388ed68574f63424bdac2a2c3a35a5c2ef859d8fe2
+4096 2f72bb93880012168c027f6781527ff08177c7c8dccb443f4d2c6389c186633d
+4097 c3ec942c1b8f4580320d3a06bcf4f8fe1f5db2be797ab67061ea4c2a95f208f2
+5120 a76924f6535b4b473377c285ec27acc84cc58e95ab1e9e29b1bb6a4a3fb9d0b3
+5121 98f987c3e9fc057a70873715b679b89a663d0df806859b6ce73f8379b06a10ff
+6144 372f988af412041b680ab236feef45626380062beb7514bbf93607aedd28fc9a
+6145 6dc4b78efd770453417b2ffdc74b27054793efe6122ecd7ee098670ed7c4651c
+7168 43686312c0cabccf9d5ad509efa096e3d743c63c7a51f122473c57949e4dd9a0
+7169 ad729297ab36cd099665b27c4247474a5518e4cd0be443f5f31d95edda08429b
+8192 fcfdde6fe59178e17708c5ba647919c3b141a44c9d1970782e597e1465266932
+8193 113c6e3a2452f388b6fad13dfab66ee0bff597a0a9a517ad8d0165f7190b603e
+16384 a7a10149a8cb00be537000560edb83b196306b780b72fad8af218f369f75fc19
+31744 2cdf7662636c173d4b236f6ea03bf84c65e7f6487b53b2a61c420e26cf8a98c7
+102400 0668d69e5331840d2f1823d717b7b3f5d1fdc8a09504cddb692b87ff83d50e5f
diff --git a/build/bazel/remote/logstream/v1/BUILD b/build/bazel/remote/logstream/v1/BUILD
new file mode 100644
index 0000000..d189c9c
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/BUILD
@@ -0,0 +1,30 @@
+package(default_visibility = ["//visibility:public"])
+
+load("@rules_proto//proto:defs.bzl", "proto_library")
+
+licenses(["notice"])
+
+proto_library(
+ name = "remote_logstream_proto",
+ srcs = ["remote_logstream.proto"],
+)
+
+alias(
+ name = "remote_logstream_java_proto",
+ actual = "//build/bazel/remote/logstream/v1/java:remote_logstream_java_proto",
+)
+
+alias(
+ name = "remote_logstream_cc_proto",
+ actual = "//build/bazel/remote/logstream/v1/cc:remote_logstream_cc_grpc",
+)
+
+alias(
+ name = "remote_logstream_go_proto",
+ actual = "//build/bazel/remote/logstream/v1/go:remote_logstream_go_proto",
+)
+
+alias(
+ name = "go_default_library",
+ actual = "//build/bazel/remote/logstream/v1/go:go_default_library",
+)
diff --git a/build/bazel/remote/logstream/v1/cc/BUILD b/build/bazel/remote/logstream/v1/cc/BUILD
new file mode 100644
index 0000000..21458e0
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/cc/BUILD
@@ -0,0 +1,25 @@
+package(default_visibility = ["//build/bazel/remote/logstream/v1:__pkg__"])
+
+load("//internal:cc_grpc_library.bzl", "cc_grpc_codegen")
+
+cc_proto_library(
+ name = "remote_logstream_cc_proto",
+ deps = ["//build/bazel/remote/logstream/v1:remote_logstream_proto"],
+)
+
+cc_grpc_codegen(
+ name = "remote_logstream_cc_grpc_codegen",
+ proto = "//build/bazel/remote/logstream/v1:remote_logstream_proto",
+)
+
+cc_library(
+ name = "remote_logstream_cc_grpc",
+ srcs = [":remote_logstream_cc_grpc_codegen"],
+ hdrs = [":remote_logstream_cc_grpc_codegen"],
+ include_prefix = "build/bazel/remote/logstream/v1",
+ strip_include_prefix = "/" + package_name(),
+ deps = [
+ ":remote_logstream_cc_proto",
+ "@com_github_grpc_grpc//:grpc++_codegen_proto",
+ ],
+)
diff --git a/build/bazel/remote/logstream/v1/go/BUILD b/build/bazel/remote/logstream/v1/go/BUILD
new file mode 100644
index 0000000..df86f75
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/go/BUILD
@@ -0,0 +1,17 @@
+package(default_visibility = ["//build/bazel/remote/logstream/v1:__pkg__"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+go_proto_library(
+ name = "remote_logstream_go_proto",
+ compilers = ["@io_bazel_rules_go//proto:go_grpc"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/logstream/v1",
+ proto = "//build/bazel/remote/logstream/v1:remote_logstream_proto",
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":remote_logstream_go_proto"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/logstream/v1",
+)
diff --git a/build/bazel/remote/logstream/v1/java/BUILD b/build/bazel/remote/logstream/v1/java/BUILD
new file mode 100644
index 0000000..23f3a2c
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/java/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/remote/logstream/v1:__pkg__"])
+
+java_proto_library(
+ name = "remote_logstream_java_proto",
+ deps = ["//build/bazel/remote/logstream/v1:remote_logstream_proto"],
+)
diff --git a/build/bazel/remote/logstream/v1/remote_logstream.pb.go b/build/bazel/remote/logstream/v1/remote_logstream.pb.go
new file mode 100755
index 0000000..cd1ac2f
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/remote_logstream.pb.go
@@ -0,0 +1,389 @@
+// Copyright 2020 The Bazel 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.
+
+// Log Stream API
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.31.0
+// protoc v3.15.0
+// source: build/bazel/remote/logstream/v1/remote_logstream.proto
+
+package remotelogstream
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Contains all information necessary to create a new LogStream resource.
+type CreateLogStreamRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Required. The parent resource of the created LogStream.
+ // The list of valid types of parent resources of LogStreams is up to the
+ // implementing server.
+ // Example: projects/123
+ Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+}
+
+func (x *CreateLogStreamRequest) Reset() {
+ *x = CreateLogStreamRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_logstream_v1_remote_logstream_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CreateLogStreamRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateLogStreamRequest) ProtoMessage() {}
+
+func (x *CreateLogStreamRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_logstream_v1_remote_logstream_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CreateLogStreamRequest.ProtoReflect.Descriptor instead.
+func (*CreateLogStreamRequest) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CreateLogStreamRequest) GetParent() string {
+ if x != nil {
+ return x.Parent
+ }
+ return ""
+}
+
+// A handle to a log (an ordered sequence of bytes).
+type LogStream struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Structured name of the resource in the format:
+ //
+ // {parent=**}/logstreams/{logstream_id}
+ // Example: projects/123/logstreams/456-def
+ //
+ // Attempting to call the Byte Stream API's `Write` RPC with a LogStream's
+ //
+ // `name` as the value for `ByteStream.Write.resource_name` is an error.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // Resource name to pass to `ByteStream.Write` in the format:
+ //
+ // {parent=**}/logstreams/{logstream_id}/{write_token}
+ // Example: projects/123/logstreams/456-def/789-ghi
+ //
+ // Attempting to call the Byte Stream API's `Read` RPC with a LogStream's
+ //
+ // `write_resource_name` as the value for `ByteStream.Write.resource_name`
+ // is an error.
+ //
+ // `write_resource_name` is separate from `name` to ensure that only the
+ // intended writers can write to a given LogStream. Writers must address write
+ // operations to the `write_resource_name`, not the `name`, and must have
+ // permission to write LogStreams. `write_resource_name` embeds a secret token
+ // and should be protected accordingly; a mishandled `write_resource_name` can
+ // result in unintended writers corrupting the LogStream. Therefore, the field
+ // should be excluded from calls to any calls which retrieve LogStream
+ // metadata (i.e.: `GetLogStream`).
+ //
+ // Bytes written to this resource must to be readable when `ByteStream.Read`
+ // is called with the `name` resource.
+ // Reading a write_resource_name must return an INVALID_ARGUMENT error.
+ WriteResourceName string `protobuf:"bytes,2,opt,name=write_resource_name,json=writeResourceName,proto3" json:"write_resource_name,omitempty"`
+}
+
+func (x *LogStream) Reset() {
+ *x = LogStream{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_remote_logstream_v1_remote_logstream_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LogStream) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LogStream) ProtoMessage() {}
+
+func (x *LogStream) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_remote_logstream_v1_remote_logstream_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LogStream.ProtoReflect.Descriptor instead.
+func (*LogStream) Descriptor() ([]byte, []int) {
+ return file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *LogStream) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *LogStream) GetWriteResourceName() string {
+ if x != nil {
+ return x.WriteResourceName
+ }
+ return ""
+}
+
+var File_build_bazel_remote_logstream_v1_remote_logstream_proto protoreflect.FileDescriptor
+
+var file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDesc = []byte{
+ 0x0a, 0x36, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x76,
+ 0x31, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x74, 0x72, 0x65,
+ 0x61, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x6c, 0x6f, 0x67,
+ 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x22, 0x30, 0x0a, 0x16, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x4f, 0x0a, 0x09, 0x4c,
+ 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13,
+ 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x77, 0x72, 0x69, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x32, 0x8c, 0x01, 0x0a,
+ 0x10, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x12, 0x78, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x53, 0x74,
+ 0x72, 0x65, 0x61, 0x6d, 0x12, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a,
+ 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x74, 0x72,
+ 0x65, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67,
+ 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e,
+ 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x00, 0x42, 0xb3, 0x01, 0x0a, 0x1f,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42,
+ 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+ 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x51, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x72,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x6c, 0x6f,
+ 0x67, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+ 0x65, 0x6c, 0x6f, 0x67, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xa2, 0x02, 0x02, 0x52, 0x4c, 0xaa,
+ 0x02, 0x1f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x52, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x76,
+ 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescOnce sync.Once
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescData = file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDesc
+)
+
+func file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescGZIP() []byte {
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescOnce.Do(func() {
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescData = protoimpl.X.CompressGZIP(file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescData)
+ })
+ return file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDescData
+}
+
+var file_build_bazel_remote_logstream_v1_remote_logstream_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_build_bazel_remote_logstream_v1_remote_logstream_proto_goTypes = []interface{}{
+ (*CreateLogStreamRequest)(nil), // 0: build.bazel.remote.logstream.v1.CreateLogStreamRequest
+ (*LogStream)(nil), // 1: build.bazel.remote.logstream.v1.LogStream
+}
+var file_build_bazel_remote_logstream_v1_remote_logstream_proto_depIdxs = []int32{
+ 0, // 0: build.bazel.remote.logstream.v1.LogStreamService.CreateLogStream:input_type -> build.bazel.remote.logstream.v1.CreateLogStreamRequest
+ 1, // 1: build.bazel.remote.logstream.v1.LogStreamService.CreateLogStream:output_type -> build.bazel.remote.logstream.v1.LogStream
+ 1, // [1:2] is the sub-list for method output_type
+ 0, // [0:1] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_build_bazel_remote_logstream_v1_remote_logstream_proto_init() }
+func file_build_bazel_remote_logstream_v1_remote_logstream_proto_init() {
+ if File_build_bazel_remote_logstream_v1_remote_logstream_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CreateLogStreamRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LogStream); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_build_bazel_remote_logstream_v1_remote_logstream_proto_goTypes,
+ DependencyIndexes: file_build_bazel_remote_logstream_v1_remote_logstream_proto_depIdxs,
+ MessageInfos: file_build_bazel_remote_logstream_v1_remote_logstream_proto_msgTypes,
+ }.Build()
+ File_build_bazel_remote_logstream_v1_remote_logstream_proto = out.File
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_rawDesc = nil
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_goTypes = nil
+ file_build_bazel_remote_logstream_v1_remote_logstream_proto_depIdxs = nil
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// LogStreamServiceClient is the client API for LogStreamService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type LogStreamServiceClient interface {
+ // Create a LogStream which may be written to.
+ //
+ // The returned LogStream resource name will include a `write_resource_name`
+ // which is the resource to use when writing to the LogStream.
+ // Callers of CreateLogStream are expected to NOT publish the
+ // `write_resource_name`.
+ CreateLogStream(ctx context.Context, in *CreateLogStreamRequest, opts ...grpc.CallOption) (*LogStream, error)
+}
+
+type logStreamServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewLogStreamServiceClient(cc grpc.ClientConnInterface) LogStreamServiceClient {
+ return &logStreamServiceClient{cc}
+}
+
+func (c *logStreamServiceClient) CreateLogStream(ctx context.Context, in *CreateLogStreamRequest, opts ...grpc.CallOption) (*LogStream, error) {
+ out := new(LogStream)
+ err := c.cc.Invoke(ctx, "/build.bazel.remote.logstream.v1.LogStreamService/CreateLogStream", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// LogStreamServiceServer is the server API for LogStreamService service.
+type LogStreamServiceServer interface {
+ // Create a LogStream which may be written to.
+ //
+ // The returned LogStream resource name will include a `write_resource_name`
+ // which is the resource to use when writing to the LogStream.
+ // Callers of CreateLogStream are expected to NOT publish the
+ // `write_resource_name`.
+ CreateLogStream(context.Context, *CreateLogStreamRequest) (*LogStream, error)
+}
+
+// UnimplementedLogStreamServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedLogStreamServiceServer struct {
+}
+
+func (*UnimplementedLogStreamServiceServer) CreateLogStream(context.Context, *CreateLogStreamRequest) (*LogStream, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method CreateLogStream not implemented")
+}
+
+func RegisterLogStreamServiceServer(s *grpc.Server, srv LogStreamServiceServer) {
+ s.RegisterService(&_LogStreamService_serviceDesc, srv)
+}
+
+func _LogStreamService_CreateLogStream_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(CreateLogStreamRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(LogStreamServiceServer).CreateLogStream(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/build.bazel.remote.logstream.v1.LogStreamService/CreateLogStream",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(LogStreamServiceServer).CreateLogStream(ctx, req.(*CreateLogStreamRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _LogStreamService_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "build.bazel.remote.logstream.v1.LogStreamService",
+ HandlerType: (*LogStreamServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "CreateLogStream",
+ Handler: _LogStreamService_CreateLogStream_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "build/bazel/remote/logstream/v1/remote_logstream.proto",
+}
diff --git a/build/bazel/remote/logstream/v1/remote_logstream.proto b/build/bazel/remote/logstream/v1/remote_logstream.proto
new file mode 100644
index 0000000..2741016
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/remote_logstream.proto
@@ -0,0 +1,139 @@
+// Copyright 2020 The Bazel 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.
+
+// Log Stream API
+
+syntax = "proto3";
+
+package build.bazel.remote.logstream.v1;
+
+option csharp_namespace = "Build.Bazel.Remote.LogStream.v1";
+option go_package = "github.com/bazelbuild/remote-apis/build/bazel/remote/logstream/v1;remotelogstream";
+option java_multiple_files = true;
+option java_outer_classname = "RemoteLogStreamProto";
+option java_package = "build.bazel.remote.logstream.v1";
+option objc_class_prefix = "RL";
+
+
+// #### Introduction
+//
+// The Log Stream API manages LogStream resources which are used to stream
+// writes and reads of an ordered sequence of bytes of unknown eventual length.
+//
+// Note that this is an API Interface and not an API Service, per the definitions
+// at: https://cloud.google.com/apis/design/glossary
+//
+// Log Stream API supports the reading of unfinalized LogStreams either by
+// seeking or in "tail" mode, for example by end-users browsing to a build
+// result UI interested in seeing logs from a build action as soon as they are
+// (or as they become) available.
+//
+// Reads and Writes of LogStreams are done via the Byte Stream API:
+// https://cloud.google.com/dataproc/docs/reference/rpc/google.bytestream
+// https://github.com/googleapis/googleapis/blob/master/google/bytestream/bytestream.proto
+//
+// #### Writing LogStreams
+//
+// LogStreams are written to via the Byte Stream API's `Write` RPC. Bytes
+// written to LogStreams are expected to be committed and available for reading
+// within a reasonable period of time (implementation-defined). Committed bytes
+// to a LogStream cannot be overwritten, and finalized LogStreams - indicated by
+// setting `finish_write` field in the final WriteRequest - also cannot be
+// appended to.
+//
+// When calling the Byte Stream API's `Write` RPC to write LogStreams, writers
+// must pass the `write_resource_name` of a LogStream as
+// `ByteStream.WriteRequest.resource_name` rather than the LogStream's `name`.
+// Separate resource names for reading and writing allows for broadcasting the
+// read resource name widely while simultaneously ensuring that only writer(s)
+// with knowledge of the write resource name may have written bytes to the
+// LogStream.
+//
+// #### Reading LogStreams
+//
+// Use the Byte Stream API's `Read` RPC to read LogStreams. When reading
+// finalized LogStreams the server will stream all contents of the LogStream
+// starting at `ByteStream.ReadRequest.read_offset`.
+//
+// When reading unfinalized LogStreams the server must keep the streaming
+// `ByteStream.Read` RPC open and send `ByteStream.ReadResponse` messages as
+// more bytes become available or the LogStream is finalized.
+//
+// #### Example Multi-Party Read/Write Flow
+//
+// 1. LogStream Writer calls `CreateLogStream`
+// 2. LogStream Writer publishes `LogStream.name`
+// 3. LogStream Writer calls `ByteStream.Write` with
+// `LogStream.write_resource_name` as
+// `ByteStream.WriteRequest.resource_name`,
+// `ByteStream.WriteRequest.finish_write`=false.
+// 4. LogStream Reader(s) call `ByteStream.Read` with the published
+// `LogStream.name` as `ByteStream.ReadRequest.resource_name`.
+// 5. LogStream Service streams all committed bytes to LogStream Reader(s),
+// leave the stream open.
+// 6. LogStream Writer calls `ByteStream.Write` with
+// `LogStream.write_resource_name` as
+// `ByteStream.WriteRequest.resource_name`,
+// `ByteStream.WriteRequest.finish_write`=true.
+// 7. LogStream Service streams all remaining bytes to LogStream Reader(s),
+// terminates the stream.
+service LogStreamService {
+ // Create a LogStream which may be written to.
+ //
+ // The returned LogStream resource name will include a `write_resource_name`
+ // which is the resource to use when writing to the LogStream.
+ // Callers of CreateLogStream are expected to NOT publish the
+ // `write_resource_name`.
+ rpc CreateLogStream(CreateLogStreamRequest) returns (LogStream) {}
+}
+
+// Contains all information necessary to create a new LogStream resource.
+message CreateLogStreamRequest {
+ // Required. The parent resource of the created LogStream.
+ // The list of valid types of parent resources of LogStreams is up to the
+ // implementing server.
+ // Example: projects/123
+ string parent = 1;
+}
+
+// A handle to a log (an ordered sequence of bytes).
+message LogStream {
+ // Structured name of the resource in the format:
+ // {parent=**}/logstreams/{logstream_id}
+ // Example: projects/123/logstreams/456-def
+ // Attempting to call the Byte Stream API's `Write` RPC with a LogStream's
+ // `name` as the value for `ByteStream.Write.resource_name` is an error.
+ string name = 1;
+
+ // Resource name to pass to `ByteStream.Write` in the format:
+ // {parent=**}/logstreams/{logstream_id}/{write_token}
+ // Example: projects/123/logstreams/456-def/789-ghi
+ // Attempting to call the Byte Stream API's `Read` RPC with a LogStream's
+ // `write_resource_name` as the value for `ByteStream.Write.resource_name`
+ // is an error.
+ //
+ // `write_resource_name` is separate from `name` to ensure that only the
+ // intended writers can write to a given LogStream. Writers must address write
+ // operations to the `write_resource_name`, not the `name`, and must have
+ // permission to write LogStreams. `write_resource_name` embeds a secret token
+ // and should be protected accordingly; a mishandled `write_resource_name` can
+ // result in unintended writers corrupting the LogStream. Therefore, the field
+ // should be excluded from calls to any calls which retrieve LogStream
+ // metadata (i.e.: `GetLogStream`).
+ //
+ // Bytes written to this resource must to be readable when `ByteStream.Read`
+ // is called with the `name` resource.
+ // Reading a write_resource_name must return an INVALID_ARGUMENT error.
+ string write_resource_name = 2;
+}
diff --git a/build/bazel/semver/BUILD b/build/bazel/semver/BUILD
index a3da887..9663c94 100644
--- a/build/bazel/semver/BUILD
+++ b/build/bazel/semver/BUILD
@@ -1,5 +1,6 @@
package(default_visibility = ["//visibility:public"])
-load("@com_github_grpc_grpc//bazel:cc_grpc_library.bzl", "cc_grpc_library")
+
+load("@rules_proto//proto:defs.bzl", "proto_library")
licenses(["notice"])
@@ -8,17 +9,22 @@ proto_library(
srcs = ["semver.proto"],
)
-java_proto_library(
+alias(
name = "semver_java_proto",
- deps = [":semver_proto"],
+ actual = "//build/bazel/semver/java:semver_java_proto",
)
-cc_grpc_library(
+alias(
name = "semver_cc_proto",
- srcs = ["semver.proto"],
- deps = [],
- proto_only = False,
- well_known_protos = True,
- use_external = False,
+ actual = "//build/bazel/semver/cc:semver_cc_proto",
)
+alias(
+ name = "semver_go_proto",
+ actual = "//build/bazel/semver/go:semver_go_proto",
+)
+
+alias(
+ name = "go_default_library",
+ actual = "//build/bazel/semver/go:go_default_library",
+)
diff --git a/build/bazel/semver/cc/BUILD b/build/bazel/semver/cc/BUILD
new file mode 100644
index 0000000..ceda8a5
--- /dev/null
+++ b/build/bazel/semver/cc/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/semver:__pkg__"])
+
+cc_proto_library(
+ name = "semver_cc_proto",
+ deps = ["//build/bazel/semver:semver_proto"],
+)
diff --git a/build/bazel/semver/go/BUILD b/build/bazel/semver/go/BUILD
new file mode 100644
index 0000000..3023c19
--- /dev/null
+++ b/build/bazel/semver/go/BUILD
@@ -0,0 +1,16 @@
+package(default_visibility = ["//build/bazel/semver:__pkg__"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+go_proto_library(
+ name = "semver_go_proto",
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/semver",
+ proto = "//build/bazel/semver:semver_proto",
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":semver_go_proto"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/semver",
+)
diff --git a/build/bazel/semver/java/BUILD b/build/bazel/semver/java/BUILD
new file mode 100644
index 0000000..7148af3
--- /dev/null
+++ b/build/bazel/semver/java/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/semver:__pkg__"])
+
+java_proto_library(
+ name = "semver_java_proto",
+ deps = ["//build/bazel/semver:semver_proto"],
+)
diff --git a/build/bazel/semver/semver.pb.go b/build/bazel/semver/semver.pb.go
new file mode 100755
index 0000000..a33beca
--- /dev/null
+++ b/build/bazel/semver/semver.pb.go
@@ -0,0 +1,199 @@
+// Copyright 2018 The Bazel 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.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.31.0
+// protoc v3.15.0
+// source: build/bazel/semver/semver.proto
+
+package semver
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// The full version of a given tool.
+type SemVer struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The major version, e.g 10 for 10.2.3.
+ Major int32 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"`
+ // The minor version, e.g. 2 for 10.2.3.
+ Minor int32 `protobuf:"varint,2,opt,name=minor,proto3" json:"minor,omitempty"`
+ // The patch version, e.g 3 for 10.2.3.
+ Patch int32 `protobuf:"varint,3,opt,name=patch,proto3" json:"patch,omitempty"`
+ // The pre-release version. Either this field or major/minor/patch fields
+ // must be filled. They are mutually exclusive. Pre-release versions are
+ // assumed to be earlier than any released versions.
+ Prerelease string `protobuf:"bytes,4,opt,name=prerelease,proto3" json:"prerelease,omitempty"`
+}
+
+func (x *SemVer) Reset() {
+ *x = SemVer{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_build_bazel_semver_semver_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SemVer) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SemVer) ProtoMessage() {}
+
+func (x *SemVer) ProtoReflect() protoreflect.Message {
+ mi := &file_build_bazel_semver_semver_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SemVer.ProtoReflect.Descriptor instead.
+func (*SemVer) Descriptor() ([]byte, []int) {
+ return file_build_bazel_semver_semver_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *SemVer) GetMajor() int32 {
+ if x != nil {
+ return x.Major
+ }
+ return 0
+}
+
+func (x *SemVer) GetMinor() int32 {
+ if x != nil {
+ return x.Minor
+ }
+ return 0
+}
+
+func (x *SemVer) GetPatch() int32 {
+ if x != nil {
+ return x.Patch
+ }
+ return 0
+}
+
+func (x *SemVer) GetPrerelease() string {
+ if x != nil {
+ return x.Prerelease
+ }
+ return ""
+}
+
+var File_build_bazel_semver_semver_proto protoreflect.FileDescriptor
+
+var file_build_bazel_semver_semver_proto_rawDesc = []byte{
+ 0x0a, 0x1f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x73, 0x65,
+ 0x6d, 0x76, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x12, 0x12, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x73,
+ 0x65, 0x6d, 0x76, 0x65, 0x72, 0x22, 0x6a, 0x0a, 0x06, 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x12,
+ 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
+ 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70,
+ 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63,
+ 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73,
+ 0x65, 0x42, 0x74, 0x0a, 0x12, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x42, 0x0b, 0x53, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x50,
+ 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x72, 0x65,
+ 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f,
+ 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0xa2, 0x02, 0x03, 0x53,
+ 0x4d, 0x56, 0xaa, 0x02, 0x12, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x42, 0x61, 0x7a, 0x65, 0x6c,
+ 0x2e, 0x53, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_build_bazel_semver_semver_proto_rawDescOnce sync.Once
+ file_build_bazel_semver_semver_proto_rawDescData = file_build_bazel_semver_semver_proto_rawDesc
+)
+
+func file_build_bazel_semver_semver_proto_rawDescGZIP() []byte {
+ file_build_bazel_semver_semver_proto_rawDescOnce.Do(func() {
+ file_build_bazel_semver_semver_proto_rawDescData = protoimpl.X.CompressGZIP(file_build_bazel_semver_semver_proto_rawDescData)
+ })
+ return file_build_bazel_semver_semver_proto_rawDescData
+}
+
+var file_build_bazel_semver_semver_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_build_bazel_semver_semver_proto_goTypes = []interface{}{
+ (*SemVer)(nil), // 0: build.bazel.semver.SemVer
+}
+var file_build_bazel_semver_semver_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_build_bazel_semver_semver_proto_init() }
+func file_build_bazel_semver_semver_proto_init() {
+ if File_build_bazel_semver_semver_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_build_bazel_semver_semver_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SemVer); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_build_bazel_semver_semver_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_build_bazel_semver_semver_proto_goTypes,
+ DependencyIndexes: file_build_bazel_semver_semver_proto_depIdxs,
+ MessageInfos: file_build_bazel_semver_semver_proto_msgTypes,
+ }.Build()
+ File_build_bazel_semver_semver_proto = out.File
+ file_build_bazel_semver_semver_proto_rawDesc = nil
+ file_build_bazel_semver_semver_proto_goTypes = nil
+ file_build_bazel_semver_semver_proto_depIdxs = nil
+}
diff --git a/build/bazel/semver/semver.proto b/build/bazel/semver/semver.proto
index 3b626b7..44f83f8 100644
--- a/build/bazel/semver/semver.proto
+++ b/build/bazel/semver/semver.proto
@@ -17,7 +17,7 @@ syntax = "proto3";
package build.bazel.semver;
option csharp_namespace = "Build.Bazel.Semver";
-option go_package = "semver";
+option go_package = "github.com/bazelbuild/remote-apis/build/bazel/semver";
option java_multiple_files = true;
option java_outer_classname = "SemverProto";
option java_package = "build.bazel.semver";
diff --git a/external/BUILD.googleapis b/external/BUILD.googleapis
deleted file mode 100644
index 1cfef9f..0000000
--- a/external/BUILD.googleapis
+++ /dev/null
@@ -1,78 +0,0 @@
-package(default_visibility = ["//visibility:public"])
-
-load("@com_github_grpc_grpc//bazel:cc_grpc_library.bzl", "cc_grpc_library")
-
-licenses(["notice"])
-
-proto_library(
- name = "google_api_annotations_proto",
- srcs = ["google/api/annotations.proto"],
- deps = [
- ":google_api_http_proto",
- "@com_google_protobuf//:descriptor_proto",
- ],
-)
-
-cc_grpc_library(
- name = "google_api_annotations_cc_proto",
- srcs = ["google/api/annotations.proto"],
- deps = [":google_api_http_cc_proto"],
- proto_only = False,
- well_known_protos = True,
- use_external = False,
-)
-
-proto_library(
- name = "google_api_http_proto",
- srcs = ["google/api/http.proto"],
-)
-
-cc_grpc_library(
- name = "google_api_http_cc_proto",
- srcs = ["google/api/http.proto"],
- deps = [],
- proto_only = False,
- well_known_protos = True,
- use_external = False,
-)
-
-proto_library(
- name = "google_longrunning_operations_proto",
- srcs = ["google/longrunning/operations.proto"],
- deps = [
- ":google_api_annotations_proto",
- ":google_api_http_proto",
- ":google_rpc_status_proto",
- "@com_google_protobuf//:any_proto",
- "@com_google_protobuf//:empty_proto",
- ],
-)
-
-cc_grpc_library(
- name = "google_longrunning_operations_cc_proto",
- srcs = ["google/longrunning/operations.proto"],
- deps = [
- ":google_api_annotations_cc_proto",
- ":google_api_http_cc_proto",
- ":google_rpc_status_cc_proto",
- ],
- proto_only = False,
- well_known_protos = True,
- use_external = False,
-)
-
-proto_library(
- name = "google_rpc_status_proto",
- srcs = ["google/rpc/status.proto"],
- deps = ["@com_google_protobuf//:any_proto"],
-)
-
-cc_grpc_library(
- name = "google_rpc_status_cc_proto",
- srcs = ["google/rpc/status.proto"],
- deps = [],
- proto_only = False,
- well_known_protos = True,
- use_external = False,
-)
-
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..2c33596
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,12 @@
+module github.com/bazelbuild/remote-apis
+
+go 1.12
+
+require (
+ github.com/golang/protobuf v1.5.2
+ golang.org/x/net v0.0.0-20210505214959-0714010a04ed // indirect
+ golang.org/x/sys v0.0.0-20210507014357-30e306a8bba5 // indirect
+ google.golang.org/genproto v0.0.0-20210506142907-4a47615972c2
+ google.golang.org/grpc v1.37.0
+ google.golang.org/protobuf v1.26.0
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..2238940
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,123 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
+golang.org/x/net v0.0.0-20210505214959-0714010a04ed h1:V9kAVxLvz1lkufatrpHuUVyJ/5tR3Ms7rk951P4mI98=
+golang.org/x/net v0.0.0-20210505214959-0714010a04ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210507014357-30e306a8bba5 h1:cez+MEm4+A0CG7ik1Qzj3bmK9DFoouuLom9lwM+Ijow=
+golang.org/x/sys v0.0.0-20210507014357-30e306a8bba5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20210506142907-4a47615972c2 h1:pl8qT5D+48655f14yDURpIZwSPvMWuuekfAP+gxtjvk=
+google.golang.org/genproto v0.0.0-20210506142907-4a47615972c2/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.37.0 h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c=
+google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/hooks/pre-commit b/hooks/pre-commit
new file mode 100755
index 0000000..ca2e9e8
--- /dev/null
+++ b/hooks/pre-commit
@@ -0,0 +1,15 @@
+#!/bin/sh
+# Precommit hook to rebuild generated go code. Fails if building or copying the
+# files fails.
+set -e
+bazel build build/bazel/remote/execution/v2:remote_execution_go_proto \
+ build/bazel/remote/asset/v1:remote_asset_go_proto \
+ build/bazel/remote/logstream/v1:remote_logstream_go_proto
+
+for i in "build/bazel/remote/execution/v2/remote_execution.pb.go" \
+ "build/bazel/semver/semver.pb.go" \
+ "build/bazel/remote/asset/v1/remote_asset.pb.go" \
+ "build/bazel/remote/logstream/v1/remote_logstream.pb.go" ; do
+ cp "$(find $(bazel info bazel-bin) -path "*/$i")" "$i"
+ git add "$i"
+done
diff --git a/internal/BUILD b/internal/BUILD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/internal/BUILD
diff --git a/internal/cc_grpc_library.bzl b/internal/cc_grpc_library.bzl
new file mode 100644
index 0000000..a6e8ab0
--- /dev/null
+++ b/internal/cc_grpc_library.bzl
@@ -0,0 +1,118 @@
+"""Rule for running the gRPC C++ code generator.
+
+This is a simplified and modernised version of the upstream gRPC
+`bazel/cc_grpc_library.bzl` file, which as of release v1.45
+(published 2022-03-19) does not support separating the `proto_library` and
+`cc_proto_library` targets into separate packages or repositories.
+
+The following logic should eventually find a home in upstream gRPC, rules_proto,
+or rules_cc so that the Bazel Remote APIs repository can be further decoupled
+from language-specific concerns.
+"""
+
+load("@com_github_grpc_grpc//bazel:protobuf.bzl", "get_include_protoc_args")
+
+_EXT_PROTO = ".proto"
+_EXT_PROTODEVEL = ".protodevel"
+_EXT_GRPC_HDR = ".grpc.pb.h"
+_EXT_GRPC_SRC = ".grpc.pb.cc"
+
+def _drop_proto_ext(name):
+ if name.endswith(_EXT_PROTO):
+ return name[:-len(_EXT_PROTO)]
+ if name.endswith(_EXT_PROTODEVEL):
+ return name[:-len(_EXT_PROTODEVEL)]
+ fail("{!r} does not end with {!r} or {!r}".format(
+ name,
+ _EXT_PROTO,
+ _EXT_PROTODEVEL,
+ ))
+
+def _proto_srcname(file):
+ """Return the Protobuf source name for a proto_library source file.
+
+ The source name is what the Protobuf compiler uses to identify a .proto
+ source file. It is relative to the compiler's `--proto_path` flag.
+ """
+ ws_root = file.owner.workspace_root
+ if ws_root != "" and file.path.startswith(ws_root):
+ return file.path[len(ws_root) + 1:]
+ return file.short_path
+
+def _cc_grpc_codegen(ctx):
+ """Run the gRPC C++ code generator to produce sources and headers"""
+ proto = ctx.attr.proto[ProtoInfo]
+ proto_srcs = proto.check_deps_sources.to_list()
+ proto_imports = proto.transitive_imports.to_list()
+
+ protoc_out = ctx.actions.declare_directory(ctx.attr.name + "_protoc_out")
+ protoc_outputs = [protoc_out]
+ rule_outputs = []
+
+ for proto_src in proto_srcs:
+ srcname = _drop_proto_ext(_proto_srcname(proto_src))
+ basename = _drop_proto_ext(proto_src.basename)
+
+ out_hdr = ctx.actions.declare_file(basename + _EXT_GRPC_HDR)
+ out_src = ctx.actions.declare_file(basename + _EXT_GRPC_SRC)
+
+ protoc_out_prefix = protoc_out.basename
+ protoc_out_hdr = ctx.actions.declare_file(
+ "{}/{}".format(protoc_out_prefix, srcname + _EXT_GRPC_HDR),
+ )
+ protoc_out_src = ctx.actions.declare_file(
+ "{}/{}".format(protoc_out_prefix, srcname + _EXT_GRPC_SRC),
+ )
+
+ rule_outputs.extend([out_hdr, out_src])
+ protoc_outputs.extend([protoc_out_hdr, protoc_out_src])
+
+ ctx.actions.expand_template(
+ template = protoc_out_hdr,
+ output = out_hdr,
+ substitutions = {},
+ )
+ ctx.actions.expand_template(
+ template = protoc_out_src,
+ output = out_src,
+ substitutions = {},
+ )
+
+ plugin = ctx.executable._protoc_gen_grpc
+ protoc_args = ctx.actions.args()
+ protoc_args.add("--plugin", "protoc-gen-grpc=" + plugin.path)
+ protoc_args.add("--grpc_out", protoc_out.path)
+
+ protoc_args.add_all(get_include_protoc_args(proto_imports))
+ protoc_args.add_all(proto_srcs, map_each = _proto_srcname)
+
+ ctx.actions.run(
+ executable = ctx.executable._protoc,
+ arguments = [protoc_args],
+ inputs = proto_srcs + proto_imports,
+ outputs = protoc_outputs,
+ tools = [plugin],
+ )
+
+ return DefaultInfo(files = depset(rule_outputs))
+
+cc_grpc_codegen = rule(
+ implementation = _cc_grpc_codegen,
+ attrs = {
+ "proto": attr.label(
+ mandatory = True,
+ allow_single_file = True,
+ providers = [ProtoInfo],
+ ),
+ "_protoc_gen_grpc": attr.label(
+ default = Label("@com_github_grpc_grpc//src/compiler:grpc_cpp_plugin"),
+ executable = True,
+ cfg = "host",
+ ),
+ "_protoc": attr.label(
+ default = Label("//external:protocol_compiler"),
+ executable = True,
+ cfg = "host",
+ ),
+ },
+)
diff --git a/remote_apis_deps.bzl b/remote_apis_deps.bzl
new file mode 100644
index 0000000..c828a2e
--- /dev/null
+++ b/remote_apis_deps.bzl
@@ -0,0 +1,55 @@
+"""Load dependencies needed to depend on the RE API repo."""
+
+load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")
+load("@io_bazel_rules_go//go:deps.bzl", "go_download_sdk", "go_register_toolchains", "go_rules_dependencies")
+
+def _maybe(repo_rule, name, **kwargs):
+ if name not in native.existing_rules():
+ repo_rule(name = name, **kwargs)
+
+def remote_apis_go_deps():
+ """Load dependencies needed to depend on RE API for Go"""
+ go_download_sdk(name = "go_sdk", version = "1.20.6")
+ go_register_toolchains()
+
+ # The version of this repo needs to be in sync with @googleapis
+ go_repository(
+ name = "org_golang_google_genproto",
+ build_extra_args = ["-exclude=vendor"],
+ build_file_generation = "on",
+ build_file_proto_mode = "disable_global",
+ importpath = "google.golang.org/genproto",
+ sum = "h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y=",
+ version = "v0.0.0-20221024183307-1bc688fe9f3e",
+ )
+
+ go_rules_dependencies()
+ gazelle_dependencies(go_sdk = "go_sdk")
+ _maybe(
+ go_repository,
+ name = "com_github_golang_protobuf",
+ importpath = "github.com/golang/protobuf",
+ tag = "v1.3.2",
+ )
+ _maybe(
+ go_repository,
+ name = "org_golang_google_grpc",
+ build_file_proto_mode = "disable",
+ importpath = "google.golang.org/grpc",
+ sum = "h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c=",
+ version = "v1.37.0",
+ )
+ _maybe(
+ go_repository,
+ name = "org_golang_x_net",
+ importpath = "golang.org/x/net",
+ sum = "h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=",
+ version = "v0.0.0-20190311183353-d8887717615a",
+ )
+ _maybe(
+ go_repository,
+ name = "org_golang_x_text",
+ importpath = "golang.org/x/text",
+ sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=",
+ version = "v0.3.0",
+ )
diff --git a/repository_rules.bzl b/repository_rules.bzl
new file mode 100644
index 0000000..b6174ce
--- /dev/null
+++ b/repository_rules.bzl
@@ -0,0 +1,18 @@
+"""Deprecated stub for compatibility with previous releases."""
+
+load("//:remote_apis_deps.bzl", "remote_apis_go_deps")
+
+def switched_rules_by_language(
+ name,
+ java = False,
+ go = False,
+ cc = False,
+ rules_override = {}):
+ """Deprecated stub for compatibility with previous releases."""
+ print(
+ "The switched_rules_by_language macro is deprecated. Consumers of" +
+ " @bazel_remote_apis should specify per-language dependencies in" +
+ " their own workspace.",
+ )
+ if go:
+ remote_apis_go_deps()