[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:
Alexander.Likhachev
2023-01-13 03:08:21 +01:00
committed by Space Team
parent 16bf37b3f5
commit 25fb641da7
6 changed files with 39 additions and 22 deletions
@@ -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)")
}
}
@@ -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"
@@ -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)
}
@@ -4,7 +4,7 @@ plugins {
}
repositories {
maven(rootProject.buildDir.resolve("repo"))
maven("<localRepo>")
mavenCentral()
}
@@ -8,7 +8,7 @@ android {
}
repositories {
maven(rootProject.buildDir.resolve("repo"))
maven("<localRepo>")
mavenCentral()
}
@@ -11,7 +11,7 @@ version = "1.0.0-SNAPSHOT"
publishing {
repositories {
maven(rootProject.buildDir.resolve("repo")) {
maven("<localRepo>") {
name = "buildDir"
}
}