Skip to content
3 changes: 2 additions & 1 deletion .github/workflows/dataconnect.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ jobs:

./gradlew \
--profile \
--warning-mode all \
${{ (inputs.gradleInfoLog && '--info') || '' }} \
:firebase-dataconnect:assembleDebugAndroidTest

Expand Down Expand Up @@ -222,7 +223,7 @@ jobs:
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
script: |
set -eux && ./gradlew ${{ (inputs.gradleInfoLog && '--info') || '' }} :firebase-dataconnect:connectedCheck :firebase-dataconnect:connectors:connectedCheck
set -eux && ./gradlew --warning-mode all ${{ (inputs.gradleInfoLog && '--info') || '' }} :firebase-dataconnect:connectedCheck :firebase-dataconnect:connectors:connectedCheck

- name: Upload Log Files
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/dataconnect_demo_app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,13 +108,15 @@ jobs:
--project-dir firebase-dataconnect/demo \
${{ (inputs.gradleInfoLog && '--info') || '' }} \
--profile \
--warning-mode all \
-PdataConnect.demo.firebaseCommand=${{ env.FDC_FIREBASE_COMMAND }} \
assemble test

- name: gradle dokkaGeneratePublicationHtml
run: |
set -x
firebase-dataconnect/demo/gradlew \
--warning-mode all \
--project-dir firebase-dataconnect/demo \
${{ (inputs.gradleInfoLog && '--info') || '' }} \
dokkaGeneratePublicationHtml
Expand Down Expand Up @@ -176,6 +178,7 @@ jobs:
run: |
set -x
firebase-dataconnect/demo/gradlew \
--warning-mode all \
--project-dir firebase-dataconnect/demo \
--no-daemon \
${{ (inputs.gradleInfoLog && '--info') || '' }} \
Expand Down
19 changes: 12 additions & 7 deletions firebase-dataconnect/androidTestutil/androidTestutil.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
id("com.android.library")
Expand All @@ -31,14 +31,16 @@ android {
compileSdk = compileSdkVersion
defaultConfig {
minSdk = minSdkVersion
targetSdk = targetSdkVersion
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions { jvmTarget = "1.8" }

@Suppress("UnstableApiUsage") testOptions { targetSdk = targetSdkVersion }

lint { targetSdk = targetSdkVersion }

packaging {
resources {
Expand All @@ -48,6 +50,13 @@ android {
}
}

kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_1_8
optIn.add("kotlin.RequiresOptIn")
}
}

dependencies {
implementation(project(":firebase-dataconnect"))
implementation(project(":firebase-dataconnect:testutil"))
Expand All @@ -66,7 +75,3 @@ dependencies {
implementation(libs.truth)
implementation(libs.turbine)
}

tasks.withType<KotlinCompile>().all {
kotlinOptions { freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") }
}
26 changes: 15 additions & 11 deletions firebase-dataconnect/connectors/connectors.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
*/

import com.google.firebase.dataconnect.gradle.plugin.UpdateDataConnectExecutableVersionsTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile

plugins {
id("com.android.library")
Expand All @@ -33,23 +35,24 @@ android {
compileSdk = compileSdkVersion
defaultConfig {
minSdk = minSdkVersion
targetSdk = targetSdkVersion
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions { jvmTarget = "1.8" }

@Suppress("UnstableApiUsage")
testOptions {
targetSdk = targetSdkVersion
unitTests {
isIncludeAndroidResources = true
isReturnDefaultValues = true
}
}

lint { targetSdk = targetSdkVersion }

packaging {
resources {
excludes.add("META-INF/LICENSE.md")
Expand All @@ -63,6 +66,13 @@ android {
}
}

kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_1_8
optIn.add("kotlin.RequiresOptIn")
}
}

dependencies {
implementation(project(":firebase-dataconnect"))
implementation(libs.kotlinx.coroutines.core)
Expand Down Expand Up @@ -92,21 +102,15 @@ dependencies {
androidTestImplementation(libs.turbine)
}

tasks.withType<KotlinCompile>().all {
kotlinOptions { freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") }
}

// Enable Kotlin "Explicit API Mode". This causes the Kotlin compiler to fail if any
// classes, methods, or properties have implicit `public` visibility. This check helps
// avoid accidentally leaking elements into the public API, requiring that any public
// element be explicitly declared as `public`.
// https://github.com/Kotlin/KEEP/blob/master/proposals/explicit-api-mode.md
// https://chao2zhang.medium.com/explicit-api-mode-for-kotlin-on-android-b8264fdd76d1
tasks.withType<KotlinCompile>().all {
tasks.withType<KotlinJvmCompile>().configureEach {
if (!name.contains("test", ignoreCase = true)) {
if (!kotlinOptions.freeCompilerArgs.contains("-Xexplicit-api=strict")) {
kotlinOptions.freeCompilerArgs += "-Xexplicit-api=strict"
}
compilerOptions.freeCompilerArgs.add("-Xexplicit-api=strict")
}
}

Expand Down
11 changes: 9 additions & 2 deletions firebase-dataconnect/demo/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import java.nio.charset.StandardCharsets
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
// Use whichever versions of these dependencies suit your application.
Expand Down Expand Up @@ -83,7 +84,13 @@ android {
isCoreLibraryDesugaringEnabled = true
}
buildFeatures.viewBinding = true
kotlinOptions.jvmTarget = "1.8"
}

kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_1_8
optIn.add("kotlin.RequiresOptIn")
}
}

spotless {
Expand Down Expand Up @@ -115,7 +122,7 @@ spotless {
target("**/*.xml")
targetExclude("build/")
trimTrailingWhitespace()
indentWithSpaces(2)
leadingTabsToSpaces(2)
endWithNewline()
}
}
Expand Down
23 changes: 12 additions & 11 deletions firebase-dataconnect/firebase-dataconnect.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
* limitations under the License.
*/

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile

plugins {
id("firebase-library")
Expand Down Expand Up @@ -43,15 +45,13 @@ android {
compileSdk = compileSdkVersion
defaultConfig {
minSdk = minSdkVersion
targetSdk = targetSdkVersion
multiDexEnabled = true
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions { jvmTarget = "1.8" }

@Suppress("UnstableApiUsage")
testOptions {
Expand All @@ -72,6 +72,13 @@ android {
}
}

kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_1_8
optIn.add("kotlin.RequiresOptIn")
}
}

protobuf {
protoc { artifact = "${libs.protoc.get()}" }
plugins {
Expand Down Expand Up @@ -144,20 +151,14 @@ dependencies {
androidTestImplementation(libs.turbine)
}

tasks.withType<KotlinCompile>().all {
kotlinOptions { freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") }
}

// Enable Kotlin "Explicit API Mode". This causes the Kotlin compiler to fail if any
// classes, methods, or properties have implicit `public` visibility. This check helps
// avoid accidentally leaking elements into the public API, requiring that any public
// element be explicitly declared as `public`.
// https://github.com/Kotlin/KEEP/blob/master/proposals/explicit-api-mode.md
// https://chao2zhang.medium.com/explicit-api-mode-for-kotlin-on-android-b8264fdd76d1
tasks.withType<KotlinCompile>().all {
tasks.withType<KotlinJvmCompile>().configureEach {
if (!name.contains("test", ignoreCase = true)) {
if (!kotlinOptions.freeCompilerArgs.contains("-Xexplicit-api=strict")) {
kotlinOptions.freeCompilerArgs += "-Xexplicit-api=strict"
}
compilerOptions.freeCompilerArgs.add("-Xexplicit-api=strict")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import kotlin.time.toDuration
import org.gradle.api.DefaultTask
import org.gradle.api.Task
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
Expand All @@ -34,6 +35,8 @@ import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
import org.gradle.process.ExecOperations
import javax.inject.Inject

abstract class DataConnectExecutableDownloadTask : DefaultTask() {

Expand All @@ -47,6 +50,10 @@ abstract class DataConnectExecutableDownloadTask : DefaultTask() {

@get:OutputFile abstract val outputFile: RegularFileProperty

@get:Inject abstract val fileSystemOperations: FileSystemOperations

@get:Inject abstract val execOperations: ExecOperations

@TaskAction
fun run() {
val inputFile: File? = inputFile.orNull?.asFile
Expand All @@ -62,7 +69,7 @@ abstract class DataConnectExecutableDownloadTask : DefaultTask() {
logger.info("outputFile: {}", outputFile)

logger.info("Deleting build directory: {}", buildDirectory)
project.delete(buildDirectory)
buildDirectory.deleteRecursively()

if (inputFile !== null && version !== null) {
throw DataConnectGradleException(
Expand All @@ -74,7 +81,7 @@ abstract class DataConnectExecutableDownloadTask : DefaultTask() {
} else if (inputFile !== null) {
runWithFile(inputFile = inputFile, outputFile = outputFile)
} else if (version !== null) {
downloadDataConnectExecutable(version, operatingSystem, outputFile)
downloadDataConnectExecutable(version, operatingSystem, outputFile, execOperations)
verifyOutputFile(outputFile, operatingSystem, version)
} else {
throw DataConnectGradleException(
Expand Down Expand Up @@ -184,7 +191,7 @@ abstract class DataConnectExecutableDownloadTask : DefaultTask() {
}

logger.info("Copying {} to {}", inputFile, outputFile)
project.copy {
fileSystemOperations.copy {
it.from(inputFile)
it.into(outputFile.parentFile)
it.rename(Pattern.quote(inputFile.name), Pattern.quote(outputFile.name))
Expand All @@ -195,7 +202,8 @@ abstract class DataConnectExecutableDownloadTask : DefaultTask() {
fun Task.downloadDataConnectExecutable(
version: String,
operatingSystem: OperatingSystem,
outputFile: File
outputFile: File,
execOperations: ExecOperations
) {
val osName =
when (operatingSystem) {
Expand All @@ -208,7 +216,7 @@ abstract class DataConnectExecutableDownloadTask : DefaultTask() {
URL("https://storage.googleapis.com/firemat-preview-drop/emulator/$downloadFileName")

logger.info("Downloading {} to {}", url, outputFile)
project.mkdir(outputFile.parentFile)
outputFile.parentFile.mkdirs()

val connection = url.openConnection() as HttpURLConnection
connection.requestMethod = "GET"
Expand Down Expand Up @@ -251,7 +259,7 @@ abstract class DataConnectExecutableDownloadTask : DefaultTask() {
}

if (operatingSystem != OperatingSystem.Windows) {
project.exec { execSpec ->
execOperations.exec { execSpec ->
execSpec.run {
executable = "chmod"
args = listOf("a+x", outputFile.absolutePath)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package com.google.firebase.dataconnect.gradle.plugin

import java.io.File
import org.gradle.api.Task
import org.gradle.process.ExecOperations

interface DataConnectExecutableConfig {
var outputDirectory: File?
Expand All @@ -33,6 +34,7 @@ fun Task.runDataConnectExecutable(
dataConnectExecutable: File,
subCommand: List<String>,
configDirectory: File,
execOperations: ExecOperations,
configure: DataConnectExecutableConfig.() -> Unit,
) {
val config =
Expand All @@ -48,11 +50,11 @@ fun Task.runDataConnectExecutable(
}
.apply(configure)

val logFile = config.logFile?.also { project.mkdir(it.parentFile) }
val logFile = config.logFile?.also { it.parentFile.mkdirs() }
val logFileStream = logFile?.outputStream()

try {
project.exec { execSpec ->
execOperations.exec { execSpec ->
execSpec.run {
executable(dataConnectExecutable)
isIgnoreExitValue = false
Expand Down
Loading
Loading