253 lines
9.4 KiB
Groovy
253 lines
9.4 KiB
Groovy
/*
|
|
* Copyright (C) 2016 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import android.support.LibraryVersions
|
|
import org.gradle.internal.os.OperatingSystem
|
|
|
|
def root = ext.supportRootFolder
|
|
ext.inAppToolkitProject = rootProject.name == "app-toolkit"
|
|
|
|
if (ext.inAppToolkitProject) {
|
|
apply from: "${ext.supportRootFolder}/buildSrc/init.gradle"
|
|
init.setSdkInLocalPropertiesFile()
|
|
}
|
|
|
|
def checkoutRoot = "${root}/../.."
|
|
ext.checkoutRoot = checkoutRoot
|
|
ext.prebuiltsRoot = "$checkoutRoot/prebuilts"
|
|
ext.prebuiltsRootUri = "file://${prebuiltsRoot}"
|
|
|
|
final String platform = OperatingSystem.current().isMacOsX() ? 'darwin' : 'linux'
|
|
final String fullSdkPath = new File("${checkoutRoot}/prebuilts/fullsdk-${platform}").getCanonicalPath()
|
|
System.setProperty('android.home', fullSdkPath)
|
|
File props = file("local.properties")
|
|
props.write "sdk.dir=${fullSdkPath}"
|
|
|
|
def buildDir
|
|
def distDir
|
|
def supportLibBuildDir
|
|
|
|
if (ext.runningInBuildServer) {
|
|
supportLibBuildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/support/build').getCanonicalFile();
|
|
buildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/app-toolkit/build').getCanonicalFile()
|
|
distDir = new File(System.env.DIST_DIR).getCanonicalFile()
|
|
} else {
|
|
supportLibBuildDir = file("${checkoutRoot}/out/host/gradle/frameworks/support/build")
|
|
buildDir = file("${checkoutRoot}/out/host/gradle/frameworks/app-toolkit/build")
|
|
distDir = file("${checkoutRoot}/out/dist")
|
|
}
|
|
|
|
def localMavenRepo = "file://${new File(buildDir, "flatfoot_repo").absolutePath}"
|
|
ext.testApkDistOut = distDir
|
|
ext.testResultsDistDir = new File(distDir, "host-test-reports")
|
|
ext.localMavenRepo = localMavenRepo
|
|
file(localMavenRepo).delete()
|
|
file(localMavenRepo).mkdirs()
|
|
|
|
ext.repoNames += ["file://${new File(supportLibBuildDir, "support_repo").absolutePath}"]
|
|
|
|
apply from: "${ext.supportRootFolder}/app-toolkit/dependencies.gradle"
|
|
|
|
// repository creation task
|
|
def buildServerAnchorTask = rootProject.tasks.create(name : "runBuildServerCompilationTasks",
|
|
description: "Anchor task for everything we want to run in build server.")
|
|
|
|
if (ext.inAppToolkitProject) {
|
|
// always build offline docs for flatfoot specific builds.
|
|
ext.docs.dac = [
|
|
libraryroot: "android/arch",
|
|
dataname: "ARCH_DATA"
|
|
]
|
|
repos.addMavenRepositories(repositories)
|
|
init.setupRepoOutAndBuildNumber()
|
|
init.configureSubProjects()
|
|
init.setupRelease()
|
|
init.enableDoclavaAndJDiff(this)
|
|
rootProject.tasks["generateDocs"].exclude '**/R.java'
|
|
}
|
|
|
|
|
|
// flatfoot docs
|
|
def zipFlatfootDocsTask = rootProject.tasks.create(name : "createFlatfootDocsArchive", type : Zip) {
|
|
from rootProject.docsDir
|
|
destinationDir distDir
|
|
baseName = "flatfoot-docs"
|
|
}
|
|
|
|
buildServerAnchorTask.dependsOn zipFlatfootDocsTask
|
|
zipFlatfootDocsTask.dependsOn rootProject.tasks["generateDocs"]
|
|
buildServerAnchorTask.dependsOn createDiffArchive
|
|
buildServerAnchorTask.dependsOn createArchive
|
|
|
|
rootProject.ext.flatfootProjectGroups = [
|
|
"room" : "android.arch.persistence.room",
|
|
"persistence" : "android.arch.persistence",
|
|
"lifecycle" : "android.arch.lifecycle",
|
|
"arch" : "android.arch.core",
|
|
"paging" : "android.arch.paging",
|
|
"navigation" : "android.arch.navigation"]
|
|
|
|
subprojects {
|
|
repos.addMavenRepositories(project.repositories)
|
|
if (project.name == 'doclava' || project.name == 'jdiff') {
|
|
project.tasks.whenTaskAdded { task ->
|
|
if (task instanceof org.gradle.api.tasks.testing.Test) {
|
|
task.enabled = false
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
def projectPath = project.getPath().split(":")
|
|
def mavenGroup = projectPath[1]
|
|
def finalGroup = rootProject.flatfootProjectGroups[mavenGroup]
|
|
|
|
if (finalGroup == null) {
|
|
return
|
|
}
|
|
if (projectPath.size() == 2) {// root project.
|
|
return
|
|
}
|
|
project.group = finalGroup
|
|
|
|
if (project.getPath().contains("integration-tests")) {
|
|
// disable upload tasks
|
|
project.tasks.whenTaskAdded { task ->
|
|
if (task instanceof Upload || task.name == "generateSourceProps") {
|
|
task.enabled = false
|
|
}
|
|
}
|
|
} else {
|
|
def checkApi = project.tasks.create("checkVersion") {
|
|
doFirst {
|
|
if (project.version == null
|
|
|| project.version == LibraryVersions.SUPPORT_LIBRARY.toString()) {
|
|
throw new GradleException("bad version for $project with $project.version")
|
|
}
|
|
}
|
|
}
|
|
|
|
project.tasks.whenTaskAdded { task ->
|
|
if (task instanceof Upload) {
|
|
task.dependsOn checkApi
|
|
}
|
|
}
|
|
}
|
|
|
|
project.plugins.whenPluginAdded { plugin ->
|
|
def isAndroidLibrary = "com.android.build.gradle.LibraryPlugin"
|
|
.equals(plugin.class.name)
|
|
def isJavaLibrary = "org.gradle.api.plugins.JavaPlugin".equals(plugin.class.name)
|
|
if (isAndroidLibrary) {
|
|
// it is an android lib, enable sources.
|
|
def sourcesTask = project.tasks.create(name: "sourcesJar", type : Jar) {
|
|
classifier = 'sources'
|
|
from android.sourceSets.main.getJava().getSrcDirs()
|
|
}
|
|
project.artifacts {
|
|
archives sourcesTask
|
|
}
|
|
project.android.defaultConfig {
|
|
// Update the version meta-data in each Manifest.
|
|
addManifestPlaceholders(["version" : project.version])
|
|
}
|
|
} else if(isJavaLibrary && project.name == "common") {
|
|
// it is a shared lib, enable sources.
|
|
def sourcesTask = project.tasks.create(name: "sourcesJar", type : Jar) {
|
|
classifier = 'sources'
|
|
from sourceSets.main.allSource
|
|
}
|
|
project.artifacts {
|
|
archives sourcesTask
|
|
}
|
|
}
|
|
}
|
|
|
|
project.tasks.whenTaskAdded { task ->
|
|
if (task.name.startsWith("assembleAndroidTest")) {
|
|
buildServerAnchorTask.dependsOn task
|
|
}
|
|
if (task.name.startsWith("assembleDebug")) {
|
|
buildServerAnchorTask.dependsOn task
|
|
}
|
|
}
|
|
}
|
|
|
|
def createKotlinCheckstyle(Project project) {
|
|
def fs = files();
|
|
if (project.sourceSets.hasProperty('main')) {
|
|
fs += files(project.sourceSets.main.allJava.srcDirs.collect { fileTree(it) })
|
|
}
|
|
if (project.sourceSets.hasProperty('test')) {
|
|
fs += files(project.sourceSets.test.allJava.srcDirs.collect { fileTree(it) })
|
|
}
|
|
if (project.hasProperty('android')) {
|
|
fs += files(project.android.sourceSets.main.java.getSrcDirs().collect {fileTree(it)})
|
|
fs += files(project.android.sourceSets.test.java.getSrcDirs().collect {fileTree(it)})
|
|
fs += files(project.android.sourceSets.androidTest.java.getSrcDirs().collect {fileTree(it)})
|
|
}
|
|
fs = fs.filter{file -> file.name.endsWith(".kt")}
|
|
def kotlinCheckstyle = createCheckstyleTask(project, 'checkstyleKotlin',
|
|
"${project.rootProject.ext.supportRootFolder}/app-toolkit/kotlin-checkstyle.xml",
|
|
fs.files)
|
|
|
|
project.tasks.findByName("check").dependsOn(kotlinCheckstyle)
|
|
// poor man's line length check
|
|
def lineCheck = project.tasks.create(name : "lineLengthCheck") {
|
|
fs.each { sourceDir ->
|
|
fileTree(dir : sourceDir, include : "**/*.kt").each{ file ->
|
|
file.readLines().eachWithIndex { line, index ->
|
|
if (line.size() > 100) {
|
|
project.logger.error("line too long: file: $file" +
|
|
" index:$index line: $line")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
kotlinCheckstyle.dependsOn(lineCheck)
|
|
}
|
|
|
|
def createAndroidCheckstyle(Project project) {
|
|
def fs = files()
|
|
if (project.hasProperty('android')) {
|
|
fs += files(project.android.sourceSets.main.java.getSrcDirs().collect {fileTree(it)})
|
|
}
|
|
if (project.sourceSets.hasProperty('main')) {
|
|
fs += files(project.sourceSets.main.allJava)
|
|
}
|
|
fs = fs.filter{file -> file.name.endsWith(".java")}
|
|
|
|
def checkStyle = createCheckstyleTask(project, 'checkstyleAndroid',
|
|
"${project.rootProject.ext.checkoutRoot}/prebuilts/checkstyle/android-style.xml",
|
|
fs.files)
|
|
project.tasks.findByName("check").dependsOn(checkStyle)
|
|
}
|
|
|
|
def createCheckstyleTask(project, taskName, configFile, inputFiles) {
|
|
def arguments = ['-c', configFile]
|
|
arguments.addAll(inputFiles)
|
|
def checkStyle = project.tasks.create(name : taskName, type: JavaExec) {
|
|
inputs.files(inputFiles).skipWhenEmpty()
|
|
main = "com.puppycrawl.tools.checkstyle.Main"
|
|
args = arguments
|
|
classpath = files(file("${project.rootProject.ext.checkoutRoot}/prebuilts/checkstyle/checkstyle.jar").path)
|
|
}
|
|
return checkStyle;
|
|
}
|
|
|
|
ext.createKotlinCheckstyle = this.&createKotlinCheckstyle
|
|
ext.createAndroidCheckstyle = this.&createAndroidCheckstyle
|