/* * 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.3.0' classpath 'com.vanniktech:gradle-maven-publish-plugin:0.25.3' } } plugins { id "com.diffplug.spotless" version "6.23.3" id "net.ltgt.errorprone" version "3.1.0" apply false id "com.github.johnrengelman.shadow" version "8.1.1" apply false id "me.champeau.jmh" version "0.7.1" apply false id "com.github.ben-manes.versions" version "0.50.0" id "com.felipefzdz.gradle.shellcheck" version "1.4.6" } 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 } 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 // this check is too noisy check("StringSplitter", CheckSeverity.OFF) // https://github.com/google/error-prone/issues/3366 check("CanIgnoreReturnValueSuggester", CheckSeverity.OFF) // turn up various checks check("WildcardImport", CheckSeverity.ERROR) check("MissingBraces", CheckSeverity.ERROR) check("TypeToString", CheckSeverity.ERROR) check("SymbolToString", CheckSeverity.ERROR) check("MultipleTopLevelClasses", CheckSeverity.ERROR) check("ClassName", CheckSeverity.ERROR) check("PackageLocation", CheckSeverity.ERROR) check("UnnecessaryAnonymousClass", CheckSeverity.ERROR) check("UnusedException", CheckSeverity.ERROR) // To enable auto-patching, uncomment the line below, replace [CheckerName] with // the checker(s) you want to apply patches for (comma-separated), and above, disable // "-Werror" // errorproneArgs.addAll("-XepPatchChecks:[CheckerName]", "-XepPatchLocation:IN_PLACE") } } // Target JDK 8. We need to use the older sourceCompatibility / targetCompatibility settings to get // the build to work on JDK 11+. Once we stop supporting JDK 8, switch to using the javac "release" option tasks.withType(JavaCompile) { java.sourceCompatibility = "1.8" java.targetCompatibility = "1.8" } tasks.withType(Test).configureEach { maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 } repositories { mavenCentral() google() } // For some reason, spotless complains when applied to the jar-infer folder itself, even // though there is no top-level :jar-infer project if (project.name != "jar-infer") { project.apply plugin: "com.diffplug.spotless" spotless { java { googleJavaFormat() } } } } spotless { predeclareDeps() groovyGradle { target '**/*.gradle' greclipse() indentWithSpaces(4) trimTrailingWhitespace() endWithNewline() } } spotlessPredeclare { java { googleJavaFormat('1.18.1') } groovyGradle { greclipse() } } shellcheck { useDocker = false shellcheckBinary = "shellcheck" sourceFiles = fileTree(".") { include("**/*.sh") } } //////////////////////////////////////////////////////////////////////// // // 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 }