summaryrefslogtreecommitdiffstats
path: root/taskcluster/android_taskgraph/build_config.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--taskcluster/android_taskgraph/build_config.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/taskcluster/android_taskgraph/build_config.py b/taskcluster/android_taskgraph/build_config.py
new file mode 100644
index 0000000000..368b251e41
--- /dev/null
+++ b/taskcluster/android_taskgraph/build_config.py
@@ -0,0 +1,108 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+import os
+
+import yaml
+from taskgraph.util.memoize import memoize
+
+from android_taskgraph import ANDROID_COMPONENTS_DIR, FENIX_DIR, FOCUS_DIR
+
+EXTENSIONS = {
+ "aar": (".aar", ".pom", "-sources.jar"),
+ "jar": (".jar", ".pom", "-sources.jar"),
+}
+CHECKSUMS_EXTENSIONS = (".md5", ".sha1", ".sha256", ".sha512")
+
+
+def get_components():
+ build_config = _read_build_config(ANDROID_COMPONENTS_DIR)
+ return [
+ {"name": name, "path": project["path"], "shouldPublish": project["publish"]}
+ for (name, project) in build_config["projects"].items()
+ ]
+
+
+def get_path(component):
+ return _read_build_config(ANDROID_COMPONENTS_DIR)["projects"][component]["path"]
+
+
+def get_extensions(component):
+ artifact_type = _read_build_config(ANDROID_COMPONENTS_DIR)["projects"][
+ component
+ ].get("artifact-type", "aar")
+ if artifact_type not in EXTENSIONS:
+ raise ValueError(
+ "For '{}', 'artifact-type' must be one of {}".format(
+ component, repr(EXTENSIONS.keys())
+ )
+ )
+
+ return [
+ extension + checksum_extension
+ for extension in EXTENSIONS[artifact_type]
+ for checksum_extension in ("",) + CHECKSUMS_EXTENSIONS
+ ]
+
+
+@memoize
+def _read_build_config(root_dir):
+ with open(os.path.join(root_dir, ".buildconfig.yml"), "rb") as f:
+ return yaml.safe_load(f)
+
+
+def get_apk_based_projects():
+ return [
+ {
+ "name": "focus",
+ "path": FOCUS_DIR,
+ },
+ {
+ "name": "fenix",
+ "path": FENIX_DIR,
+ },
+ ]
+
+
+def get_variant(build_type, build_name):
+ all_variants = _get_all_variants()
+ matching_variants = [
+ variant
+ for variant in all_variants
+ if variant["build_type"] == build_type and variant["name"] == build_name
+ ]
+ number_of_matching_variants = len(matching_variants)
+ if number_of_matching_variants == 0:
+ raise ValueError('No variant found for build type "{}"'.format(build_type))
+ elif number_of_matching_variants > 1:
+ raise ValueError(
+ 'Too many variants found for build type "{}"": {}'.format(
+ build_type, matching_variants
+ )
+ )
+
+ return matching_variants.pop()
+
+
+def _get_all_variants():
+ all_variants_including_duplicates = (
+ _read_build_config(FOCUS_DIR)["variants"]
+ + _read_build_config(FENIX_DIR)["variants"]
+ )
+ all_unique_variants = []
+ for variant in all_variants_including_duplicates:
+ if (
+ # androidTest is a special case that can't be prefixed with fenix or focus.
+ # Hence, this variant exist in both build_config and we need to expose it
+ # once only.
+ (
+ variant["build_type"] != "androidTest"
+ and variant["name"] != "androidTest"
+ )
+ or variant not in all_unique_variants
+ ):
+ all_unique_variants.append(variant)
+
+ return all_unique_variants