Skip to content

Commit bd9a026

Browse files
committed
Throw an exception when building with a Gradle version lower than the minimum supported
1 parent a9f044d commit bd9a026

File tree

5 files changed

+59
-12
lines changed

5 files changed

+59
-12
lines changed

embrace-gradle-plugin-integration-tests/src/test/java/io/embrace/android/gradle/integration/framework/PluginIntegrationTestRule.kt

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import org.gradle.testkit.runner.BuildResult
66
import org.gradle.testkit.runner.GradleRunner
77
import org.gradle.testkit.runner.TaskOutcome
88
import org.junit.Assert.assertEquals
9+
import org.junit.Assert.assertTrue
910
import org.junit.rules.ExternalResource
1011
import java.io.File
1112
import java.nio.file.Files
@@ -90,6 +91,11 @@ class PluginIntegrationTestRule : ExternalResource() {
9091
*/
9192
expectedOutcome: TaskOutcome = TaskOutcome.SUCCESS,
9293

94+
/**
95+
* The expected exception message if the task fails.
96+
*/
97+
expectedExceptionMessage: String? = null,
98+
9399
/**
94100
* Whether a debugger should be attached to the TestKit build. This stops the build
95101
* proceeding until a remote debugger is attached.
@@ -123,10 +129,10 @@ class PluginIntegrationTestRule : ExternalResource() {
123129

124130
// run any preconditions before the build
125131
setupInterface.setup(dir)
126-
val result = executeGradleBuild(args, testMatrix.gradle)
132+
val result = executeGradleBuild(args, testMatrix.gradle, expectedExceptionMessage != null)
127133

128134
// run assertions on the build outcome
129-
assertTaskOutcome(result, task, expectedOutcome)
135+
assertTaskOutcome(result, task, expectedOutcome, expectedExceptionMessage)
130136
assertionInterface.assertions(dir)
131137
}
132138

@@ -137,7 +143,7 @@ class PluginIntegrationTestRule : ExternalResource() {
137143
private fun prepareTempDirectory(
138144
fixture: String,
139145
projectType: ProjectType,
140-
androidProjectRoot: String?
146+
androidProjectRoot: String?,
141147
): File {
142148
val srcDir = File("fixtures/$fixture")
143149
if (!srcDir.exists()) {
@@ -185,14 +191,22 @@ class PluginIntegrationTestRule : ExternalResource() {
185191
*/
186192
private fun executeGradleBuild(
187193
args: List<String>,
188-
gradleVersion: String
189-
): BuildResult = GradleRunner.create()
190-
.withProjectDir(tmpDir)
191-
.withArguments(args)
192-
.withGradleVersion(gradleVersion)
193-
.forwardStdOutput(System.out.writer())
194-
.forwardStdError(System.err.writer())
195-
.build()
194+
gradleVersion: String,
195+
fail: Boolean,
196+
): BuildResult {
197+
val runner = GradleRunner.create()
198+
.withProjectDir(tmpDir)
199+
.withArguments(args)
200+
.withGradleVersion(gradleVersion)
201+
.forwardStdOutput(System.out.writer())
202+
.forwardStdError(System.err.writer())
203+
204+
return if (fail) {
205+
runner.buildAndFail()
206+
} else {
207+
runner.build()
208+
}
209+
}
196210

197211
/**
198212
* Adds some additional arguments to the gradle build for better performance of the test suite.
@@ -257,8 +271,13 @@ class PluginIntegrationTestRule : ExternalResource() {
257271
private fun assertTaskOutcome(
258272
result: BuildResult,
259273
task: String,
260-
expectedOutcome: TaskOutcome
274+
expectedOutcome: TaskOutcome,
275+
exceptionExpected: String?,
261276
) {
277+
if (exceptionExpected != null) {
278+
assertTrue(result.output.contains(exceptionExpected))
279+
return
280+
}
262281
val buildTask = result.tasks.singleOrNull { it.path == ":$task" || it.path == ":app:$task" }
263282
?: error("Task '$task' not found in result.")
264283
val outcome = buildTask.outcome

embrace-gradle-plugin-integration-tests/src/test/java/io/embrace/android/gradle/integration/testcases/AgpSupportTest.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import io.embrace.android.gradle.config.TestMatrix.NewerVersion
88
import io.embrace.android.gradle.config.TestMatrix.OlderVersion
99
import io.embrace.android.gradle.integration.framework.PluginIntegrationTestRule
1010
import io.embrace.android.gradle.integration.framework.ProjectType
11+
import io.embrace.android.gradle.plugin.gradle.GradleVersion
1112
import org.junit.Rule
1213
import org.junit.Test
1314

@@ -32,6 +33,20 @@ class AgpSupportTest {
3233
@Test
3334
fun `maximum supported version`() = runTest(MaxVersion)
3435

36+
@Test
37+
fun `unsupported old version`() {
38+
rule.runTest(
39+
fixture = "android-version-support",
40+
task = "assembleRelease",
41+
testMatrix = TestMatrix.UnsupportedOldGradleVersion,
42+
projectType = ProjectType.ANDROID,
43+
expectedExceptionMessage = "Embrace Gradle Plugin requires Gradle version ${GradleVersion.MIN_VERSION} or newer",
44+
assertions = {
45+
verifyNoUploads()
46+
}
47+
)
48+
}
49+
3550
private fun runTest(testMatrix: TestMatrix) {
3651
rule.runTest(
3752
fixture = "android-version-support",

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/EmbraceGradlePlugin.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.embrace.android.gradle.plugin
22

3+
import io.embrace.android.gradle.plugin.gradle.GradleVersion
4+
import io.embrace.android.gradle.plugin.gradle.GradleVersion.Companion.isAtLeast
35
import io.embrace.android.gradle.plugin.instrumentation.config.model.VariantConfig
46
import io.embrace.android.gradle.swazzler.plugin.extension.SwazzlerExtension
57
import org.gradle.api.Plugin
@@ -18,6 +20,8 @@ class EmbraceGradlePlugin : Plugin<Project> {
1820
}
1921

2022
override fun apply(project: Project) {
23+
validateMinGradleVersion()
24+
2125
val extension = project.extensions.create(
2226
EXTENSION_NAME,
2327
SwazzlerExtension::class.java,
@@ -39,4 +43,10 @@ class EmbraceGradlePlugin : Plugin<Project> {
3943
)
4044
}
4145
}
46+
47+
private fun validateMinGradleVersion() {
48+
if (!isAtLeast(GradleVersion.MIN_VERSION)) {
49+
error("Embrace Gradle Plugin requires Gradle version ${GradleVersion.MIN_VERSION} or newer")
50+
}
51+
}
4252
}

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/gradle/GradleVersion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.gradle.util.GradleVersion.version
55
sealed class GradleVersion(private val version: org.gradle.util.GradleVersion) :
66
Comparable<GradleVersion> {
77

8+
object MIN_VERSION : GradleVersion(version("7.5.1"))
89
object CURRENT : GradleVersion(org.gradle.util.GradleVersion.current())
910
object GRADLE_7_6 : GradleVersion(version("7.6"))
1011
object GRADLE_8_0 : GradleVersion(version("8.0"))

embrace-test-common/src/main/kotlin/io/embrace/android/gradle/config/TestMatrix.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ sealed class TestMatrix(
1919
val jdk: JdkEnv,
2020
) {
2121

22+
object UnsupportedOldGradleVersion : TestMatrix("7.4.2", "7.5", "1.8.22", JdkEnv.JAVA_11)
23+
2224
/**
2325
* The minimum version we support & run tests against.
2426
*/

0 commit comments

Comments
 (0)