@@ -79,7 +79,7 @@ abstract class PrintToolVersions : DefaultTask() {
79
79
@TaskAction
80
80
fun execute () {
81
81
val firebaseExecutable: File = firebaseExecutable.get().asFile
82
- val gradlewFile : File = gradlewExecutable.get().asFile
82
+ val gradlewExecutable : File = gradlewExecutable.get().asFile
83
83
84
84
runCommandIgnoringExitCode(" uname" , " -a" )
85
85
runCommandIgnoringExitCode(" which" , " java" )
@@ -89,7 +89,7 @@ abstract class PrintToolVersions : DefaultTask() {
89
89
runCommandIgnoringExitCode(" which" , " node" )
90
90
runCommandIgnoringExitCode(" node" , " --version" )
91
91
runCommandIgnoringExitCode(firebaseExecutable.path, " --version" )
92
- runCommandIgnoringExitCode(gradlewFile .path, " --version" )
92
+ runCommandIgnoringExitCode(gradlewExecutable .path, " --version" )
93
93
}
94
94
95
95
private fun runCommandIgnoringExitCode (vararg args : String ) {
@@ -123,6 +123,70 @@ abstract class PrintToolVersions : DefaultTask() {
123
123
}
124
124
}
125
125
126
+ abstract class BaseGradleTask (@get:Internal val gradleTasks : List <String >) : DefaultTask() {
127
+
128
+ @get:Internal abstract val gradleInfoLogsEnabled: Property <Boolean >
129
+
130
+ @get:Input abstract val gradleWorkingDir: Property <File >
131
+
132
+ @get:InputFile abstract val gradlewExecutable: RegularFileProperty
133
+
134
+ @get:Inject abstract val execOperations: ExecOperations
135
+
136
+ fun initializeProperties (
137
+ gradleWorkingDir : Provider <Directory >,
138
+ gradlewExecutable : Provider <RegularFile >,
139
+ gradleInfoLogsEnabled : Provider <Boolean >,
140
+ ) {
141
+ this .gradleWorkingDir.set(gradleWorkingDir.map { it.asFile })
142
+ this .gradlewExecutable.set(gradlewExecutable)
143
+ this .gradleInfoLogsEnabled.set(gradleInfoLogsEnabled)
144
+ }
145
+
146
+ @TaskAction
147
+ fun execute () {
148
+ val gradleWorkingDir: File = gradleWorkingDir.get()
149
+ val gradlewExecutable: File = gradlewExecutable.get().asFile
150
+ val gradleInfoLogsEnabled: Boolean = gradleInfoLogsEnabled.get()
151
+
152
+ val gradleArgs = buildList {
153
+ add(gradlewExecutable.path)
154
+ if (gradleInfoLogsEnabled) {
155
+ add(" --info" )
156
+ }
157
+ add(" --profile" )
158
+ add(" --configure-on-demand" )
159
+ addAll(gradleTasks)
160
+ }
161
+
162
+ execOperations.exec {
163
+ workingDir = gradleWorkingDir
164
+ commandLine(gradleArgs)
165
+ logger.lifecycle(" Running command in directory $workingDir : ${commandLine.joinToString(" " )} " )
166
+ }
167
+ }
168
+ }
169
+
170
+ abstract class BuildDataConnectIntegrationTests : BaseGradleTask (assembleTasks) {
171
+ companion object {
172
+ val assembleTasks =
173
+ listOf (
174
+ " :firebase-dataconnect:assembleDebugAndroidTest" ,
175
+ " :firebase-dataconnect:connectors:assembleDebugAndroidTest" ,
176
+ )
177
+ }
178
+ }
179
+
180
+ abstract class RunDataConnectIntegrationTests : BaseGradleTask (connectedCheckTasks) {
181
+ companion object {
182
+ val connectedCheckTasks =
183
+ listOf (
184
+ " :firebase-dataconnect:connectedCheck" ,
185
+ " :firebase-dataconnect:connectors:connectedCheck" ,
186
+ )
187
+ }
188
+ }
189
+
126
190
fun ProviderFactory.requiredGradleProperty (propertyName : String ) =
127
191
gradleProperty(propertyName)
128
192
.orElse(
@@ -150,13 +214,47 @@ val installFirebaseToolsTask =
150
214
)
151
215
}
152
216
153
- val printToolVersionsTask =
154
- tasks.register<PrintToolVersions >(" printToolVersions" ) {
155
- group = ciTaskGroup
156
- description = " Print versions of notable command-line tools"
157
- val gradlewExecutable = layout.projectDirectory.file(" ../../gradlew" )
158
- initializeProperties(
159
- firebaseExecutable = installFirebaseToolsTask.flatMap { it.firebaseExecutable },
160
- gradlewExecutable = providers.provider { gradlewExecutable },
161
- )
217
+ val gradleWorkingDirProvider = providers.provider { layout.projectDirectory.dir(" ../.." ) }
218
+
219
+ val gradlewExecutableProvider = providers.provider { layout.projectDirectory.file(" ../../gradlew" ) }
220
+
221
+ val gradlewInfoLogsEnabledProvider =
222
+ providers.requiredGradleProperty(" debugLoggingEnabled" ).map {
223
+ when (it) {
224
+ " 1" -> true
225
+ " 0" -> false
226
+ else ->
227
+ throw IllegalArgumentException (
228
+ " invalid value for debugLoggingEnabled property: $it (must be either 0 or 1)"
229
+ )
230
+ }
162
231
}
232
+
233
+ tasks.register<PrintToolVersions >(" printToolVersions" ) {
234
+ group = ciTaskGroup
235
+ description = " Print versions of notable command-line tools"
236
+ initializeProperties(
237
+ firebaseExecutable = installFirebaseToolsTask.flatMap { it.firebaseExecutable },
238
+ gradlewExecutable = gradlewExecutableProvider,
239
+ )
240
+ }
241
+
242
+ tasks.register<BuildDataConnectIntegrationTests >(" buildIntegrationTests" ) {
243
+ group = ciTaskGroup
244
+ description = " Build the Data Connect integration tests"
245
+ initializeProperties(
246
+ gradleWorkingDir = gradleWorkingDirProvider,
247
+ gradlewExecutable = gradlewExecutableProvider,
248
+ gradleInfoLogsEnabled = gradlewInfoLogsEnabledProvider,
249
+ )
250
+ }
251
+
252
+ tasks.register<RunDataConnectIntegrationTests >(" runIntegrationTests" ) {
253
+ group = ciTaskGroup
254
+ description = " Run the Data Connect integration tests"
255
+ initializeProperties(
256
+ gradleWorkingDir = gradleWorkingDirProvider,
257
+ gradlewExecutable = gradlewExecutableProvider,
258
+ gradleInfoLogsEnabled = gradlewInfoLogsEnabledProvider,
259
+ )
260
+ }
0 commit comments