Skip to content

Commit fc39960

Browse files
authored
Migrate version.gradle script plugin to Kotlin convention plugin (#11345)
build: Refactor `version.gradle` to `dd-trace-java.version-file` plugin * `Project.exec {}` is removed in Gradle 9. It is also incompatible with the configuration cache. * `gradle/version.gradle` is a Groovy script plugin, migrating to a convention plugin is the way to go. build: Add new plugin tests build: Refactor the tests with a better fixture for version plugins Merge branch 'master' into bdu/gradle9-write-version-convention-plugin fix: task need to be experessed as task path, in the build result Co-authored-by: brice.dutheil <brice.dutheil@datadoghq.com>
1 parent 710ca87 commit fc39960

29 files changed

Lines changed: 414 additions & 289 deletions

File tree

buildSrc/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ gradlePlugin {
3939
implementationClass = "datadog.gradle.plugin.version.TracerVersionPlugin"
4040
}
4141

42+
create("version-file-plugin") {
43+
id = "dd-trace-java.version-file"
44+
implementationClass = "datadog.gradle.plugin.version.WriteVersionFilePlugin"
45+
}
46+
4247
create("dump-hanged-test-plugin") {
4348
id = "dd-trace-java.dump-hanged-test"
4449
implementationClass = "datadog.gradle.plugin.dump.DumpHangedTestPlugin"

buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ class TracerVersionPlugin @Inject constructor(
3232
providerFactory.gradleProperty("tracerVersion.qualifier")
3333
)
3434

35-
val versionProvider = versionProvider(targetProject, extension)
35+
val theVersion = versionProvider(targetProject, extension)
3636
targetProject.allprojects {
37-
version = versionProvider
37+
version = theVersion
3838
}
3939
}
4040

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package datadog.gradle.plugin.version
2+
3+
import org.gradle.api.DefaultTask
4+
import org.gradle.api.file.DirectoryProperty
5+
import org.gradle.api.file.ProjectLayout
6+
import org.gradle.api.model.ObjectFactory
7+
import org.gradle.api.provider.Property
8+
import org.gradle.api.provider.ProviderFactory
9+
import org.gradle.api.tasks.Input
10+
import org.gradle.api.tasks.OutputDirectory
11+
import org.gradle.api.tasks.TaskAction
12+
import org.gradle.kotlin.dsl.property
13+
import javax.inject.Inject
14+
15+
abstract class WriteVersionFile @Inject constructor(
16+
providerFactory: ProviderFactory,
17+
layout: ProjectLayout,
18+
objects: ObjectFactory,
19+
) : DefaultTask() {
20+
21+
@get:Input
22+
val version: Property<String> = objects.property<String>()
23+
.convention(providerFactory.provider { project.version.toString() })
24+
25+
@get:Input
26+
val gitHash: Property<String> = objects.property<String>()
27+
.convention(
28+
providerFactory.of(GitCommandValueSource::class.java) {
29+
parameters {
30+
gitCommand.addAll("git", "rev-parse", "--short", "HEAD")
31+
workingDirectory.set(layout.projectDirectory)
32+
}
33+
}
34+
)
35+
36+
@get:OutputDirectory
37+
val outputDirectory: DirectoryProperty = objects.directoryProperty()
38+
.convention(layout.buildDirectory.dir("generated/version"))
39+
40+
@TaskAction
41+
fun writeVersionFile() {
42+
val versionFile = outputDirectory.file("${project.name}.version").get().asFile
43+
versionFile.parentFile.mkdirs()
44+
versionFile.writeText("${version.get()}~${gitHash.get()}")
45+
}
46+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package datadog.gradle.plugin.version
2+
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.api.plugins.JavaPluginExtension
6+
import org.gradle.kotlin.dsl.register
7+
import org.gradle.kotlin.dsl.the
8+
9+
class WriteVersionFilePlugin : Plugin<Project> {
10+
override fun apply(target: Project) {
11+
target.pluginManager.apply("java")
12+
13+
val writeVersionFile = target.tasks.register<WriteVersionFile>("writeVersionNumberFile")
14+
15+
target.the<JavaPluginExtension>().sourceSets.named("main") {
16+
resources.srcDir(writeVersionFile)
17+
}
18+
}
19+
}

buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,10 @@ internal open class GradleFixture(protected val projectDir: File) {
151151
/**
152152
* Creates or gets a file in the project directory, ensuring parent directories exist.
153153
*/
154-
protected fun file(path: String): File =
154+
protected fun file(path: String, mkdirs: Boolean = true): File =
155155
File(projectDir, path).also { file ->
156-
file.parentFile?.mkdirs()
156+
if (mkdirs) {
157+
file.parentFile?.mkdirs()
158+
}
157159
}
158160
}

0 commit comments

Comments
 (0)