summaryrefslogtreecommitdiff
path: root/src/buildtool/main/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/main/main.cpp')
-rw-r--r--src/buildtool/main/main.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp
index b2c04be7..8cc81449 100644
--- a/src/buildtool/main/main.cpp
+++ b/src/buildtool/main/main.cpp
@@ -49,6 +49,8 @@
#include "src/buildtool/graph_traverser/graph_traverser.hpp"
#include "src/buildtool/main/serve.hpp"
#include "src/buildtool/progress_reporting/progress_reporter.hpp"
+#include "src/buildtool/serve_api/remote/config.hpp"
+#include "src/buildtool/serve_api/serve_service/serve_server_implementation.hpp"
#include "src/buildtool/storage/garbage_collector.hpp"
#endif // BOOTSTRAP_BUILD_TOOL
#include "src/buildtool/logging/log_config.hpp"
@@ -132,6 +134,16 @@ void SetupExecutionConfig(EndpointArguments const& eargs,
}
}
+void SetupServeConfig(ServeArguments const& srvargs) {
+ using RemoteConfig = RemoteServeConfig;
+ if (not srvargs.repositories.empty() and
+ not RemoteConfig::SetKnownRepositories(srvargs.repositories)) {
+ Logger::Log(LogLevel::Error,
+ "setting serve service repositories failed.");
+ std::exit(kExitFailure);
+ }
+}
+
void SetupAuthConfig(CommonAuthArguments const& authargs,
ClientAuthArguments const& client_authargs,
ServerAuthArguments const& server_authargs) {
@@ -228,6 +240,39 @@ void SetupExecutionServiceConfig(ServiceArguments const& args) {
}
}
+void SetupServeServiceConfig(ServiceArguments const& args) {
+ if (args.port) {
+ if (!ServeServerImpl::SetPort(*args.port)) {
+ Logger::Log(LogLevel::Error, "Invalid port '{}'", *args.port);
+ std::exit(kExitFailure);
+ }
+ }
+ if (args.info_file) {
+ if (!ServeServerImpl::SetInfoFile(*args.info_file)) {
+ Logger::Log(LogLevel::Error,
+ "Invalid info-file '{}'",
+ args.info_file->string());
+ std::exit(kExitFailure);
+ }
+ }
+ if (args.interface) {
+ if (!ServeServerImpl::SetInterface(*args.interface)) {
+ Logger::Log(LogLevel::Error,
+ "Invalid interface '{}'",
+ args.info_file->string());
+ std::exit(kExitFailure);
+ }
+ }
+ if (args.pid_file) {
+ if (!ServeServerImpl::SetPidFile(*args.pid_file)) {
+ Logger::Log(LogLevel::Error,
+ "Invalid pid-file '{}'",
+ args.info_file->string());
+ std::exit(kExitFailure);
+ }
+ }
+}
+
void SetupHashFunction() {
HashFunction::SetHashType(Compatibility::IsCompatible()
? HashFunction::JustHash::Compatible
@@ -851,6 +896,7 @@ auto main(int argc, char* argv[]) -> int {
SetupHashFunction();
SetupExecutionConfig(
arguments.endpoint, arguments.build, arguments.rebuild);
+ SetupServeConfig(arguments.serve);
SetupAuthConfig(arguments.auth, arguments.cauth, arguments.sauth);
if (arguments.cmd == SubCommand::kGc) {
@@ -867,6 +913,14 @@ auto main(int argc, char* argv[]) -> int {
}
return kExitSuccess;
}
+
+ if (arguments.cmd == SubCommand::kServe) {
+ SetupServeServiceConfig(arguments.service);
+ if (!ServeServerImpl::Instance().Run()) {
+ return kExitFailure;
+ }
+ return kExitSuccess;
+ }
#endif // BOOTSTRAP_BUILD_TOOL
auto jobs = arguments.build.build_jobs > 0 ? arguments.build.build_jobs