Skip to content

Commit 4b8a4ef

Browse files
authored
Look up Develocity extension on the local project for Isolated Projects compatibility (#692)
The Develocity plugin (applied at Settings) registers a 'develocity' extension on every project via an Isolated-Projects-safe allprojects propagation, so subprojects can find it without walking up to rootProject. Drops the legacy com.gradle.enterprise plugin fallback.
1 parent 335d56b commit 4b8a4ef

4 files changed

Lines changed: 69 additions & 17 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.emergetools.android.gradle
2+
3+
import com.autonomousapps.kit.truth.TestKitTruth.Companion.assertThat
4+
import com.emergetools.android.gradle.base.EmergeGradleRunner2
5+
import com.emergetools.android.gradle.projects.SimpleGradleProject
6+
import org.junit.jupiter.api.Test
7+
8+
class IsolatedProjectsTest : EmergePluginTest() {
9+
@Test
10+
fun uploadAabUnderIsolatedProjectsWithDevelocity() {
11+
val project = SimpleGradleProject.createWithVcsInExtension(
12+
this,
13+
agpVersion = "8.9.0",
14+
develocityVersion = "4.1.1",
15+
)
16+
17+
val result = EmergeGradleRunner2(project.gradleProject.rootDir)
18+
.withArguments(
19+
":app:emergeUploadReleaseAab",
20+
"-x", ":app:lintVitalRelease",
21+
"-Dorg.gradle.unsafe.isolated-projects=true",
22+
"-PbaseUrl=$baseUrl",
23+
)
24+
.build()
25+
26+
// A successful build under -Dorg.gradle.unsafe.isolated-projects=true is
27+
// already proof that no Isolated Projects violations were emitted. IP
28+
// violations fail the configuration cache, which makes runner.build()
29+
// throw UnexpectedBuildFailure before reaching this point.
30+
assertThat(result).task(":app:emergeUploadReleaseAab").succeeded()
31+
}
32+
}

gradle-plugin/plugin/src/functionalTest/kotlin/com/emergetools/android/gradle/projects/AbstractAndroidProject.kt

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,42 @@ abstract class AbstractAndroidProject(private val baseUrl: String) : AbstractGra
1313
val LOWEST_SUPPORTED_ANDROID_GRADLE_PLUGIN_VERSION = "8.0.0"
1414
}
1515

16-
protected fun newAndroidGradleProjectBuilder(agpVersion: String) : GradleProject.Builder{
16+
protected fun newAndroidGradleProjectBuilder(
17+
agpVersion: String,
18+
develocityVersion: String? = null,
19+
) : GradleProject.Builder{
1720
return newGradleProjectBuilder()
1821
.withRootProject {
1922
gradleProperties += GradleProperties.minimalAndroidProperties()
2023
gradleProperties += "baseUrl=${baseUrl}"
2124
withBuildScript {
2225
buildscript = BuildscriptBlock.defaultAndroidBuildscriptBlock(agpVersion)
2326
}
27+
if (develocityVersion != null) {
28+
withSettingsScript {
29+
plugins(Plugin("com.gradle.develocity", develocityVersion))
30+
additions = """
31+
develocity {
32+
buildScan {
33+
publishing.onlyIf { true }
34+
termsOfUseUrl = 'https://gradle.com/help/legal-terms-of-use'
35+
termsOfUseAgree = 'yes'
36+
uploadInBackground = false
37+
}
38+
}
39+
""".trimIndent()
40+
}
41+
}
2442
}
2543
}
2644

2745

28-
protected fun newAppSubproject(agpVersion: String, extension: String): GradleProject.Builder {
29-
return newAndroidGradleProjectBuilder(agpVersion)
46+
protected fun newAppSubproject(
47+
agpVersion: String,
48+
extension: String,
49+
develocityVersion: String? = null,
50+
): GradleProject.Builder {
51+
return newAndroidGradleProjectBuilder(agpVersion, develocityVersion)
3052
.withAndroidSubproject("app") {
3153
withBuildScript {
3254
plugins(Plugin("com.android.application"), Plugin("com.emergetools.android", PLUGIN_UNDER_TEST_VERSION))

gradle-plugin/plugin/src/functionalTest/kotlin/com/emergetools/android/gradle/projects/SimpleGradleProject.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ import com.emergetools.android.gradle.EmergePluginTest
66
class SimpleGradleProject(
77
agpVersion: String,
88
baseUrl: String,
9-
private val emergeExtension: String
9+
private val emergeExtension: String,
10+
private val develocityVersion: String?,
1011
) : AbstractAndroidProject(baseUrl) {
1112

1213
companion object {
1314
fun createWithVcsInExtension(
1415
test: EmergePluginTest,
1516
agpVersion: String = LOWEST_SUPPORTED_ANDROID_GRADLE_PLUGIN_VERSION,
17+
develocityVersion: String? = null,
1618
): SimpleGradleProject = createWithExtension(
1719
test, agpVersion, """
1820
emerge {
@@ -27,7 +29,8 @@ class SimpleGradleProject(
2729
repoName = 'repoName'
2830
}
2931
}
30-
}""".trimMargin()
32+
}""".trimMargin(),
33+
develocityVersion = develocityVersion,
3134
)
3235

3336
fun createWithoutVcsInExtension(
@@ -43,16 +46,17 @@ class SimpleGradleProject(
4346
fun createWithExtension(
4447
test: EmergePluginTest,
4548
agpVersion: String = LOWEST_SUPPORTED_ANDROID_GRADLE_PLUGIN_VERSION,
46-
extension: String
49+
extension: String,
50+
develocityVersion: String? = null,
4751
): SimpleGradleProject {
48-
return SimpleGradleProject(agpVersion, test.baseUrl.toString(), extension)
52+
return SimpleGradleProject(agpVersion, test.baseUrl.toString(), extension, develocityVersion)
4953
}
5054
}
5155

5256
val gradleProject: GradleProject = build(agpVersion)
5357

5458
private fun build(agpVersion: String): GradleProject {
55-
return newAppSubproject(agpVersion, emergeExtension).build()
59+
return newAppSubproject(agpVersion, emergeExtension, develocityVersion).build()
5660
.write()
5761
}
5862
}

gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/dv/DvHelpers.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,14 @@ import com.gradle.develocity.agent.gradle.adapters.BuildScanObfuscationAdapter
77
import com.gradle.develocity.agent.gradle.adapters.DevelocityAdapter
88
import com.gradle.develocity.agent.gradle.adapters.PublishedBuildScanAdapter
99
import com.gradle.develocity.agent.gradle.adapters.develocity.DevelocityConfigurationAdapter
10-
import com.gradle.develocity.agent.gradle.adapters.enterprise.GradleEnterpriseExtensionAdapter
1110
import org.gradle.api.Action
1211
import org.gradle.api.Project
1312
import org.gradle.caching.configuration.AbstractBuildCache
1413

1514
private fun Project.createDevelocityAdapter(): DevelocityAdapter {
16-
rootProject.extensions.findByName("develocity")?.let {
17-
return DevelocityConfigurationAdapter(it)
18-
}
19-
20-
rootProject.extensions.findByName("gradleEnterprise")?.let {
21-
return GradleEnterpriseExtensionAdapter(it)
22-
}
23-
return NoOpDevelocityAdapter()
15+
return extensions.findByName("develocity")
16+
?.let { DevelocityConfigurationAdapter(it) }
17+
?: NoOpDevelocityAdapter()
2418
}
2519

2620
fun Project.getBuildScan(): BuildScanAdapter {

0 commit comments

Comments
 (0)