Skip to content

Commit 6cfafc5

Browse files
authored
Use semantic Gradle version strings in versions.yaml (#285)
1 parent baaf7bd commit 6cfafc5

6 files changed

Lines changed: 47 additions & 12 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ Gradle used, versions supported:
216216
## Versions
217217
Example output versions.yaml:
218218
```yaml
219-
gradle: GRADLE_9_4_0
219+
gradle: 9.4.0
220220
project:
221221
develocity: 4.1
222222
jdk: 23

cli/src/main/kotlin/io/github/cdsap/projectgenerator/cli/GenerateVersionsYaml.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class GenerateVersionsYaml {
1010
val file = File("versions.yaml")
1111
val versions = Versions()
1212
val content = """
13-
|gradle: ${Gradle.GRADLE_9_4_0}
13+
|gradle: ${Gradle.GRADLE_9_4_0.version}
1414
|project:
1515
| develocity: ${versions.project.develocity}
1616
| develocityUrl: ${versions.project.develocityUrl}

cli/src/main/kotlin/io/github/cdsap/projectgenerator/cli/Main.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ internal fun resolveProjectRootPath(outputDir: String?, language: Language, proj
149149
}
150150

151151
internal fun resolveGradle(cliGradle: String?, versionsFile: VersionsFile?): Gradle {
152-
return cliGradle?.let { Gradle.valueOf(it.uppercase()) }
152+
return cliGradle?.let(Gradle::fromValue)
153153
?: versionsFile?.gradle
154154
?: Gradle.GRADLE_9_4_0
155155
}

cli/src/main/kotlin/io/github/cdsap/projectgenerator/cli/VersionsParser.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package io.github.cdsap.projectgenerator.cli
33
import com.fasterxml.jackson.annotation.JsonSetter
44
import com.fasterxml.jackson.annotation.Nulls
55
import com.fasterxml.jackson.databind.MapperFeature
6+
import com.fasterxml.jackson.databind.node.ObjectNode
67
import com.fasterxml.jackson.databind.ObjectMapper
78
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
89
import com.fasterxml.jackson.module.kotlin.KotlinModule
10+
import io.github.cdsap.projectgenerator.model.Gradle
911
import io.github.cdsap.projectgenerator.model.VersionsFile
1012
import java.io.File
1113

@@ -22,5 +24,18 @@ object VersionsParser {
2224
* [VersionsFile] keeps plugin list fields nullable so omitted YAML keys can resolve to empty lists
2325
* instead of inheriting the runtime defaults from [io.github.cdsap.projectgenerator.model.Versions].
2426
*/
25-
fun fromFile(file: File): VersionsFile = mapper.readValue(file, VersionsFile::class.java)
27+
fun fromFile(file: File): VersionsFile {
28+
val tree = mapper.readTree(file)
29+
normalizeGradleVersion(tree)
30+
return mapper.treeToValue(tree, VersionsFile::class.java)
31+
}
32+
33+
private fun normalizeGradleVersion(tree: com.fasterxml.jackson.databind.JsonNode) {
34+
if (tree !is ObjectNode) return
35+
val gradleNode = tree.get("gradle") ?: return
36+
if (!gradleNode.isTextual) return
37+
38+
val normalized = Gradle.fromValue(gradleNode.asText()).name
39+
tree.put("gradle", normalized)
40+
}
2641
}

cli/src/test/kotlin/io/github/cdsap/projectgenerator/cli/VersionsParserTest.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,19 @@ class VersionsParserTest {
127127
@Test
128128
fun `parses gradle from YAML case insensitively`() {
129129
val yaml = """
130-
gradle: gradle_9_3_1
130+
gradle: 9.3.1
131+
""".trimIndent()
132+
133+
val file = File(tempDir.toFile(), "versions.yaml").apply { writeText(yaml) }
134+
val versionsFile = VersionsParser.fromFile(file)
135+
136+
assertEquals(Gradle.GRADLE_9_3_1, versionsFile.gradle)
137+
}
138+
139+
@Test
140+
fun `parses legacy gradle enum name from YAML for backwards compatibility`() {
141+
val yaml = """
142+
gradle: GRADLE_9_3_1
131143
""".trimIndent()
132144

133145
val file = File(tempDir.toFile(), "versions.yaml").apply { writeText(yaml) }
Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
package io.github.cdsap.projectgenerator.model
22

3-
enum class Gradle {
4-
GRADLE_8_14_3,
5-
GRADLE_9_1_0,
6-
GRADLE_9_2_0,
7-
GRADLE_9_3_0,
8-
GRADLE_9_3_1,
9-
GRADLE_9_4_0
3+
enum class Gradle(val version: String) {
4+
GRADLE_8_14_3("8.14.3"),
5+
GRADLE_9_1_0("9.1.0"),
6+
GRADLE_9_2_0("9.2.0"),
7+
GRADLE_9_3_0("9.3.0"),
8+
GRADLE_9_3_1("9.3.1"),
9+
GRADLE_9_4_0("9.4.0");
10+
11+
companion object {
12+
fun fromValue(value: String): Gradle {
13+
return entries.firstOrNull { it.version == value }
14+
?: entries.firstOrNull { it.name.equals(value, ignoreCase = true) }
15+
?: throw IllegalArgumentException("Unknown Gradle version: $value")
16+
}
17+
}
1018
}

0 commit comments

Comments
 (0)