diff options
Diffstat (limited to 'src/buildtool/main/main.cpp')
-rw-r--r-- | src/buildtool/main/main.cpp | 80 |
1 files changed, 39 insertions, 41 deletions
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index bdd1bed5..357bf7e9 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -23,6 +23,7 @@ #include <unordered_map> #include <unordered_set> #include <utility> +#include <variant> #include "gsl/gsl" #include "nlohmann/json.hpp" @@ -152,45 +153,38 @@ void SetupExecutionConfig(EndpointArguments const& eargs, } } -void SetupServeConfig(ServeArguments const& srvargs, - CommonArguments const& cargs, - BuildArguments const& bargs, - TCArguments const& tc) { - if (srvargs.remote_serve_address) { - if (not RemoteServeConfig::Instance().SetRemoteAddress( - *srvargs.remote_serve_address)) { - Logger::Log(LogLevel::Error, - "Setting serve service address '{}' failed.", - *srvargs.remote_serve_address); - std::exit(kExitFailure); - } - } - if (not srvargs.repositories.empty() and - not RemoteServeConfig::Instance().SetKnownRepositories( - srvargs.repositories)) { - Logger::Log(LogLevel::Error, - "Setting serve service repositories failed."); - std::exit(kExitFailure); - } - // make parallelism and build options available for remote builds - if (not RemoteServeConfig::Instance().SetJobs(cargs.jobs)) { - Logger::Log(LogLevel::Error, "Setting jobs failed."); - std::exit(kExitFailure); - } - if (bargs.build_jobs > 0 and - not RemoteServeConfig::Instance().SetBuildJobs(bargs.build_jobs)) { - Logger::Log(LogLevel::Error, "Setting build jobs failed."); - std::exit(kExitFailure); +[[nodiscard]] auto CreateServeConfig(ServeArguments const& srvargs, + CommonArguments const& cargs, + BuildArguments const& bargs, + TCArguments const& tc) noexcept + -> std::optional<RemoteServeConfig> { + RemoteServeConfig::Builder builder; + builder.SetRemoteAddress(srvargs.remote_serve_address) + .SetKnownRepositories(srvargs.repositories) + .SetJobs(cargs.jobs) + .SetActionTimeout(bargs.timeout) + .SetTCStrategy(tc.target_cache_write_strategy); + + if (bargs.build_jobs > 0) { + builder.SetBuildJobs(bargs.build_jobs); } - if (not RemoteServeConfig::Instance().SetActionTimeout(bargs.timeout)) { - Logger::Log(LogLevel::Error, "Setting action timeout failed."); - std::exit(kExitFailure); + + auto result = builder.Build(); + if (auto* config = std::get_if<RemoteServeConfig>(&result)) { + if (config->TCStrategy() == TargetCacheWriteStrategy::Disable) { + Logger::Log( + LogLevel::Info, + "Target-level cache writing of serve service is disabled."); + } + return std::move(*config); } - RemoteServeConfig::Instance().SetTCStrategy(tc.target_cache_write_strategy); - if (tc.target_cache_write_strategy == TargetCacheWriteStrategy::Disable) { - Logger::Log(LogLevel::Info, - "Target-level cache writing of serve service is disabled."); + + if (auto* error = std::get_if<std::string>(&result)) { + Logger::Log(LogLevel::Error, *error); + return std::nullopt; } + Logger::Log(LogLevel::Error, "Unknown error occured"); + return std::nullopt; } void SetupAuthConfig(CommonAuthArguments const& authargs, @@ -845,8 +839,13 @@ auto main(int argc, char* argv[]) -> int { SetupFileChunker(); SetupExecutionConfig( arguments.endpoint, arguments.build, arguments.rebuild); - SetupServeConfig( + + auto serve_config = CreateServeConfig( arguments.serve, arguments.common, arguments.build, arguments.tc); + if (not serve_config) { + return kExitFailure; + } + SetupAuthConfig(arguments.auth, arguments.cauth, arguments.sauth); if (arguments.cmd == SubCommand::kGc) { @@ -867,9 +866,9 @@ auto main(int argc, char* argv[]) -> int { if (arguments.cmd == SubCommand::kServe) { SetupServeServiceConfig(arguments.service); - auto serve = ServeApi::Create(RemoteServeConfig::Instance()); + auto serve = ServeApi::Create(*serve_config); if (!ServeServerImpl::Instance().Run( - RemoteServeConfig::Instance(), + *serve_config, serve, !RemoteExecutionConfig::RemoteAddress())) { return kExitFailure; @@ -952,8 +951,7 @@ auto main(int argc, char* argv[]) -> int { DetermineRoots(&repo_config, arguments.common, arguments.analysis); #ifndef BOOTSTRAP_BUILD_TOOL - std::optional<ServeApi> serve = - ServeApi::Create(RemoteServeConfig::Instance()); + std::optional<ServeApi> serve = ServeApi::Create(*serve_config); #else std::optional<ServeApi> serve; #endif // BOOTSTRAP_BUILD_TOOL |