【Gradle】プラグインバージョンを対象にグリッドテストを作成する【GitHub Actions】

TL;DR

  • gradle.kts利用の場合、引数をpluginsブロックで参照することはできないようだった
  • 代替案としては、環境変数に設定 -> System.getenvで読み出す形式にするのが一番シンプルそうだった

やり方

紹介する内容は以下からの抜粋です(余計なdiffが入ってしまっていますが、lint-and-test-main.ymlbuild.gradle.ktsだけ見て頂ければ大丈夫です)。
Kotlinのバージョンが対象です。

github.com

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でこれを回避する方法は無いようでした。
この問題は以下のイシューで議論されています。

github.com

Version Catalogを利用している場合

Version Catalogを利用している場合、以下のようにすることでできました。

github.com

やっていることの簡単な説明です。

  1. gradle/libs.versions.tomlKotlinのデフォルトバージョンと、関連して利用する依存を記述
  2. settings.gradle.ktsdependencyResolutionManagementブロックで、環境変数から必要に応じて1で指定したバージョンを上書き
  3. build.gradle.ktsではプラグインalias(libs.plugins.${pluginsブロックに指定した名前})で参照する(バグでエラー表示が出るため抑制も行う)

自分も全体は理解し切れていませんが、以下のプロジェクトを参考に作成しました。

github.com