Yigit Boyar | b135633 | 2015-05-21 15:49:58 -0700 | [diff] [blame] | 1 | |
Yigit Boyar | 24bec1c | 2015-07-09 10:51:54 -0700 | [diff] [blame] | 2 | buildscript { |
| 3 | ext.rootFolder = project.projectDir |
| 4 | apply from: 'propLoader.gradle' |
Yigit Boyar | d6ddc64 | 2015-09-11 12:59:40 -0700 | [diff] [blame] | 5 | apply from: 'supportBundle.gradle' |
Yigit Boyar | 24bec1c | 2015-07-09 10:51:54 -0700 | [diff] [blame] | 6 | ext.addRepos(repositories) |
| 7 | if (ext.config.addRemoteRepos) { |
| 8 | dependencies { |
| 9 | classpath "com.android.databinding:localizemaven:${config.extraPluginsVersion}" |
| 10 | } |
| 11 | } |
George Mount | 69cbd9e | 2015-08-26 10:46:58 -0700 | [diff] [blame] | 12 | dependencies { |
| 13 | classpath 'net.sf.proguard:proguard-gradle:5.2.1' |
| 14 | } |
Yigit Boyar | 24bec1c | 2015-07-09 10:51:54 -0700 | [diff] [blame] | 15 | } |
Yigit Boyar | 840f0ce | 2014-12-12 16:45:00 -0800 | [diff] [blame] | 16 | subprojects { |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 17 | apply plugin: 'maven' |
Yigit Boyar | 24bec1c | 2015-07-09 10:51:54 -0700 | [diff] [blame] | 18 | if (config.addRemoteRepos) { |
| 19 | apply plugin: 'com.android.databinding.localizemaven' |
Yigit Boyar | 63d4789 | 2015-07-10 09:03:05 -0700 | [diff] [blame] | 20 | } |
| 21 | |
Yigit Boyar | 24bec1c | 2015-07-09 10:51:54 -0700 | [diff] [blame] | 22 | group = config.group |
| 23 | version = config.version |
Yigit Boyar | d6ddc64 | 2015-09-11 12:59:40 -0700 | [diff] [blame] | 24 | def url = (config.inReleaseBuild && it.name == "library") ? "file://${config.sharedSupportRepoDir}" : "file://${config.mavenRepoDir}" |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 25 | uploadArchives { |
| 26 | repositories { |
| 27 | mavenDeployer { |
Yigit Boyar | d6ddc64 | 2015-09-11 12:59:40 -0700 | [diff] [blame] | 28 | repository(url: url) |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 29 | } |
| 30 | } |
| 31 | } |
Yigit Boyar | 24bec1c | 2015-07-09 10:51:54 -0700 | [diff] [blame] | 32 | buildscript { |
| 33 | addRepos(repositories) |
| 34 | dependencies { |
| 35 | classpath "com.android.databinding:bintray:${config.extraPluginsVersion}" |
| 36 | } |
| 37 | } |
| 38 | } |
| 39 | |
| 40 | if (config.addRemoteRepos) { |
| 41 | localizeMaven { |
| 42 | localRepoDir = file(config.megaRepoDir) |
| 43 | otherRepoDirs = config.localRepositories |
| 44 | } |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 45 | } |
| 46 | |
| 47 | task deleteRepo(type: Delete) { |
Yigit Boyar | b135633 | 2015-05-21 15:49:58 -0700 | [diff] [blame] | 48 | delete "${config.mavenRepoDir}/${config.group.replace('.', '/')}" |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 49 | } |
| 50 | |
Yigit Boyar | ee75867 | 2015-04-16 15:12:02 -0700 | [diff] [blame] | 51 | task deletePrebuildFolder(type: Delete) { |
| 52 | delete "${config.prebuildFolder}" |
| 53 | } |
| 54 | |
Yigit Boyar | c64ae35 | 2015-04-21 14:05:41 -0700 | [diff] [blame] | 55 | task deleteEap(type: Delete) { |
| 56 | delete "${config.eapOutDir}" |
| 57 | } |
| 58 | |
| 59 | |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 60 | def buildExtensionsTask = project.tasks.create "buildExtensionsTask", Exec |
| 61 | buildExtensionsTask.workingDir file('extensions').getAbsolutePath() |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 62 | buildExtensionsTask.commandLine './gradlew' |
Yigit Boyar | d6ddc64 | 2015-09-11 12:59:40 -0700 | [diff] [blame] | 63 | buildExtensionsTask.args 'clean', 'uploadArchives', '--info', '--stacktrace', "-PuseReleaseVersion=${config.inReleaseBuild ? 'true' : 'false'}" |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 64 | buildExtensionsTask.dependsOn subprojects.uploadArchives |
| 65 | |
Yigit Boyar | d6ddc64 | 2015-09-11 12:59:40 -0700 | [diff] [blame] | 66 | tasks['bundleSupportLib'].dependsOn buildExtensionsTask |
| 67 | |
Yigit Boyar | ee75867 | 2015-04-16 15:12:02 -0700 | [diff] [blame] | 68 | def prepareExtensionPrebuilds = project.tasks.create "prepareExtensionPrebuilds", Exec |
| 69 | prepareExtensionPrebuilds.workingDir file('extensions').getAbsolutePath() |
| 70 | prepareExtensionPrebuilds.commandLine './gradlew' |
Yigit Boyar | d6ddc64 | 2015-09-11 12:59:40 -0700 | [diff] [blame] | 71 | prepareExtensionPrebuilds.args 'clean', 'preparePrebuilds', '--info', '--stacktrace', "-PuseReleaseVersion=${config.inReleaseBuild ? 'true' : 'false'}" |
Yigit Boyar | ee75867 | 2015-04-16 15:12:02 -0700 | [diff] [blame] | 72 | prepareExtensionPrebuilds.dependsOn subprojects.uploadArchives |
| 73 | |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 74 | file('integration-tests').listFiles().findAll { it.isDirectory() }.each { |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 75 | println("Creating run test task for ${it.getAbsolutePath()}.") |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 76 | def testTask = project.tasks.create "runTestsOf${it.getName().capitalize()}", Exec |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 77 | testTask.workingDir it.getAbsolutePath() |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 78 | //on linux |
| 79 | testTask.commandLine './gradlew' |
Yigit Boyar | d6ddc64 | 2015-09-11 12:59:40 -0700 | [diff] [blame] | 80 | testTask.args 'clean', 'connectedCheck', '--info', '--stacktrace', "-PuseReleaseVersion=${config.inReleaseBuild ? 'true' : 'false'}" |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 81 | testTask.dependsOn subprojects.uploadArchives |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 82 | testTask.dependsOn buildExtensionsTask |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 83 | } |
| 84 | |
| 85 | task runIntegrationTests { |
| 86 | dependsOn tasks.findAll { task -> task.name.startsWith('runTestsOf') } |
| 87 | } |
| 88 | |
| 89 | task runAllTests { |
| 90 | dependsOn runIntegrationTests |
| 91 | } |
| 92 | |
Yigit Boyar | ee75867 | 2015-04-16 15:12:02 -0700 | [diff] [blame] | 93 | task preparePrebuilds() { |
| 94 | dependsOn deletePrebuildFolder |
| 95 | dependsOn prepareExtensionPrebuilds |
| 96 | } |
| 97 | |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 98 | allprojects { |
| 99 | afterEvaluate { project -> |
| 100 | runAllTests.dependsOn project.tasks.findAll {task -> task.name.equals('test')} |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 101 | runAllTests.dependsOn project.tasks.findAll {task -> task.name.equals('connectedCheck')} |
Yigit Boyar | ee75867 | 2015-04-16 15:12:02 -0700 | [diff] [blame] | 102 | preparePrebuilds.dependsOn project.tasks.findAll {task -> task.name.startsWith('prebuild')} |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 103 | } |
| 104 | } |
| 105 | |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 106 | subprojects.uploadArchives.each { it.shouldRunAfter deleteRepo } |
Yigit Boyar | ae16128 | 2015-04-21 11:02:58 -0700 | [diff] [blame] | 107 | subprojects.uploadArchives.each { it.shouldRunAfter deletePrebuildFolder } |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 108 | buildExtensionsTask.shouldRunAfter deleteRepo |
Yigit Boyar | 99a3d31 | 2015-03-25 12:46:05 -0700 | [diff] [blame] | 109 | tasks['runTestsOfMultiModuleTestApp'].dependsOn tasks['runTestsOfIndependentLibrary'] |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 110 | |
Yigit Boyar | f9e51c0 | 2015-03-12 14:30:29 -0700 | [diff] [blame] | 111 | |
| 112 | task rebuildRepo() { |
| 113 | dependsOn deleteRepo |
| 114 | dependsOn subprojects.uploadArchives |
Yigit Boyar | a6e4583 | 2015-03-13 15:58:53 -0700 | [diff] [blame] | 115 | dependsOn buildExtensionsTask |
Yigit Boyar | ee75867 | 2015-04-16 15:12:02 -0700 | [diff] [blame] | 116 | } |
| 117 | |
Yigit Boyar | c64ae35 | 2015-04-21 14:05:41 -0700 | [diff] [blame] | 118 | task copySamplesToEap(type : Copy) { |
| 119 | mustRunAfter deleteEap |
| 120 | from ("$projectDir/samples") { |
| 121 | exclude "**/build" |
Yigit Boyar | 2939c3b | 2015-04-23 15:03:56 -0700 | [diff] [blame] | 122 | exclude "**/local.properties" |
Yigit Boyar | c64ae35 | 2015-04-21 14:05:41 -0700 | [diff] [blame] | 123 | } |
| 124 | into "${config.eapOutDir}/samples" |
| 125 | } |
| 126 | |
| 127 | |
| 128 | task copyMavenRepoToEap(type : Copy) { |
| 129 | mustRunAfter deleteEap |
| 130 | dependsOn rebuildRepo |
| 131 | from(config.mavenRepoDir) |
| 132 | into "${config.eapOutDir}/${config.mavenRepoName}" |
| 133 | } |
| 134 | |
| 135 | tasks.create(name : 'createEapConfigFile') << { |
| 136 | def propsFile = new File("${config.eapOutDir}/databinding.properties") |
| 137 | Properties props = new Properties() |
Yigit Boyar | 9399cb4 | 2015-05-16 15:42:45 -0700 | [diff] [blame] | 138 | props.setProperty('version', config.version) |
Yigit Boyar | c64ae35 | 2015-04-21 14:05:41 -0700 | [diff] [blame] | 139 | props.setProperty('mavenRepoName', config.mavenRepoName) |
| 140 | props.store(propsFile.newWriter(), null) |
| 141 | } |
| 142 | |
| 143 | |
| 144 | task batchEAP() { |
| 145 | dependsOn deleteEap |
| 146 | dependsOn copyMavenRepoToEap |
| 147 | dependsOn copySamplesToEap |
| 148 | dependsOn createEapConfigFile |
Yigit Boyar | 24bec1c | 2015-07-09 10:51:54 -0700 | [diff] [blame] | 149 | } |
George Mount | 69cbd9e | 2015-08-26 10:46:58 -0700 | [diff] [blame] | 150 | |
| 151 | def fullJar(project) { |
| 152 | def localizeTask = project.parent.tasks.findByName('localizeDependencies') |
| 153 | if (localizeTask != null) { |
| 154 | localizeTask.dependsOn project.tasks.findByName('buildLicenseNotice') |
| 155 | } |
| 156 | |
Yigit Boyar | d6ddc64 | 2015-09-11 12:59:40 -0700 | [diff] [blame] | 157 | if (!config.inReleaseBuild) { |
George Mount | 69cbd9e | 2015-08-26 10:46:58 -0700 | [diff] [blame] | 158 | return |
| 159 | } |
| 160 | def jarName = project.uploadArchives.repositories.mavenDeployer.pom.artifactId |
| 161 | def workingDir = "${project.buildDir}/intermediates/fullJar" |
| 162 | def fatJar = "${workingDir}/${jarName}-fat.jar" |
| 163 | def proguardJar = "${workingDir}/${jarName}-proguard.jar" |
| 164 | def jarJar = project.jar.archivePath |
| 165 | |
| 166 | project.configurations { |
| 167 | jarJarArchives |
| 168 | } |
| 169 | |
| 170 | project.tasks.create(name: 'fatJar', type: Jar) { |
| 171 | baseName = jarName + '-fat' |
| 172 | doFirst { |
| 173 | file(workingDir).mkdirs() |
| 174 | } |
| 175 | def deps = new HashSet<ResolvedDependency>() |
| 176 | project.configurations.compile.resolvedConfiguration.firstLevelModuleDependencies.each { |
| 177 | if (!it.moduleGroup.startsWith('com.android.tools')) { |
| 178 | deps.addAll(it.allModuleArtifacts) |
| 179 | } |
| 180 | } |
| 181 | from { deps.findAll { !it.name.contains('baseLibrary')}.collect { |
| 182 | it.file.isDirectory() ? it.file : project.zipTree(it.file) |
| 183 | } } { |
| 184 | exclude "META-INF/maven/**" |
| 185 | exclude "META-INF/MANIFEST.MF" |
| 186 | exclude "META-INF/LICENSE.txt" |
| 187 | exclude "META-INF/NOTICE.txt" |
| 188 | exclude "META-INF/services/javax.annotation.processing.Processor" |
| 189 | exclude "**/*.stg" |
| 190 | } |
| 191 | archiveName "${baseName}.jar" |
| 192 | destinationDir = new File(workingDir) |
| 193 | with project.jar |
| 194 | } |
| 195 | project.tasks.create(name: 'proguard', type: proguard.gradle.ProGuardTask) { |
| 196 | dependsOn 'fatJar' |
| 197 | |
| 198 | injars fatJar |
| 199 | outjars proguardJar |
| 200 | |
| 201 | configuration '../proguard.cfg' |
| 202 | } |
| 203 | |
| 204 | project.tasks.create(name: 'jarJarFile') { |
| 205 | dependsOn 'proguard' |
| 206 | dependsOn project.jar |
| 207 | def inputLibrary = proguardJar |
| 208 | def outputLibrary = jarJar |
| 209 | inputs.file(inputLibrary) |
| 210 | outputs.file(outputLibrary) |
| 211 | |
| 212 | doLast { |
| 213 | def jarJarLibrary = new File(config.externalPrebuiltsBase, |
| 214 | 'tools/common/m2/repository/com/googlecode/jarjar/jarjar/1.3/jarjar-1.3.jar'). |
| 215 | getCanonicalPath() |
| 216 | // in Ant |
| 217 | ant.taskdef(name: "jarjarIt", |
| 218 | classname: 'com.tonicsystems.jarjar.JarJarTask', |
| 219 | classpath: jarJarLibrary) |
| 220 | // start jarjar task |
| 221 | ant.jarjarIt(jarfile: outputLibrary) { |
| 222 | // input is our inputLibrary |
| 223 | zipfileset(src: inputLibrary) |
| 224 | // rule to repackage antlr to new package |
| 225 | rule pattern: 'org.antlr.**', result: 'com.google.repacked.antlr.@1' |
| 226 | rule pattern: 'com.tunnelvisionlabs.**', result: 'com.google.repacked.tunnelvision.@1' |
| 227 | // rule to repackage commons |
| 228 | rule pattern: 'org.apache.**', result: 'com.google.repacked.apache.@1' |
| 229 | rule pattern: 'kotlin.**', result: 'com.google.repacked.kotlin.@1' |
| 230 | } |
| 231 | } |
| 232 | } |
| 233 | |
| 234 | project.uploadArchives { |
| 235 | dependsOn 'jarJarFile' |
| 236 | repositories { |
| 237 | mavenDeployer { |
| 238 | pom.whenConfigured { pom -> |
| 239 | pom.dependencies.removeAll { dep -> |
| 240 | def isBaseLibrary = dep.groupId == 'com.android.databinding' && |
| 241 | dep.artifactId == 'baseLibrary' |
| 242 | def isGradle = dep.groupId == 'com.android.tools.build' && |
| 243 | dep.artifactId == 'gradle' |
| 244 | return !isBaseLibrary && !isGradle |
| 245 | } |
| 246 | } |
| 247 | } |
| 248 | } |
| 249 | } |
| 250 | } |