Skip to content

Commit 82ced12

Browse files
authored
fix: normalize generated version metadata (#11651)
fix: normalize generated version metadata Co-authored-by: brice.dutheil <brice.dutheil@datadoghq.com>
1 parent 84121c4 commit 82ced12

2 files changed

Lines changed: 68 additions & 0 deletions

File tree

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,17 @@ class WriteVersionFilePlugin : Plugin<Project> {
1010
override fun apply(target: Project) {
1111
target.pluginManager.apply("java")
1212

13+
val versionFileName = "${target.name}.version"
1314
val writeVersionFile = target.tasks.register<WriteVersionFile>("writeVersionNumberFile")
1415

16+
// Keep volatile generated version metadata from invalidating @Classpath consumers such as CodeNarc.
17+
// https://docs.gradle.org/current/userguide/build_cache_concepts.html#runtime_classpath_normalization
18+
target.normalization {
19+
runtimeClasspath {
20+
ignore(versionFileName)
21+
}
22+
}
23+
1524
target.the<JavaPluginExtension>().sourceSets.named("main") {
1625
resources.srcDir(writeVersionFile)
1726
}

buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,65 @@ class WriteVersionFilePluginTest : VersionPluginsFixture() {
125125
assertThat(versionFile).doesNotExist()
126126
}
127127

128+
@Test
129+
fun `generated version file is ignored in runtime classpath normalization`() {
130+
writeSettings(
131+
"""
132+
rootProject.name = "my-lib"
133+
"""
134+
)
135+
writeRootProject(
136+
"""
137+
import org.gradle.api.DefaultTask
138+
import org.gradle.api.file.ConfigurableFileCollection
139+
import org.gradle.api.file.RegularFileProperty
140+
import org.gradle.api.tasks.Classpath
141+
import org.gradle.api.tasks.InputFiles
142+
import org.gradle.api.tasks.OutputFile
143+
import org.gradle.api.tasks.TaskAction
144+
145+
plugins {
146+
id("dd-trace-java.version-file")
147+
}
148+
149+
version = "1.2.3"
150+
151+
tasks.named<datadog.gradle.plugin.version.WriteVersionFile>("writeVersionNumberFile") {
152+
gitHash.set(providers.gradleProperty("gitHash").orElse("abc12345"))
153+
}
154+
155+
abstract class ClasspathProbe : DefaultTask() {
156+
@get:InputFiles
157+
@get:Classpath
158+
val classpath: ConfigurableFileCollection = project.objects.fileCollection()
159+
160+
@get:OutputFile
161+
val outputFile: RegularFileProperty = project.objects.fileProperty()
162+
163+
@TaskAction
164+
fun probe() {
165+
outputFile.get().asFile.writeText("probed")
166+
}
167+
}
168+
169+
tasks.register<ClasspathProbe>("classpathProbe") {
170+
dependsOn("processResources")
171+
classpath.from(sourceSets.main.get().runtimeClasspath)
172+
outputFile.set(layout.buildDirectory.file("classpath-probe/output.txt"))
173+
}
174+
"""
175+
)
176+
177+
assertThat(run("classpathProbe", "-PgitHash=abc12345").task(":classpathProbe")?.outcome)
178+
.isEqualTo(TaskOutcome.SUCCESS)
179+
180+
val result = run("classpathProbe", "-PgitHash=def67890")
181+
182+
assertThat(generatedVersionFile).hasContent("1.2.3~def67890")
183+
assertThat(result.task(":writeVersionNumberFile")?.outcome).isEqualTo(TaskOutcome.SUCCESS)
184+
assertThat(result.task(":classpathProbe")?.outcome).isEqualTo(TaskOutcome.UP_TO_DATE)
185+
}
186+
128187
private fun assertVersionFile(
129188
expectedContentRegex: String,
130189
task: String = ":writeVersionNumberFile",

0 commit comments

Comments
 (0)