pcimcioch.gitlabci.dsl.job.ScriptDsl.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gitlab-ci-kotlin-dsl Show documentation
Show all versions of gitlab-ci-kotlin-dsl Show documentation
Library providing Kotlin DSL to configure GitlabCI file
package pcimcioch.gitlabci.dsl.job
import kotlinx.serialization.Serializable
import kotlinx.serialization.builtins.list
import kotlinx.serialization.builtins.serializer
import pcimcioch.gitlabci.dsl.DslBase
import pcimcioch.gitlabci.dsl.serializer.ValueSerializer
@Serializable(with = ScriptDsl.ScriptDslSerializer::class)
class ScriptDsl : DslBase() {
var commands: MutableList = mutableListOf()
fun exec(command: String) = commands.add(command)
operator fun String.unaryPlus() = [email protected](this)
object ScriptDslSerializer : ValueSerializer>(String.serializer().list, ScriptDsl::commands)
companion object {
init {
addSerializer(ScriptDsl::class, serializer())
}
}
}
fun createScript(block: ScriptDsl.() -> Unit = {}) = ScriptDsl().apply(block)
fun createScript(vararg elements: String, block: ScriptDsl.() -> Unit = {}) = createScript(elements.toList(), block)
fun createScript(elements: Iterable, block: ScriptDsl.() -> Unit = {}) = ScriptDsl().apply { elements.forEach { exec(it) } }.apply(block)