1*d9e8da70SAndroid Build Coastguard Workerimport org.jetbrains.dokka.gradle.DokkaTask 2*d9e8da70SAndroid Build Coastguard Worker 3*d9e8da70SAndroid Build Coastguard Workerbuildscript { 4*d9e8da70SAndroid Build Coastguard Worker ext.versions = [ 5*d9e8da70SAndroid Build Coastguard Worker 'minSdk' : 14, 6*d9e8da70SAndroid Build Coastguard Worker 'compileSdk': 34, 7*d9e8da70SAndroid Build Coastguard Worker ] 8*d9e8da70SAndroid Build Coastguard Worker repositories { 9*d9e8da70SAndroid Build Coastguard Worker google() 10*d9e8da70SAndroid Build Coastguard Worker gradlePluginPortal() 11*d9e8da70SAndroid Build Coastguard Worker mavenCentral() 12*d9e8da70SAndroid Build Coastguard Worker } 13*d9e8da70SAndroid Build Coastguard Worker dependencies { 14*d9e8da70SAndroid Build Coastguard Worker classpath libs.gradlePlugin.android 15*d9e8da70SAndroid Build Coastguard Worker classpath libs.gradlePlugin.kotlin 16*d9e8da70SAndroid Build Coastguard Worker classpath libs.gradlePlugin.dokka 17*d9e8da70SAndroid Build Coastguard Worker classpath libs.gradlePlugin.mavenPublish 18*d9e8da70SAndroid Build Coastguard Worker classpath libs.gradlePlugin.detekt 19*d9e8da70SAndroid Build Coastguard Worker classpath libs.gradlePlugin.binaryCompatibility 20*d9e8da70SAndroid Build Coastguard Worker classpath libs.gradlePlugin.keeper 21*d9e8da70SAndroid Build Coastguard Worker } 22*d9e8da70SAndroid Build Coastguard Worker} 23*d9e8da70SAndroid Build Coastguard Worker 24*d9e8da70SAndroid Build Coastguard Worker// We use JetBrain's Kotlin Binary Compatibility Validator to track changes to our public binary 25*d9e8da70SAndroid Build Coastguard Worker// APIs. 26*d9e8da70SAndroid Build Coastguard Worker// When making a change that results in a public ABI change, the apiCheck task will fail. When this 27*d9e8da70SAndroid Build Coastguard Worker// happens, run ./gradlew apiDump to generate updated *.api files, and add those to your commit. 28*d9e8da70SAndroid Build Coastguard Worker// See https://github.com/Kotlin/binary-compatibility-validator 29*d9e8da70SAndroid Build Coastguard Workerapply plugin: 'binary-compatibility-validator' 30*d9e8da70SAndroid Build Coastguard Worker 31*d9e8da70SAndroid Build Coastguard WorkerapiValidation { 32*d9e8da70SAndroid Build Coastguard Worker // Ignore projects that are not uploaded to Maven Central 33*d9e8da70SAndroid Build Coastguard Worker ignoredProjects += ["leakcanary-android-sample", "shark-test", "shark-hprof-test", "shark-cli"] 34*d9e8da70SAndroid Build Coastguard Worker} 35*d9e8da70SAndroid Build Coastguard Worker 36*d9e8da70SAndroid Build Coastguard Worker// This plugin needs to be applied to the root projects for the dokkaGfmCollector task we use to 37*d9e8da70SAndroid Build Coastguard Worker// generate the documentation site. 38*d9e8da70SAndroid Build Coastguard Workerapply plugin: 'org.jetbrains.dokka' 39*d9e8da70SAndroid Build Coastguard Worker 40*d9e8da70SAndroid Build Coastguard Workerrepositories { 41*d9e8da70SAndroid Build Coastguard Worker // Needed for the Dokka plugin. 42*d9e8da70SAndroid Build Coastguard Worker gradlePluginPortal() 43*d9e8da70SAndroid Build Coastguard Worker} 44*d9e8da70SAndroid Build Coastguard Worker 45*d9e8da70SAndroid Build Coastguard Workersubprojects { 46*d9e8da70SAndroid Build Coastguard Worker // Note: to skip Dokka on some projects we could add it individually to projects we actually 47*d9e8da70SAndroid Build Coastguard Worker // want. 48*d9e8da70SAndroid Build Coastguard Worker apply plugin: 'org.jetbrains.dokka' 49*d9e8da70SAndroid Build Coastguard Worker group = GROUP 50*d9e8da70SAndroid Build Coastguard Worker version = VERSION_NAME 51*d9e8da70SAndroid Build Coastguard Worker 52*d9e8da70SAndroid Build Coastguard Worker repositories { 53*d9e8da70SAndroid Build Coastguard Worker google() 54*d9e8da70SAndroid Build Coastguard Worker mavenCentral() 55*d9e8da70SAndroid Build Coastguard Worker // maven { 56*d9e8da70SAndroid Build Coastguard Worker // url 'https://oss.sonatype.org/content/repositories/snapshots/' 57*d9e8da70SAndroid Build Coastguard Worker // } 58*d9e8da70SAndroid Build Coastguard Worker // mavenLocal() 59*d9e8da70SAndroid Build Coastguard Worker jcenter() 60*d9e8da70SAndroid Build Coastguard Worker } 61*d9e8da70SAndroid Build Coastguard Worker 62*d9e8da70SAndroid Build Coastguard Worker apply plugin: 'io.gitlab.arturbosch.detekt' 63*d9e8da70SAndroid Build Coastguard Worker 64*d9e8da70SAndroid Build Coastguard Worker tasks.withType(DokkaTask.class).configureEach { 65*d9e8da70SAndroid Build Coastguard Worker dokkaSourceSets.configureEach { 66*d9e8da70SAndroid Build Coastguard Worker reportUndocumented.set(false) 67*d9e8da70SAndroid Build Coastguard Worker displayName.set(null) 68*d9e8da70SAndroid Build Coastguard Worker platform.set(org.jetbrains.dokka.Platform.jvm) 69*d9e8da70SAndroid Build Coastguard Worker 70*d9e8da70SAndroid Build Coastguard Worker perPackageOption { 71*d9e8da70SAndroid Build Coastguard Worker // will match all .internal packages and sub-packages 72*d9e8da70SAndroid Build Coastguard Worker matchingRegex.set("(.*\\.internal.*)") 73*d9e8da70SAndroid Build Coastguard Worker suppress.set(true) 74*d9e8da70SAndroid Build Coastguard Worker } 75*d9e8da70SAndroid Build Coastguard Worker perPackageOption { 76*d9e8da70SAndroid Build Coastguard Worker // BuildConfig files 77*d9e8da70SAndroid Build Coastguard Worker matchingRegex.set("com.squareup.leakcanary\\..*") 78*d9e8da70SAndroid Build Coastguard Worker suppress.set(true) 79*d9e8da70SAndroid Build Coastguard Worker } 80*d9e8da70SAndroid Build Coastguard Worker perPackageOption { 81*d9e8da70SAndroid Build Coastguard Worker // Example app 82*d9e8da70SAndroid Build Coastguard Worker matchingRegex.set("com.example.leakcanary\\..*") 83*d9e8da70SAndroid Build Coastguard Worker suppress.set(true) 84*d9e8da70SAndroid Build Coastguard Worker } 85*d9e8da70SAndroid Build Coastguard Worker skipDeprecated.set(true) 86*d9e8da70SAndroid Build Coastguard Worker externalDocumentationLink { 87*d9e8da70SAndroid Build Coastguard Worker url.set(new URL("https://square.github.io/okio/2.x/okio/")) 88*d9e8da70SAndroid Build Coastguard Worker } 89*d9e8da70SAndroid Build Coastguard Worker externalDocumentationLink { 90*d9e8da70SAndroid Build Coastguard Worker url.set(new URL("https://square.github.io/moshi/1.x/moshi/")) 91*d9e8da70SAndroid Build Coastguard Worker } 92*d9e8da70SAndroid Build Coastguard Worker } 93*d9e8da70SAndroid Build Coastguard Worker } 94*d9e8da70SAndroid Build Coastguard Worker 95*d9e8da70SAndroid Build Coastguard Worker pluginManager.withPlugin("com.vanniktech.maven.publish") { 96*d9e8da70SAndroid Build Coastguard Worker mavenPublish { 97*d9e8da70SAndroid Build Coastguard Worker sonatypeHost = "S01" 98*d9e8da70SAndroid Build Coastguard Worker } 99*d9e8da70SAndroid Build Coastguard Worker } 100*d9e8da70SAndroid Build Coastguard Worker 101*d9e8da70SAndroid Build Coastguard Worker tasks.withType(JavaCompile).configureEach { 102*d9e8da70SAndroid Build Coastguard Worker options.compilerArgs += [ 103*d9e8da70SAndroid Build Coastguard Worker '-Xlint:all', 104*d9e8da70SAndroid Build Coastguard Worker '-Xlint:-serial', 105*d9e8da70SAndroid Build Coastguard Worker '-Xlint:-deprecation', 106*d9e8da70SAndroid Build Coastguard Worker // espresso-core classes say they're compiled with 51.0 but contain 52.0 attributes. 107*d9e8da70SAndroid Build Coastguard Worker // warning: [classfile] MethodParameters attribute introduced in version 52.0 class files is ignored in version 51.0 class files 108*d9e8da70SAndroid Build Coastguard Worker // '-Werror' 109*d9e8da70SAndroid Build Coastguard Worker ] 110*d9e8da70SAndroid Build Coastguard Worker } 111*d9e8da70SAndroid Build Coastguard Worker 112*d9e8da70SAndroid Build Coastguard Worker tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { 113*d9e8da70SAndroid Build Coastguard Worker kotlinOptions { 114*d9e8da70SAndroid Build Coastguard Worker // Avoid warnings of using older stdlib version 1.3 than compiler version 1.4 115*d9e8da70SAndroid Build Coastguard Worker apiVersion = "1.3" 116*d9e8da70SAndroid Build Coastguard Worker } 117*d9e8da70SAndroid Build Coastguard Worker } 118*d9e8da70SAndroid Build Coastguard Worker 119*d9e8da70SAndroid Build Coastguard Worker tasks.withType(Test).configureEach { 120*d9e8da70SAndroid Build Coastguard Worker testLogging { 121*d9e8da70SAndroid Build Coastguard Worker exceptionFormat 'FULL' 122*d9e8da70SAndroid Build Coastguard Worker showCauses true 123*d9e8da70SAndroid Build Coastguard Worker showExceptions true 124*d9e8da70SAndroid Build Coastguard Worker showStackTraces true 125*d9e8da70SAndroid Build Coastguard Worker } 126*d9e8da70SAndroid Build Coastguard Worker } 127*d9e8da70SAndroid Build Coastguard Worker 128*d9e8da70SAndroid Build Coastguard Worker detekt { 129*d9e8da70SAndroid Build Coastguard Worker config = rootProject.files('detekt-config.yml') 130*d9e8da70SAndroid Build Coastguard Worker parallel = true 131*d9e8da70SAndroid Build Coastguard Worker reports { 132*d9e8da70SAndroid Build Coastguard Worker xml.enabled = false 133*d9e8da70SAndroid Build Coastguard Worker } 134*d9e8da70SAndroid Build Coastguard Worker } 135*d9e8da70SAndroid Build Coastguard Worker 136*d9e8da70SAndroid Build Coastguard Worker pluginManager.withPlugin("java") { 137*d9e8da70SAndroid Build Coastguard Worker tasks.named("check") { dependsOn("detekt") } 138*d9e8da70SAndroid Build Coastguard Worker tasks.named("assemble") { dependsOn(rootProject.tasks.named("installGitHooks")) } 139*d9e8da70SAndroid Build Coastguard Worker tasks.named("clean") { dependsOn(rootProject.tasks.named("installGitHooks")) } 140*d9e8da70SAndroid Build Coastguard Worker } 141*d9e8da70SAndroid Build Coastguard Worker} 142*d9e8da70SAndroid Build Coastguard Worker 143*d9e8da70SAndroid Build Coastguard Worker//Copies git hooks from /hooks folder into .git; currently used to run Detekt during push 144*d9e8da70SAndroid Build Coastguard Worker//Git hook installation 145*d9e8da70SAndroid Build Coastguard Workertasks.register("installGitHooks", Copy) { 146*d9e8da70SAndroid Build Coastguard Worker from new File(rootProject.rootDir, 'hooks') 147*d9e8da70SAndroid Build Coastguard Worker into { new File(rootProject.rootDir, '.git/hooks') } 148*d9e8da70SAndroid Build Coastguard Worker fileMode 0777 //Make files executable 149*d9e8da70SAndroid Build Coastguard Worker} 150*d9e8da70SAndroid Build Coastguard Worker 151*d9e8da70SAndroid Build Coastguard Workertasks.register("siteDokka", Copy) { 152*d9e8da70SAndroid Build Coastguard Worker description = "Generate dokka Github-flavored Markdown for the documentation site." 153*d9e8da70SAndroid Build Coastguard Worker group = "documentation" 154*d9e8da70SAndroid Build Coastguard Worker dependsOn(":dokkaGfmCollector") 155*d9e8da70SAndroid Build Coastguard Worker 156*d9e8da70SAndroid Build Coastguard Worker // Copy the files instead of configuring a different output directory on the dokka task itself 157*d9e8da70SAndroid Build Coastguard Worker // since the default output directories disambiguate between different types of outputs, and our 158*d9e8da70SAndroid Build Coastguard Worker // custom directory doesn't. 159*d9e8da70SAndroid Build Coastguard Worker from(layout.buildDirectory.dir("dokka/gfmCollector/leakcanary")) 160*d9e8da70SAndroid Build Coastguard Worker // For whatever reason Dokka doesn't want to ignore the packages we told it to ignore. 161*d9e8da70SAndroid Build Coastguard Worker // Fine, we'll just ignore it here. 162*d9e8da70SAndroid Build Coastguard Worker exclude '**/com.example.leakcanary/**' 163*d9e8da70SAndroid Build Coastguard Worker into(rootProject.file("docs/api")) 164*d9e8da70SAndroid Build Coastguard Worker 165*d9e8da70SAndroid Build Coastguard Worker filter { line -> 166*d9e8da70SAndroid Build Coastguard Worker // Dokka adds [main]\ and [main]<br> everywhere, this just removes it. 167*d9e8da70SAndroid Build Coastguard Worker line.replaceAll("\\[main\\]\\\\", "").replaceAll("\\[main\\]<br>", "") 168*d9e8da70SAndroid Build Coastguard Worker } 169*d9e8da70SAndroid Build Coastguard Worker} 170