init.gradle revision 83ebc490a3749991fe049df215491ecc8f7a5cce
12eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar/* 22eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * Copyright (C) 2016 The Android Open Source Project 32eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * 42eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 52eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * you may not use this file except in compliance with the License. 62eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * You may obtain a copy of the License at 72eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * 82eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 92eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * 102eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * Unless required by applicable law or agreed to in writing, software 112eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 122eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * See the License for the specific language governing permissions and 142eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * limitations under the License. 152eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar */ 16450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 172eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarimport org.gradle.internal.os.OperatingSystem 182eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef root = ext.supportRootFolder 19e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinetsext.usePrebuilts = "true" // for doclava 20450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarext.inAppToolkitProject = rootProject.name == "app-toolkit" 21450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 22450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarif (ext.inAppToolkitProject) { 23e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets apply from: "${ext.supportRootFolder}/buildSrc/init.gradle" 24450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.loadDefaultVersions() 25450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.setSdkInLocalPropertiesFile() 26e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets} 27450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 282eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef checkoutRoot = "${root}/../.." 292eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.checkoutRoot = checkoutRoot 302eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.prebuiltsRoot = "$checkoutRoot/prebuilts" 312eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.prebuiltsRootUri = "file://${prebuiltsRoot}" 322eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 332eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarfinal String platform = OperatingSystem.current().isMacOsX() ? 'darwin' : 'linux' 34c90eb815426eb89a589275a0a4a313791e43b7c2Sergey Vasilinetsfinal String fullSdkPath = new File("${checkoutRoot}/prebuilts/fullsdk-${platform}").getCanonicalPath() 35c90eb815426eb89a589275a0a4a313791e43b7c2Sergey VasilinetsSystem.setProperty('android.home', fullSdkPath) 362eb51995b418b034f58416876b6d27c74e19e4c7Yigit BoyarFile props = file("local.properties") 372eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarprops.write "sdk.dir=${fullSdkPath}" 382eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 392eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef buildDir 402eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef distDir 4131be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinetsdef supportLibBuildDir 42450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 43beb35b4d84f972d2df210dde265dd87e8fe5a870Yigit Boyarif (ext.runningInBuildServer) { 4431be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinets supportLibBuildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/support/build').getCanonicalFile(); 4531be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinets buildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/app-toolkit/build').getCanonicalFile() 462eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar distDir = new File(System.env.DIST_DIR).getCanonicalFile() 472eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} else { 4831be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinets supportLibBuildDir = file("${checkoutRoot}/out/host/gradle/frameworks/support/build") 49ed4fb5aab43da13f2203297071dd164e5a9a3d1aYigit Boyar buildDir = file("${checkoutRoot}/out/host/gradle/frameworks/app-toolkit/build") 50450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar distDir = file("${checkoutRoot}/out/dist") 512eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} 5225220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets 532eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef localMavenRepo = "file://${new File(buildDir, "flatfoot_repo").absolutePath}" 542eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.testApkDistOut = distDir 55beb35b4d84f972d2df210dde265dd87e8fe5a870Yigit Boyarext.testResultsDistDir = new File(distDir, "host-test-reports") 562eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.localMavenRepo = localMavenRepo 57450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarfile(localMavenRepo).delete() 58450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarfile(localMavenRepo).mkdirs() 592eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 602eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.repoNames = ["$prebuiltsRootUri/maven_repo", 612eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar "$prebuiltsRootUri/gradle-plugin", 622eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar "$prebuiltsRootUri/tools/common/m2/repository", 632eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar "$prebuiltsRootUri/tools/common/m2/internal", 642eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar "$prebuiltsRootUri/tools/common/offline-m2", 652eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar "$prebuiltsRootUri/maven_repo/android", 662eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar "file://$fullSdkPath/extras/android/m2repository", 6731be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinets "file://${new File(supportLibBuildDir, "support_repo").absolutePath}"] 682eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 69450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarapply from: "${ext.supportRootFolder}/app-toolkit/dependencies.gradle" 702eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.enablePublicRepos = System.getenv("ALLOW_PUBLIC_REPOS") 712eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 722eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar// repository creation task 73450ed382339544eaf6b7886bc765522fc3446148Yigit Boyardef buildServerAnchorTask = rootProject.tasks.create(name : "runBuildServerCompilationTasks", 74450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar description: "Anchor task for everything we want to run in build server.") 75450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 76450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarif (ext.inAppToolkitProject) { 77450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.addMavenRepositories(repositories) 78450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.setupRepoOutAndBuildNumber() 79450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.configureSubProjects() 80450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.setupRelease() 81450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.enableDoclavaAndJDiff(this) 82450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar} 83450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 84e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar 85e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar// flatfoot docs 86e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyardef zipFlatfootDocsTask = rootProject.tasks.create(name : "createFlatfootDocsArchive", type : Zip) { 87e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar from rootProject.docsDir 88e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar destinationDir distDir 89e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar baseName = String.format("flatfoot-docs-%s", rootProject.ext.flatfoot.release_version) 90e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar} 91e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar 92e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit BoyarbuildServerAnchorTask.dependsOn zipFlatfootDocsTask 93e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit BoyarzipFlatfootDocsTask.dependsOn rootProject.tasks["generateDocs"] 94e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar 9524ac5438aa55aa2357cfb82d48079b48c5a8748dYigit Boyar// Disable API checks for now. 9624ac5438aa55aa2357cfb82d48079b48c5a8748dYigit BoyarcheckApiStable.enabled = false 9724ac5438aa55aa2357cfb82d48079b48c5a8748dYigit BoyarcheckApi.enabled = false 9824ac5438aa55aa2357cfb82d48079b48c5a8748dYigit Boyar 99450ed382339544eaf6b7886bc765522fc3446148Yigit BoyarbuildServerAnchorTask.dependsOn createArchive 1002eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 1012eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarsubprojects { 1022eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar configurations.all { 1032eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar resolutionStrategy { 1042eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar force "com.google.guava:guava-jdk5:17.0" 1052eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 1062eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 107450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.addMavenRepositories(project.repositories) 108e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets if (project.name == 'doclava' || project.name == 'jdiff') { 109e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets project.tasks.whenTaskAdded { task -> 110e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets if (task instanceof org.gradle.api.tasks.testing.Test) { 111e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets task.enabled = false 112e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets } 113e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets } 114e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets return 115e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets } 11683ebc490a3749991fe049df215491ecc8f7a5cceYigit Boyar 117450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar def mavenGroup = project.getPath().split(":")[1] 118450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar if (mavenGroup != "room" && mavenGroup != "lifecycle" && mavenGroup != "apptoolkit-core") { 119450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar return 1202eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 1215401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar project.tasks.whenTaskAdded { task -> 1225401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar if (task.name.startsWith("assembleAndroidTest")) { 1235401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar buildServerAnchorTask.dependsOn task 1245401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar } 1255401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar } 126450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar project.group = "com.android.support.$mavenGroup" 127450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar project.version = flatfoot.release_version 128450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 1294d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar if (enablePublicRepos) { 1304d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar project.afterEvaluate { 1314d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar apply plugin: 'com.android.databinding.localizemaven' 1324d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar project.localizeMaven { 1334d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar localRepoDir = file("$prebuiltsRoot/tools/common/m2/repository") 1344d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar otherRepoDirs = repoNames 1354d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar } 1364d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar } 1374d19f2e32099754f47664ed3ccb4662cb5465097Yigit Boyar } 1382eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} 1392eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 1402eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef createKotlinCheckstyle(Project project) { 14125220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def fs = files(); 14225220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs += files(project.sourceSets.main.allJava.srcDirs.collect{fileTree(it)}) 14325220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs += files(project.sourceSets.test.allJava.srcDirs.collect{fileTree(it)}) 14425220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs = fs.filter{file -> file.name.endsWith(".kt")} 14525220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def kotlinCheckstyle = createCheckstyleTask(project, 'checkstyleKotlin', 14625220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets "${project.rootProject.ext.supportRootFolder}/app-toolkit/kotlin-checkstyle.xml", 14725220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs.files) 14825220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets 1492eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar project.tasks.findByName("check").dependsOn(kotlinCheckstyle) 1502eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar // poor man's line length check 1512eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar def lineCheck = project.tasks.create(name : "lineLengthCheck") { 1522eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar (project.sourceSets.main.allJava.getSourceDirectories() + 1532eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar project.sourceSets.test.allJava.getSourceDirectories()).each { sourceDir -> 1542eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar fileTree(dir : sourceDir, include : "**/*.kt").each{ file -> 1552eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar file.readLines().eachWithIndex { line, index -> 1562eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar if (line.size() > 100) { 1572eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar throw new Exception("line too long: file: $file line:$index line: $line") 1582eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 1592eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 1602eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 1612eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 1622eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 1632eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar kotlinCheckstyle.dependsOn(lineCheck) 1642eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} 1652eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 1662eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef createAndroidCheckstyle(Project project) { 16725220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def fs = files() 16825220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets if (project.hasProperty('android')) { 16925220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs += files(project.android.sourceSets.main.java.getSrcDirs().collect {fileTree(it)}) 17025220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets } 17125220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets if (project.sourceSets.hasProperty('main')) { 17225220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs += files(project.sourceSets.main.allJava) 17325220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets } 17425220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs = fs.filter{file -> file.name.endsWith(".java")} 17525220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets 17625220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def checkStyle = createCheckstyleTask(project, 'checkstyleAndroid', 17725220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets "${project.rootProject.ext.checkoutRoot}/prebuilts/checkstyle/android-style.xml", 17825220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs.files) 17925220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets project.tasks.findByName("check").dependsOn(checkStyle) 18025220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets} 18125220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets 18225220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinetsdef createCheckstyleTask(project, taskName, configFile, inputFiles) { 18325220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def arguments = ['-c', configFile] 18425220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets arguments.addAll(inputFiles) 18525220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def checkStyle = project.tasks.create(name : taskName, type: JavaExec) { 18625220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets inputs.files(inputFiles).skipWhenEmpty() 18725220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets main = "com.puppycrawl.tools.checkstyle.Main" 18825220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets args = arguments 18925220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets classpath = files(file("${project.rootProject.ext.checkoutRoot}/prebuilts/checkstyle/checkstyle.jar").path) 1902eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 19125220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets return checkStyle; 1922eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} 1932eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 1942eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.createKotlinCheckstyle = this.&createKotlinCheckstyle 195c90eb815426eb89a589275a0a4a313791e43b7c2Sergey Vasilinetsext.createAndroidCheckstyle = this.&createAndroidCheckstyle 196