Slackbot
03/03/2022, 7:49 PMGeorges-Etienne Legendre
03/03/2022, 9:50 PMmyCustomTask on all Dependants)Daniel B Duval
03/04/2022, 12:26 AMGeorges-Etienne Legendre
03/04/2022, 12:47 PMGeorges-Etienne Legendre
03/04/2022, 12:49 PMDaniel B Duval
03/09/2022, 3:53 PM./gradlew lintDebug testDebugUnitTest --parallel --continue so we can run each module in. parallel and couldn’t find a way to do it with our single command. This code may not compile/work properly with current versions as this is rather old code. (GlobalConfig was a simple utility we wrote to look at the project and. return the build variant in the format needed)
class ModuleDependencyResolver {
static def getDependentModulesTasks(Project project, String variant, String prefix) {
ArrayList<String> tasks = new ArrayList<>()
project.configurations.each { configuration ->
configuration.getAllDependencies().each { upstreamDep ->
if (upstreamDep.hasProperty('dependencyProject')) {
Project depProject = project.rootProject.findProject(":${upstreamDep.dependencyProject.getName()}")
project.evaluationDependsOn(depProject.path)
if (depProject.hasProperty('android')) {
String requiredVariant = GlobalConfig.getFormattedBuildVariants(depProject).find { it ->
return variant.toLowerCase().contains(it.toLowerCase())
}
requiredVariant = requiredVariant == null ? depProject.android.defaultPublishConfig.capitalize() : requiredVariant
tasks.add(depProject.getTasksByName("${prefix}${requiredVariant.capitalize()}WithDeps", false))
}
}
}
}
return tasks
}
}
The above groovy code would get invoked in this sort of groovy script:
private static def configureUnitTestTask(Project project, String formattedBuildVariant) {
project.task("unitTest${formattedBuildVariant}WithDeps", type: DefaultTask, dependsOn: "test${formattedBuildVariant}UnitTest") {
group "Test"
description "Runs Spec for this module and all its upstream deps"
ModuleDependencyResolver.getDependentModulesTasks(it.project, formattedBuildVariant, 'unitTest').each { task ->
dependsOn task
}
ModuleDependencyResolver.getDependentModulesTasks(it.project, formattedBuildVariant, 'lint').each { task ->
dependsOn task
mustRunAfter task
}
project.getTasksByName("check${formattedBuildVariant}Coverage", false).each { task ->
dependsOn "lint${formattedBuildVariant}"
finalizedBy task
}
}
}