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

Enable gradle worker api by default on detekt tasks #6913

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -45,7 +45,13 @@ class DetektReportMergeSpec {
)
}

val gradleRunner = DslGradleRunner(projectLayout, builder.gradleBuildName, buildFileContent)
val gradleRunner = DslGradleRunner(
projectLayout,
builder.gradleBuildName,
buildFileContent,
// because of https://github.com/gradle/gradle/issues/28034
gradleProperties = mapOf("detekt.use.worker.api" to "false"),
)
gradleRunner.setupProject()
gradleRunner.runTasksAndExpectFailure("detekt", "sarifReportMerge", "--continue") { result ->
assertThat(result.output).contains("FAILURE: Build completed with 2 failures.")
Expand Down Expand Up @@ -108,7 +114,13 @@ class DetektReportMergeSpec {
)
}

val gradleRunner = DslGradleRunner(projectLayout, builder.gradleBuildName, buildFileContent)
val gradleRunner = DslGradleRunner(
projectLayout,
builder.gradleBuildName,
buildFileContent,
// because of https://github.com/gradle/gradle/issues/28034
gradleProperties = mapOf("detekt.use.worker.api" to "false"),
)
gradleRunner.setupProject()
gradleRunner.runTasksAndExpectFailure("detekt", "xmlReportMerge", "--continue") { result ->
assertThat(result.output).contains("FAILURE: Build completed with 2 failures.")
Expand Down
Expand Up @@ -175,7 +175,7 @@ abstract class Detekt @Inject constructor(

@TaskAction
fun check() {
if (providers.gradleProperty(USE_WORKER_API).getOrElse("false") == "true") {
if (providers.isWorkerApiEnabled()) {
logger.info("Executing $name using Worker API")
val workQueue = workerExecutor.processIsolation { workerSpec ->
workerSpec.classpath.from(detektClasspath)
Expand Down
Expand Up @@ -143,7 +143,7 @@ abstract class DetektCreateBaselineTask @Inject constructor(

@TaskAction
fun baseline() {
if (providers.gradleProperty(USE_WORKER_API).getOrElse("false") == "true") {
if (providers.isWorkerApiEnabled()) {
logger.info("Executing $name using Worker API")
val workQueue = workerExecutor.processIsolation { workerSpec ->
workerSpec.classpath.from(detektClasspath)
Expand Down
Expand Up @@ -55,7 +55,7 @@ abstract class DetektGenerateConfigTask @Inject constructor(

Files.createDirectories(configFile.get().asFile.parentFile.toPath())

if (providers.gradleProperty(USE_WORKER_API).getOrElse("false") == "true") {
if (providers.isWorkerApiEnabled()) {
logger.info("Executing $name using Worker API")
val workQueue = workerExecutor.processIsolation { workerSpec ->
workerSpec.classpath.from(detektClasspath)
Expand Down
Expand Up @@ -12,6 +12,7 @@ import io.gitlab.arturbosch.detekt.internal.DetektPlain
import org.gradle.api.Incubating
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.provider.ProviderFactory
import java.net.URL
import java.util.jar.Manifest

Expand Down Expand Up @@ -147,7 +148,10 @@ class DetektPlugin : Plugin<Project> {
}

internal const val CONFIGURATION_DETEKT = "detekt"
internal const val USE_WORKER_API = "detekt.use.worker.api"

internal fun ProviderFactory.isWorkerApiEnabled(): Boolean {
return gradleProperty("detekt.use.worker.api").getOrElse("true").toBoolean()
}

@Incubating
fun getSupportedKotlinVersion(): String {
Expand Down
Expand Up @@ -22,6 +22,7 @@ constructor(
val gradleVersionOrNone: String? = null,
val dryRun: Boolean = false,
val jvmArgs: String = "-Xmx2g -XX:MaxMetaspaceSize=1g",
val gradleProperties: Map<String, String> = emptyMap(),
val customPluginClasspath: List<File> = emptyList(),
val projectScript: Project.() -> Unit = {}
) {
Expand Down Expand Up @@ -137,6 +138,7 @@ constructor(
if (dryRun) {
add("-Pdetekt-dry-run=true")
}
addAll(gradleProperties.toList().map { (key, value) -> "-P$key=$value" })
addAll(tasks.toList())
}

Expand Down Expand Up @@ -175,7 +177,7 @@ constructor(
}

companion object {
const val SETTINGS_FILENAME = "settings.gradle"
private const val SETTINGS_FILENAME = "settings.gradle"
private const val DETEKT_TASK = "detekt"
}
}
2 changes: 1 addition & 1 deletion website/docs/gettingstarted/gradle.mdx
Expand Up @@ -310,7 +310,7 @@ detekt {
### <a name="gradle-properties">Options for detekt Gradle properties</a>

```groovy
// If set to true, enables Gradle Worker API for Detekt tasks. `false` by default.
// If set to true, enables Gradle Worker API for Detekt tasks. `true` by default.
// See the doc for the Worker API at https://docs.gradle.org/8.1/userguide/worker_api.html
detekt.use.worker.api = false
```
Expand Down
7 changes: 7 additions & 0 deletions website/docs/introduction/reporting.md
Expand Up @@ -74,6 +74,13 @@ tasks will not run if detekt finds issues.

:::

:::caution Attention

Because of [gradle/gradle#28034](https://github.com/gradle/gradle/issues/28034) to make `reportMerge` to work you need
to [disable the Worker API](https://detekt.dev/docs/gettingstarted/gradle#options-for-detekt-gradle-properties).

:::

The machine-readable report formats support report merging.
Detekt Gradle Plugin is not opinionated in how merging is set up and respects each project's build logic, especially
the merging makes most sense in a multi-module project. In this spirit, only Gradle tasks are provided.
Expand Down