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ブロックに指定した名前})
で参照する(バグでエラー表示が出るため抑制も行う)
自分も全体は理解し切れていませんが、以下のプロジェクトを参考に作成しました。