diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ba1b17..3da4328 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ Please add your entries according to this format. ## Unreleased +- Remove legacy `kotlin-compiler-embeddable` dependency to prevent potential Kotlin version conflicts +- Kotlin to 1.9.21 + ## Version 0.15.1 *(2023-10-31)* - Kotlin version reverted to 1.9.10 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7c5edf4..020ad11 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,15 +1,15 @@ [versions] -agp = "8.1.2" +agp = "8.1.4" binaryCompatibilityValidator = "0.13.2" detekt = "1.23.3" diffUtils = "4.12" junit = "5.10.1" -kotlin = "1.9.10" +kotlin = "1.9.21" ktfmt-plugin = "0.15.1" ktfmt = "0.46" pluginPublish = "1.2.1" truth = "1.1.5" -versionCheck = "0.49.0" +versionCheck = "0.50.0" [plugins] android-library = { id = "com.android.library", version.ref = "agp" } @@ -26,7 +26,6 @@ agp = { module = "com.android.tools.build:gradle", version.ref = "agp" } junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" } jupiter = { module = "org.junit.jupiter:junit-jupiter" } jupiter-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" } -kotlin-compiler-embeddable = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlin" } truth = { module = "com.google.truth:truth", version.ref = "truth" } diffUtils = { module = "io.github.java-diff-utils:java-diff-utils", version.ref = "diffUtils" } ktfmt = { module = "com.facebook:ktfmt", version.ref = "ktfmt" } diff --git a/plugin-build/plugin/build.gradle.kts b/plugin-build/plugin/build.gradle.kts index df71d0a..48a66c5 100644 --- a/plugin-build/plugin/build.gradle.kts +++ b/plugin-build/plugin/build.gradle.kts @@ -70,11 +70,6 @@ dependencies { .classpath.asFiles.first() ) ) - constraints { - implementation(libs.kotlin.compiler.embeddable) { - because("Clash in Kotlin compiler versions - See https://youtrack.jetbrains.com/issue/KT-54236") - } - } } gradlePlugin { @@ -99,6 +94,8 @@ signing { useInMemoryPgpKeys(signingKey, signingPwd) } +tasks.withType().configureEach { onlyIf { project.properties["skip-signing"] != "true" } } + tasks.withType { useJUnitPlatform() } diff --git a/plugin-build/plugin/src/test/java/com/ncorti/ktfmt/gradle/PluginVersionCompatibilityTest.kt b/plugin-build/plugin/src/test/java/com/ncorti/ktfmt/gradle/PluginVersionCompatibilityTest.kt new file mode 100644 index 0000000..1f5326f --- /dev/null +++ b/plugin-build/plugin/src/test/java/com/ncorti/ktfmt/gradle/PluginVersionCompatibilityTest.kt @@ -0,0 +1,71 @@ +package com.ncorti.ktfmt.gradle + +import com.google.common.truth.Truth.assertThat +import java.io.File +import java.nio.file.Path +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import org.intellij.lang.annotations.Language +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.io.TempDir +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource + +internal class PluginVersionCompatibilityTest { + + @TempDir lateinit var tempDir: File + + private val pluginBuildDirectory = Path.of("./", "../") + + @BeforeEach + fun setUp() { + File(tempDir, "src/main/java").mkdirs() + File("src/test/resources/jvmProject-version-compatibility").copyRecursively(tempDir) + } + + @ParameterizedTest + @ValueSource(strings = ["1.7.20", "1.9.10", "1.9.20"]) + fun `plugin can be applied to projects with different kotlin versions`(kotlinVersion: String) { + // Prevent sharing of classpath + publishPluginToMavenLocal() + + replaceKotlinVersion(kotlinVersion) + + createTempFile(content = "val answer = 42\n") + val result = + GradleRunner.create() + .withProjectDir(tempDir) + .withArguments("ktfmtCheckMain", "--info") + .build() + + assertThat(result.task(":ktfmtCheckMain")?.outcome).isEqualTo(TaskOutcome.SUCCESS) + } + + private fun publishPluginToMavenLocal() { + GradleRunner.create() + .withProjectDir(pluginBuildDirectory.toFile()) + .withArguments( + "plugin:publishToMavenLocal", + "-PVERSION=99.99.99-compatibility-check", + "-Pskip-signing=true" + ) + .build() + } + + private fun replaceKotlinVersion(version: String) { + val file = tempDir.resolve("build.gradle.kts") + val updatedKotlinVersion = file.readText().replace("KOTLIN_VERSION_PLACEHOLDER", version) + + file.writeText(updatedKotlinVersion) + } + + private fun createTempFile( + @Language("kotlin") content: String, + fileName: String = "TestFile.kt", + path: String = "src/main/java" + ) = + File(File(tempDir, path), fileName).apply { + createNewFile() + writeText(content) + } +} diff --git a/plugin-build/plugin/src/test/resources/jvmProject-version-compatibility/build.gradle.kts b/plugin-build/plugin/src/test/resources/jvmProject-version-compatibility/build.gradle.kts new file mode 100644 index 0000000..bd197da --- /dev/null +++ b/plugin-build/plugin/src/test/resources/jvmProject-version-compatibility/build.gradle.kts @@ -0,0 +1,6 @@ +plugins { + kotlin("jvm") version "KOTLIN_VERSION_PLACEHOLDER" + id("com.ncorti.ktfmt.gradle") version "99.99.99-compatibility-check" +} + +repositories { mavenCentral() } diff --git a/plugin-build/plugin/src/test/resources/jvmProject-version-compatibility/settings.gradle.kts b/plugin-build/plugin/src/test/resources/jvmProject-version-compatibility/settings.gradle.kts new file mode 100644 index 0000000..e5225eb --- /dev/null +++ b/plugin-build/plugin/src/test/resources/jvmProject-version-compatibility/settings.gradle.kts @@ -0,0 +1,9 @@ +rootProject.name = ("test-fixtures") + +pluginManagement { + repositories { + mavenLocal() + mavenCentral() + gradlePluginPortal() + } +}