2
0
mirror of https://github.com/fork-maintainers/iceraven-browser synced 2024-11-17 15:26:23 +00:00
iceraven-browser/taskcluster/fenix_taskgraph/gradle.py
Andrew Halberstadt 2339ab664e
For #19801 - Run taskgraph generation with Python 3 (#19802)
* For #19801 - Update to latest version of taskgraph

* For #19801 - Update to latest decision-mobile image

We need to explicitly set the Java version as Java 11 now co-exists in
the decision-mobile image.

* For #19801 - Run decision task with Python 3
2021-06-09 12:52:28 -07:00

59 lines
1.9 KiB
Python

# 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/.
from __future__ import absolute_import, print_function, unicode_literals
import json
import subprocess
from taskgraph.util.memoize import memoize
def get_variant(build_type):
all_variants = _fetch_all_variants()
matching_variants = [
variant for variant in all_variants
if variant["build_type"] == build_type
]
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()
@memoize
def _fetch_all_variants():
output = _run_gradle_process('printVariants')
content = _extract_content_from_command_output(output, prefix='variants: ')
return json.loads(content)
def _run_gradle_process(gradle_command, **kwargs):
gradle_properties = [
'-P{property_name}={value}'.format(property_name=property_name, value=value)
for property_name, value in kwargs.items()
]
process = subprocess.Popen(["./gradlew", "--no-daemon", "--quiet", gradle_command] + gradle_properties, stdout=subprocess.PIPE, universal_newlines=True)
output, err = process.communicate()
exit_code = process.wait()
if exit_code != 0:
raise RuntimeError("Gradle command returned error: {}".format(exit_code))
return output
def _extract_content_from_command_output(output, prefix):
variants_line = [line for line in output.split('\n') if line.startswith(prefix)][0]
return variants_line.split(' ', 1)[1]