diff options
Diffstat (limited to 'src')
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) {} } |