Skip to content

Commit

Permalink
fix(gradle): Add a dedicated work-around for a Gradle 8.5 bug
Browse files Browse the repository at this point in the history
Signed-off-by: Sebastian Schuberth <sebastian@doubleopen.org>
  • Loading branch information
sschuberth committed Mar 15, 2024
1 parent 0905a90 commit e2c09b2
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import org.apache.logging.log4j.kotlin.logger
import org.gradle.tooling.GradleConnector
import org.gradle.tooling.events.ProgressListener
import org.gradle.tooling.internal.consumer.DefaultGradleConnector
import org.gradle.tooling.model.build.BuildEnvironment

import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
import org.ossreviewtoolkit.analyzer.PackageManager
Expand Down Expand Up @@ -68,6 +69,8 @@ import org.ossreviewtoolkit.utils.ort.okHttpClient
import org.ossreviewtoolkit.utils.ort.ortToolsDirectory
import org.ossreviewtoolkit.utils.spdx.SpdxOperator

import org.semver4j.Semver

/**
* The names of Gradle (Groovy, Kotlin script) build files for a Gradle project.
*/
Expand Down Expand Up @@ -156,12 +159,18 @@ class GradleInspector(
.splitOnWhitespace()
.map { it.unquote() }

val environment = connection.model(BuildEnvironment::class.java).get()
val buildGradleVersion = Semver.coerce(environment.gradle.gradleVersion)

logger.info { "The project at '$projectDir' uses Gradle version $buildGradleVersion." }

// In order to debug the plugin, pass the "-Dorg.gradle.debug=true" option to the JVM running ORT. This will
// then block execution of the plugin until a remote debug session is attached to port 5005 (by default),
// also see https://docs.gradle.org/current/userguide/troubleshooting.html#sec:troubleshooting_build_logic.
val model = connection.model(OrtDependencyTreeModel::class.java)
.apply {
if (logger.delegate.isDebugEnabled) {
// Work around https://github.com/gradle/gradle/issues/28464.
if (logger.delegate.isDebugEnabled && buildGradleVersion?.isEqualTo("8.5.0") != true) {
addProgressListener(ProgressListener { logger.debug(it.displayName) })
}
}
Expand Down
11 changes: 10 additions & 1 deletion plugins/package-managers/gradle/src/main/kotlin/Gradle.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import org.eclipse.aether.repository.WorkspaceRepository
import org.gradle.tooling.GradleConnector
import org.gradle.tooling.events.ProgressListener
import org.gradle.tooling.internal.consumer.DefaultGradleConnector
import org.gradle.tooling.model.build.BuildEnvironment

import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
import org.ossreviewtoolkit.analyzer.PackageManager
Expand All @@ -62,6 +63,8 @@ import org.ossreviewtoolkit.utils.common.temporaryProperties
import org.ossreviewtoolkit.utils.common.unquote
import org.ossreviewtoolkit.utils.ort.createOrtTempFile

import org.semver4j.Semver

private val GRADLE_USER_HOME = Os.env["GRADLE_USER_HOME"]?.let { File(it) } ?: Os.userHomeDirectory.resolve(".gradle")

private val GRADLE_BUILD_FILES = listOf("build.gradle", "build.gradle.kts")
Expand Down Expand Up @@ -212,9 +215,15 @@ class Gradle(
val stdout = ByteArrayOutputStream()
val stderr = ByteArrayOutputStream()

val environment = connection.model(BuildEnvironment::class.java).get()
val buildGradleVersion = Semver.coerce(environment.gradle.gradleVersion)

logger.info { "The project at '$projectDir' uses Gradle version $buildGradleVersion." }

val dependencyTreeModel = connection.model(OrtDependencyTreeModel::class.java)
.apply {
if (logger.delegate.isDebugEnabled) {
// Work around https://github.com/gradle/gradle/issues/28464.
if (logger.delegate.isDebugEnabled && buildGradleVersion?.isEqualTo("8.5.0") != true) {
addProgressListener(ProgressListener { logger.debug(it.displayName) })
}
}
Expand Down

0 comments on commit e2c09b2

Please sign in to comment.