Skip to content

Commit ab539b1

Browse files
authored
Update build cache authorisation (#487)
* Change the way of remote build cache authorization. * Fixed build scan enabled flag
1 parent b94c6bd commit ab539b1

7 files changed

+175
-106
lines changed

build-settings-logic/settings.gradle.kts

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,103 @@ dependencyResolutionManagement {
1515
}
1616
}
1717

18-
apply(from = "src/main/kotlin/atomicfu-gradle-build-cache.settings.gradle.kts")
1918
apply(from = "src/main/kotlin/atomicfu-cache-redirector.settings.gradle.kts")
19+
20+
/*
21+
We have to make sure the build-cache config is consistent in the settings.gradle.kts
22+
files of all projects. The natural way to share logic is with a convention plugin,
23+
but we can't apply a convention plugin in build-settings-logic to itself, so we just copy it.
24+
We could publish build-settings-logic to a Maven repo? But this is quicker and easier.
25+
The following content should be kept in sync with the content of:
26+
`src/main/kotlin/atomicfu-develocity.settings.gradle.kts`
27+
The only difference with the script above is explicitly specified versions
28+
*/
29+
30+
// version should be kept in sync with `gradle/libs.versions.toml`
31+
plugins {
32+
id("com.gradle.develocity") version "3.17.6"
33+
}
34+
35+
val buildingOnTeamCity: Boolean = System.getenv("TEAMCITY_VERSION") != null
36+
val buildingOnGitHub: Boolean = System.getenv("GITHUB_ACTION") != null
37+
val buildingOnCi: Boolean = System.getenv("CI") != null || buildingOnTeamCity || buildingOnGitHub
38+
39+
// NOTE: build scan properties are documented in README.md
40+
val Settings.buildScanEnabled: Provider<Boolean>
41+
get() =
42+
atomicfuProperty("build.scan.enabled", String::toBoolean)
43+
.orElse(buildingOnCi)
44+
45+
val DEFAULT_ATOMICFU_USER_NAME = "<default>"
46+
47+
/**
48+
* Optionally override the default name attached to a Build Scan.
49+
*/
50+
val Settings.buildScanUsername: Provider<String>
51+
get() =
52+
atomicfuProperty("build.scan.username")
53+
.orElse(DEFAULT_ATOMICFU_USER_NAME)
54+
.map(String::trim)
55+
56+
/**
57+
* Disable Local Cache on CI, because CI machines are short-lived, so local caching doesn't help a lot.
58+
* Also, to force CI machines to update the remote cache.
59+
*/
60+
val Settings.buildCacheLocalEnabled: Provider<Boolean>
61+
get() = atomicfuProperty("build.cache.local.enabled", String::toBoolean)
62+
.orElse(!buildingOnCi)
63+
64+
val Settings.buildCacheLocalDirectory: Provider<String>
65+
get() = atomicfuProperty("build.cache.local.directory")
66+
67+
val Settings.buildCachePushEnabled: Provider<Boolean>
68+
get() = atomicfuProperty("build.cache.push", String::toBoolean)
69+
.orElse(buildingOnTeamCity)
70+
71+
internal fun Settings.atomicfuProperty(name: String): Provider<String> =
72+
providers.gradleProperty("org.jetbrains.atomicfu.$name")
73+
74+
internal fun <T : Any> Settings.atomicfuProperty(name: String, convert: (String) -> T): Provider<T> =
75+
atomicfuProperty(name).map(convert)
76+
77+
develocity {
78+
val buildScanEnabled = buildScanEnabled.get()
79+
if (buildScanEnabled) {
80+
val overriddenName = buildScanUsername.orNull
81+
server = "https://ge.jetbrains.com/"
82+
buildScan {
83+
publishing.onlyIf { buildScanEnabled }
84+
capture {
85+
fileFingerprints = buildScanEnabled
86+
buildLogging = buildScanEnabled
87+
uploadInBackground = buildScanEnabled
88+
}
89+
obfuscation {
90+
ipAddresses { _ -> listOf("0.0.0.0") }
91+
hostname { _ -> "concealed" }
92+
username { originalUsername ->
93+
when {
94+
buildingOnTeamCity -> "TeamCity"
95+
buildingOnGitHub -> "GitHub"
96+
buildingOnCi -> "CI"
97+
!overriddenName.isNullOrBlank() && overriddenName != DEFAULT_ATOMICFU_USER_NAME -> overriddenName
98+
overriddenName == DEFAULT_ATOMICFU_USER_NAME -> originalUsername
99+
else -> "unknown"
100+
}
101+
}
102+
}
103+
}
104+
}
105+
}
106+
107+
buildCache {
108+
local {
109+
isEnabled = buildCacheLocalEnabled.get()
110+
if (buildCacheLocalDirectory.orNull != null) {
111+
directory = buildCacheLocalDirectory.get()
112+
}
113+
}
114+
remote(develocity.buildCache) {
115+
isPush = buildCachePushEnabled.get()
116+
}
117+
}

build-settings-logic/src/main/kotlin/Utils.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,32 @@ val Settings.buildScanEnabled: Provider<Boolean>
1515
atomicfuProperty("build.scan.enabled", String::toBoolean)
1616
.orElse(buildingOnCi)
1717

18-
internal const val DEFAULT_ATOMICFU_USER_NAME = "<default>"
18+
const val DEFAULT_ATOMICFU_USER_NAME = "<default>"
1919

2020
/**
21-
* Optionaly override the default name attached to a Build Scan.
21+
* Optionally override the default name attached to a Build Scan.
2222
*/
2323
val Settings.buildScanUsername: Provider<String>
2424
get() =
2525
atomicfuProperty("build.scan.username")
2626
.orElse(DEFAULT_ATOMICFU_USER_NAME)
2727
.map(String::trim)
2828

29+
/**
30+
* Disable Local Cache on CI, because CI machines are short-lived, so local caching doesn't help a lot.
31+
* Also, to force CI machines to update the remote cache.
32+
*/
33+
val Settings.buildCacheLocalEnabled: Provider<Boolean>
34+
get() = atomicfuProperty("build.cache.local.enabled", String::toBoolean)
35+
.orElse(!buildingOnCi)
36+
37+
val Settings.buildCacheLocalDirectory: Provider<String>
38+
get() = atomicfuProperty("build.cache.local.directory")
39+
40+
val Settings.buildCachePushEnabled: Provider<Boolean>
41+
get() = atomicfuProperty("build.cache.push", String::toBoolean)
42+
.orElse(buildingOnTeamCity)
43+
2944
internal fun Settings.atomicfuProperty(name: String): Provider<String> =
3045
providers.gradleProperty("org.jetbrains.atomicfu.$name")
3146

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// this is a settings convention plugin for Gradle Develocity
2+
3+
// Based on https://github.com/JetBrains/kotlin/blob/c20f644ee4cd8d28b39b12ea5304b68c5639e531/repo/gradle-settings-conventions/develocity/src/main/kotlin/develocity.settings.gradle.kts
4+
// Because Atomicfu uses Composite Builds, Build Cache must be configured consistently on:
5+
// - the root settings.gradle.kts,
6+
// - and the settings.gradle.kts of any projects added with `pluginManagement { includedBuild("...") }`
7+
// The Content of this file should be kept in sync with the content at the end of:
8+
// `build-settings-logic/settings.gradle.kts`
9+
// useful links:
10+
// - develocity: https://docs.gradle.com/develocity/gradle-plugin/
11+
// - build cache: https://docs.gradle.org/8.4/userguide/build_cache.html#sec:build_cache_composite
12+
plugins {
13+
id("com.gradle.develocity")
14+
}
15+
16+
develocity {
17+
val buildScanEnabled = buildScanEnabled.get()
18+
if (buildScanEnabled) {
19+
val overriddenName = buildScanUsername.orNull
20+
server = "https://ge.jetbrains.com/"
21+
buildScan {
22+
publishing.onlyIf { buildScanEnabled }
23+
capture {
24+
fileFingerprints = buildScanEnabled
25+
buildLogging = buildScanEnabled
26+
uploadInBackground = buildScanEnabled
27+
}
28+
obfuscation {
29+
ipAddresses { _ -> listOf("0.0.0.0") }
30+
hostname { _ -> "concealed" }
31+
username { originalUsername ->
32+
when {
33+
buildingOnTeamCity -> "TeamCity"
34+
buildingOnGitHub -> "GitHub"
35+
buildingOnCi -> "CI"
36+
!overriddenName.isNullOrBlank() && overriddenName != DEFAULT_ATOMICFU_USER_NAME -> overriddenName
37+
overriddenName == DEFAULT_ATOMICFU_USER_NAME -> originalUsername
38+
else -> "unknown"
39+
}
40+
}
41+
}
42+
}
43+
}
44+
}
45+
46+
47+
buildCache {
48+
local {
49+
isEnabled = buildCacheLocalEnabled.get()
50+
if (buildCacheLocalDirectory.orNull != null) {
51+
directory = buildCacheLocalDirectory.get()
52+
}
53+
}
54+
remote(develocity.buildCache) {
55+
isPush = buildCachePushEnabled.get()
56+
}
57+
}

build-settings-logic/src/main/kotlin/atomicfu-gradle-build-cache.settings.gradle.kts

Lines changed: 0 additions & 66 deletions
This file was deleted.

build-settings-logic/src/main/kotlin/atomicfu-gradle-build-scan.settings.gradle.kts

Lines changed: 0 additions & 34 deletions
This file was deleted.

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ maven-pluginTools = "3.5"
1010
node-gradle = "3.1.1"
1111
rhino = "1.7.10"
1212
gradle-plugin-publish = "1.2.1"
13-
gradle-develocity = "3.17.5"
13+
gradle-develocity = "3.17.6"
1414

1515
[libraries]
1616

settings.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ pluginManagement {
77
plugins {
88
id("atomicfu-dependency-resolution-management")
99
id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0")
10-
id("atomicfu-gradle-build-scan")
11-
id("atomicfu-gradle-build-cache")
10+
id("atomicfu-develocity")
1211
id("atomicfu-cache-redirector")
1312
}
1413

0 commit comments

Comments
 (0)