summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/execution_api/common/TARGETS1
-rw-r--r--src/buildtool/execution_api/common/api_bundle.cpp2
-rw-r--r--src/buildtool/execution_api/local/TARGETS2
-rw-r--r--src/buildtool/execution_api/local/local_action.cpp3
-rw-r--r--src/buildtool/execution_api/local/local_action.hpp4
-rw-r--r--src/buildtool/execution_api/local/local_api.hpp12
-rw-r--r--test/buildtool/execution_api/local/TARGETS1
-rw-r--r--test/buildtool/execution_api/local/local_api.test.cpp37
-rw-r--r--test/buildtool/execution_api/local/local_execution.test.cpp25
-rw-r--r--test/buildtool/execution_engine/executor/TARGETS1
-rw-r--r--test/buildtool/execution_engine/executor/executor_api_local.test.cpp31
11 files changed, 87 insertions, 32 deletions
diff --git a/src/buildtool/execution_api/common/TARGETS b/src/buildtool/execution_api/common/TARGETS
index 579412d9..2e5d14dd 100644
--- a/src/buildtool/execution_api/common/TARGETS
+++ b/src/buildtool/execution_api/common/TARGETS
@@ -50,6 +50,7 @@
]
, "private-deps":
[ ["src/buildtool/execution_api/bazel_msg", "bazel_msg"]
+ , ["src/buildtool/execution_api/local", "config"]
, ["src/buildtool/execution_api/local", "local"]
, ["src/buildtool/execution_api/remote", "bazel"]
]
diff --git a/src/buildtool/execution_api/common/api_bundle.cpp b/src/buildtool/execution_api/common/api_bundle.cpp
index 933ac1f3..411fb02f 100644
--- a/src/buildtool/execution_api/common/api_bundle.cpp
+++ b/src/buildtool/execution_api/common/api_bundle.cpp
@@ -15,6 +15,7 @@
#include "src/buildtool/execution_api/common/api_bundle.hpp"
#include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp"
+#include "src/buildtool/execution_api/local/config.hpp"
#include "src/buildtool/execution_api/local/local_api.hpp"
#include "src/buildtool/execution_api/remote/bazel/bazel_api.hpp"
@@ -25,6 +26,7 @@ ApiBundle::ApiBundle(gsl::not_null<StorageConfig const*> const& storage_config,
std::optional<ServerAddress> const& remote_address)
: local{std::make_shared<LocalApi>(storage_config,
storage,
+ &LocalExecutionConfig::Instance(),
repo_config)}, // needed by remote
auth{*authentication}, // needed by remote
remote{CreateRemote(remote_address)} {}
diff --git a/src/buildtool/execution_api/local/TARGETS b/src/buildtool/execution_api/local/TARGETS
index da3e4432..2c848bf7 100644
--- a/src/buildtool/execution_api/local/TARGETS
+++ b/src/buildtool/execution_api/local/TARGETS
@@ -30,6 +30,7 @@
[ ["@", "fmt", "", "fmt"]
, ["@", "gsl", "", "gsl"]
, ["@", "grpc", "", "grpc++"]
+ , "config"
, ["src/buildtool/common", "common"]
, ["src/buildtool/common", "config"]
, ["src/buildtool/storage", "storage"]
@@ -51,7 +52,6 @@
, "private-deps":
[ ["src/buildtool/file_system", "object_type"]
, ["src/buildtool/system", "system_command"]
- , "config"
, ["src/buildtool/common", "bazel_types"]
, ["src/buildtool/file_system", "file_system_manager"]
, ["src/buildtool/execution_api/utils", "outputscheck"]
diff --git a/src/buildtool/execution_api/local/local_action.cpp b/src/buildtool/execution_api/local/local_action.cpp
index 955e6724..73d78e36 100644
--- a/src/buildtool/execution_api/local/local_action.cpp
+++ b/src/buildtool/execution_api/local/local_action.cpp
@@ -24,7 +24,6 @@
#include "src/buildtool/common/bazel_types.hpp"
#include "src/buildtool/compatibility/native_support.hpp"
#include "src/buildtool/execution_api/common/tree_reader.hpp"
-#include "src/buildtool/execution_api/local/config.hpp"
#include "src/buildtool/execution_api/local/local_cas_reader.hpp"
#include "src/buildtool/execution_api/local/local_response.hpp"
#include "src/buildtool/execution_api/utils/outputscheck.hpp"
@@ -166,7 +165,7 @@ auto LocalAction::Run(bazel_re::Digest const& action_id) const noexcept
return std::nullopt;
}
- auto cmdline = LocalExecutionConfig::GetLauncher();
+ auto cmdline = exec_config_.GetLauncher();
std::copy(cmdline_.begin(), cmdline_.end(), std::back_inserter(cmdline));
SystemCommand system{"LocalExecution"};
diff --git a/src/buildtool/execution_api/local/local_action.hpp b/src/buildtool/execution_api/local/local_action.hpp
index e62f209f..a9ffe959 100644
--- a/src/buildtool/execution_api/local/local_action.hpp
+++ b/src/buildtool/execution_api/local/local_action.hpp
@@ -28,6 +28,7 @@
#include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp"
#include "src/buildtool/execution_api/common/execution_action.hpp"
#include "src/buildtool/execution_api/common/execution_response.hpp"
+#include "src/buildtool/execution_api/local/config.hpp"
#include "src/buildtool/logging/logger.hpp"
#include "src/buildtool/storage/config.hpp"
#include "src/buildtool/storage/storage.hpp"
@@ -65,6 +66,7 @@ class LocalAction final : public IExecutionAction {
Logger logger_{"LocalExecution"};
StorageConfig const& storage_config_;
Storage const& storage_;
+ LocalExecutionConfig const& exec_config_;
ArtifactDigest const root_digest_{};
std::vector<std::string> const cmdline_{};
std::vector<std::string> output_files_{};
@@ -77,6 +79,7 @@ class LocalAction final : public IExecutionAction {
explicit LocalAction(
gsl::not_null<StorageConfig const*> storage_config,
gsl::not_null<Storage const*> const& storage,
+ gsl::not_null<LocalExecutionConfig const*> const& exec_config,
ArtifactDigest root_digest,
std::vector<std::string> command,
std::vector<std::string> output_files,
@@ -85,6 +88,7 @@ class LocalAction final : public IExecutionAction {
std::map<std::string, std::string> const& properties) noexcept
: storage_config_{*storage_config},
storage_{*storage},
+ exec_config_{*exec_config},
root_digest_{std::move(root_digest)},
cmdline_{std::move(command)},
output_files_{std::move(output_files)},
diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp
index bfa1d6c6..fc133835 100644
--- a/src/buildtool/execution_api/local/local_api.hpp
+++ b/src/buildtool/execution_api/local/local_api.hpp
@@ -43,6 +43,7 @@
#include "src/buildtool/execution_api/common/tree_reader.hpp"
#include "src/buildtool/execution_api/execution_service/cas_utils.hpp"
#include "src/buildtool/execution_api/git/git_api.hpp"
+#include "src/buildtool/execution_api/local/config.hpp"
#include "src/buildtool/execution_api/local/local_action.hpp"
#include "src/buildtool/execution_api/local/local_cas_reader.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
@@ -54,11 +55,14 @@
/// \brief API for local execution.
class LocalApi final : public IExecutionApi {
public:
- explicit LocalApi(gsl::not_null<StorageConfig const*> const& storage_config,
- gsl::not_null<Storage const*> const& storage,
- RepositoryConfig const* repo_config = nullptr) noexcept
+ explicit LocalApi(
+ gsl::not_null<StorageConfig const*> const& storage_config,
+ gsl::not_null<Storage const*> const& storage,
+ gsl::not_null<LocalExecutionConfig const*> const& exec_config,
+ RepositoryConfig const* repo_config = nullptr) noexcept
: storage_config_{*storage_config},
storage_{*storage},
+ exec_config_{*exec_config},
repo_config_{repo_config} {}
[[nodiscard]] auto CreateAction(
@@ -71,6 +75,7 @@ class LocalApi final : public IExecutionApi {
-> IExecutionAction::Ptr final {
return IExecutionAction::Ptr{new LocalAction{&storage_config_,
&storage_,
+ &exec_config_,
root_digest,
command,
output_files,
@@ -411,6 +416,7 @@ class LocalApi final : public IExecutionApi {
private:
StorageConfig const& storage_config_;
Storage const& storage_;
+ LocalExecutionConfig const& exec_config_;
RepositoryConfig const* const repo_config_ = nullptr;
};
diff --git a/test/buildtool/execution_api/local/TARGETS b/test/buildtool/execution_api/local/TARGETS
index 09b88419..41870428 100644
--- a/test/buildtool/execution_api/local/TARGETS
+++ b/test/buildtool/execution_api/local/TARGETS
@@ -25,6 +25,7 @@
, "private-deps":
[ ["@", "catch2", "", "catch2"]
, ["", "catch-main"]
+ , ["@", "src", "src/buildtool/execution_api/local", "config"]
, ["@", "src", "src/buildtool/execution_api/local", "local"]
, ["buildtool/execution_api/common", "api_test"]
, ["utils", "test_storage_config"]
diff --git a/test/buildtool/execution_api/local/local_api.test.cpp b/test/buildtool/execution_api/local/local_api.test.cpp
index a2fee207..164226b9 100644
--- a/test/buildtool/execution_api/local/local_api.test.cpp
+++ b/test/buildtool/execution_api/local/local_api.test.cpp
@@ -16,6 +16,7 @@
#include <string>
#include "catch2/catch_test_macros.hpp"
+#include "src/buildtool/execution_api/local/config.hpp"
#include "src/buildtool/execution_api/local/local_api.hpp"
#include "src/buildtool/storage/config.hpp"
#include "src/buildtool/storage/storage.hpp"
@@ -27,16 +28,22 @@ class FactoryApi final {
public:
explicit FactoryApi(
gsl::not_null<StorageConfig const*> const& storage_config,
- gsl::not_null<Storage const*> const& storage) noexcept
- : storage_config_{*storage_config}, storage_{*storage} {}
+ gsl::not_null<Storage const*> const& storage,
+ gsl::not_null<LocalExecutionConfig const*> const&
+ local_exec_config) noexcept
+ : storage_config_{*storage_config},
+ storage_{*storage},
+ local_exec_config_{*local_exec_config} {}
[[nodiscard]] auto operator()() const -> IExecutionApi::Ptr {
- return IExecutionApi::Ptr{new LocalApi{&storage_config_, &storage_}};
+ return IExecutionApi::Ptr{
+ new LocalApi{&storage_config_, &storage_, &local_exec_config_}};
}
private:
StorageConfig const& storage_config_;
Storage const& storage_;
+ LocalExecutionConfig const& local_exec_config_;
};
} // namespace
@@ -44,7 +51,8 @@ class FactoryApi final {
TEST_CASE("LocalAPI: No input, no output", "[execution_api]") {
auto const storage_config = TestStorageConfig::Create();
auto const storage = Storage::Create(&storage_config.Get());
- FactoryApi api_factory(&storage_config.Get(), &storage);
+ FactoryApi api_factory(
+ &storage_config.Get(), &storage, &LocalExecutionConfig::Instance());
TestNoInputNoOutput(api_factory, {}, /*is_hermetic=*/true);
}
@@ -52,7 +60,8 @@ TEST_CASE("LocalAPI: No input, no output", "[execution_api]") {
TEST_CASE("LocalAPI: No input, create output", "[execution_api]") {
auto const storage_config = TestStorageConfig::Create();
auto const storage = Storage::Create(&storage_config.Get());
- FactoryApi api_factory(&storage_config.Get(), &storage);
+ FactoryApi api_factory(
+ &storage_config.Get(), &storage, &LocalExecutionConfig::Instance());
TestNoInputCreateOutput(api_factory, {}, /*is_hermetic=*/true);
}
@@ -60,7 +69,8 @@ TEST_CASE("LocalAPI: No input, create output", "[execution_api]") {
TEST_CASE("LocalAPI: One input copied to output", "[execution_api]") {
auto const storage_config = TestStorageConfig::Create();
auto const storage = Storage::Create(&storage_config.Get());
- FactoryApi api_factory(&storage_config.Get(), &storage);
+ FactoryApi api_factory(
+ &storage_config.Get(), &storage, &LocalExecutionConfig::Instance());
TestOneInputCopiedToOutput(api_factory, {}, /*is_hermetic=*/true);
}
@@ -68,7 +78,8 @@ TEST_CASE("LocalAPI: One input copied to output", "[execution_api]") {
TEST_CASE("LocalAPI: Non-zero exit code, create output", "[execution_api]") {
auto const storage_config = TestStorageConfig::Create();
auto const storage = Storage::Create(&storage_config.Get());
- FactoryApi api_factory(&storage_config.Get(), &storage);
+ FactoryApi api_factory(
+ &storage_config.Get(), &storage, &LocalExecutionConfig::Instance());
TestNonZeroExitCodeCreateOutput(api_factory, {});
}
@@ -76,7 +87,8 @@ TEST_CASE("LocalAPI: Non-zero exit code, create output", "[execution_api]") {
TEST_CASE("LocalAPI: Retrieve two identical trees to path", "[execution_api]") {
auto const storage_config = TestStorageConfig::Create();
auto const storage = Storage::Create(&storage_config.Get());
- FactoryApi api_factory(&storage_config.Get(), &storage);
+ FactoryApi api_factory(
+ &storage_config.Get(), &storage, &LocalExecutionConfig::Instance());
TestRetrieveTwoIdenticalTreesToPath(
api_factory, {}, "two_trees", /*is_hermetic=*/true);
@@ -86,7 +98,8 @@ TEST_CASE("LocalAPI: Retrieve file and symlink with same content to path",
"[execution_api]") {
auto const storage_config = TestStorageConfig::Create();
auto const storage = Storage::Create(&storage_config.Get());
- FactoryApi api_factory(&storage_config.Get(), &storage);
+ FactoryApi api_factory(
+ &storage_config.Get(), &storage, &LocalExecutionConfig::Instance());
TestRetrieveFileAndSymlinkWithSameContentToPath(
api_factory, {}, "file_and_symlink", /*is_hermetic=*/true);
@@ -95,7 +108,8 @@ TEST_CASE("LocalAPI: Retrieve file and symlink with same content to path",
TEST_CASE("LocalAPI: Retrieve mixed blobs and trees", "[execution_api]") {
auto const storage_config = TestStorageConfig::Create();
auto const storage = Storage::Create(&storage_config.Get());
- FactoryApi api_factory(&storage_config.Get(), &storage);
+ FactoryApi api_factory(
+ &storage_config.Get(), &storage, &LocalExecutionConfig::Instance());
TestRetrieveMixedBlobsAndTrees(
api_factory, {}, "blobs_and_trees", /*is_hermetic=*/true);
@@ -104,7 +118,8 @@ TEST_CASE("LocalAPI: Retrieve mixed blobs and trees", "[execution_api]") {
TEST_CASE("LocalAPI: Create directory prior to execution", "[execution_api]") {
auto const storage_config = TestStorageConfig::Create();
auto const storage = Storage::Create(&storage_config.Get());
- FactoryApi api_factory(&storage_config.Get(), &storage);
+ FactoryApi api_factory(
+ &storage_config.Get(), &storage, &LocalExecutionConfig::Instance());
TestCreateDirPriorToExecution(api_factory, {}, /*is_hermetic=*/true);
}
diff --git a/test/buildtool/execution_api/local/local_execution.test.cpp b/test/buildtool/execution_api/local/local_execution.test.cpp
index 4c2e309c..e8489b33 100644
--- a/test/buildtool/execution_api/local/local_execution.test.cpp
+++ b/test/buildtool/execution_api/local/local_execution.test.cpp
@@ -63,7 +63,10 @@ TEST_CASE("LocalExecution: No input, no output", "[execution_api]") {
auto const storage = Storage::Create(&storage_config.Get());
RepositoryConfig repo_config{};
- auto api = LocalApi(&storage_config.Get(), &storage, &repo_config);
+ auto api = LocalApi(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
std::string test_content("test");
std::vector<std::string> const cmdline = {"echo", "-n", test_content};
@@ -111,7 +114,10 @@ TEST_CASE("LocalExecution: No input, no output, env variables used",
auto const storage = Storage::Create(&storage_config.Get());
RepositoryConfig repo_config{};
- auto api = LocalApi(&storage_config.Get(), &storage, &repo_config);
+ auto api = LocalApi(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
std::string test_content("test from env var");
std::vector<std::string> const cmdline = {
@@ -162,7 +168,10 @@ TEST_CASE("LocalExecution: No input, create output", "[execution_api]") {
auto const storage = Storage::Create(&storage_config.Get());
RepositoryConfig repo_config{};
- auto api = LocalApi(&storage_config.Get(), &storage, &repo_config);
+ auto api = LocalApi(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
std::string test_content("test");
auto test_digest = ArtifactDigest::Create<ObjectType::File>(test_content);
@@ -219,7 +228,10 @@ TEST_CASE("LocalExecution: One input copied to output", "[execution_api]") {
auto const storage = Storage::Create(&storage_config.Get());
RepositoryConfig repo_config{};
- auto api = LocalApi(&storage_config.Get(), &storage, &repo_config);
+ auto api = LocalApi(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
std::string test_content("test");
auto test_digest = ArtifactDigest::Create<ObjectType::File>(test_content);
@@ -289,7 +301,10 @@ TEST_CASE("LocalExecution: Cache failed action's result", "[execution_api]") {
auto const storage = Storage::Create(&storage_config.Get());
RepositoryConfig repo_config{};
- auto api = LocalApi(&storage_config.Get(), &storage, &repo_config);
+ auto api = LocalApi(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
auto flag = GetTestDir() / "flag";
std::vector<std::string> const cmdline = {
diff --git a/test/buildtool/execution_engine/executor/TARGETS b/test/buildtool/execution_engine/executor/TARGETS
index 1bd82e69..26b4e9a8 100644
--- a/test/buildtool/execution_engine/executor/TARGETS
+++ b/test/buildtool/execution_engine/executor/TARGETS
@@ -45,6 +45,7 @@
[ "executor_api_tests"
, ["@", "src", "src/buildtool/common", "common"]
, ["@", "src", "src/buildtool/common", "config"]
+ , ["@", "src", "src/buildtool/execution_api/local", "config"]
, ["@", "src", "src/buildtool/execution_api/local", "local"]
, ["@", "src", "src/buildtool/execution_api/remote", "config"]
, ["@", "src", "src/buildtool/execution_engine/executor", "executor"]
diff --git a/test/buildtool/execution_engine/executor/executor_api_local.test.cpp b/test/buildtool/execution_engine/executor/executor_api_local.test.cpp
index 5c423dea..d8e9fd96 100644
--- a/test/buildtool/execution_engine/executor/executor_api_local.test.cpp
+++ b/test/buildtool/execution_engine/executor/executor_api_local.test.cpp
@@ -17,6 +17,7 @@
#include "catch2/catch_test_macros.hpp"
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/common/statistics.hpp"
+#include "src/buildtool/execution_api/local/config.hpp"
#include "src/buildtool/execution_api/local/local_api.hpp"
#include "src/buildtool/execution_api/remote/config.hpp"
#include "src/buildtool/execution_engine/executor/executor.hpp"
@@ -33,8 +34,10 @@ TEST_CASE("Executor<LocalApi>: Upload blob", "[executor]") {
RepositoryConfig repo_config{};
TestBlobUpload(&repo_config, [&] {
- return std::make_unique<LocalApi>(
- &storage_config.Get(), &storage, &repo_config);
+ return std::make_unique<LocalApi>(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
});
}
@@ -52,8 +55,10 @@ TEST_CASE("Executor<LocalApi>: Compile hello world", "[executor]") {
&stats,
&progress,
[&] {
- return std::make_unique<LocalApi>(
- &storage_config.Get(), &storage, &repo_config);
+ return std::make_unique<LocalApi>(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
},
&*auth_config);
}
@@ -72,8 +77,10 @@ TEST_CASE("Executor<LocalApi>: Compile greeter", "[executor]") {
&stats,
&progress,
[&] {
- return std::make_unique<LocalApi>(
- &storage_config.Get(), &storage, &repo_config);
+ return std::make_unique<LocalApi>(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
},
&*auth_config);
}
@@ -92,8 +99,10 @@ TEST_CASE("Executor<LocalApi>: Upload and download trees", "[executor]") {
&stats,
&progress,
[&] {
- return std::make_unique<LocalApi>(
- &storage_config.Get(), &storage, &repo_config);
+ return std::make_unique<LocalApi>(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
},
&*auth_config);
}
@@ -112,8 +121,10 @@ TEST_CASE("Executor<LocalApi>: Retrieve output directories", "[executor]") {
&stats,
&progress,
[&] {
- return std::make_unique<LocalApi>(
- &storage_config.Get(), &storage, &repo_config);
+ return std::make_unique<LocalApi>(&storage_config.Get(),
+ &storage,
+ &LocalExecutionConfig::Instance(),
+ &repo_config);
},
&*auth_config);
}