TL;DR
gradle.kts利用の場合、引数をpluginsブロックで参照することはできないようだった- 代替案としては、環境変数に設定 ->
System.getenvで読み出す形式にするのが一番シンプルそうだった
やり方
紹介する内容は以下からの抜粋です(余計なdiffが入ってしまっていますが、lint-and-test-main.ymlとbuild.gradle.ktsだけ見て頂ければ大丈夫です)。
Kotlinのバージョンが対象です。
build.gradle.kts側の設定
環境変数から設定を取得し、取得できなければデフォルトを用いるように設定しています。
plugins {
val kotlinVersion: String = System.getenv("KOTLIN_VERSION")?.takeIf { it.isNotEmpty() } ?: "1.7.21"
kotlin("jvm") version kotlinVersion
/* ... */
}
GitHub Actions側の設定
最低限の設定を抜き出した部分は以下の通りです。
strategy: matrix: kotlin-version: [ '1.7.21', '1.8.10', '1.8.20-Beta' ] env: KOTLIN_VERSION: ${{ matrix.kotlin-version }}
補足
引数での指定について
pluginsブロックで引数(コマンドラインへ-PkotlinVersion=1.7.21のように入力する)を参照する方法が見つからず、とりあえず動いた環境変数での指定を採用しました。
厳密に言うと環境変数は環境によって影響を受ける可能性が有るため、あまり利用したくありませんでしたが、現在ktsでこれを回避する方法は無いようでした。
この問題は以下のイシューで議論されています。
Version Catalogを利用している場合
Version Catalogを利用している場合、以下のようにすることでできました。
やっていることの簡単な説明です。
gradle/libs.versions.tomlでKotlinのデフォルトバージョンと、関連して利用する依存を記述settings.gradle.ktsのdependencyResolutionManagementブロックで、環境変数から必要に応じて1で指定したバージョンを上書きbuild.gradle.ktsではプラグインをalias(libs.plugins.${pluginsブロックに指定した名前})で参照する(バグでエラー表示が出るため抑制も行う)
自分も全体は理解し切れていませんが、以下のプロジェクトを参考に作成しました。