diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5c1a0456735..7d9b44aa53d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,6 +37,7 @@ targetSdk = "34" compileSdk = "34" minSdk = "21" spotless = "7.0.4" +gummyBears = "0.12.0" [plugins] kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } @@ -62,6 +63,7 @@ springboot3 = { id = "org.springframework.boot", version.ref = "springboot3" } springboot4 = { id = "org.springframework.boot", version.ref = "springboot4" } spring-dependency-management = { id = "io.spring.dependency-management", version = "1.0.11.RELEASE" } gretty = { id = "org.gretty", version = "4.0.0" } +animalsniffer = { id = "ru.vyarus.animalsniffer", version = "2.0.1" } [libraries] apache-httpclient = { module = "org.apache.httpcomponents.client5:httpclient5", version = "5.0.4" } @@ -176,6 +178,9 @@ springboot4-starter-jdbc = { module = "org.springframework.boot:spring-boot-star springboot4-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator", version.ref = "springboot4" } timber = { module = "com.jakewharton.timber:timber", version = "4.7.1" } +# Animalsniffer signature +gummy-bears-api21 = { module = "com.toasttab.android:gummy-bears-api-21", version.ref = "gummyBears" } + # tomcat libraries tomcat-catalina = { module = "org.apache.tomcat:tomcat-catalina", version = "9.0.108" } tomcat-embed-jasper = { module = "org.apache.tomcat.embed:tomcat-embed-jasper", version = "9.0.108" } diff --git a/sentry-apollo-3/build.gradle.kts b/sentry-apollo-3/build.gradle.kts index d9971397a2f..8819e0993d4 100644 --- a/sentry-apollo-3/build.gradle.kts +++ b/sentry-apollo-3/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -37,6 +38,9 @@ dependencies { testImplementation(libs.mockito.kotlin) testImplementation(libs.mockito.inline) testImplementation(libs.okhttp.mockwebserver) + + val gummyBearsModule = libs.gummy.bears.api21.get().module + signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") } configure { test { java.srcDir("src/test/java") } } @@ -57,6 +61,7 @@ tasks { check { dependsOn(jacocoTestCoverageVerification) dependsOn(jacocoTestReport) + dependsOn(animalsnifferMain) } } diff --git a/sentry-apollo-4/build.gradle.kts b/sentry-apollo-4/build.gradle.kts index 931a646eb52..85ea2c3b52b 100644 --- a/sentry-apollo-4/build.gradle.kts +++ b/sentry-apollo-4/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } configure { @@ -44,6 +45,9 @@ dependencies { testImplementation(libs.mockito.inline) testImplementation(libs.okhttp.mockwebserver) testImplementation("org.jetbrains.kotlin:kotlin-reflect:2.0.0") + + val gummyBearsModule = libs.gummy.bears.api21.get().module + signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") } configure { test { java.srcDir("src/test/java") } } @@ -64,6 +68,7 @@ tasks { check { dependsOn(jacocoTestCoverageVerification) dependsOn(jacocoTestReport) + dependsOn(animalsnifferMain) } } diff --git a/sentry-apollo/build.gradle.kts b/sentry-apollo/build.gradle.kts index ce6ceb08bb6..909d52aa127 100644 --- a/sentry-apollo/build.gradle.kts +++ b/sentry-apollo/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -38,6 +39,9 @@ dependencies { testImplementation(libs.mockito.kotlin) testImplementation(libs.mockito.inline) testImplementation(libs.okhttp.mockwebserver) + + val gummyBearsModule = libs.gummy.bears.api21.get().module + signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") } configure { test { java.srcDir("src/test/java") } } @@ -58,6 +62,7 @@ tasks { check { dependsOn(jacocoTestCoverageVerification) dependsOn(jacocoTestReport) + dependsOn(animalsnifferMain) } } diff --git a/sentry-kotlin-extensions/build.gradle.kts b/sentry-kotlin-extensions/build.gradle.kts index e5e6c89a9d0..55aca007130 100644 --- a/sentry-kotlin-extensions/build.gradle.kts +++ b/sentry-kotlin-extensions/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.detekt) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -32,6 +33,9 @@ dependencies { testImplementation(libs.kotlinx.coroutines) testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.mockito.kotlin) + + val gummyBearsModule = libs.gummy.bears.api21.get().module + signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") } configure { test { java.srcDir("src/test/java") } } @@ -52,6 +56,7 @@ tasks { check { dependsOn(jacocoTestCoverageVerification) dependsOn(jacocoTestReport) + dependsOn(animalsnifferMain) } } diff --git a/sentry-ktor-client/build.gradle.kts b/sentry-ktor-client/build.gradle.kts index 1fb3e98f126..2965e81ebd3 100644 --- a/sentry-ktor-client/build.gradle.kts +++ b/sentry-ktor-client/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -39,6 +40,9 @@ dependencies { testImplementation(libs.ktor.client.core) testImplementation(libs.ktor.client.java) testImplementation(libs.okhttp.mockwebserver) + + val gummyBearsModule = libs.gummy.bears.api21.get().module + signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") } configure { test { java.srcDir("src/test/java") } } @@ -59,6 +63,7 @@ tasks { check { dependsOn(jacocoTestCoverageVerification) dependsOn(jacocoTestReport) + dependsOn(animalsnifferMain) } } diff --git a/sentry-okhttp/build.gradle.kts b/sentry-okhttp/build.gradle.kts index e2c10ffc5a1..f7178cf1dfe 100644 --- a/sentry-okhttp/build.gradle.kts +++ b/sentry-okhttp/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -38,6 +39,9 @@ dependencies { testImplementation(libs.mockito.inline) testImplementation(libs.okhttp) testImplementation(libs.okhttp.mockwebserver) + + val gummyBearsModule = libs.gummy.bears.api21.get().module + signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") } configure { test { java.srcDir("src/test/java") } } @@ -58,6 +62,7 @@ tasks { check { dependsOn(jacocoTestCoverageVerification) dependsOn(jacocoTestReport) + dependsOn(animalsnifferMain) } } diff --git a/sentry/build.gradle.kts b/sentry/build.gradle.kts index 56df9121710..bbeb9cc62df 100644 --- a/sentry/build.gradle.kts +++ b/sentry/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -31,6 +32,9 @@ dependencies { testImplementation(libs.msgpack) testImplementation(libs.okio) testImplementation(projects.sentryTestSupport) + + val gummyBearsModule = libs.gummy.bears.api21.get().module + signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") } configure { test { java.srcDir("src/test/java") } } @@ -44,6 +48,19 @@ tasks.jacocoTestReport { } } +animalsniffer { + ignore = + listOf( + // We manually check on Android if it's available (API 26+). + "java.time.Instant" + ) +} + +tasks.animalsnifferMain { + // Uses java.util.function.Supplier, but must be manually invoked. + exclude("**/io/sentry/SentryWrapper.class") +} + tasks { jacocoTestCoverageVerification { violationRules { rule { limit { minimum = Config.QualityPlugins.Jacoco.minimumCoverage } } } @@ -51,6 +68,7 @@ tasks { check { dependsOn(jacocoTestCoverageVerification) dependsOn(jacocoTestReport) + dependsOn(animalsnifferMain) } test { jvmArgs("--add-opens", "java.base/java.util.concurrent=ALL-UNNAMED")