summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/serve_api/remote/configuration_client.cpp13
-rw-r--r--src/buildtool/serve_api/remote/configuration_client.hpp2
-rw-r--r--src/buildtool/serve_api/remote/serve_api.hpp4
-rw-r--r--src/buildtool/serve_api/serve_service/TARGETS5
-rw-r--r--src/buildtool/serve_api/serve_service/configuration.cpp10
-rw-r--r--src/buildtool/serve_api/serve_service/configuration.hpp10
-rw-r--r--src/buildtool/serve_api/serve_service/just_serve.proto12
7 files changed, 55 insertions, 1 deletions
diff --git a/src/buildtool/serve_api/remote/configuration_client.cpp b/src/buildtool/serve_api/remote/configuration_client.cpp
index ae5aa3ba..032e548f 100644
--- a/src/buildtool/serve_api/remote/configuration_client.cpp
+++ b/src/buildtool/serve_api/remote/configuration_client.cpp
@@ -87,3 +87,16 @@ auto ConfigurationClient::CheckServeRemoteExecution() -> bool {
client_msg);
return false;
}
+
+auto ConfigurationClient::IsCompatible() -> std::optional<bool> {
+ grpc::ClientContext context;
+ justbuild::just_serve::CompatibilityRequest request{};
+ justbuild::just_serve::CompatibilityResponse response{};
+ grpc::Status status = stub_->Compatibility(&context, request, &response);
+
+ if (not status.ok()) {
+ LogStatus(&logger_, LogLevel::Error, status);
+ return std::nullopt;
+ }
+ return response.compatible();
+}
diff --git a/src/buildtool/serve_api/remote/configuration_client.hpp b/src/buildtool/serve_api/remote/configuration_client.hpp
index eebe11da..f4346a4e 100644
--- a/src/buildtool/serve_api/remote/configuration_client.hpp
+++ b/src/buildtool/serve_api/remote/configuration_client.hpp
@@ -36,6 +36,8 @@ class ConfigurationClient {
auto CheckServeRemoteExecution() -> bool;
+ [[nodiscard]] auto IsCompatible() -> std::optional<bool>;
+
private:
std::unique_ptr<justbuild::just_serve::Configuration::Stub> stub_;
Logger logger_{"RemoteConfigurationClient"};
diff --git a/src/buildtool/serve_api/remote/serve_api.hpp b/src/buildtool/serve_api/remote/serve_api.hpp
index 23b8904b..45a74c33 100644
--- a/src/buildtool/serve_api/remote/serve_api.hpp
+++ b/src/buildtool/serve_api/remote/serve_api.hpp
@@ -111,6 +111,10 @@ class ServeApi final {
return Instance().cc_->CheckServeRemoteExecution();
}
+ [[nodiscard]] static auto IsCompatible() -> std::optional<bool> {
+ return Instance().cc_->IsCompatible();
+ }
+
private:
ServeApi(std::string const& host, Port port) noexcept
: stc_{std::make_unique<SourceTreeClient>(host, port)},
diff --git a/src/buildtool/serve_api/serve_service/TARGETS b/src/buildtool/serve_api/serve_service/TARGETS
index 3790774d..5042875a 100644
--- a/src/buildtool/serve_api/serve_service/TARGETS
+++ b/src/buildtool/serve_api/serve_service/TARGETS
@@ -111,7 +111,10 @@
, "srcs": ["configuration.cpp"]
, "proto": ["just_serve_proto"]
, "stage": ["src", "buildtool", "serve_api", "serve_service"]
- , "private-deps": [["src/buildtool/execution_api/remote", "config"]]
+ , "private-deps":
+ [ ["src/buildtool/compatibility", "compatibility"]
+ , ["src/buildtool/execution_api/remote", "config"]
+ ]
}
, "target_utils":
{ "type": ["@", "rules", "CC", "library"]
diff --git a/src/buildtool/serve_api/serve_service/configuration.cpp b/src/buildtool/serve_api/serve_service/configuration.cpp
index a4d0ba88..af939eee 100644
--- a/src/buildtool/serve_api/serve_service/configuration.cpp
+++ b/src/buildtool/serve_api/serve_service/configuration.cpp
@@ -16,6 +16,7 @@
#include <optional>
+#include "src/buildtool/compatibility/compatibility.hpp"
#include "src/buildtool/execution_api/remote/config.hpp"
auto ConfigurationService::RemoteExecutionEndpoint(
@@ -27,3 +28,12 @@ auto ConfigurationService::RemoteExecutionEndpoint(
response->set_address(address ? address->ToJson().dump() : std::string());
return ::grpc::Status::OK;
}
+
+auto ConfigurationService::Compatibility(
+ ::grpc::ServerContext* /*context*/,
+ const ::justbuild::just_serve::CompatibilityRequest* /*request*/,
+ ::justbuild::just_serve::CompatibilityResponse* response)
+ -> ::grpc::Status {
+ response->set_compatible(Compatibility::IsCompatible());
+ return ::grpc::Status::OK;
+}
diff --git a/src/buildtool/serve_api/serve_service/configuration.hpp b/src/buildtool/serve_api/serve_service/configuration.hpp
index c466576f..e09cf0b4 100644
--- a/src/buildtool/serve_api/serve_service/configuration.hpp
+++ b/src/buildtool/serve_api/serve_service/configuration.hpp
@@ -30,6 +30,16 @@ class ConfigurationService final
const ::justbuild::just_serve::RemoteExecutionEndpointRequest* request,
::justbuild::just_serve::RemoteExecutionEndpointResponse* response)
-> ::grpc::Status override;
+
+ // Returns a flag signaling whether the associated remote execution
+ // endpoint uses the standard remote-execution protocol.
+ //
+ // There are no method-specific errors.
+ auto Compatibility(
+ ::grpc::ServerContext* context,
+ const ::justbuild::just_serve::CompatibilityRequest* request,
+ ::justbuild::just_serve::CompatibilityResponse* response)
+ -> ::grpc::Status override;
};
#endif // INCLUDED_SRC_BUILD_SERVE_API_SERVE_SERVICE_CONFIGURATION_HPP
diff --git a/src/buildtool/serve_api/serve_service/just_serve.proto b/src/buildtool/serve_api/serve_service/just_serve.proto
index 985dfecd..f9bcf1b1 100644
--- a/src/buildtool/serve_api/serve_service/just_serve.proto
+++ b/src/buildtool/serve_api/serve_service/just_serve.proto
@@ -448,6 +448,12 @@ message RemoteExecutionEndpointResponse {
string address = 1;
}
+message CompatibilityRequest {}
+
+message CompatibilityResponse {
+ bool compatible = 1;
+}
+
// This service can be used by the client to double check the server configuration
service Configuration {
// Returns the address of the associated remote endpoint, if set,
@@ -456,4 +462,10 @@ service Configuration {
//
// There are no method-specific errors.
rpc RemoteExecutionEndpoint(RemoteExecutionEndpointRequest) returns (RemoteExecutionEndpointResponse) {}
+
+ // Returns a flag signaling whether the associated remote execution
+ // endpoint uses the standard remote-execution protocol.
+ //
+ // There are no method-specific errors.
+ rpc Compatibility(CompatibilityRequest) returns (CompatibilityResponse) {}
}