diff --git a/build-logic/conventions/build.gradle.kts b/build-logic/conventions/build.gradle.kts index f0034f1b..2052464d 100644 --- a/build-logic/conventions/build.gradle.kts +++ b/build-logic/conventions/build.gradle.kts @@ -11,6 +11,7 @@ repositories { dependencies { implementation("com.vanniktech:gradle-maven-publish-plugin:0.34.0") + implementation("com.github.spotbugs.snom:spotbugs-gradle-plugin:6.3.0") } gradlePlugin { @@ -19,5 +20,9 @@ gradlePlugin { id = "com.rollbar.conventions.release" implementationClass = "RollbarPublishPlugin" } + register("androidQuality") { + id = "com.rollbar.android.quality" + implementationClass = "AndroidQualityPlugin" + } } } diff --git a/build-logic/conventions/src/main/kotlin/AndroidQualityPlugin.kt b/build-logic/conventions/src/main/kotlin/AndroidQualityPlugin.kt new file mode 100644 index 00000000..93c4ad55 --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/AndroidQualityPlugin.kt @@ -0,0 +1,83 @@ +import com.github.spotbugs.snom.Confidence +import com.github.spotbugs.snom.Effort +import com.github.spotbugs.snom.SpotBugsExtension +import com.github.spotbugs.snom.SpotBugsTask +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.plugins.quality.Checkstyle +import org.gradle.api.plugins.quality.CheckstyleExtension +import org.gradle.testing.jacoco.plugins.JacocoPluginExtension +import org.gradle.testing.jacoco.tasks.JacocoReport + +class AndroidQualityPlugin : Plugin { + override fun apply(project: Project) { + with(project) { + + pluginManager.apply("checkstyle") + pluginManager.apply("com.github.spotbugs-base") + pluginManager.apply("jacoco") + + extensions.configure(CheckstyleExtension::class.java) { + toolVersion = "8.2" + configFile = rootProject.file("tools/checkstyle/google_checks.xml") + } + + tasks.register("checkstyleMain", Checkstyle::class.java) { + source = fileTree("src/main/java") + include("**/*.java") + exclude("**/gen/**", "**/*Test.java", "**/annotation/*.java") + classpath = files() + reports { + xml.required.set(false) + html.required.set(true) + } + isIgnoreFailures = true + } + + extensions.configure(SpotBugsExtension::class.java) { + toolVersion.set("6.3.0") + includeFilter.set(rootProject.file("tools/findbugs/findbugs.xml")) + } + + tasks.register("spotbugsMain", SpotBugsTask::class.java) { + dependsOn(tasks.matching { it.name.startsWith("assemble") }) + + ignoreFailures = true + effort.set(Effort.MAX) + reportLevel.set(Confidence.MEDIUM) + + classes = fileTree("build/intermediates/javac/debug/classes/") + sourceDirs.from(fileTree("src/main/java")) + auxClassPaths.from(files()) + + projectName.set(project.name) + release.set(project.version.toString()) + + reports.create("html") { + required.set(true) + outputLocation.set(layout.buildDirectory.file("reports/spotbugs/main/spotbugs.html")) + setStylesheet("fancy-hist.xsl") + } + } + + extensions.configure(JacocoPluginExtension::class.java) { + toolVersion = "0.8.6" + } + + tasks.register("jacocoTestReport", JacocoReport::class.java) { + dependsOn("test") + + reports { + xml.required.set(false) + csv.required.set(false) + html.required.set(true) + html.outputLocation.set(layout.buildDirectory.dir("jacocoHtml")) + } + } + + tasks.named("check") { + dependsOn("checkstyleMain", "spotbugsMain") + } + } + } +} diff --git a/gradle/android.quality.gradle b/gradle/android.quality.gradle deleted file mode 100644 index 9f61977f..00000000 --- a/gradle/android.quality.gradle +++ /dev/null @@ -1,82 +0,0 @@ -import com.github.spotbugs.snom.SpotBugsTask - -buildscript { - repositories { - maven { - url "https://plugins.gradle.org/m2/" - } - } - dependencies { - classpath "gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.2.4" - } -} - -apply plugin: "checkstyle" -apply plugin: "com.github.spotbugs-base" -apply plugin: 'jacoco' - -checkstyle { - toolVersion = "8.2" - configFile = file("$rootDir/tools/checkstyle/google_checks.xml") -} - -tasks.register("checkstyleMain", Checkstyle) { - source 'src' - include '**/*.java' - exclude '**/gen/**' - exclude '**/*Test.java' - exclude '**/annotation/*.java' - classpath = files() - reports { - xml.required.set(false) - html.required.set(true) - } - // Set this to true until we fix our current errors. - ignoreFailures = true -} - -spotbugs { - toolVersion = '3.1.10' - includeFilter = file("$rootDir/tools/findbugs/findbugs.xml") -} - -tasks.register("spotbugsMain", SpotBugsTask) { - dependsOn tasks.matching { it.name.startsWith("assemble") } - - // Set this to true until we fix our current errors. - ignoreFailures = true - effort = "max" - reportLevel = "medium" - - classes.setFrom(fileTree("build/intermediates/javac/debug/classes/")) - source.setFrom(fileTree("src/main/java")) - classpath.setFrom(files()) - - projectName = project.name - release = VERSION_NAME - reports.html.required = true - reports.html.outputLocation = project.layout.buildDirectory.file("reports/spotbugs/main/spotbugs.html").get().asFile - reports.html.stylesheet = 'fancy-hist.xsl' -} - -jacoco { - toolVersion = '0.8.6' -} - -tasks.register("jacocoTestReport", JacocoReport) { - dependsOn "test" - - reports { - xml.required.set(false) - csv.required.set(false) - html.required.set(true) - html.outputLocation.set(project.layout.buildDirectory.dir("jacocoHtml")) - } -} -// adds checkstyle task to existing check task -afterEvaluate { - if (tasks.named("check")) { - check.dependsOn("checkstyleMain") - check.dependsOn("spotbugsMain") - } -} \ No newline at end of file diff --git a/rollbar-android/build.gradle.kts b/rollbar-android/build.gradle.kts index 781aea60..e3e9fa45 100644 --- a/rollbar-android/build.gradle.kts +++ b/rollbar-android/build.gradle.kts @@ -1,9 +1,8 @@ plugins { id("com.android.library") + id("com.rollbar.android.quality") } -//apply(from = "$rootDir/gradle/android.quality.gradle") TODO: use the plugin - android { namespace = "com.rollbar.android" compileSdk = 33 @@ -22,7 +21,7 @@ android { } getByName("debug") { enableUnitTestCoverage = true - enableAndroidTestCoverage = true + enableAndroidTestCoverage = false } }