summaryrefslogtreecommitdiff
path: root/experiments/prepare_bazel_test_env/prepare_bazel_test_env.py
diff options
context:
space:
mode:
Diffstat (limited to 'experiments/prepare_bazel_test_env/prepare_bazel_test_env.py')
-rw-r--r--experiments/prepare_bazel_test_env/prepare_bazel_test_env.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/experiments/prepare_bazel_test_env/prepare_bazel_test_env.py b/experiments/prepare_bazel_test_env/prepare_bazel_test_env.py
new file mode 100644
index 0000000..b086b00
--- /dev/null
+++ b/experiments/prepare_bazel_test_env/prepare_bazel_test_env.py
@@ -0,0 +1,91 @@
+# Copyright (C) 2021 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Binary that generates a simulated Bazel environment in the Android source.
+
+The script utilizes an internal repository of templates to determine the targets
+to build, builds them via Soong, then imports them into a Bazel environment
+all relying on templated BUILD files. These files can then be placed
+directly within the Android source tree to simulate what a real Bazel
+environment would look like.
+"""
+import argparse
+import logging
+
+import bazelenv
+
+_LOG_PRINT_FORMAT = ("%(asctime)s %(filename)s:%(lineno)s:%(levelname)s: "
+ "%(message)s")
+_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
+
+
+def _configure_logging(verbose: bool) -> None:
+ """Configures logging for the application.
+
+ Args:
+ verbose: if True, all messages are logged, otherwise only INFO and above
+ are logged.
+ """
+ logging.basicConfig(format=_LOG_PRINT_FORMAT, datefmt=_LOG_DATE_FORMAT)
+ level = logging.DEBUG if verbose else logging.INFO
+ logging.root.setLevel(level)
+
+
+def _create_arg_parser():
+ parser = argparse.ArgumentParser(description=(
+ "Prepares a simulated Bazel environment that can be used to "
+ "execute tests in a Bazel environment based on Soong "
+ "produced artifacts."))
+
+ parser.add_argument("-v",
+ "--verbose",
+ help="Enables verbose logging.",
+ action="store_true")
+
+ subparsers = parser.add_subparsers(dest="action", required=True)
+
+ # For each subparser, provide a default 'func' argument that calls the
+ # corresponding method on the generator instance.
+ subparsers.add_parser(
+ "generate",
+ help="Generates the Bazel environment to the staging directory."
+ ).set_defaults(func=lambda g: g.generate())
+
+ subparsers.add_parser(
+ "sync",
+ help="Synchronizes the staged Bazel environment to the source tree."
+ ).set_defaults(func=lambda g: g.sync())
+
+ subparsers.add_parser(
+ "clean",
+ help=
+ ("Cleans up the Bazel environment by clearing anything that has been "
+ "synced to the source tree as well as the staging directory itself."
+ )).set_defaults(func=lambda g: g.clean())
+
+ return parser
+
+
+if __name__ == "__main__":
+ args = _create_arg_parser().parse_args()
+ logging.debug("prepare_bazel_test_env(%s)", args)
+
+ _configure_logging(args.verbose)
+
+ try:
+ generator = bazelenv.BazelTestEnvGenerator()
+ args.func(generator)
+ except bazelenv.Error:
+ logging.exception(
+ "A known error occurred, check the error description "
+ "or logs for more details.")