forked from dajudge/kindcontainer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcodegen.gradle
61 lines (54 loc) · 2.28 KB
/
codegen.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
task generateVersionEnums {
def outputDir = file("$buildDir/generated/sources/codegen/java/main/")
def versionDefFile = file("k8s-versions.json")
outputs.dir outputDir
inputs.file versionDefFile
doLast {
outputDir.mkdirs()
def versionsJson = new groovy.json.JsonSlurper().parse(versionDefFile) as Map<String, Object>
versionsJson.keySet().forEach { container ->
def enumName = "${container}Version"
def defaultImageTemplate = versionsJson.get(container).defaultImage
def code = """package com.dajudge.kindcontainer;
import com.dajudge.kindcontainer.KubernetesVersionDescriptor;
import com.dajudge.kindcontainer.KubernetesVersionEnum;
import static java.lang.String.format;
// generated from k8s-versions.json
public enum ${enumName} implements KubernetesVersionEnum<${enumName}> {
${
versionsJson.get(container).versions.collect({ version ->
def versionParts = version.get("k8s").split("\\.")
def major = versionParts[0]
def minor = versionParts[1]
def patch = versionParts[2]
def deprecated = version.get("deprecated") ?: false
def deprecation = deprecated ? "\t@Deprecated\n" : ""
"${deprecation}\tVERSION_${major}_${minor}_${patch}(new KubernetesVersionDescriptor(${major}, ${minor}, ${patch}))"
}).join(",\n")
};
private final KubernetesVersionDescriptor descriptor;
private ${enumName}(final KubernetesVersionDescriptor descriptor) {
this.descriptor = descriptor;
}
@Override
public KubernetesVersionDescriptor descriptor() {
return descriptor;
}
@Override
public String defaultImageTemplate() {
return "${defaultImageTemplate}";
}
@Override
public String toString() {
return format("%d.%d.%d", descriptor.getMajor(), descriptor.getMinor(), descriptor.getPatch());
}
}
"""
def classDir = new File(outputDir, "com/dajudge/kindcontainer")
classDir.mkdirs()
new File(classDir, "${enumName}.java").write(code)
}
}
}
build.dependsOn generateVersionEnums
sourceSets.main.java.srcDirs += generateVersionEnums.outputs