Skip to content

Commit

Permalink
update/enforce minimum supported Gradle/AGP/KPG versions (#540)
Browse files Browse the repository at this point in the history
* update/enforce minimum supported Gradle/AGP/KPG versions

* update checked version
  • Loading branch information
gabrielittner committed Mar 22, 2023
1 parent 7c8a90e commit b4a3937
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 49 deletions.
Expand Up @@ -26,10 +26,9 @@ enum class AgpVersion(
val minJdkVersion: JavaVersion = JavaVersion.VERSION_11,
) {
// minimum supported
AGP_7_1(
value = "7.1.2",
minGradleVersion = GradleVersion.GRADLE_7_2,
firstUnsupportedGradleVersion = GradleVersion.GRADLE_8_0,
AGP_7_3(
value = "7.3.1",
minGradleVersion = GradleVersion.GRADLE_7_4,
),

// stable
Expand All @@ -40,44 +39,43 @@ enum class AgpVersion(

// beta channel
AGP_8_0(
value = "8.0.0-beta04",
value = "8.0.0-beta05",
minGradleVersion = GradleVersion.GRADLE_8_0,
minJdkVersion = JavaVersion.VERSION_17,
),

// canary channel
AGP_8_1(
value = "8.1.0-alpha07",
value = "8.1.0-alpha09",
minGradleVersion = GradleVersion.GRADLE_8_0,
minJdkVersion = JavaVersion.VERSION_17,
),
}

enum class KotlinVersion(val value: String) {
// minimum supported
KT_1_7("1.7.20"),
KT_1_7("1.7.0"),

// stable
KT_1_8("1.8.10"),

// preview
KT_1_8_BETA("1.8.20-Beta"),
KT_1_8_BETA("1.8.20-RC"),
}

enum class GradleVersion(val value: String) {
// minimum supported
GRADLE_7_3("7.3"),
GRADLE_7_4("7.4"),

// stable
GRADLE_8_0("8.0.2"),

// preview
GRADLE_8_1("8.1-20230302232219+0000"),
GRADLE_8_1("8.1-rc-1"),
;

companion object {
// aliases for the skipped version to be able to reference the correct one in AgpVersion
val GRADLE_7_2 = GRADLE_7_3
val GRADLE_7_5 = GRADLE_8_0
val GRADLE_7_6 = GRADLE_8_0
}
Expand Down
Expand Up @@ -8,34 +8,37 @@ import org.gradle.util.GradleVersion
open class MavenPublishBasePlugin : Plugin<Project> {

override fun apply(project: Project) {
if (GradleVersion.current() < MIN_GRADLE_VERSION) {
error("You need Gradle version $MIN_GRADLE_VERSION or higher, was ${GradleVersion.current()}")
}
project.plugins.withId("com.android.library") {
if (!project.hasWorkingNewAndroidPublishingApi()) {
error("You need AGP version 7.1.2, 7.2.0-beta02, 7.3.0-alpha01 or newer")
}
}

project.plugins.apply(GradleMavenPublishPlugin::class.java)

project.extensions.create("mavenPublishing", MavenPublishBaseExtension::class.java, project)

project.checkMinimumVersions()
}

private fun Project.hasWorkingNewAndroidPublishingApi(): Boolean {
// All 7.3.0 builds starting from 7.3.0-alpha01 are fine.
if (isAtLeastUsingAndroidGradleVersionAlpha(7, 3, 0, 1)) {
return true
private fun Project.checkMinimumVersions() {
if (GradleVersion.current() < MIN_GRADLE_VERSION) {
error("You need Gradle version $MIN_GRADLE_VERSION or higher, was ${GradleVersion.current()}")
}
// 7.2.0 is fine starting with beta 2
if (isAtLeastUsingAndroidGradleVersionAlpha(7, 2, 0, 1)) {
return isAtLeastUsingAndroidGradleVersionBeta(7, 2, 0, 2)
plugins.withId("com.android.library") {
if (!isAtLeastUsingAndroidGradleVersion(7, 3, 0)) {
error("You need AGP version 7.3.0 or newer")
}
}
KOTLIN_PLUGIN_IDS.forEach { pluginId ->
plugins.withId(pluginId) {
if (!isAtLeastKotlinVersion(pluginId, 1, 7, 0)) {
error("You need Kotlin version 1.7.0 or newer")
}
}
}
// Earlier versions are fine starting with 7.1.2
return isAtLeastUsingAndroidGradleVersion(7, 1, 2)
}

private companion object {
val MIN_GRADLE_VERSION: GradleVersion = GradleVersion.version("7.3")
val MIN_GRADLE_VERSION: GradleVersion = GradleVersion.version("7.4")
val KOTLIN_PLUGIN_IDS = listOf(
"org.jetbrains.kotlin.jvm",
"org.jetbrains.kotlin.js",
"org.jetbrains.kotlin.multiplatform",
)
}
}
Expand Up @@ -477,7 +477,7 @@ private fun setupTestFixtures(project: Project, sourcesJar: Boolean) {
val action = Action<JvmVariantBuilder> {
it.withSourcesJar().published()
}
if (GradleVersion.current() >= GradleVersion.version("8.1-20230302232219+0000")) {
if (GradleVersion.current() >= GradleVersion.version("8.1-rc-1")) {
val extension = project.extensions.getByType(JavaPluginExtension::class.java)
val testFixturesSourceSet = extension.sourceSets.maybeCreate(variant)
val method = services.javaClass.getMethod("createJvmVariant", String::class.java, SourceSet::class.java, Action::class.java)
Expand Down
Expand Up @@ -58,21 +58,3 @@ internal fun Project.isAtLeastUsingAndroidGradleVersion(major: Int, minor: Int,
false
}
}

internal fun Project.isAtLeastUsingAndroidGradleVersionBeta(major: Int, minor: Int, patch: Int, beta: Int): Boolean {
return try {
androidComponents.pluginVersion >= AndroidPluginVersion(major, minor, patch).beta(beta)
} catch (e: NoClassDefFoundError) {
// was added in 7.0
false
}
}

internal fun Project.isAtLeastUsingAndroidGradleVersionAlpha(major: Int, minor: Int, patch: Int, alpha: Int): Boolean {
return try {
androidComponents.pluginVersion >= AndroidPluginVersion(major, minor, patch).alpha(alpha)
} catch (e: NoClassDefFoundError) {
// was added in 7.0
false
}
}

0 comments on commit b4a3937

Please sign in to comment.