blob: 166f1d38f43022738c16123dca49a6b39c8490dc [file] [log] [blame]
/*
* Copyright (C) 2017. Uber Technologies
*
* 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 net.ltgt.gradle.errorprone.CheckSeverity
buildscript {
repositories {
mavenCentral()
google() // For Gradle 4.0+
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath 'com.vanniktech:gradle-maven-publish-plugin:0.14.2'
// This restriction is needed due to our mix of Android and Java modules;
// without it, the build fails with a weird error.
// See https://stackoverflow.com/questions/70217853/how-to-include-android-project-in-a-gradle-multi-project-build
classpath('org.ow2.asm:asm') {
version {
strictly '9.2'
}
}
}
}
plugins {
id "com.github.sherter.google-java-format" version "0.9"
id "net.ltgt.errorprone" version "2.0.1" apply false
id "com.github.johnrengelman.shadow" version "6.1.0" apply false
id "com.github.kt3k.coveralls" version "2.12.0" apply false
id "me.champeau.jmh" version "0.6.6" apply false
}
repositories {
// to get the google-java-format jar and dependencies
mavenCentral()
}
apply from: "gradle/dependencies.gradle"
subprojects { project ->
project.apply plugin: "net.ltgt.errorprone"
project.dependencies {
errorprone deps.build.errorProneCore
errorproneJavac deps.build.errorProneJavac
}
project.tasks.withType(JavaCompile) {
dependsOn(installGitHooks)
options.compilerArgs += [
"-Xlint:deprecation",
"-Xlint:rawtypes",
"-Xlint:unchecked",
"-Werror"
]
options.errorprone {
// disable warnings in generated code; AutoValue code fails UnnecessaryParentheses check
disableWarningsInGeneratedCode = true
// Triggers for generated Android code (R.java)
check("MutablePublicArray", CheckSeverity.OFF)
// this check is too noisy
check("StringSplitter", CheckSeverity.OFF)
check("WildcardImport", CheckSeverity.ERROR)
check("MissingBraces", CheckSeverity.ERROR)
check("TypeToString", CheckSeverity.ERROR)
check("SymbolToString", CheckSeverity.ERROR)
}
}
// We target Java 11 when building on JDK 11+, but Java 8 when building on JDK 8, since
// EP 2.11.0+ requires Java 11
if (JavaVersion.current() >= JavaVersion.VERSION_11) {
tasks.withType(JavaCompile) {
java.sourceCompatibility = "11"
java.targetCompatibility = "11"
}
} else {
tasks.withType(JavaCompile) {
java.sourceCompatibility = "1.8"
java.targetCompatibility = "1.8"
}
}
// Ensure we are running on Java 8 whenever publishing to remote repos
tasks.withType(PublishToMavenRepository) {
doFirst {
assert JavaVersion.current() == JavaVersion.VERSION_1_8 : "Only publish to remote repos on JDK 1.8"
}
}
tasks.withType(Test).configureEach {
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
}
repositories {
mavenCentral()
google()
}
}
googleJavaFormat {
toolVersion = "1.14.0"
// don't enforce formatting for generated Java code under buildSrc
exclude 'buildSrc/build/**/*.java'
}
////////////////////////////////////////////////////////////////////////
//
// Google Java Format pre-commit hook installation
//
tasks.register('installGitHooks', Copy) {
from(file('config/hooks/pre-commit-stub')) {
rename 'pre-commit-stub', 'pre-commit'
}
into file('.git/hooks')
fileMode 0777
}