-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathbuild.gradle.kts
More file actions
76 lines (64 loc) · 3.26 KB
/
Copy pathbuild.gradle.kts
File metadata and controls
76 lines (64 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
* Copyright 2026 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.util.Properties
plugins {
alias(libs.plugins.spotless) apply false
}
// Evaluate if we are in a CI environment
val isCI = System.getenv("CI")?.toBoolean() ?: false
// Share the isCI flag with all subprojects via Gradle's extra properties
extra["isCI"] = isCI
if (!isCI) {
val secretsFile = file("secrets.properties")
val requestedTasks = gradle.startParameter.taskNames
if (requestedTasks.isEmpty() && !secretsFile.exists()) {
// It's likely an IDE sync if no tasks are specified, so just issue a warning.
println("Warning: secrets.properties not found. Gradle sync may succeed, but building/running the app will fail.")
} else if (requestedTasks.isNotEmpty()) {
val buildTaskKeywords = setOf("build", "install", "assemble")
val testTaskKeywords = setOf("test", "report", "lint")
val isBuildTask = requestedTasks.any { name ->
buildTaskKeywords.any { kw -> name.contains(kw, ignoreCase = true) }
}
val isTestTask = requestedTasks.any { name ->
testTaskKeywords.any { kw -> name.contains(kw, ignoreCase = true) }
}
val isDebugTask = requestedTasks.any { task ->
task.contains("Debug", ignoreCase = true) || task.contains("installAndLaunch", ignoreCase = true)
}
if (isBuildTask && !isTestTask && isDebugTask) {
val defaultsFile = file("local.defaults.properties")
val requiredKeysMessage = if (defaultsFile.exists()) {
defaultsFile.readText()
} else {
"MAPS3D_API_KEY=<YOUR_API_KEY>\nPLACES_API_KEY=<YOUR_API_KEY>"
}
if (!secretsFile.exists()) {
throw GradleException("secrets.properties file not found. Please create a 'secrets.properties' file in the root project directory with the following content:\n\n$requiredKeysMessage")
}
val secrets = Properties()
secretsFile.inputStream().use { secrets.load(it) }
val mapsApiKey = secrets.getProperty("MAPS3D_API_KEY")
val placesApiKey = secrets.getProperty("PLACES_API_KEY")
if (mapsApiKey.isNullOrBlank() || !mapsApiKey.matches(Regex("^AIza[a-zA-Z0-9_-]{35}$"))) {
throw GradleException("Invalid or missing MAPS3D_API_KEY in secrets.properties. Please provide a valid Google Maps API key (starts with 'AIza').")
}
if (placesApiKey.isNullOrBlank() || !placesApiKey.matches(Regex("^AIza[a-zA-Z0-9_-]{35}$"))) {
throw GradleException("Invalid or missing PLACES_API_KEY in secrets.properties. Please provide a valid Google Places API key (starts with 'AIza').")
}
}
}
}