Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Gradle config cache in detekt's build #3574

Merged
merged 5 commits into from
Mar 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import io.gitlab.arturbosch.detekt.Detekt
import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask

plugins {
kotlin("jvm") apply false
jacoco
Expand Down Expand Up @@ -39,3 +42,65 @@ tasks {
}
}
}

val analysisDir = file(projectDir)
val baselineFile = file("$rootDir/config/detekt/baseline.xml")
val configFile = file("$rootDir/config/detekt/detekt.yml")
val statisticsConfigFile = file("$rootDir/config/detekt/statistics.yml")

val kotlinFiles = "**/*.kt"
val kotlinScriptFiles = "**/*.kts"
val resourceFiles = "**/resources/**"
val buildFiles = "**/build/**"

val detektFormat by tasks.registering(Detekt::class) {
description = "Formats whole project."
parallel = true
disableDefaultRuleSets = true
buildUponDefaultConfig = true
autoCorrect = true
setSource(analysisDir)
config.setFrom(listOf(statisticsConfigFile, configFile))
include(kotlinFiles)
include(kotlinScriptFiles)
exclude(resourceFiles)
exclude(buildFiles)
baseline.set(baselineFile)
reports {
xml.enabled = false
html.enabled = false
txt.enabled = false
}
}

val detektAll by tasks.registering(Detekt::class) {
description = "Runs the whole project at once."
parallel = true
buildUponDefaultConfig = true
setSource(analysisDir)
config.setFrom(listOf(statisticsConfigFile, configFile))
include(kotlinFiles)
include(kotlinScriptFiles)
exclude(resourceFiles)
exclude(buildFiles)
baseline.set(baselineFile)
reports {
xml.enabled = false
html.enabled = false
txt.enabled = false
}
}

val detektProjectBaseline by tasks.registering(DetektCreateBaselineTask::class) {
description = "Overrides current baseline."
buildUponDefaultConfig.set(true)
ignoreFailures.set(true)
parallel.set(true)
setSource(analysisDir)
config.setFrom(listOf(statisticsConfigFile, configFile))
include(kotlinFiles)
include(kotlinScriptFiles)
exclude(resourceFiles)
exclude(buildFiles)
baseline.set(baselineFile)
}
2 changes: 1 addition & 1 deletion buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ object Plugins {
const val KOTLIN = "1.4.21"
const val DETEKT = "1.16.0"
const val GITHUB_RELEASE = "2.2.12"
const val SHADOW = "5.2.0"
const val SHADOW = "6.1.0"
const val VERSIONS = "0.28.0"
const val SONAR = "2.8"
const val DOKKA = "1.4.10"
Expand Down
104 changes: 18 additions & 86 deletions buildSrc/src/main/kotlin/detekt.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,104 +1,36 @@
import io.gitlab.arturbosch.detekt.Detekt
import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask
import io.gitlab.arturbosch.detekt.extensions.DetektExtension

plugins {
id("io.gitlab.arturbosch.detekt")
}

val analysisDir = file(projectDir)
val baselineFile = file("$rootDir/config/detekt/baseline.xml")
val configFile = file("$rootDir/config/detekt/detekt.yml")
val statisticsConfigFile = file("$rootDir/config/detekt/statistics.yml")

val kotlinFiles = "**/*.kt"
val kotlinScriptFiles = "**/*.kts"
val resourceFiles = "**/resources/**"
val buildFiles = "**/build/**"

subprojects {

apply {
plugin("io.gitlab.arturbosch.detekt")
}

tasks.withType<Detekt>().configureEach {
jvmTarget = "1.8"
}

detekt {
input = objects.fileCollection().from(
DetektExtension.DEFAULT_SRC_DIR_JAVA,
"src/test/java",
DetektExtension.DEFAULT_SRC_DIR_KOTLIN,
"src/test/kotlin"
)
buildUponDefaultConfig = true
baseline = baselineFile

reports {
xml.enabled = true
html.enabled = true
txt.enabled = true
sarif.enabled = true
}
}

dependencies {
detekt(project(":detekt-cli"))
detektPlugins(project(":custom-checks"))
detektPlugins(project(":detekt-formatting"))
}
tasks.withType<Detekt>().configureEach {
jvmTarget = "1.8"
}

val detektFormat by tasks.registering(Detekt::class) {
description = "Formats whole project."
parallel = true
disableDefaultRuleSets = true
detekt {
input = objects.fileCollection().from(
DetektExtension.DEFAULT_SRC_DIR_JAVA,
"src/test/java",
DetektExtension.DEFAULT_SRC_DIR_KOTLIN,
"src/test/kotlin"
)
buildUponDefaultConfig = true
autoCorrect = true
setSource(analysisDir)
config.setFrom(listOf(statisticsConfigFile, configFile))
include(kotlinFiles)
include(kotlinScriptFiles)
exclude(resourceFiles)
exclude(buildFiles)
baseline.set(baselineFile)
reports {
xml.enabled = false
html.enabled = false
txt.enabled = false
}
}
baseline = baselineFile

val detektAll by tasks.registering(Detekt::class) {
description = "Runs the whole project at once."
parallel = true
buildUponDefaultConfig = true
setSource(analysisDir)
config.setFrom(listOf(statisticsConfigFile, configFile))
include(kotlinFiles)
include(kotlinScriptFiles)
exclude(resourceFiles)
exclude(buildFiles)
baseline.set(baselineFile)
reports {
xml.enabled = false
html.enabled = false
txt.enabled = false
xml.enabled = true
html.enabled = true
txt.enabled = true
sarif.enabled = true
}
}

val detektProjectBaseline by tasks.registering(DetektCreateBaselineTask::class) {
description = "Overrides current baseline."
buildUponDefaultConfig.set(true)
ignoreFailures.set(true)
parallel.set(true)
setSource(analysisDir)
config.setFrom(listOf(statisticsConfigFile, configFile))
include(kotlinFiles)
include(kotlinScriptFiles)
exclude(resourceFiles)
exclude(buildFiles)
baseline.set(baselineFile)
dependencies {
detekt(project(":detekt-cli"))
detektPlugins(project(":custom-checks"))
detektPlugins(project(":detekt-formatting"))
}
1 change: 1 addition & 0 deletions buildSrc/src/main/kotlin/module.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ plugins {
kotlin("jvm")
`maven-publish`
jacoco
id("detekt")
chao2zhang marked this conversation as resolved.
Show resolved Hide resolved
}

// bundle detekt's version for all jars to use it at runtime
Expand Down
53 changes: 21 additions & 32 deletions detekt-generator/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ val ruleModules = rootProject.subprojects
.filterNot { it == "detekt-rules" }
.map { "${rootProject.rootDir}/$it/src/main/kotlin" }

val generateDocumentation by tasks.registering {
val generateDocumentation by tasks.registering(JavaExec::class) {
dependsOn(tasks.assemble, ":detekt-api:dokkaJekyll")
description = "Generates detekt documentation and the default config.yml based on Rule KDoc"
group = "documentation"
Expand All @@ -44,42 +44,31 @@ val generateDocumentation by tasks.registering {
file(cliOptionsFile)
)

doLast {
javaexec {
classpath(
configurations.runtimeClasspath.get(),
configurations.compileClasspath.get(),
sourceSets.main.get().output
)
main = "io.gitlab.arturbosch.detekt.generator.Main"
args = listOf(
"--input",
ruleModules.joinToString(",") + "," + "${rootProject.rootDir}/detekt-formatting/src/main/kotlin",
"--documentation",
documentationDir,
"--config",
configDir,
"--cli-options",
cliOptionsFile
)
}
}
classpath(
configurations.runtimeClasspath.get(),
configurations.compileClasspath.get(),
sourceSets.main.get().output
)
main = "io.gitlab.arturbosch.detekt.generator.Main"
args = listOf(
"--input",
ruleModules.joinToString(",") + "," + "${rootProject.rootDir}/detekt-formatting/src/main/kotlin",
"--documentation",
documentationDir,
"--config",
configDir,
"--cli-options",
cliOptionsFile
)
}

val verifyGeneratorOutput by tasks.registering {
val verifyGeneratorOutput by tasks.registering(Exec::class) {
dependsOn(generateDocumentation)
description = "Verifies that the default-detekt-config.yml is up-to-date"
doLast {
assertDefaultConfigUpToDate()
}
}

fun assertDefaultConfigUpToDate() {
val configDiff = ByteArrayOutputStream()
exec {
commandLine = listOf("git", "diff", defaultConfigFile)
standardOutput = configDiff
}

commandLine = listOf("git", "diff", defaultConfigFile)
standardOutput = configDiff

if (configDiff.toString().isNotEmpty()) {
throw GradleException("The default-detekt-config.yml is not up-to-date. " +
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
2 changes: 1 addition & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ include(

// build scan plugin can only be applied in settings file
plugins {
id("com.gradle.enterprise") version "3.3.1"
id("com.gradle.enterprise") version "3.6"
}

gradleEnterprise {
Expand Down