diff options
Diffstat (limited to '')
-rw-r--r-- | taskcluster/android_taskgraph/build_config.py | 108 |
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 |