Skip to content

Commit

Permalink
Remove usage of deprecated VersionNumber
Browse files Browse the repository at this point in the history
Signed-off-by: Alex Saveau <[email protected]>
  • Loading branch information
SUPERCILEX committed Nov 7, 2021
1 parent 1124e7a commit aa73701
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 53 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.github.triplet.gradle.common.validation

import com.android.build.api.AndroidPluginVersion
import org.gradle.util.GradleVersion

internal val MIN_GRADLE_VERSION = GradleVersion.version("7.0.2")
internal val MIN_AGP_VERSION = AndroidPluginVersion(7, 0)
Original file line number Diff line number Diff line change
@@ -1,28 +1,14 @@
package com.github.triplet.gradle.common.validation

import com.android.Version
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.util.GradleVersion
import org.gradle.util.VersionNumber

internal class RuntimeValidationPlugin : Plugin<Project> {
override fun apply(project: Project) {
check(project === project.rootProject)

val agpVersion = try {
VersionNumber.parse(Version.ANDROID_GRADLE_PLUGIN_VERSION)
} catch (e: NoClassDefFoundError) {
null
}
val validator = RuntimeValidator(
GradleVersion.current(), MIN_GRADLE_VERSION, agpVersion, MIN_AGP_VERSION)

validator.validate()
}

private companion object {
val MIN_GRADLE_VERSION = GradleVersion.version("7.0.2")
val MIN_AGP_VERSION = VersionNumber.parse("7.0.0")
GradleRuntimeValidator(GradleVersion.current(), MIN_GRADLE_VERSION)
.validate()
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
package com.github.triplet.gradle.common.validation

import com.android.build.api.AndroidPluginVersion
import org.gradle.util.GradleVersion
import org.gradle.util.VersionNumber

internal class RuntimeValidator(
internal class GradleRuntimeValidator(
private val currentGradleVersion: GradleVersion,
private val minGradleVersion: GradleVersion,

private val currentAgpVersion: VersionNumber?,
private val minAgpVersion: VersionNumber,
) {
fun validate() {
validateGradle()
validateAgp()
}

private fun validateGradle() {
check(currentGradleVersion >= minGradleVersion) {
"""
|Gradle Play Publisher's minimum Gradle version is at least $minGradleVersion and yours
Expand All @@ -25,8 +17,13 @@ internal class RuntimeValidator(
""".trimMargin()
}
}
}

private fun validateAgp() {
internal class AgpRuntimeValidator(
private val currentAgpVersion: AndroidPluginVersion?,
private val minAgpVersion: AndroidPluginVersion,
) {
fun validate() {
check(null != currentAgpVersion && currentAgpVersion >= minAgpVersion) {
"""
|Gradle Play Publisher's minimum Android Gradle Plugin version is at least
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
package com.github.triplet.gradle.common.validation

import com.android.build.api.component.analytics.AnalyticsEnabledApplicationVariant
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import com.android.build.api.variant.ApplicationVariant
import com.android.build.gradle.AppPlugin
import com.android.build.gradle.internal.component.ComponentCreationConfig
import org.gradle.api.Project
import org.gradle.api.logging.Logger
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.findByType
import org.gradle.kotlin.dsl.withType

/**
* Validates required dependencies. If GPP can't run in the current context, an error will be
* thrown.
*/
fun Project.validateRuntime() {
rootProject.plugins.apply(RuntimeValidationPlugin::class)

project.plugins.withType<AppPlugin> {
val agpPluginVersion = extensions.findByType<ApplicationAndroidComponentsExtension>()?.pluginVersion
AgpRuntimeValidator(agpPluginVersion, MIN_AGP_VERSION).validate()
}
}

/** @return true if the variant is *not* debuggable and can therefore be published. */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,75 +1,68 @@
package com.github.triplet.gradle.common.validation

import com.android.build.api.AndroidPluginVersion
import org.gradle.util.GradleVersion
import org.gradle.util.VersionNumber
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows

class RuntimeValidatorTest {
@Test
fun `Gradle version below minimum throws`() {
val validator = newValidator(
currentGradle = GradleVersion.version("0.0.0"),
minGradle = GradleVersion.version("1.0.0")
val validator = GradleRuntimeValidator(
currentGradleVersion = GradleVersion.version("0.0.0"),
minGradleVersion = GradleVersion.version("1.0.0"),
)

assertThrows<IllegalStateException> { validator.validate() }
}

@Test
fun `Gradle version at minimum succeeds`() {
val validator = newValidator(
currentGradle = GradleVersion.version("1.0.0"),
minGradle = GradleVersion.version("1.0.0")
val validator = GradleRuntimeValidator(
currentGradleVersion = GradleVersion.version("1.0.0"),
minGradleVersion = GradleVersion.version("1.0.0"),
)

validator.validate()
}

@Test
fun `Gradle version above minimum succeeds`() {
val validator = newValidator(
currentGradle = GradleVersion.version("2.0.0"),
minGradle = GradleVersion.version("1.0.0")
val validator = GradleRuntimeValidator(
currentGradleVersion = GradleVersion.version("2.0.0"),
minGradleVersion = GradleVersion.version("1.0.0"),
)

validator.validate()
}

@Test
fun `Agp version below minimum throws`() {
val validator = newValidator(
currentAgp = VersionNumber.parse("0.0.0"),
minAgp = VersionNumber.parse("1.0.0")
val validator = AgpRuntimeValidator(
currentAgpVersion = AndroidPluginVersion(0, 0),
minAgpVersion = AndroidPluginVersion(1, 0),
)

assertThrows<IllegalStateException> { validator.validate() }
}

@Test
fun `Agp version at minimum succeeds`() {
val validator = newValidator(
currentAgp = VersionNumber.parse("1.0.0"),
minAgp = VersionNumber.parse("1.0.0")
val validator = AgpRuntimeValidator(
currentAgpVersion = AndroidPluginVersion(1, 0),
minAgpVersion = AndroidPluginVersion(1, 0),
)

validator.validate()
}

@Test
fun `Agp version above minimum succeeds`() {
val validator = newValidator(
currentAgp = VersionNumber.parse("2.0.0"),
minAgp = VersionNumber.parse("1.0.0")
val validator = AgpRuntimeValidator(
currentAgpVersion = AndroidPluginVersion(2, 0),
minAgpVersion = AndroidPluginVersion(1, 0),
)

validator.validate()
}

private fun newValidator(
currentGradle: GradleVersion = GradleVersion.version("0.0.0"),
minGradle: GradleVersion = GradleVersion.version("0.0.0"),
currentAgp: VersionNumber = VersionNumber.parse("0.0.0"),
minAgp: VersionNumber = VersionNumber.parse("0.0.0"),
) = RuntimeValidator(currentGradle, minGradle, currentAgp, minAgp)
}

0 comments on commit aa73701

Please sign in to comment.