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"