[Gradle, MPP] Slightly rework testAndroidMultiplatformPublicationAGPCompatibility
Each AGP version has its own compatible Gradle versions range. This commit adds additional version requirements for tests to respect AGP limitations #KT-52998 In Progress
This commit is contained in:
committed by
Space Team
parent
16bf37b3f5
commit
25fb641da7
+33
-16
@@ -12,8 +12,10 @@ import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask
|
||||
import org.jetbrains.kotlin.gradle.util.AGPVersion
|
||||
import org.jetbrains.kotlin.gradle.util.testResolveAllConfigurations
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.io.TempDir
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.util.zip.ZipFile
|
||||
import kotlin.io.path.appendText
|
||||
import kotlin.io.path.extension
|
||||
@@ -817,48 +819,63 @@ class KotlinAndroidMppIT : KGPBaseTest() {
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkVersion: JdkVersions.ProvidedJdk,
|
||||
@TempDir tempDir: Path
|
||||
) {
|
||||
project(
|
||||
"new-mpp-android-agp-compatibility",
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
buildJdk = jdkVersion.location
|
||||
buildJdk = jdkVersion.location,
|
||||
localRepoDir = tempDir
|
||||
) {
|
||||
/* Publish a producer library with the current version of AGP */
|
||||
build(":producer:publishAllPublicationsToBuildDirRepository") {
|
||||
/* Check expected publication layout */
|
||||
assertDirectoryInProjectExists("build/repo/com/example/producer-android")
|
||||
assertDirectoryInProjectExists("build/repo/com/example/producer-android-debug")
|
||||
assertDirectoryInProjectExists("build/repo/com/example/producer-jvm")
|
||||
assertDirectoryExists(tempDir.resolve("com/example/producer-android"))
|
||||
assertDirectoryExists(tempDir.resolve("com/example/producer-android-debug"))
|
||||
assertDirectoryExists(tempDir.resolve("com/example/producer-jvm"))
|
||||
}
|
||||
}
|
||||
|
||||
val checkedConsumerAGPVersions = AGPVersion.testedVersions
|
||||
.filter { version -> version >= AGPVersion.fromString(TestVersions.AGP.AGP_42) }
|
||||
.filter { version -> version < AGPVersion.fromString(TestVersions.AGP.MAX_SUPPORTED) }
|
||||
.map { it.toString() }
|
||||
val checkedConsumerAGPVersions = AGPVersion.testedVersions
|
||||
.filter { version -> version >= AGPVersion.fromString(TestVersions.AGP.AGP_42) }
|
||||
.filter { version -> version < AGPVersion.fromString(TestVersions.AGP.MAX_SUPPORTED) }
|
||||
.map { it.toString() }
|
||||
|
||||
checkedConsumerAGPVersions.forEach { consumerAgpVersion ->
|
||||
println("Testing compatibility for AGP consumer version $consumerAgpVersion (Producer: $agpVersion)")
|
||||
val buildOptions = buildOptions.copy(
|
||||
checkedConsumerAGPVersions.forEach { consumerAgpVersion ->
|
||||
val agpTestVersion = TestVersions.AgpCompatibilityMatrix.values().find { it.version == consumerAgpVersion }
|
||||
?: fail("AGP version $consumerAgpVersion is not defined in TestVersions.AGP!")
|
||||
val consumerGradleVersion = when {
|
||||
gradleVersion < agpTestVersion.minSupportedGradleVersion -> agpTestVersion.minSupportedGradleVersion
|
||||
gradleVersion > agpTestVersion.maxSupportedGradleVersion -> agpTestVersion.maxSupportedGradleVersion
|
||||
else -> gradleVersion
|
||||
}
|
||||
println("Testing compatibility for AGP consumer version $consumerAgpVersion on Gradle ${consumerGradleVersion.version} (Producer: $agpVersion)")
|
||||
project(
|
||||
"new-mpp-android-agp-compatibility",
|
||||
consumerGradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(
|
||||
androidVersion = consumerAgpVersion,
|
||||
// Workaround for a deprecation warning from AGP
|
||||
// Relying on FileTrees for ignoring empty directories when using @SkipWhenEmpty has been deprecated.
|
||||
warningMode = if (AGPVersion.fromString(consumerAgpVersion) <= AGPVersion.v7_1_0) WarningMode.None else WarningMode.Fail,
|
||||
)
|
||||
|
||||
),
|
||||
buildJdk = jdkVersion.location,
|
||||
localRepoDir = tempDir
|
||||
) {
|
||||
/*
|
||||
Project: multiplatformAndroidConsumer is a mpp project with jvm and android targets.
|
||||
This project depends on the previous publication as 'commonMainImplementation' dependency
|
||||
*/
|
||||
build(":multiplatformAndroidConsumer:assemble", buildOptions = buildOptions)
|
||||
build(":multiplatformAndroidConsumer:assemble")
|
||||
|
||||
/*
|
||||
Project: plainAndroidConsumer only uses the 'kotlin("android")' plugin
|
||||
This project depends on the previous publication as 'implementation' dependency
|
||||
*/
|
||||
build(":plainAndroidConsumer:assemble", buildOptions = buildOptions)
|
||||
println("Successfully tested compatibility for AGP consumer version $consumerAgpVersion (Producer: $agpVersion)")
|
||||
build(":plainAndroidConsumer:assemble")
|
||||
}
|
||||
println("Successfully tested compatibility for AGP consumer version $consumerAgpVersion on Gradle ${consumerGradleVersion.version} (Producer: $agpVersion)")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ interface TestVersions {
|
||||
const val AGP_42 = "4.2.2"
|
||||
const val AGP_70 = "7.0.4"
|
||||
const val AGP_71 = "7.1.3"
|
||||
const val AGP_72 = "7.2.1"
|
||||
const val AGP_72 = "7.2.2"
|
||||
const val AGP_73 = "7.3.0"
|
||||
const val AGP_74 = "7.4.0-rc03"
|
||||
const val AGP_80 = "8.0.0-alpha11"
|
||||
|
||||
+2
-2
@@ -21,10 +21,10 @@ class AGPVersion private constructor(private val versionNumber: VersionNumber) {
|
||||
val v4_1_0 = fromString("4.1.3")
|
||||
val v4_2_0 = fromString("4.2.2")
|
||||
val v7_0_0 = fromString("7.0.4")
|
||||
val v7_1_0 = fromString("7.1.2")
|
||||
val v7_1_0 = fromString("7.1.3")
|
||||
val v7_2_2 = fromString("7.2.2")
|
||||
val v7_3_0 = fromString("7.3.0")
|
||||
val v7_4_0 = fromString("7.4.0-beta05")
|
||||
val v7_4_0 = fromString("7.4.0-rc03")
|
||||
|
||||
val testedVersions = listOf(v4_1_0, v4_2_0, v7_0_0, v7_1_0, v7_2_2, v7_3_0, v7_4_0)
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ plugins {
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven(rootProject.buildDir.resolve("repo"))
|
||||
maven("<localRepo>")
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ android {
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven(rootProject.buildDir.resolve("repo"))
|
||||
maven("<localRepo>")
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ version = "1.0.0-SNAPSHOT"
|
||||
|
||||
publishing {
|
||||
repositories {
|
||||
maven(rootProject.buildDir.resolve("repo")) {
|
||||
maven("<localRepo>") {
|
||||
name = "buildDir"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user