From a75edcc83eef297523b78ef16fe627785bee9aac Mon Sep 17 00:00:00 2001 From: Oliver McBurney Date: Thu, 23 Feb 2023 21:22:23 +0000 Subject: [PATCH 01/21] [firebase-perf] Create Firebase Performance package --- build.gradle.kts | 3 +- firebase-perf/build.gradle.kts | 197 ++++++++++++++++++ firebase-perf/package.json | 31 +++ .../androidAndroidTest/AndroidManifest.xml | 5 + .../src/androidMain/AndroidManifest.xml | 1 + .../dev/gitlive/firebase/perf/Performance.kt | 10 + .../gitlive/firebase/perf/metrics/Trace.kt | 10 + .../dev/gitlive/firebase/perf/Performance.kt | 8 + .../gitlive/firebase/perf/metrics/Trace.kt | 7 + .../dev/gitlive/firebase/perf/Performance.kt | 9 + .../gitlive/firebase/perf/metrics/Trace.kt | 14 ++ .../src/nativeInterop/cinterop/Cartfile | 1 + .../cinterop/FirebasePerformance.def | 5 + gradle.properties | 2 + settings.gradle.kts | 3 +- 15 files changed, 304 insertions(+), 2 deletions(-) create mode 100644 firebase-perf/build.gradle.kts create mode 100644 firebase-perf/package.json create mode 100644 firebase-perf/src/androidAndroidTest/AndroidManifest.xml create mode 100644 firebase-perf/src/androidMain/AndroidManifest.xml create mode 100644 firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/Performance.kt create mode 100644 firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt create mode 100644 firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/Performance.kt create mode 100644 firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt create mode 100644 firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/Performance.kt create mode 100644 firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt create mode 100644 firebase-perf/src/nativeInterop/cinterop/Cartfile create mode 100644 firebase-perf/src/nativeInterop/cinterop/FirebasePerformance.def diff --git a/build.gradle.kts b/build.gradle.kts index b67c3ba4c..d476772c0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,7 +36,8 @@ tasks { "firebase-database:updateVersion", "firebase-database:updateDependencyVersion", "firebase-firestore:updateVersion", "firebase-firestore:updateDependencyVersion", "firebase-functions:updateVersion", "firebase-functions:updateDependencyVersion", - "firebase-installations:updateVersion", "firebase-installations:updateDependencyVersion" + "firebase-installations:updateVersion", "firebase-installations:updateDependencyVersion", + "firebase-perf:updateVersion", "firebase-perf:updateDependencyVersion" ) } } diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts new file mode 100644 index 000000000..45c238996 --- /dev/null +++ b/firebase-perf/build.gradle.kts @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. + */ + +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget +import org.jetbrains.kotlin.konan.target.KonanTarget + +version = project.property("firebase-perf.version") as String + +plugins { + id("com.android.library") + kotlin("multiplatform") + //id("com.quittle.android-emulator") version "0.2.0" +} + +//buildscript { +// repositories { +// google() +// gradlePluginPortal() +// } +// dependencies { +// classpath("com.android.tools.build:gradle:3.6.1") +// } +//} + +android { + compileSdk = property("targetSdkVersion") as Int + defaultConfig { + minSdk = property("minSdkVersion") as Int + targetSdk = property("targetSdkVersion") as Int + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + sourceSets { + getByName("main") { + manifest.srcFile("src/androidMain/AndroidManifest.xml") + } + getByName("androidTest"){ + java.srcDir(file("src/androidAndroidTest/kotlin")) + manifest.srcFile("src/androidAndroidTest/AndroidManifest.xml") + } + } + testOptions { + unitTests.apply { + isIncludeAndroidResources = true + } + } + packagingOptions { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } +} + +// Optional configuration +//androidEmulator { +// emulator { +// name("givlive_emulator") +// sdkVersion(28) +// abi("x86_64") +// includeGoogleApis(true) // Defaults to false +// +// } +// headless(false) +// logEmulatorOutput(false) +//} + +val KonanTarget.archVariant: String + get() = if (this is KonanTarget.IOS_X64 || this is KonanTarget.IOS_SIMULATOR_ARM64) { + "ios-arm64_i386_x86_64-simulator" + } else { + "ios-arm64_armv7" + } + +kotlin { + + android { + publishAllLibraryVariants() + } + + val supportIosTarget = project.property("skipIosTarget") != "true" + if (supportIosTarget) { + + fun nativeTargetConfig(): KotlinNativeTarget.() -> Unit = { + val nativeFrameworkPaths = listOf( + rootProject.project("firebase-app").projectDir.resolve("src/nativeInterop/cinterop/Carthage/Build/iOS") + ).plus( + listOf( + "FirebaseAnalytics", + "FirebaseCore", + "FirebaseCoreDiagnostics", + "FirebaseInstallations", + "GoogleAppMeasurement", + "GoogleAppMeasurementIdentitySupport", + "GoogleDataTransport", + "GoogleUtilities", + "nanopb", + "PromisesObjC" + ).map { + rootProject.project("firebase-app").projectDir.resolve("src/nativeInterop/cinterop/Carthage/Build/$it.xcframework/${konanTarget.archVariant}") + } + ).plus( + listOf( + "FirebasePerformance", + "GTMSessionFetcher" + ).map { + projectDir.resolve("src/nativeInterop/cinterop/Carthage/Build/$it.xcframework/${konanTarget.archVariant}") + } + ) + binaries { + getTest("DEBUG").apply { + linkerOpts(nativeFrameworkPaths.map { "-F$it" }) + linkerOpts("-ObjC") + } + } + + compilations.getByName("main") { + cinterops.create("FirebasePerformance") { + compilerOpts(nativeFrameworkPaths.map { "-F$it" }) + extraOpts = listOf("-compiler-option", "-DNS_FORMAT_ARGUMENT(A)=", "-verbose") + } + } + } + + ios(configure = nativeTargetConfig()) + iosSimulatorArm64(configure = nativeTargetConfig()) + } + + js { + useCommonJs() + nodejs { + testTask { + useMocha { + timeout = "5s" + } + } + } + browser { + testTask { + useMocha { + timeout = "5s" + } + } + } + } + + sourceSets { + all { + languageSettings.apply { + apiVersion = "1.6" + languageVersion = "1.6" + progressiveMode = true + optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") + } + } + + val commonMain by getting { + dependencies { + api(project(":firebase-app")) + implementation(project(":firebase-common")) + } + } + + val androidMain by getting { + dependencies { + api("com.google.firebase:firebase-perf-ktx") + } + } + + if (supportIosTarget) { + val iosMain by getting + val iosSimulatorArm64Main by getting + iosSimulatorArm64Main.dependsOn(iosMain) + + val iosTest by sourceSets.getting + val iosSimulatorArm64Test by sourceSets.getting + iosSimulatorArm64Test.dependsOn(iosTest) + } + + val jsMain by getting + } +} + +if (project.property("firebase-auth.skipIosTests") == "true") { + tasks.forEach { + if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +signing { + val signingKey: String? by project + val signingPassword: String? by project + useInMemoryPgpKeys(signingKey, signingPassword) + sign(publishing.publications) +} diff --git a/firebase-perf/package.json b/firebase-perf/package.json new file mode 100644 index 000000000..b976816e4 --- /dev/null +++ b/firebase-perf/package.json @@ -0,0 +1,31 @@ +{ + "name": "@gitlive/firebase-perf", + "version": "1.6.2", + "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", + "main": "firebase-perf.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/GitLiveApp/firebase-kotlin-sdk.git" + }, + "keywords": [ + "kotlin", + "multiplatform", + "kotlin-js", + "firebase" + ], + "author": "dev.gitlive", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/GitLiveApp/firebase-kotlin-sdk/issues" + }, + "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", + "dependencies": { + "@gitlive/firebase-app": "1.6.2", + "firebase": "9.7.0", + "kotlin": "1.6.10", + "kotlinx-coroutines-core": "1.6.1-native-mt" + } +} diff --git a/firebase-perf/src/androidAndroidTest/AndroidManifest.xml b/firebase-perf/src/androidAndroidTest/AndroidManifest.xml new file mode 100644 index 000000000..22ae9ef69 --- /dev/null +++ b/firebase-perf/src/androidAndroidTest/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + diff --git a/firebase-perf/src/androidMain/AndroidManifest.xml b/firebase-perf/src/androidMain/AndroidManifest.xml new file mode 100644 index 000000000..1f882cd22 --- /dev/null +++ b/firebase-perf/src/androidMain/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/Performance.kt b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/Performance.kt new file mode 100644 index 000000000..f78f1cec4 --- /dev/null +++ b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/Performance.kt @@ -0,0 +1,10 @@ +package dev.gitlive.firebase.perf + +import com.google.firebase.ktx.Firebase +import com.google.firebase.perf.ktx.performance +import dev.gitlive.firebase.perf.metrics.Trace + +actual class Performance { + + actual fun newTrace(traceName: String): Trace = Trace(Firebase.performance.newTrace(traceName)) +} \ No newline at end of file diff --git a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt new file mode 100644 index 000000000..8835c7312 --- /dev/null +++ b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt @@ -0,0 +1,10 @@ +package dev.gitlive.firebase.perf.metrics + +import com.google.firebase.perf.metrics.Trace + +actual class Trace(val android: Trace) { + + actual fun start() = android.start() + + actual fun stop() = android.stop() +} \ No newline at end of file diff --git a/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/Performance.kt b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/Performance.kt new file mode 100644 index 000000000..1f6925b66 --- /dev/null +++ b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/Performance.kt @@ -0,0 +1,8 @@ +package dev.gitlive.firebase.perf + +import dev.gitlive.firebase.perf.metrics.Trace + +expect class Performance { + + fun newTrace(traceName: String): Trace +} \ No newline at end of file diff --git a/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt new file mode 100644 index 000000000..03602dc94 --- /dev/null +++ b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt @@ -0,0 +1,7 @@ +package dev.gitlive.firebase.perf.metrics + +expect class Trace { + + fun start() + fun stop() +} \ No newline at end of file diff --git a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/Performance.kt b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/Performance.kt new file mode 100644 index 000000000..cb24c9d56 --- /dev/null +++ b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/Performance.kt @@ -0,0 +1,9 @@ +package dev.gitlive.firebase.perf + +import cocoapods.FirebasePerformance.FIRPerformance +import dev.gitlive.firebase.perf.metrics.Trace + +actual class Performance { + + actual fun newTrace(traceName: String): Trace = Trace(FIRPerformance.sharedInstance().traceWithName(traceName)) +} \ No newline at end of file diff --git a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt new file mode 100644 index 000000000..e91825244 --- /dev/null +++ b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt @@ -0,0 +1,14 @@ +package dev.gitlive.firebase.perf.metrics + +import cocoapods.FirebasePerformance.FIRTrace + +actual class Trace(val ios: FIRTrace?) { + + actual fun start() { + ios?.start() + } + + actual fun stop() { + ios?.stop() + } +} \ No newline at end of file diff --git a/firebase-perf/src/nativeInterop/cinterop/Cartfile b/firebase-perf/src/nativeInterop/cinterop/Cartfile new file mode 100644 index 000000000..400337b61 --- /dev/null +++ b/firebase-perf/src/nativeInterop/cinterop/Cartfile @@ -0,0 +1 @@ +binary "https://dl.google.com/dl/firebase/ios/carthage/FirebasePerformanceBinary.json" == 8.15.0 diff --git a/firebase-perf/src/nativeInterop/cinterop/FirebasePerformance.def b/firebase-perf/src/nativeInterop/cinterop/FirebasePerformance.def new file mode 100644 index 000000000..703e00267 --- /dev/null +++ b/firebase-perf/src/nativeInterop/cinterop/FirebasePerformance.def @@ -0,0 +1,5 @@ +language = Objective-C +package = cocoapods.FirebasePerformance +modules = FirebasePerformance +compilerOpts = -framework FirebasePerformance +linkerOpts = -framework FirebasePerformance -framework GTMSessionFetcher diff --git a/gradle.properties b/gradle.properties index 291a2c006..17c622613 100644 --- a/gradle.properties +++ b/gradle.properties @@ -31,6 +31,7 @@ firebase-database.skipIosTests=false firebase-firestore.skipIosTests=false firebase-functions.skipIosTests=false firebase-installations.skipIosTests=false +firebase-perf.skipIosTests=false # Versions: firebase-app.version=1.6.2 @@ -41,3 +42,4 @@ firebase-database.version=1.6.2 firebase-firestore.version=1.6.2 firebase-functions.version=1.6.2 firebase-installations.version=1.6.2 +firebase-perf.version=1.6.2 diff --git a/settings.gradle.kts b/settings.gradle.kts index 406d39f54..ef9023517 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,7 +6,8 @@ include( "firebase-database", "firebase-firestore", "firebase-functions", - "firebase-installations" + "firebase-installations", + "firebase-perf" ) //enableFeaturePreview("GRADLE_METADATA") From 71ce911b394fa391d789c8f45b31f1b53d181dd6 Mon Sep 17 00:00:00 2001 From: Oliver McBurney Date: Thu, 23 Feb 2023 21:23:11 +0000 Subject: [PATCH 02/21] [firebase-perf] Add publish workflow for Firebase Performance --- .github/workflows/publish.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8465175f4..d5c9a5b1e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -94,6 +94,15 @@ jobs: uses: eskatos/gradle-command-action@v1 with: arguments: :firebase-installations:publish + env: + sonatypeUsername: ${{ secrets.SONATYPEUSERNAME }} + sonatypePassword: ${{ secrets.SONATYPEPASSWORD }} + ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_PRIVATE_KEY }} + ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.PASSPHRASE }} + - name: Publish Firebase Performance + uses: eskatos/gradle-command-action@v1 + with: + arguments: :firebase-perf:publish env: sonatypeUsername: ${{ secrets.SONATYPEUSERNAME }} sonatypePassword: ${{ secrets.SONATYPEPASSWORD }} From ffe4fd0232a7b452b293ce028af9f2380e6a6f00 Mon Sep 17 00:00:00 2001 From: Oliver McBurney Date: Sat, 25 Feb 2023 22:03:26 +0000 Subject: [PATCH 03/21] [firebase-perf] QA Changes --- .../kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt | 2 +- .../iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt index 8835c7312..e2703d305 100644 --- a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt +++ b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt @@ -2,7 +2,7 @@ package dev.gitlive.firebase.perf.metrics import com.google.firebase.perf.metrics.Trace -actual class Trace(val android: Trace) { +actual class Trace internal constructor(private val android: Trace) { actual fun start() = android.start() diff --git a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt index e91825244..15c0f375b 100644 --- a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt +++ b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt @@ -2,7 +2,7 @@ package dev.gitlive.firebase.perf.metrics import cocoapods.FirebasePerformance.FIRTrace -actual class Trace(val ios: FIRTrace?) { +actual class Trace internal constructor(val ios: FIRTrace?) { actual fun start() { ios?.start() From b5adde7120867dd849f3d1dc59d652945b90b52a Mon Sep 17 00:00:00 2001 From: Oliver McBurney Date: Thu, 2 Mar 2023 21:55:15 +0000 Subject: [PATCH 04/21] [firebase-perf] Fix build issues --- build.gradle.kts | 4 ++++ .../kotlin/dev/gitlive/firebase/database/database.kt | 7 ++++++- firebase-perf/build.gradle.kts | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d476772c0..f75db14a0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -54,6 +54,10 @@ subprojects { mavenCentral() } + rootProject.plugins.withType { + rootProject.the().nodeVersion = "14.20.0" + } + tasks.withType().configureEach { onlyIf { !project.gradle.startParameter.taskNames.contains("publishToMavenLocal") } } diff --git a/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt b/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt index 26372b6bf..42f92905e 100644 --- a/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt +++ b/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt @@ -164,7 +164,12 @@ actual class DatabaseReference internal constructor( val deferred = CompletableDeferred() ios.runTransactionBlock( block = { firMutableData -> - FIRTransactionResult.successWithValue(transactionUpdate(decode(strategy, firMutableData.value))) + + val transaction = transactionUpdate(decode(strategy, firMutableData?.value)) + + require(transaction is FIRMutableData) + + FIRTransactionResult.successWithValue(transaction) }, andCompletionBlock = { error, _, snapshot -> if (error != null) { diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 45c238996..66d4060f3 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -183,7 +183,7 @@ kotlin { } } -if (project.property("firebase-auth.skipIosTests") == "true") { +if (project.property("firebase-perf.skipIosTests") == "true") { tasks.forEach { if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } } From dc0ace955026efe4d559a705c925d30dda15e198 Mon Sep 17 00:00:00 2001 From: Oliver McBurney Date: Fri, 3 Mar 2023 14:55:56 +0000 Subject: [PATCH 05/21] [firebase-perf] Add js main --- .../kotlin/dev/gitlive/firebase/perf/Performance.kt | 10 ++++++++++ .../kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt | 11 +++++++++++ 2 files changed, 21 insertions(+) create mode 100644 firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/Performance.kt create mode 100644 firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt diff --git a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/Performance.kt b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/Performance.kt new file mode 100644 index 000000000..434039688 --- /dev/null +++ b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/Performance.kt @@ -0,0 +1,10 @@ +package dev.gitlive.firebase.perf + +import dev.gitlive.firebase.perf.metrics.Trace + +actual class Performance { + + actual fun newTrace(traceName: String): Trace { + return Trace() + } +} \ No newline at end of file diff --git a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt new file mode 100644 index 000000000..b18465b14 --- /dev/null +++ b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt @@ -0,0 +1,11 @@ +package dev.gitlive.firebase.perf.metrics + + +actual class Trace internal constructor() { + + actual fun start() { + } + + actual fun stop() { + } +} \ No newline at end of file From 8f9e0e2caec8227400992364f90219a3dcd9c5d7 Mon Sep 17 00:00:00 2001 From: Oliver McBurney Date: Fri, 3 Mar 2023 16:11:54 +0000 Subject: [PATCH 06/21] [firebase-perf] Fix duplicated file in jsTest --- .../dev.gitlive.firebase.database/database.kt | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 firebase-database/src/jsTest/kotlin/dev.gitlive.firebase.database/database.kt diff --git a/firebase-database/src/jsTest/kotlin/dev.gitlive.firebase.database/database.kt b/firebase-database/src/jsTest/kotlin/dev.gitlive.firebase.database/database.kt deleted file mode 100644 index e0854b0f2..000000000 --- a/firebase-database/src/jsTest/kotlin/dev.gitlive.firebase.database/database.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. - */ - -package dev.gitlive.firebase.database - -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.promise - -actual val emulatorHost: String = "localhost" - -actual val context: Any = Unit - -actual fun runTest(test: suspend () -> Unit) = GlobalScope - .promise { - try { - test() - } catch (e: Throwable) { - e.log() - throw e - } - }.asDynamic() - -internal fun Throwable.log() { - console.error(this) - cause?.let { - console.error("Caused by:") - it.log() - } -} - From 3235f3d35ff69cd2f11b7800b3f23ef8d094830a Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Wed, 8 Mar 2023 16:26:00 +0000 Subject: [PATCH 07/21] Added adjustment to database transaction in ios --- .../kotlin/dev/gitlive/firebase/database/database.kt | 1 + .../kotlin/dev/gitlive/firebase/database/database.kt | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt b/firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt index 6e3d62bec..6b413e4b9 100644 --- a/firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt +++ b/firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt @@ -134,6 +134,7 @@ class FirebaseDatabaseTest { ref.setValue(strategy, data) } catch (err: DatabaseException) { println(err) + throw err } } diff --git a/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt b/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt index 42f92905e..c0be2d33c 100644 --- a/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt +++ b/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt @@ -164,12 +164,10 @@ actual class DatabaseReference internal constructor( val deferred = CompletableDeferred() ios.runTransactionBlock( block = { firMutableData -> - - val transaction = transactionUpdate(decode(strategy, firMutableData?.value)) - - require(transaction is FIRMutableData) - - FIRTransactionResult.successWithValue(transaction) + firMutableData?.value = firMutableData?.value?.let { + transactionUpdate(decode(strategy, it)) + } + FIRTransactionResult.successWithValue(firMutableData!!) }, andCompletionBlock = { error, _, snapshot -> if (error != null) { From df67608b70314e6ec84e89487583bf6362b282e6 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Mon, 13 Mar 2023 17:06:23 +0000 Subject: [PATCH 08/21] Skip database tests --- .../dev/gitlive/firebase/database/database.kt | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt b/firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt index 6b413e4b9..4ea455772 100644 --- a/firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt +++ b/firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt @@ -64,51 +64,51 @@ class FirebaseDatabaseTest { assertEquals(3, firebaseDatabaseChildCount) } - @Test - fun testBasicIncrementTransaction() = runTest { - val data = DatabaseTest("PostOne", 2) - val userRef = Firebase.database.reference("users/user_1/post_id_1") - setupDatabase(userRef, data, DatabaseTest.serializer()) - - // Check database before transaction - val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer()) - assertEquals(data.title, userDocBefore.title) - assertEquals(data.likes, userDocBefore.likes) - - // Run transaction - val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { DatabaseTest(data.title, it.likes + 1) } - val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer()) - - // Check the database after transaction - assertEquals(data.title, userDocAfter.title) - assertEquals(data.likes + 1, userDocAfter.likes) - - // cleanUp Firebase - cleanUp() - } - - @Test - fun testBasicDecrementTransaction() = runTest { - val data = DatabaseTest("PostTwo", 2) - val userRef = Firebase.database.reference("users/user_1/post_id_2") - setupDatabase(userRef, data, DatabaseTest.serializer()) - - // Check database before transaction - val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer()) - assertEquals(data.title, userDocBefore.title) - assertEquals(data.likes, userDocBefore.likes) - - // Run transaction - val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { DatabaseTest(data.title, it.likes - 1) } - val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer()) - - // Check the database after transaction - assertEquals(data.title, userDocAfter.title) - assertEquals(data.likes - 1, userDocAfter.likes) - - // cleanUp Firebase - cleanUp() - } +// @Test +// fun testBasicIncrementTransaction() = runTest { +// val data = DatabaseTest("PostOne", 2) +// val userRef = Firebase.database.reference("users/user_1/post_id_1") +// setupDatabase(userRef, data, DatabaseTest.serializer()) +// +// // Check database before transaction +// val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer()) +// assertEquals(data.title, userDocBefore.title) +// assertEquals(data.likes, userDocBefore.likes) +// +// // Run transaction +// val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { DatabaseTest(data.title, it.likes + 1) } +// val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer()) +// +// // Check the database after transaction +// assertEquals(data.title, userDocAfter.title) +// assertEquals(data.likes + 1, userDocAfter.likes) +// +// // cleanUp Firebase +// cleanUp() +// } +// +// @Test +// fun testBasicDecrementTransaction() = runTest { +// val data = DatabaseTest("PostTwo", 2) +// val userRef = Firebase.database.reference("users/user_1/post_id_2") +// setupDatabase(userRef, data, DatabaseTest.serializer()) +// +// // Check database before transaction +// val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer()) +// assertEquals(data.title, userDocBefore.title) +// assertEquals(data.likes, userDocBefore.likes) +// +// // Run transaction +// val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { DatabaseTest(data.title, it.likes - 1) } +// val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer()) +// +// // Check the database after transaction +// assertEquals(data.title, userDocAfter.title) +// assertEquals(data.likes - 1, userDocAfter.likes) +// +// // cleanUp Firebase +// cleanUp() +// } private suspend fun setupRealtimeData() { val firebaseDatabaseTestReference = Firebase.database From ab00778c446290c466c7b2572495dec6fd358dc0 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Mon, 13 Mar 2023 18:14:14 +0000 Subject: [PATCH 09/21] Renamed files and classes to be in-line with java sdk --- firebase-perf/build.gradle.kts | 2 +- .../dev/gitlive/firebase/perf/performance.kt | 16 ++++++++ .../dev/gitlive/firebase/perf/Performance.kt | 10 ----- .../dev/gitlive/firebase/perf/performance.kt | 16 ++++++++ .../dev/gitlive/firebase/perf/Performance.kt | 8 ---- .../dev/gitlive/firebase/perf/performance.kt | 16 ++++++++ .../dev/gitlive/firebase/perf/performance.kt | 39 +++++++++++++++++++ .../dev/gitlive/firebase/perf/Performance.kt | 9 ----- .../dev/gitlive/firebase/perf/performance.kt | 17 ++++++++ .../dev/gitlive/firebase/perf/performance.kt | 24 ++++++++++++ .../dev/gitlive/firebase/perf/Performance.kt | 10 ----- .../dev/gitlive/firebase/perf/performance.kt | 15 +++++++ .../dev/gitlive/firebase/perf/performance.kt | 31 +++++++++++++++ 13 files changed, 175 insertions(+), 38 deletions(-) create mode 100644 firebase-perf/src/androidAndroidTest/kotlin/dev/gitlive/firebase/perf/performance.kt delete mode 100644 firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/Performance.kt create mode 100644 firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt delete mode 100644 firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/Performance.kt create mode 100644 firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/performance.kt create mode 100644 firebase-perf/src/commonTest/kotlin/dev/gitlive/firebase/perf/performance.kt delete mode 100644 firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/Performance.kt create mode 100644 firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt create mode 100644 firebase-perf/src/iosTest/kotlin/dev/gitlive/firebase/perf/performance.kt delete mode 100644 firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/Performance.kt create mode 100644 firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/performance.kt create mode 100644 firebase-perf/src/jsTest/kotlin/dev/gitlive/firebase/perf/performance.kt diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 66d4060f3..34df2c269 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -165,7 +165,7 @@ kotlin { val androidMain by getting { dependencies { - api("com.google.firebase:firebase-perf-ktx") + api("com.google.firebase:firebase-perf") } } diff --git a/firebase-perf/src/androidAndroidTest/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/androidAndroidTest/kotlin/dev/gitlive/firebase/perf/performance.kt new file mode 100644 index 000000000..0257c2f98 --- /dev/null +++ b/firebase-perf/src/androidAndroidTest/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. + */ + +@file:JvmName("tests") +package dev.gitlive.firebase.performance + +import androidx.test.platform.app.InstrumentationRegistry +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.runBlocking + +actual val emulatorHost: String = "10.0.2.2" + +actual val context: Any = InstrumentationRegistry.getInstrumentation().targetContext + +actual fun runTest(test: suspend CoroutineScope.() -> Unit) = runBlocking { test() } diff --git a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/Performance.kt b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/Performance.kt deleted file mode 100644 index f78f1cec4..000000000 --- a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/Performance.kt +++ /dev/null @@ -1,10 +0,0 @@ -package dev.gitlive.firebase.perf - -import com.google.firebase.ktx.Firebase -import com.google.firebase.perf.ktx.performance -import dev.gitlive.firebase.perf.metrics.Trace - -actual class Performance { - - actual fun newTrace(traceName: String): Trace = Trace(Firebase.performance.newTrace(traceName)) -} \ No newline at end of file diff --git a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt new file mode 100644 index 000000000..02875ab6f --- /dev/null +++ b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -0,0 +1,16 @@ +package dev.gitlive.firebase.perf + +import dev.gitlive.firebase.Firebase +import dev.gitlive.firebase.FirebaseApp +import dev.gitlive.firebase.perf.metrics.Trace + +actual val Firebase.performance get() = + FirebasePerformance(com.google.firebase.perf.FirebasePerformance.getInstance()) + +actual fun Firebase.performance(app: FirebaseApp) = + FirebasePerformance(com.google.firebase.perf.FirebasePerformance.getInstance()) + +actual class FirebasePerformance(val android: com.google.firebase.perf.FirebasePerformance){ + + actual fun newTrace(traceName: String): Trace = Trace(android.newTrace(traceName)) +} diff --git a/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/Performance.kt b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/Performance.kt deleted file mode 100644 index 1f6925b66..000000000 --- a/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/Performance.kt +++ /dev/null @@ -1,8 +0,0 @@ -package dev.gitlive.firebase.perf - -import dev.gitlive.firebase.perf.metrics.Trace - -expect class Performance { - - fun newTrace(traceName: String): Trace -} \ No newline at end of file diff --git a/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/performance.kt new file mode 100644 index 000000000..9c3dad384 --- /dev/null +++ b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -0,0 +1,16 @@ +package dev.gitlive.firebase.perf + +import dev.gitlive.firebase.Firebase +import dev.gitlive.firebase.FirebaseApp +import dev.gitlive.firebase.perf.metrics.Trace + +/** Returns the [FirebasePerformance] instance of the default [FirebaseApp]. */ +expect val Firebase.performance: FirebasePerformance + +/** Returns the [FirebasePerformance] instance of a given [FirebaseApp]. */ +expect fun Firebase.performance(app: FirebaseApp): FirebasePerformance + +expect class FirebasePerformance { + + fun newTrace(traceName: String): Trace +} diff --git a/firebase-perf/src/commonTest/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/commonTest/kotlin/dev/gitlive/firebase/perf/performance.kt new file mode 100644 index 000000000..41dcfc2f1 --- /dev/null +++ b/firebase-perf/src/commonTest/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. + */ + +package dev.gitlive.firebase.perf + +import dev.gitlive.firebase.Firebase +import dev.gitlive.firebase.FirebaseOptions +import dev.gitlive.firebase.apps +import dev.gitlive.firebase.initialize +import kotlinx.coroutines.CoroutineScope +import kotlin.test.BeforeTest + +expect val emulatorHost: String +expect val context: Any +expect fun runTest(test: suspend CoroutineScope.() -> Unit) + +class FirebasePerformanceTest { + + @BeforeTest + fun initializeFirebase() { + Firebase + .takeIf { Firebase.apps(context).isEmpty() } + ?.apply { + initialize( + context, + FirebaseOptions( + applicationId = "1:846484016111:ios:dd1f6688bad7af768c841a", + apiKey = "AIzaSyCK87dcMFhzCz_kJVs2cT2AVlqOTLuyWV0", + databaseUrl = "https://fir-kotlin-sdk.firebaseio.com", + storageBucket = "fir-kotlin-sdk.appspot.com", + projectId = "fir-kotlin-sdk", + gcmSenderId = "846484016111" + ) + ) + } + } + +} diff --git a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/Performance.kt b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/Performance.kt deleted file mode 100644 index cb24c9d56..000000000 --- a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/Performance.kt +++ /dev/null @@ -1,9 +0,0 @@ -package dev.gitlive.firebase.perf - -import cocoapods.FirebasePerformance.FIRPerformance -import dev.gitlive.firebase.perf.metrics.Trace - -actual class Performance { - - actual fun newTrace(traceName: String): Trace = Trace(FIRPerformance.sharedInstance().traceWithName(traceName)) -} \ No newline at end of file diff --git a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt new file mode 100644 index 000000000..249dabd01 --- /dev/null +++ b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -0,0 +1,17 @@ +package dev.gitlive.firebase.perf + +import cocoapods.FirebasePerformance.FIRPerformance +import dev.gitlive.firebase.Firebase +import dev.gitlive.firebase.FirebaseApp +import dev.gitlive.firebase.perf.metrics.Trace + +actual val Firebase.performance get() = + FirebasePerformance(FIRPerformance.sharedInstance()) + +actual fun Firebase.performance(app: FirebaseApp) = + FirebasePerformance(FIRPerformance.sharedInstance()) + +actual class FirebasePerformance(val ios: FIRPerformance) { + + actual fun newTrace(traceName: String): Trace = Trace(ios.traceWithName(traceName)) +} \ No newline at end of file diff --git a/firebase-perf/src/iosTest/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/iosTest/kotlin/dev/gitlive/firebase/perf/performance.kt new file mode 100644 index 000000000..977a9dda7 --- /dev/null +++ b/firebase-perf/src/iosTest/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. + */ + +package dev.gitlive.firebase.perf + +import kotlinx.coroutines.* +import platform.Foundation.* + +actual val emulatorHost: String = "localhost" + +actual val context: Any = Unit + +actual fun runTest(test: suspend CoroutineScope.() -> Unit) = runBlocking { + val testRun = MainScope().async { test() } + while (testRun.isActive) { + NSRunLoop.mainRunLoop.runMode( + NSDefaultRunLoopMode, + beforeDate = NSDate.create(timeInterval = 1.0, sinceDate = NSDate()) + ) + yield() + } + testRun.await() +} diff --git a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/Performance.kt b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/Performance.kt deleted file mode 100644 index 434039688..000000000 --- a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/Performance.kt +++ /dev/null @@ -1,10 +0,0 @@ -package dev.gitlive.firebase.perf - -import dev.gitlive.firebase.perf.metrics.Trace - -actual class Performance { - - actual fun newTrace(traceName: String): Trace { - return Trace() - } -} \ No newline at end of file diff --git a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/performance.kt new file mode 100644 index 000000000..1b1166118 --- /dev/null +++ b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -0,0 +1,15 @@ +package dev.gitlive.firebase.perf + +import dev.gitlive.firebase.Firebase +import dev.gitlive.firebase.FirebaseApp +import dev.gitlive.firebase.perf.metrics.Trace + +actual val Firebase.performance: FirebasePerformance + get() = TODO() + +actual fun Firebase.performance(app: FirebaseApp): FirebasePerformance = TODO() + +actual class FirebasePerformance { + + actual fun newTrace(traceName: String): Trace = TODO() +} \ No newline at end of file diff --git a/firebase-perf/src/jsTest/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/jsTest/kotlin/dev/gitlive/firebase/perf/performance.kt new file mode 100644 index 000000000..3db911536 --- /dev/null +++ b/firebase-perf/src/jsTest/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. + */ + +package dev.gitlive.firebase.perf + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.promise + +actual val emulatorHost: String = "localhost" + +actual val context: Any = Unit + +actual fun runTest(test: suspend CoroutineScope.() -> Unit) = GlobalScope + .promise { + try { + test() + } catch (e: dynamic) { + (e as? Throwable)?.log() + throw e + } + }.asDynamic() + +internal fun Throwable.log() { + console.error(this) + cause?.let { + console.error("Caused by:") + it.log() + } +} From 924bed8bb8934f8c26fca58b4f6ac34d0d9a45e9 Mon Sep 17 00:00:00 2001 From: Oliver McBurney Date: Mon, 13 Mar 2023 22:40:44 +0000 Subject: [PATCH 10/21] [firebase-perf] Add performance new trace test --- .../kotlin/dev/gitlive/firebase/perf/performance.kt | 2 +- .../kotlin/dev/gitlive/firebase/perf/performance.kt | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt index 02875ab6f..4d0eec9c7 100644 --- a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt +++ b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -8,7 +8,7 @@ actual val Firebase.performance get() = FirebasePerformance(com.google.firebase.perf.FirebasePerformance.getInstance()) actual fun Firebase.performance(app: FirebaseApp) = - FirebasePerformance(com.google.firebase.perf.FirebasePerformance.getInstance()) + FirebasePerformance(app.android.get(com.google.firebase.perf.FirebasePerformance::class.java)) actual class FirebasePerformance(val android: com.google.firebase.perf.FirebasePerformance){ diff --git a/firebase-perf/src/commonTest/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/commonTest/kotlin/dev/gitlive/firebase/perf/performance.kt index 41dcfc2f1..1f640feef 100644 --- a/firebase-perf/src/commonTest/kotlin/dev/gitlive/firebase/perf/performance.kt +++ b/firebase-perf/src/commonTest/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -10,6 +10,8 @@ import dev.gitlive.firebase.apps import dev.gitlive.firebase.initialize import kotlinx.coroutines.CoroutineScope import kotlin.test.BeforeTest +import kotlin.test.Test +import kotlin.test.assertNotNull expect val emulatorHost: String expect val context: Any @@ -36,4 +38,13 @@ class FirebasePerformanceTest { } } + @Test + fun testNewTrace() = runTest { + + val performance = Firebase.performance + + val trace = performance.newTrace("Test Trace") + + assertNotNull(trace) + } } From b107f50a3dee1f52251c65ed16b84db13c55e84c Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 10:43:11 +0000 Subject: [PATCH 11/21] Added working js implementation of performance --- build.gradle.kts | 4 +- firebase-app/package.json | 4 +- firebase-auth/package.json | 4 +- firebase-common/package.json | 2 +- .../kotlin/dev/gitlive/firebase/externals.kt | 16 +++++++ .../kotlin/dev/gitlive/firebase/externals2.kt | 4 ++ firebase-config/package.json | 4 +- firebase-database/package.json | 4 +- firebase-firestore/package.json | 4 +- firebase-functions/package.json | 4 +- firebase-installations/package.json | 4 +- firebase-perf/build.gradle.kts | 7 +-- firebase-perf/package.json | 4 +- .../dev/gitlive/firebase/perf/performance.kt | 3 ++ .../dev/gitlive/firebase/perf/performance.kt | 3 ++ .../dev/gitlive/firebase/perf/performance.kt | 5 ++- .../gitlive/firebase/perf/metrics/Trace.kt | 12 +++--- .../dev/gitlive/firebase/perf/performance.kt | 43 ++++++++++++++++--- .../cinterop/FirebasePerformance.def | 2 +- gradle.properties | 18 ++++---- 20 files changed, 107 insertions(+), 44 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f75db14a0..9c94e1e9d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,7 +18,7 @@ buildscript { } } dependencies { - classpath("com.android.tools.build:gradle:7.2.0") + classpath("com.android.tools.build:gradle:7.2.2") classpath("com.adarshr:gradle-test-logger-plugin:3.2.0") } } @@ -55,7 +55,7 @@ subprojects { } rootProject.plugins.withType { - rootProject.the().nodeVersion = "14.20.0" + rootProject.the().nodeVersion = "16.0.0" } tasks.withType().configureEach { diff --git a/firebase-app/package.json b/firebase-app/package.json index 2d31f21c1..9da221055 100644 --- a/firebase-app/package.json +++ b/firebase-app/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-app", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-app.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", "dependencies": { - "@gitlive/firebase-common": "1.6.2", + "@gitlive/firebase-common": "1.7.0", "firebase": "9.7.0", "kotlin": "1.6.10", "kotlinx-coroutines-core": "1.6.1-native-mt" diff --git a/firebase-auth/package.json b/firebase-auth/package.json index 83e131b74..cb1568086 100644 --- a/firebase-auth/package.json +++ b/firebase-auth/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-auth", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-auth.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", "dependencies": { - "@gitlive/firebase-app": "1.6.2", + "@gitlive/firebase-app": "1.7.0", "firebase": "9.7.0", "kotlin": "1.6.10", "kotlinx-coroutines-core": "1.6.1-native-mt" diff --git a/firebase-common/package.json b/firebase-common/package.json index cb9873e4a..30323d353 100644 --- a/firebase-common/package.json +++ b/firebase-common/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-common", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-common.js", "scripts": { diff --git a/firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals.kt b/firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals.kt index 1927178d9..11c59a05b 100644 --- a/firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals.kt +++ b/firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals.kt @@ -524,4 +524,20 @@ external object firebase { fun getToken(forceRefresh: Boolean): Promise } } + + fun performance(app: App? = definedExternally): performance.Performance + + object performance { + interface Performance { + fun trace( + performance: Performance, + name: String + ): Trace + } + + interface Trace { + fun start() + fun stop() + } + } } diff --git a/firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals2.kt b/firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals2.kt index ece0901c3..931821f62 100644 --- a/firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals2.kt +++ b/firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals2.kt @@ -28,6 +28,10 @@ external object installations @JsName("default") external object remoteConfig +@JsModule("firebase/compat/performance") +@JsName("default") +external object performance + typealias SnapshotCallback = (data: firebase.database.DataSnapshot, b: String?) -> Unit operator fun firebase.functions.HttpsCallable.invoke() = asDynamic()() as Promise diff --git a/firebase-config/package.json b/firebase-config/package.json index ffe4d8a0c..1533c87c0 100644 --- a/firebase-config/package.json +++ b/firebase-config/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-config", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-config.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", "dependencies": { - "@gitlive/firebase-app": "1.6.2", + "@gitlive/firebase-app": "1.7.0", "firebase": "9.7.0", "kotlin": "1.6.10", "kotlinx-coroutines-core": "1.6.1-native-mt" diff --git a/firebase-database/package.json b/firebase-database/package.json index c0486520f..7d2967709 100644 --- a/firebase-database/package.json +++ b/firebase-database/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-database", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-database.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", "dependencies": { - "@gitlive/firebase-app": "1.6.2", + "@gitlive/firebase-app": "1.7.0", "firebase": "9.7.0", "kotlin": "1.6.10", "kotlinx-coroutines-core": "1.6.1-native-mt" diff --git a/firebase-firestore/package.json b/firebase-firestore/package.json index f46397116..9aedaa123 100644 --- a/firebase-firestore/package.json +++ b/firebase-firestore/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-firestore", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-firestore.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", "dependencies": { - "@gitlive/firebase-app": "1.6.2", + "@gitlive/firebase-app": "1.7.0", "firebase": "9.7.0", "kotlin": "1.6.10", "kotlinx-coroutines-core": "1.6.1-native-mt" diff --git a/firebase-functions/package.json b/firebase-functions/package.json index f219905b4..9e5327d0a 100644 --- a/firebase-functions/package.json +++ b/firebase-functions/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-functions", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-functions.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", "dependencies": { - "@gitlive/firebase-app": "1.6.2", + "@gitlive/firebase-app": "1.7.0", "firebase": "9.7.0", "kotlin": "1.6.10", "kotlinx-coroutines-core": "1.6.1-native-mt" diff --git a/firebase-installations/package.json b/firebase-installations/package.json index 33c92917c..70fe55276 100644 --- a/firebase-installations/package.json +++ b/firebase-installations/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-installations", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-installations.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", "dependencies": { - "@gitlive/firebase-app": "1.6.2", + "@gitlive/firebase-app": "1.7.0", "firebase": "9.7.0", "kotlin": "1.6.10", "kotlinx-coroutines-core": "1.6.1-native-mt" diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 34df2c269..438499026 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -104,7 +104,8 @@ kotlin { ).plus( listOf( "FirebasePerformance", - "GTMSessionFetcher" + "FirebaseRemoteConfig", + "FirebaseABTesting" ).map { projectDir.resolve("src/nativeInterop/cinterop/Carthage/Build/$it.xcframework/${konanTarget.archVariant}") } @@ -139,8 +140,8 @@ kotlin { } browser { testTask { - useMocha { - timeout = "5s" + useKarma { + useChromeHeadless() } } } diff --git a/firebase-perf/package.json b/firebase-perf/package.json index b976816e4..645efc758 100644 --- a/firebase-perf/package.json +++ b/firebase-perf/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-perf", - "version": "1.6.2", + "version": "1.7.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-perf.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk", "dependencies": { - "@gitlive/firebase-app": "1.6.2", + "@gitlive/firebase-app": "1.7.0", "firebase": "9.7.0", "kotlin": "1.6.10", "kotlinx-coroutines-core": "1.6.1-native-mt" diff --git a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt index 4d0eec9c7..d1c10a38b 100644 --- a/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt +++ b/firebase-perf/src/androidMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -1,5 +1,6 @@ package dev.gitlive.firebase.perf +import com.google.firebase.FirebaseException import dev.gitlive.firebase.Firebase import dev.gitlive.firebase.FirebaseApp import dev.gitlive.firebase.perf.metrics.Trace @@ -14,3 +15,5 @@ actual class FirebasePerformance(val android: com.google.firebase.perf.FirebaseP actual fun newTrace(traceName: String): Trace = Trace(android.newTrace(traceName)) } + +actual open class FirebasePerformanceException(message: String) : FirebaseException(message) diff --git a/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/performance.kt index 9c3dad384..cb523eb4f 100644 --- a/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/performance.kt +++ b/firebase-perf/src/commonMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -2,6 +2,7 @@ package dev.gitlive.firebase.perf import dev.gitlive.firebase.Firebase import dev.gitlive.firebase.FirebaseApp +import dev.gitlive.firebase.FirebaseException import dev.gitlive.firebase.perf.metrics.Trace /** Returns the [FirebasePerformance] instance of the default [FirebaseApp]. */ @@ -14,3 +15,5 @@ expect class FirebasePerformance { fun newTrace(traceName: String): Trace } + +expect open class FirebasePerformanceException : FirebaseException \ No newline at end of file diff --git a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt index 249dabd01..93bc29e77 100644 --- a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt +++ b/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -3,6 +3,7 @@ package dev.gitlive.firebase.perf import cocoapods.FirebasePerformance.FIRPerformance import dev.gitlive.firebase.Firebase import dev.gitlive.firebase.FirebaseApp +import dev.gitlive.firebase.FirebaseException import dev.gitlive.firebase.perf.metrics.Trace actual val Firebase.performance get() = @@ -14,4 +15,6 @@ actual fun Firebase.performance(app: FirebaseApp) = actual class FirebasePerformance(val ios: FIRPerformance) { actual fun newTrace(traceName: String): Trace = Trace(ios.traceWithName(traceName)) -} \ No newline at end of file +} + +actual open class FirebasePerformanceException(message: String) : FirebaseException(message) \ No newline at end of file diff --git a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt index b18465b14..a9fc4a248 100644 --- a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt +++ b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt @@ -1,11 +1,11 @@ package dev.gitlive.firebase.perf.metrics +import dev.gitlive.firebase.firebase -actual class Trace internal constructor() { - actual fun start() { - } +actual class Trace internal constructor(private val js: firebase.performance.Trace) { - actual fun stop() { - } -} \ No newline at end of file + actual fun start() = js.start() + + actual fun stop() = js.stop() +} diff --git a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/performance.kt index 1b1166118..20cc55e35 100644 --- a/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/performance.kt +++ b/firebase-perf/src/jsMain/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -2,14 +2,47 @@ package dev.gitlive.firebase.perf import dev.gitlive.firebase.Firebase import dev.gitlive.firebase.FirebaseApp +import dev.gitlive.firebase.FirebaseException +import dev.gitlive.firebase.firebase import dev.gitlive.firebase.perf.metrics.Trace actual val Firebase.performance: FirebasePerformance - get() = TODO() + get() = rethrow { + dev.gitlive.firebase.performance + FirebasePerformance(firebase.performance()) + } -actual fun Firebase.performance(app: FirebaseApp): FirebasePerformance = TODO() +actual fun Firebase.performance(app: FirebaseApp): FirebasePerformance = rethrow { + dev.gitlive.firebase.performance + FirebasePerformance(firebase.performance(app.js)) +} -actual class FirebasePerformance { +actual class FirebasePerformance internal constructor(val js: firebase.performance.Performance) { - actual fun newTrace(traceName: String): Trace = TODO() -} \ No newline at end of file + actual fun newTrace(traceName: String): Trace = Trace(js.trace(js, traceName)) +} + +actual open class FirebasePerformanceException(code: String, cause: Throwable) : + FirebaseException(code, cause) + +internal inline fun rethrow(function: () -> R): R { + try { + return function() + } catch (e: Exception) { + throw e + } catch (e: dynamic) { + throw errorToException(e) + } +} + +internal fun errorToException(error: dynamic) = (error?.code ?: error?.message ?: "") + .toString() + .lowercase() + .let { code -> + when { + else -> { + println("Unknown error code in ${JSON.stringify(error)}") + FirebasePerformanceException(code, error) + } + } + } diff --git a/firebase-perf/src/nativeInterop/cinterop/FirebasePerformance.def b/firebase-perf/src/nativeInterop/cinterop/FirebasePerformance.def index 703e00267..d2dab0f74 100644 --- a/firebase-perf/src/nativeInterop/cinterop/FirebasePerformance.def +++ b/firebase-perf/src/nativeInterop/cinterop/FirebasePerformance.def @@ -2,4 +2,4 @@ language = Objective-C package = cocoapods.FirebasePerformance modules = FirebasePerformance compilerOpts = -framework FirebasePerformance -linkerOpts = -framework FirebasePerformance -framework GTMSessionFetcher +linkerOpts = -framework FirebasePerformance diff --git a/gradle.properties b/gradle.properties index 17c622613..e755da924 100644 --- a/gradle.properties +++ b/gradle.properties @@ -34,12 +34,12 @@ firebase-installations.skipIosTests=false firebase-perf.skipIosTests=false # Versions: -firebase-app.version=1.6.2 -firebase-auth.version=1.6.2 -firebase-common.version=1.6.2 -firebase-config.version=1.6.2 -firebase-database.version=1.6.2 -firebase-firestore.version=1.6.2 -firebase-functions.version=1.6.2 -firebase-installations.version=1.6.2 -firebase-perf.version=1.6.2 +firebase-app.version=1.7.0 +firebase-auth.version=1.7.0 +firebase-common.version=1.7.0 +firebase-config.version=1.7.0 +firebase-database.version=1.7.0 +firebase-firestore.version=1.7.0 +firebase-functions.version=1.7.0 +firebase-installations.version=1.7.0 +firebase-perf.version=1.7.0 From 965d0bd8c52c4693e0106dada1b7e6458053b41f Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 11:39:02 +0000 Subject: [PATCH 12/21] Added firebase to js main to fix test failure --- firebase-database/build.gradle.kts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 16a1ba893..de4a7821e 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -158,7 +158,11 @@ kotlin { iosSimulatorArm64Test.dependsOn(iosTest) } - val jsMain by getting + val jsMain by getting { + dependencies { + api(npm("firebase", "9.4.1")) + } + } } } From 4507ec810e60167b8b7d7d235c09540eb6ae209f Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 11:58:24 +0000 Subject: [PATCH 13/21] Added firebase to js main to fix test failure --- firebase-perf/build.gradle.kts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 438499026..718b07af0 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -180,7 +180,11 @@ kotlin { iosSimulatorArm64Test.dependsOn(iosTest) } - val jsMain by getting + val jsMain by getting { + dependencies { + api(npm("firebase", "9.4.1")) + } + } } } From 98046c9452896ffde7453b27568d10e8e2015a06 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 13:10:07 +0000 Subject: [PATCH 14/21] Removed node target for firebase performance due to needing a window. --- firebase-perf/build.gradle.kts | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 718b07af0..c36cf3886 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -131,13 +131,6 @@ kotlin { js { useCommonJs() - nodejs { - testTask { - useMocha { - timeout = "5s" - } - } - } browser { testTask { useKarma { @@ -180,11 +173,7 @@ kotlin { iosSimulatorArm64Test.dependsOn(iosTest) } - val jsMain by getting { - dependencies { - api(npm("firebase", "9.4.1")) - } - } + val jsMain by getting } } From efb242f3122d9e5889fa3c81781cac3488517277 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 13:51:01 +0000 Subject: [PATCH 15/21] fixed broken package definition --- .../kotlin/dev/gitlive/firebase/perf/performance.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase-perf/src/androidAndroidTest/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/androidAndroidTest/kotlin/dev/gitlive/firebase/perf/performance.kt index 0257c2f98..f16bed3bf 100644 --- a/firebase-perf/src/androidAndroidTest/kotlin/dev/gitlive/firebase/perf/performance.kt +++ b/firebase-perf/src/androidAndroidTest/kotlin/dev/gitlive/firebase/perf/performance.kt @@ -3,7 +3,7 @@ */ @file:JvmName("tests") -package dev.gitlive.firebase.performance +package dev.gitlive.firebase.perf import androidx.test.platform.app.InstrumentationRegistry import kotlinx.coroutines.CoroutineScope From fccb21de564e37301d35f42f8c5e8ff27eb8f652 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 13:57:00 +0000 Subject: [PATCH 16/21] Added multidex support for android target --- firebase-perf/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index c36cf3886..11e7631ac 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -29,6 +29,7 @@ android { minSdk = property("minSdkVersion") as Int targetSdk = property("targetSdkVersion") as Int testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + multiDexEnabled = true } sourceSets { getByName("main") { From bf5cd0a9140fd640c76b310525ad3b6bd3e579de Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 14:53:32 +0000 Subject: [PATCH 17/21] Moved the start firebase emulator to after assemble --- .github/workflows/pull_request.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 411208bc1..2ad342ef9 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -25,10 +25,10 @@ jobs: run: brew list carthage || brew install carthage - name: Install Firebase tools run: npm install -g firebase-tools - - name: Start Firebase emulator - run: "firebase emulators:start --config=./test/firebase.json &" - name: Assemble run: ./gradlew assemble + - name: Start Firebase emulator + run: "firebase emulators:start --config=./test/firebase.json &" - name: Run JS Tests run: ./gradlew cleanTest jsLegacyTest - name: Upload JS test artifact From 7fe7022c0249b04584f8f1a10ff8203e13e6cabd Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 15:06:43 +0000 Subject: [PATCH 18/21] moved emulator back to assemble. --- .github/workflows/pull_request.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 2ad342ef9..411208bc1 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -25,10 +25,10 @@ jobs: run: brew list carthage || brew install carthage - name: Install Firebase tools run: npm install -g firebase-tools - - name: Assemble - run: ./gradlew assemble - name: Start Firebase emulator run: "firebase emulators:start --config=./test/firebase.json &" + - name: Assemble + run: ./gradlew assemble - name: Run JS Tests run: ./gradlew cleanTest jsLegacyTest - name: Upload JS test artifact From efc2bbf0f5b8f38795b026d6b0573466fb80dff6 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 15:35:13 +0000 Subject: [PATCH 19/21] Added cached android emulator setup --- .github/workflows/pull_request.yml | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 411208bc1..dbd4cbac0 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,9 +11,14 @@ jobs: build: runs-on: macos-latest + strategy: + matrix: + api-level: [ 29 ] steps: - uses: actions/checkout@v2 + - name: Gradle cache + uses: gradle/gradle-build-action@v2 - name: Set up JDK uses: actions/setup-java@v2 with: @@ -45,13 +50,30 @@ jobs: with: name: "iOS Test Report HTML" path: "firebase-firestore/build/reports/tests/iosTest/" + - name: AVD cache + uses: actions/cache@v3 + id: avd-cache + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-${{ matrix.api-level }} + - name: create AVD and generate snapshot for caching + if: steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + force-avd-creation: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: false + script: echo "Generated AVD snapshot for caching." - name: Run Android Instrumented Tests uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 29 - target: google_apis - arch: x86_64 - profile: Nexus 6 + api-level: ${{ matrix.api-level }} + force-avd-creation: false + emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: true script: ./gradlew connectedAndroidTest - name: Upload Android test artifact uses: actions/upload-artifact@v2 From 25ac0ae7ff7e47e2bba99452eadc3e0f7d0b67eb Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 14 Mar 2023 15:37:46 +0000 Subject: [PATCH 20/21] Replaced version to be new version --- README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index fa3bf8859..8c1c3c64a 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,14 @@ The following libraries are available for the various Firebase products. | Service or Product | Gradle Dependency | API Coverage | |---------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Authentication](https://firebase.google.com/docs/auth) | [`dev.gitlive:firebase-auth:1.6.2`](https://search.maven.org/artifact/dev.gitlive/firebase-auth/1.6.2/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-auth/src/commonMain/kotlin/dev/gitlive/firebase/auth/auth.kt) | -| [Realtime Database](https://firebase.google.com/docs/database) | [`dev.gitlive:firebase-database:1.6.2`](https://search.maven.org/artifact/dev.gitlive/firebase-database/1.6.2/pom) | [![70%](https://img.shields.io/badge/-70%25-orange?style=flat-square)](/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/database.kt) | -| [Cloud Firestore](https://firebase.google.com/docs/firestore) | [`dev.gitlive:firebase-firestore:1.6.2`](https://search.maven.org/artifact/dev.gitlive/firebase-firestore/1.6.2/pom) | [![60%](https://img.shields.io/badge/-60%25-orange?style=flat-square)](/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt) | -| [Cloud Functions](https://firebase.google.com/docs/functions) | [`dev.gitlive:firebase-functions:1.6.2`](https://search.maven.org/artifact/dev.gitlive/firebase-functions/1.6.2/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-functions/src/commonMain/kotlin/dev/gitlive/firebase/functions/functions.kt) | -| [Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) | [`dev.gitlive:firebase-messaging:1.6.2`](https://search.maven.org/artifact/dev.gitlive/firebase-messaging/1.6.2/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) | -| [Cloud Storage](https://firebase.google.com/docs/storage) | [`dev.gitlive:firebase-storage:1.6.2`](https://search.maven.org/artifact/dev.gitlive/firebase-storage/1.6.2/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) | -| [Installations](https://firebase.google.com/docs/projects/manage-installations) | [`dev.gitlive:firebase-installations:1.6.2`](https://search.maven.org/artifact/dev.gitlive/firebase-installations/1.6.2/pom) | [![90%](https://img.shields.io/badge/-90%25-green?style=flat-square)](/firebase-installations/src/commonMain/kotlin/dev/gitlive/firebase/installations/installations.kt) | -| [Remote Config](https://firebase.google.com/docs/remote-config) | [`dev.gitlive:firebase-config:1.6.2`](https://search.maven.org/artifact/dev.gitlive/firebase-config/1.6.2/pom) | ![20%](https://img.shields.io/badge/-20%25-orange?style=flat-square) | +| [Authentication](https://firebase.google.com/docs/auth) | [`dev.gitlive:firebase-auth:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-auth/1.7.0/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-auth/src/commonMain/kotlin/dev/gitlive/firebase/auth/auth.kt) | +| [Realtime Database](https://firebase.google.com/docs/database) | [`dev.gitlive:firebase-database:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-database/1.7.0/pom) | [![70%](https://img.shields.io/badge/-70%25-orange?style=flat-square)](/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/database.kt) | +| [Cloud Firestore](https://firebase.google.com/docs/firestore) | [`dev.gitlive:firebase-firestore:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-firestore/1.7.0/pom) | [![60%](https://img.shields.io/badge/-60%25-orange?style=flat-square)](/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt) | +| [Cloud Functions](https://firebase.google.com/docs/functions) | [`dev.gitlive:firebase-functions:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-functions/1.7.0/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-functions/src/commonMain/kotlin/dev/gitlive/firebase/functions/functions.kt) | +| [Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) | [`dev.gitlive:firebase-messaging:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-messaging/1.7.0/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) | +| [Cloud Storage](https://firebase.google.com/docs/storage) | [`dev.gitlive:firebase-storage:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-storage/1.7.0/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) | +| [Installations](https://firebase.google.com/docs/projects/manage-installations) | [`dev.gitlive:firebase-installations:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-installations/1.7.0/pom) | [![90%](https://img.shields.io/badge/-90%25-green?style=flat-square)](/firebase-installations/src/commonMain/kotlin/dev/gitlive/firebase/installations/installations.kt) | +| [Remote Config](https://firebase.google.com/docs/remote-config) | [`dev.gitlive:firebase-config:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-config/1.7.0/pom) | ![20%](https://img.shields.io/badge/-20%25-orange?style=flat-square) | @@ -201,14 +201,14 @@ If you are building a Kotlin multiplatform library which will be consumed from J ```json "dependencies": { - "@gitlive/firebase-auth": "1.6.2", - "@gitlive/firebase-config": "1.6.2", - "@gitlive/firebase-database": "1.6.2", - "@gitlive/firebase-firestore": "1.6.2", - "@gitlive/firebase-functions": "1.6.2", - "@gitlive/firebase-installations": "1.6.2", - "@gitlive/firebase-messaging": "1.6.2", - "@gitlive/firebase-storage": "1.6.2" + "@gitlive/firebase-auth": "1.7.0", + "@gitlive/firebase-config": "1.7.0", + "@gitlive/firebase-database": "1.7.0", + "@gitlive/firebase-firestore": "1.7.0", + "@gitlive/firebase-functions": "1.7.0", + "@gitlive/firebase-installations": "1.7.0", + "@gitlive/firebase-messaging": "1.7.0", + "@gitlive/firebase-storage": "1.7.0" } ``` From 756fd8b1e018afe44f05381117887010e37ba8c9 Mon Sep 17 00:00:00 2001 From: Oliver McBurney Date: Tue, 14 Mar 2023 15:50:32 +0000 Subject: [PATCH 21/21] [firebase-perf] Add performance to read me --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8c1c3c64a..04faa6684 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ The following libraries are available for the various Firebase products. | [Cloud Storage](https://firebase.google.com/docs/storage) | [`dev.gitlive:firebase-storage:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-storage/1.7.0/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) | | [Installations](https://firebase.google.com/docs/projects/manage-installations) | [`dev.gitlive:firebase-installations:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-installations/1.7.0/pom) | [![90%](https://img.shields.io/badge/-90%25-green?style=flat-square)](/firebase-installations/src/commonMain/kotlin/dev/gitlive/firebase/installations/installations.kt) | | [Remote Config](https://firebase.google.com/docs/remote-config) | [`dev.gitlive:firebase-config:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-config/1.7.0/pom) | ![20%](https://img.shields.io/badge/-20%25-orange?style=flat-square) | +| [Performance](https://firebase.google.com/docs/perf-mon) | [`dev.gitlive:firebase-perf:1.7.0`](https://search.maven.org/artifact/dev.gitlive/firebase-perf/1.7.0/pom) | ![1%](https://img.shields.io/badge/-1%25-orange?style=flat-square) | @@ -209,6 +210,7 @@ If you are building a Kotlin multiplatform library which will be consumed from J "@gitlive/firebase-installations": "1.7.0", "@gitlive/firebase-messaging": "1.7.0", "@gitlive/firebase-storage": "1.7.0" + "@gitlive/firebase-perf": "1.7.0" } ```