Kotlin can also be used as a scripting language, which is safer, concise, and fun to write than bash
or python
. GitHub has recently enabled Kotlin
on Github Action
runners, which enables us to use Kotlin Script on GitHub Action out of the box. But using compiler plugins (eg: kotlinx-serialization) is not straightforward with Kotlin script and requires a bit of fiddling. kts-exec
is a composite GitHub Action to execute the Kotlin Script (on mac
/linux
/windows
) with a given kotlin compiler plugin and dependency caching
.
Required The Kotlin script to execute. Default script name is script.main.kts
.
Optional Kotlin compiler plugin to use. Currently, supported values are
kotlinx-serialization
(Default)allopen
noarg
lombok
sam-with-receiver
kotlin-imports-dumper
Optional Enable kotlin script dependencies caching. It is enabled (true
) by default.
Local path to the kotlin compiler-plugin
. You may also access the path via ${{ env.PLUGIN_PATH }}
.
The kotlin installation path. You may also access the path via ${{ env.KOTLIN_ROOT }}
.
Say, you want to execute the kotlin script with a Serializable
data class for JSON processing
script.main.kts
@file:DependsOn("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2") import kotlinx.serialization.* import kotlinx.serialization.json.* @Serializable data class Lang(val name: String, val version: String) val arg = args.firstOrNull() ?: "Kotlin" println("Hello $arg!") val serialized = Json.encodeToString(Lang("Kotlin", KotlinVersion.CURRENT.toString())) println(serialized)
Add the kt-exec
to your workflow and run your kotlin script.
jobs: build: runs-on: ubuntu-lastest steps: - name: Check out repository uses: actions/checkout@v4 - name: Run Kotlin Script uses: sureshg/kts-exec@v2.7 with: script: "script.main.kts"