Skip to content

Commit 4fedc8f

Browse files
Refactored groovy and spock configuration to plugin.
1 parent 0c6a9a4 commit 4fedc8f

File tree

61 files changed

+342
-118
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+342
-118
lines changed

build.gradle.kts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,23 @@ import com.diffplug.gradle.spotless.SpotlessExtension
22
import datadog.gradle.plugin.ci.testAggregate
33

44
plugins {
5-
id("datadog.gradle-debug")
5+
kotlin("jvm") version libs.versions.kotlin.plugin apply false
6+
7+
id("datadog.ci-jobs")
8+
id("datadog.config-inversion-linter")
69
id("datadog.dependency-locking")
7-
id("datadog.tracer-version")
810
id("datadog.dump-hanged-test")
9-
id("config-inversion-linter")
10-
id("datadog.ci-jobs")
11+
id("datadog.gradle-debug")
12+
id("datadog.groovy-spock")
13+
id("datadog.tracer-version")
1114

1215
id("com.diffplug.spotless") version "6.13.0"
1316
id("com.github.spotbugs") version "5.0.14"
17+
id("com.gradleup.shadow") version "8.3.6" apply false
1418
id("de.thetaphi.forbiddenapis") version "3.8"
1519
id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
16-
id("com.gradleup.shadow") version "8.3.6" apply false
1720
id("me.champeau.jmh") version "0.7.3" apply false
1821
id("org.gradle.playframework") version "0.13" apply false
19-
kotlin("jvm") version libs.versions.kotlin.plugin apply false
2022
}
2123

2224
description = "dd-trace-java"

buildSrc/build.gradle.kts

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,47 @@ java {
1313
}
1414

1515
gradlePlugin {
16+
// Sorted list of plugins:
1617
plugins {
17-
create("instrument-plugin") {
18-
id = "instrument"
19-
implementationClass = "InstrumentPlugin"
20-
}
21-
create("muzzle-plugin") {
22-
id = "muzzle"
23-
implementationClass = "datadog.gradle.plugin.muzzle.MuzzlePlugin"
24-
}
2518
create("call-site-instrumentation-plugin") {
2619
id = "call-site-instrumentation"
2720
implementationClass = "datadog.gradle.plugin.CallSiteInstrumentationPlugin"
2821
}
29-
create("tracer-version-plugin") {
30-
id = "datadog.tracer-version"
31-
implementationClass = "datadog.gradle.plugin.version.TracerVersionPlugin"
32-
}
22+
3323
create("dump-hanged-test-plugin") {
3424
id = "datadog.dump-hanged-test"
3525
implementationClass = "datadog.gradle.plugin.dump.DumpHangedTestPlugin"
3626
}
27+
28+
create("groovy-spock-plugin") {
29+
id = "datadog.groovy-spock"
30+
implementationClass = "datadog.gradle.plugin.config.groovy.GroovySpockConventionPlugin"
31+
}
32+
33+
create("instrument-plugin") {
34+
id = "instrument"
35+
implementationClass = "InstrumentPlugin"
36+
}
37+
38+
create("muzzle-plugin") {
39+
id = "muzzle"
40+
implementationClass = "datadog.gradle.plugin.muzzle.MuzzlePlugin"
41+
}
42+
3743
create("supported-config-generation") {
38-
id = "supported-config-generator"
44+
id = "datadog.supported-config-generator"
3945
implementationClass = "datadog.gradle.plugin.config.SupportedConfigPlugin"
4046
}
47+
4148
create("supported-config-linter") {
42-
id = "config-inversion-linter"
49+
id = "datadog.config-inversion-linter"
4350
implementationClass = "datadog.gradle.plugin.config.ConfigInversionLinter"
4451
}
52+
53+
create("tracer-version-plugin") {
54+
id = "datadog.tracer-version"
55+
implementationClass = "datadog.gradle.plugin.version.TracerVersionPlugin"
56+
}
4557
}
4658
}
4759

@@ -76,6 +88,10 @@ dependencies {
7688
implementation("com.fasterxml.jackson.core:jackson-core")
7789

7890
compileOnly(libs.develocity)
91+
92+
// We have to use Spock with Groovy3 as Gradle 8.x bundled with Groovy3.
93+
// TODO: We can refactor `buildSrc` folder to not use Groovy at all.
94+
testImplementation(libs.spock.core.groovy3)
7995
}
8096

8197
tasks.compileKotlin {
@@ -86,10 +102,6 @@ testing {
86102
@Suppress("UnstableApiUsage")
87103
suites {
88104
val test by getting(JvmTestSuite::class) {
89-
dependencies {
90-
implementation(libs.groovy)
91-
implementation(libs.spock.core)
92-
}
93105
targets.configureEach {
94106
testTask.configure {
95107
enabled = project.hasProperty("runBuildSrcTests")

buildSrc/call-site-instrumentation-plugin/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ dependencies {
3535
implementation(libs.javaparser.solver)
3636

3737
testImplementation(libs.bytebuddy)
38-
testImplementation(libs.bundles.groovy)
39-
testImplementation(libs.bundles.spock)
38+
testImplementation(libs.groovy4)
39+
testImplementation(libs.spock.core.groovy4)
4040
testImplementation("javax.servlet", "javax.servlet-api", "3.0.1")
4141
testImplementation("com.github.spotbugs", "spotbugs-annotations", "4.2.0")
4242
}

buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedConfigPlugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ class SupportedConfigPlugin : Plugin<Project> {
1919
className.set(extension.className)
2020
}
2121

22-
val sourceset = targetProject.extensions.getByType(SourceSetContainer::class.java).named(SourceSet.MAIN_SOURCE_SET_NAME)
23-
sourceset.configure {
22+
val sourceSet = targetProject.extensions.getByType(SourceSetContainer::class.java).named(SourceSet.MAIN_SOURCE_SET_NAME)
23+
sourceSet.configure {
2424
java.srcDir(generateTask)
2525
}
2626

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package datadog.gradle.plugin.config.groovy
2+
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.api.artifacts.VersionCatalogsExtension
6+
import org.gradle.api.plugins.JavaLibraryPlugin
7+
import org.gradle.api.plugins.JavaPlugin
8+
9+
@Suppress("unused")
10+
class GroovySpockConventionPlugin : Plugin<Project> {
11+
override fun apply(project: Project) {
12+
if (project == project.rootProject) {
13+
project.subprojects {
14+
this.pluginManager.apply(GroovySpockConventionPlugin::class.java)
15+
}
16+
return
17+
}
18+
19+
val extension = project.extensions.create("groovySpock", GroovySpockExtension::class.java)
20+
21+
project.plugins.withType(JavaPlugin::class.java) {
22+
configure(project, extension)
23+
}
24+
25+
project.plugins.withType(JavaLibraryPlugin::class.java) {
26+
configure(project, extension)
27+
}
28+
}
29+
30+
private fun configure(
31+
project: Project,
32+
extension: GroovySpockExtension
33+
) {
34+
// TODO: check `afterEvaluate` is really needed.
35+
project.afterEvaluate {
36+
val groovyAlias = when (val groovyVersion = extension.groovyVersion.get()) {
37+
3 -> "groovy3"
38+
4 -> "groovy4"
39+
else -> error("Unsupported groovyVersion=$groovyVersion (only 3 or 4 supported)")
40+
}
41+
42+
val catalogs = project.extensions.getByType(VersionCatalogsExtension::class.java)
43+
val libsCatalog = catalogs.named("libs")
44+
45+
fun findLibrary(alias: String) =
46+
libsCatalog.findLibrary(alias)
47+
.orElseThrow { IllegalArgumentException("No library '$alias' in version catalog 'libs'") }
48+
49+
val defaultLibs = listOf(
50+
findLibrary(groovyAlias),
51+
findLibrary("$groovyAlias-json"),
52+
findLibrary("spock-core-$groovyAlias"),
53+
findLibrary("objenesis")
54+
)
55+
56+
fun configureDependencies(cfg: String, deps: List<Any>) =
57+
deps.forEach { project.dependencies.add(cfg, it) }
58+
59+
// If nothing configured, setup default configuration
60+
val configurations = extension.configurations
61+
62+
if (configurations.isEmpty()) {
63+
configureDependencies("testImplementation", defaultLibs)
64+
} else {
65+
configurations.forEach { (cfg, deps) ->
66+
deps.forEach { dep ->
67+
if (dep is String && "default".equals(dep, ignoreCase = true)) {
68+
configureDependencies(cfg, defaultLibs)
69+
}
70+
else {
71+
project.dependencies.add(cfg, dep)
72+
}
73+
}
74+
}
75+
}
76+
}
77+
}
78+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package datadog.gradle.plugin.config.groovy
2+
3+
import org.gradle.api.model.ObjectFactory
4+
import org.gradle.api.provider.Property
5+
import java.util.concurrent.ConcurrentHashMap
6+
import javax.inject.Inject
7+
8+
/**
9+
* Configuration for Groovy and Spock.
10+
*/
11+
abstract class GroovySpockExtension @Inject constructor(
12+
objects: ObjectFactory
13+
) {
14+
internal val configurations: MutableMap<String, MutableList<Any>> = ConcurrentHashMap()
15+
16+
internal val groovyVersion: Property<Int> =
17+
objects.property(Int::class.java)
18+
.convention(4)
19+
20+
fun groovyVersion(version: Int) {
21+
groovyVersion.set(version)
22+
}
23+
24+
fun configureDependency(taskName: String, dependency: Any) {
25+
configurations.computeIfAbsent(taskName) { mutableListOf() }.add(dependency)
26+
}
27+
28+
fun configureDefaultDependencies(taskName: String) {
29+
configureDependency(taskName, "default")
30+
}
31+
}
32+

components/json/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ plugins {
55
apply(from = "$rootDir/gradle/java.gradle")
66

77
jmh {
8-
version = "1.28"
8+
jmhVersion = libs.versions.jmh.get()
99
}

dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
apply from: "$rootDir/gradle/java.gradle"
22
apply from: "$rootDir/gradle/version.gradle"
33

4+
groovySpock {
5+
configureDefaultDependencies("compileOnly")
6+
}
7+
48
dependencies {
59
api project(':dd-java-agent:instrumentation-testing')
610
api project(':dd-java-agent:agent-ci-visibility:civisibility-test-fixtures')

dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
apply from: "$rootDir/gradle/java.gradle"
22
apply from: "$rootDir/gradle/version.gradle"
33

4+
groovySpock {
5+
configureDefaultDependencies("compileOnly")
6+
}
7+
48
dependencies {
59
api project(':dd-java-agent:agent-ci-visibility')
610
api project(':dd-java-agent:testing')
@@ -12,6 +16,6 @@ dependencies {
1216
api group: 'org.msgpack', name: 'jackson-dataformat-msgpack', version: '0.9.6'
1317
api group: 'org.xmlunit', name: 'xmlunit-core', version: '2.10.3'
1418

15-
compileOnly libs.bundles.spock
19+
compileOnly libs.junit.jupiter
1620
}
1721

dd-java-agent/agent-iast/build.gradle

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ protobuf {
3434
}
3535
}
3636

37+
groovySpock {
38+
configureDefaultDependencies("testImplementation")
39+
configureDependency("testImplementation", libs.groovy4.yaml)
40+
}
41+
3742
dependencies {
3843
api libs.slf4j
3944

@@ -49,7 +54,6 @@ dependencies {
4954
testImplementation project(':dd-java-agent:agent-bootstrap')
5055
testImplementation libs.bytebuddy
5156
testImplementation('org.skyscreamer:jsonassert:1.5.1')
52-
testImplementation libs.groovy.yaml
5357
testImplementation libs.guava
5458

5559
testImplementation group: 'io.grpc', name: 'grpc-core', version: grpcVersion
@@ -90,15 +94,6 @@ ext {
9094
'com.datadog.iast.model.json.FormattingAdapter',
9195
'com.datadog.iast.model.json.SourceTypeAdapter',
9296
'com.datadog.iast.model.json.VulnerabilityTypeAdapter',
93-
'com.datadog.iast.taint.TaintedMap',
94-
// TODO: Groovy 4 issues
95-
'com.datadog.iast.taint.TaintedMap.TaintedMapImpl',
96-
// TODO: Groovy 4 issues
97-
'com.datadog.iast.taint.TaintedMap.TaintedMapImpl.1',
98-
// TODO: Groovy 4 issues
99-
'com.datadog.iast.taint.TaintedMap.Debug',
100-
// TODO: Groovy 4 issues
101-
'com.datadog.iast.taint.TaintedMap.NoOp', // TODO: Groovy 4 issues
10297
]
10398
excludedClassesBranchCoverage = []
10499
excludedClassesInstructionCoverage = []

0 commit comments

Comments
 (0)