I have a Gradle plugin in Groovy which has a setter method
void setDynamicTokens(Map<String, ?> dynamicTokens) {
this.dynamicTokens = dynamicTokens
.collectEntries { k, v ->
[(k): [refId: { v.refId }, defaultValue: { v.defaultValue }, transform: {
v.transform ?: {
it
}
}]]
}
.collectEntries { k, v ->
[(k): v as DynamicToken]
} as Map<String, DynamicToken>
}
and Dynamic Token is an interface
interface DynamicToken {
String refId()
String defaultValue()
Closure<?> transform()
}
in build.gradle
we used to set something like this
dynamicTokens = [
deployName : [refId: "deploy.name", defaultValue: project.name.toLowerCase().replaceAll("[-]", ""), transform: {
it.length() > 20 ? it.substring(0, 20) : it
}],
jvmAllowedMemory : [refId: "jvm.allowed.memory", defaultValue: "1024m"],
jvmActiveProcessors : [refId: "jvm.active.processors", defaultValue: "2"],
autoscaleMinReplicasCentral : [refId: "autoscale.minReplicas.central", defaultValue: "1"],
deploymentStrategy : [refId: "deployment.strategy", defaultValue: "canary"],
resourcesCpuMillicores : [refId: "resources.cpu.millicores", defaultValue: "2000"],
resourcesCpu : [refId: "resources.cpu.millicores", defaultValue: "2000", transform: { "${it}m".toString() }],
resourcesMemoryMi : [refId: "resources.memory", defaultValue: "2048"],
resourcesMemory : [refId: "resources.memory", defaultValue: "2048", transform: { "${it}Mi".toString() }],
]
however I am not sure how to call closure from build.gradle.kts
. I am trying to do something similar but of no use
project.extensions.getByType(com.tgt.search.deploy.prepare.plugin.PluginExtension::class.java).apply {
setDynamicTokens(
mapOf<String,DynamicToken>(
"deployName" to object:DynamicToken{
override fun transform()=KotlinClosure1<String, String>({
if (this.length > 20) this.substring(0, 20) else this
})
override fun defaultValue()=project.name.toLowerCase()
override fun refId()="deploy.name"
}