diff --git a/build.gradle b/build.gradle index a748594a8c..e7f7d00159 100644 --- a/build.gradle +++ b/build.gradle @@ -47,6 +47,8 @@ plugins { // Dependency Analysis id 'com.autonomousapps.dependency-analysis' version "1.13.1" + // Gradle doctor + id "com.osacky.doctor" version "0.8.1" } // https://github.com/jeremylong/DependencyCheck @@ -59,6 +61,9 @@ dependencyCheck { ] } +// Gradle doctor configuration +apply from: './tools/gradle/doctor.gradle' + allprojects { apply plugin: "org.jlleitschuh.gradle.ktlint" apply plugin: "io.gitlab.arturbosch.detekt" diff --git a/tools/gradle/doctor.gradle b/tools/gradle/doctor.gradle new file mode 100644 index 0000000000..c77d2eb338 --- /dev/null +++ b/tools/gradle/doctor.gradle @@ -0,0 +1,92 @@ +// Default configuration copied from https://runningcode.github.io/gradle-doctor/configuration/ + +def isCiBuild = System.env.BUILDKITE == "true" || System.env.GITHUB_ACTIONS == "true" +println "Is CI build: $isCiBuild" + +doctor { + /** + * Throw an exception when multiple Gradle Daemons are running. + * + * Windows is not supported yet, see https://github.com/runningcode/gradle-doctor/issues/84 + */ + disallowMultipleDaemons = false + /** + * Show a message if the download speed is less than this many megabytes / sec. + */ + downloadSpeedWarningThreshold = 0.5f + /** + * The level at which to warn when a build spends more than this percent garbage collecting. + */ + GCWarningThreshold = 0.10f + /** + * The level at which to fail when a build spends more than this percent garbage collecting. + */ + GCFailThreshold = 0.9f + /** + * Print a warning to the console if we spend more than this amount of time with Dagger annotation processors. + */ + daggerThreshold = 5000 + /** + * By default, Gradle caches test results. This can be dangerous if tests rely on timestamps, dates, or other files + * which are not declared as inputs. + */ + enableTestCaching = true + /** + * By default, Gradle treats empty directories as inputs to compilation tasks. This can cause cache misses. + */ + failOnEmptyDirectories = true + /** + * Do not allow building all apps simultaneously. This is likely not what the user intended. + */ + allowBuildingAllAndroidAppsSimultaneously = false + /** + * Warn if using Android Jetifier. It slows down builds. + */ + warnWhenJetifierEnabled = true + /** + * Negative Avoidance Savings Threshold + * By default the Gradle Doctor will print out a warning when a task is slower to pull from the cache than to + * re-execute. There is some variance in the amount of time a task can take when several tasks are running + * concurrently. In order to account for this there is a threshold you can set. When the difference is above the + * threshold, a warning is displayed. + */ + negativeAvoidanceThreshold = 500 + /** + * Warn when not using parallel GC. Parallel GC is faster for build type tasks and is no longer the default in Java 9+. + */ + warnWhenNotUsingParallelGC = !isCiBuild + /** + * Throws an error when the `Delete` or `clean` task has dependencies. + * If a clean task depends on other tasks, clean can be reordered and made to run after the tasks that would produce + * output. This can lead to build failures or just strangeness with seemingly straightforward builds + * (e.g., gradle clean build). + * http://github.com/gradle/gradle/issues/2488 + */ + disallowCleanTaskDependencies = true + /** + * Warn if using the Kotlin Compiler Daemon Fallback. The fallback is incredibly slow and should be avoided. + * https://youtrack.jetbrains.com/issue/KT-48843 + */ + warnIfKotlinCompileDaemonFallback = true + + /** Configuration properties relating to JAVA_HOME */ + javaHome { + /** + * Ensure that we are using JAVA_HOME to build with this Gradle. + */ + ensureJavaHomeMatches = true + /** + * Ensure we have JAVA_HOME set. + */ + ensureJavaHomeIsSet = true + /** + * Fail on any `JAVA_HOME` issues. + */ + failOnError.set(!isCiBuild) + /** + * Extra message text, if any, to show with the Gradle Doctor message. This is useful if you have a wiki page or + * other instructions that you want to link for developers on your team if they encounter an issue. + */ + extraMessage.set("Here's an extra message to show.") + } +}