From 7d3be2a5095f750ff1715a6ed04a4e0705817324 Mon Sep 17 00:00:00 2001 From: Johan Lorenzo Date: Tue, 24 Sep 2019 16:18:45 +0200 Subject: [PATCH] taskgraph: Speed up gradle calls --- app/build.gradle | 25 ++++++++++++------------- taskcluster/fenix_taskgraph/gradle.py | 26 +++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 94306c320..389a45956 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -549,21 +549,20 @@ if (project.hasProperty("coverage")) { // ------------------------------------------------------------------------------------------------- // Task for printing APK information for the requested variant -// Usage: "./gradlew printVariant -PvariantBuildType=nightly -PvariantEngine=geckoNightly" +// Usage: "./gradlew printVariants // ------------------------------------------------------------------------------------------------- -task printVariant { +task printVariants { doLast { - def rawVariant = android.applicationVariants.find { - it.buildType.name == variantBuildType && - it.productFlavors.find { it.dimension == 'engine' }.name == variantEngine - } - println 'variant: ' + groovy.json.JsonOutput.toJson([ - name: rawVariant.name, - apks: rawVariant.variantData.outputScope.apkDatas.collect { [ - abi: it.filters.find { it.filterType == 'ABI' }.identifier, - fileName: it.outputFileName, - ]} - ]) + def variants = android.applicationVariants.collect {[ + apks: it.variantData.outputScope.apkDatas.collect {[ + abi: it.filters.find { it.filterType == 'ABI' }.identifier, + fileName: it.outputFileName, + ]}, + build_type: it.buildType.name, + engine: it.productFlavors.find { it.dimension == 'engine' }.name, + name: it.name, + ]} + println 'variants: ' + groovy.json.JsonOutput.toJson(variants) } } diff --git a/taskcluster/fenix_taskgraph/gradle.py b/taskcluster/fenix_taskgraph/gradle.py index fe53744ff..bc9b34655 100644 --- a/taskcluster/fenix_taskgraph/gradle.py +++ b/taskcluster/fenix_taskgraph/gradle.py @@ -10,10 +10,30 @@ import subprocess from taskgraph.util.memoize import memoize -@memoize + def get_variant(build_type, engine): - output = _run_gradle_process('printVariant', variantBuildType=build_type, variantEngine=engine) - content = _extract_content_from_command_output(output, prefix='variant: ') + all_variants = _fetch_all_variants() + matching_variants = [ + variant for variant in all_variants + if variant["build_type"] == build_type and variant["engine"] == engine + ] + number_of_matching_variants = len(matching_variants) + if number_of_matching_variants == 0: + raise ValueError('No variant found for build type "{}" and engine "{}"'.format( + build_type, engine + )) + elif number_of_matching_variants > 1: + raise ValueError('Too many variants found for build type "{}" and engine "{}": {}'.format( + build_type, engine, 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)