xref: /aosp_15_r20/external/leakcanary2/build.gradle (revision d9e8da70d8c9df9a41d7848ae506fb3115cae6e6)
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