blob: 798f6764a64b3259f9baf38e79bf3d42de702690 [file] [log] [blame]
apply plugin: 'clone-artifacts'
buildscript {
apply from: "$rootDir/buildSrc/base/version.gradle"
repositories {
maven { url "$rootDir/../prebuilts/tools/common/m2/repository" }
}
dependencies {
classpath libs.kotlin_gradle_plugin
}
}
allprojects { subproject ->
tasks.withType(JavaForkOptions) {
// Prevent forked processes from stealing focus (on MacOS at least)
jvmArgs '-Djava.awt.headless=true'
}
}
// artifact cloning destinations
cloneArtifacts {
repository = "$rootDir/../prebuilts/tools/common/m2/repository"
}
if (System.env.USE_EXTERNAL_REPO != null) {
allprojects {
repositories {
maven { url = uri(rootProject.cloneArtifacts.repository) }
jcenter()
maven { url 'https://repo.gradle.org/gradle/libs-snapshots-local' }
maven { url 'https://repo.gradle.org/gradle/libs-releases-local' }
}
}
}
/*
* With the build server you are given two env variables.
* The OUT_DIR is a temporary directory you can use to put things during the build.
* The DIST_DIR is where you want to save things from the build.
*
* The build server will copy the contents of DIST_DIR to somewhere and make it available.
*/
// ext.androidHostOut is shared by all tools/{base,build,swt} gradle projects
if (System.env.OUT_DIR != null) {
ext.androidHostOut = file(System.env.OUT_DIR)
} else {
ext.androidHostOut = file("$rootDir/../out")
}
if (System.env.DIST_DIR != null) {
ext.androidHostDist = file(System.env.DIST_DIR)
} else {
ext.androidHostDist = new File(ext.androidHostOut, "dist")
}
// rootProject.buildDir is specific to this gradle build.
buildDir = new File(ext.androidHostOut, "build/root")
// apply this after the buildDir has been changed.
apply plugin: 'sdk-tools'
ext.localRepo = project.hasProperty('localRepo') ? localRepo : "$ext.androidHostOut/repo"
subprojects { Project project ->
// Change buildDir first so that all plugins pick up the new value.
project.buildDir = project.file("$project.parent.buildDir/../$project.name/build")
}
// delay evaluation of this project before all subprojects have been evaluated.
subprojects.each { subproject -> evaluationDependsOn(subproject.path) }
def testTasks = subprojects.collect { it.tasks.withType(Test) }.flatten()
// Print failed tests to the console early.
testTasks.each { task ->
task.testLogging {
events "failed", "skipped"
}
}
task aggregateResults(type: Copy) {
from { testTasks*.binResultsDir*.parentFile*.parentFile }
into { file("$buildDir/results") }
}
testTasks.each { task ->
aggregateResults.mustRunAfter task
}
task prepareRepo(type: Copy) {
from { rootProject.cloneArtifacts.repository }
into { "$rootProject.ext.androidHostOut/repo" }
}
task("copyGradleProperty").doLast {
def gradleProperties = file("${System.env.HOME}/.gradle/gradle.properties")
if (gradleProperties.exists()) {
project.copy {
from { gradleProperties }
into { gradle.gradleUserHomeDir }
}
}
}
def publishLocalTask = tasks.create(name: 'publishLocal')
// publishLocalPluginTask that publishes just the plugin dependencies, not any of the runtime
// artifacts like data binding
def publishLocalPluginTask = tasks.create(name: 'publishAndroidGradleLocal')
publishLocalPluginTask.description = """Publishes artifacts that are direct dependencies of the
plugin without the runtime artifacts (e.g. data binding runtime lib)."""
publishLocalTask.dependsOn publishLocalPluginTask
subprojects { project ->
if (project.tasks.findByName('publishLocal') != null) {
rootProject.publishAndroidGradleLocal.dependsOn project.publishLocal
// if we are in release mode, only publish modules that have the
// signing plugin applied (found in bintray.gradle)
if (project.hasProperty("release")) {
project.tasks.publishLocal.enabled=project.plugins.findPlugin('signing') != null
}
}
}
subprojects { project ->
if (project.hasProperty("runtimeArtifactTasks")) {
project.getProperty("runtimeArtifactTasks").each { runtimeArtifactTask ->
rootProject.publishLocal.dependsOn runtimeArtifactTask
runtimeArtifactTask.dependsOn publishLocalPluginTask
def disableRuntimeArtifact = rootProject.hasProperty("disableRuntimeArtifacts") ||
project.hasProperty("disableRuntimeArtifacts")
runtimeArtifactTask.enabled = !disableRuntimeArtifact
}
}
}
// basic task for custom distribution of project should the build server.
task('dist').doLast {}
apply plugin: 'offline-repo'
task('clean').doLast {
delete 'build'
new File("$localRepo/com/android/tools").eachFile {
if (it.name != "external") {
delete it
}
}
}
apply plugin: 'presubmit-runner'
// Task for initializing a fresh repo.
task init {
dependsOn prepareRepo
dependsOn copyGradleProperty
dependsOn tasks.findByPath(':base:gradle-core:generateGrammarSource')
dependsOn tasks.findByPath(':base:build-system:integration-test:framework:generateProto')
}