1
0
Fork 0

taskgraph: Speed up gradle calls

master
Johan Lorenzo 2019-09-24 16:18:45 +02:00 committed by Jeff Boek
parent 41799dcec1
commit 7d3be2a509
2 changed files with 35 additions and 16 deletions

View File

@ -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)
}
}

View File

@ -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)