@@ -79,7 +79,7 @@ abstract class PrintToolVersions : DefaultTask() {
7979 @TaskAction
8080 fun execute () {
8181 val firebaseExecutable: File = firebaseExecutable.get().asFile
82- val gradlewFile : File = gradlewExecutable.get().asFile
82+ val gradlewExecutable : File = gradlewExecutable.get().asFile
8383
8484 runCommandIgnoringExitCode(" uname" , " -a" )
8585 runCommandIgnoringExitCode(" which" , " java" )
@@ -89,7 +89,7 @@ abstract class PrintToolVersions : DefaultTask() {
8989 runCommandIgnoringExitCode(" which" , " node" )
9090 runCommandIgnoringExitCode(" node" , " --version" )
9191 runCommandIgnoringExitCode(firebaseExecutable.path, " --version" )
92- runCommandIgnoringExitCode(gradlewFile .path, " --version" )
92+ runCommandIgnoringExitCode(gradlewExecutable .path, " --version" )
9393 }
9494
9595 private fun runCommandIgnoringExitCode (vararg args : String ) {
@@ -123,6 +123,70 @@ abstract class PrintToolVersions : DefaultTask() {
123123 }
124124}
125125
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+
126190fun ProviderFactory.requiredGradleProperty (propertyName : String ) =
127191 gradleProperty(propertyName)
128192 .orElse(
@@ -150,13 +214,47 @@ val installFirebaseToolsTask =
150214 )
151215 }
152216
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+ }
162231 }
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