Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
d2ef6ef
Add support for tvOS and update dependencies
sajidalidev Jun 6, 2025
a3540c3
Add macOS Support and Extend Platform Coverage
sajidalidev Jun 7, 2025
673901a
Added iosX64
Reedyuk Aug 31, 2025
6e03365
attempt to update github actions
Reedyuk Aug 31, 2025
a98eaa9
Added Apple target skip
Reedyuk Aug 31, 2025
a03b31e
Adjusted tvos and macos
Reedyuk Sep 9, 2025
807ad5c
Added missing target for macos and adjusted folder name
Reedyuk Sep 14, 2025
e42bb96
Added skips
Reedyuk Sep 14, 2025
69626e5
Added missing macos check
Reedyuk Sep 14, 2025
905aca0
hardcoded 16.4 xcode
Reedyuk Sep 14, 2025
3b30f61
Adjusted test matrix
Reedyuk Sep 14, 2025
cbe0a09
Adjusted test matrix
Reedyuk Sep 14, 2025
1bc76a4
Added platform types to projects.
Reedyuk Sep 21, 2025
7dfa2c5
Added check on plugins
Reedyuk Sep 21, 2025
8e0c72b
adjusted check on plugins
Reedyuk Sep 21, 2025
345dd08
Added platform filtering for test utils
Reedyuk Sep 21, 2025
9cc1ae4
Added platform filtering for test utils
Reedyuk Sep 22, 2025
5c7cf41
Adjusted emulator matrix.
Reedyuk Sep 23, 2025
485c7e1
Adjusted emulator matrix.
Reedyuk Sep 23, 2025
7cbffda
Updated Xcode version to 16.2 in CI configuration files and adjusted …
Reedyuk Sep 24, 2025
aa8b3ab
Added fix for firebase storage
Reedyuk Sep 27, 2025
c200a85
Adjusted to xcode 16.4
Reedyuk Sep 28, 2025
2c6cb39
bumped kotlin
Reedyuk Sep 28, 2025
820beb3
Added ability to skip test targets
Reedyuk Oct 5, 2025
4820435
Adjusted tests.
Reedyuk Oct 5, 2025
1540ac6
Update firebase-database/build.gradle.kts
Reedyuk Oct 6, 2025
edd653b
Update firebase-auth/build.gradle.kts
Reedyuk Oct 6, 2025
0b97795
Update firebase-auth/build.gradle.kts
Reedyuk Oct 7, 2025
956a834
Update firebase-auth/build.gradle.kts
Reedyuk Oct 7, 2025
15b8926
Removed keychain function for macos
Reedyuk Oct 15, 2025
5ca6d61
Removed keychain function for tvos
Reedyuk Oct 15, 2025
f4ede04
not needed for ios arm64
Reedyuk Oct 15, 2025
c0b22f7
osx not macos
Reedyuk Oct 15, 2025
bf1b064
Adjusted for error message on opt in
Reedyuk Oct 15, 2025
6656377
Added more opt in
Reedyuk Oct 15, 2025
4f719df
removed firebase auth for macos.
Reedyuk Oct 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
run: chmod +x gradlew
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
xcode-version: '16.4'
- name: Publish Firebase Analytics
run: ./gradlew :firebase-analytics:publish
- name: Publish Firebase App
Expand Down Expand Up @@ -74,7 +74,7 @@ jobs:
run: chmod +x gradlew
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
xcode-version: '16.4'
- name: Generate documentation
run: ./gradlew dokkaHtmlMultiModule
- name: Uploading build folder
Expand Down
84 changes: 83 additions & 1 deletion .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ jobs:
outputs:
emulator_jobs_matrix: ${{ steps.dataStep.outputs.emulator_jobs_matrix }}
ios_test_jobs_matrix: ${{ steps.dataStep.outputs.ios_test_jobs_matrix }}
macos_test_jobs_matrix: ${{ steps.dataStep.outputs.macos_test_jobs_matrix }}
tvos_test_jobs_matrix: ${{ steps.dataStep.outputs.tvos_test_jobs_matrix }}
js_test_jobs_matrix: ${{ steps.dataStep.outputs.js_test_jobs_matrix }}
jvm_test_jobs_matrix: ${{ steps.dataStep.outputs.jvm_test_jobs_matrix }}
steps:
Expand All @@ -34,6 +36,8 @@ jobs:
echo "
emulator_jobs_matrix=$(jq -c . < ./build/emulator_jobs_matrix.json)
ios_test_jobs_matrix=$(jq -c . < ./build/ios_test_jobs_matrix.json)
macos_test_jobs_matrix=$(jq -c . < ./build/macos_test_jobs_matrix.json)
tvos_test_jobs_matrix=$(jq -c . < ./build/tvos_test_jobs_matrix.json)
js_test_jobs_matrix=$(jq -c . < ./build/js_test_jobs_matrix.json)
jvm_test_jobs_matrix=$(jq -c . < ./build/jvm_test_jobs_matrix.json)
" >> $GITHUB_OUTPUT
Expand Down Expand Up @@ -121,7 +125,7 @@ jobs:
key: cocoapods-cache-v2
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
xcode-version: '16.4'
- name: Setup test environment
uses: ./.github/actions/setup_test_action
- name: Set Artifact Name
Expand All @@ -141,6 +145,84 @@ jobs:
with:
name: iOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log
path: "**/firebase-debug.log"
build-macos:
needs: jobMatrixSetup
runs-on: macos-15
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.jobMatrixSetup.outputs.macos_test_jobs_matrix) }}
steps:
- uses: actions/checkout@v4
- name: Cocoapods cache
uses: actions/cache@v4
with:
path: |
~/.cocoapods
~/Library/Caches/CocoaPods
*/build/cocoapods
*/build/classes
key: cocoapods-cache-v2
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.4'
- name: Setup test environment
uses: ./.github/actions/setup_test_action
- name: Set Artifact Name
run: |
echo "ARCHIVE_KEY=$(echo ${{ matrix.gradle_tasks }} | cut -d: -f2)" >> $GITHUB_ENV
- name: Run macOS Tests
run: ./gradlew ${{ matrix.gradle_tasks }}
- name: Upload macOS test artifact
uses: actions/upload-artifact@v4
if: failure()
with:
name: macOS ${{ env.ARCHIVE_KEY }} Test Report HTML
path: "**/build/reports/tests/macosArm64Test/"
- name: Upload Firebase Debug Log
uses: actions/upload-artifact@v4
if: failure()
with:
name: macOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log
path: "**/firebase-debug.log"
build-tvos:
needs: jobMatrixSetup
runs-on: macos-15
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.jobMatrixSetup.outputs.tvos_test_jobs_matrix) }}
steps:
- uses: actions/checkout@v4
- name: Cocoapods cache
uses: actions/cache@v4
with:
path: |
~/.cocoapods
~/Library/Caches/CocoaPods
*/build/cocoapods
*/build/classes
key: cocoapods-cache-v2
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.4'
- name: Setup test environment
uses: ./.github/actions/setup_test_action
- name: Set Artifact Name
run: |
echo "ARCHIVE_KEY=$(echo ${{ matrix.gradle_tasks }} | cut -d: -f2)" >> $GITHUB_ENV
- name: Run tvOS Tests
run: ./gradlew ${{ matrix.gradle_tasks }}
- name: Upload tvOS test artifact
uses: actions/upload-artifact@v4
if: failure()
with:
name: tvOS ${{ env.ARCHIVE_KEY }} Test Report HTML
path: "**/build/reports/tests/tvosArm64Test/"
- name: Upload Firebase Debug Log
uses: actions/upload-artifact@v4
if: failure()
with:
name: tvOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log
path: "**/firebase-debug.log"
build-jvm:
needs: jobMatrixSetup
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pull_request_target.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
key: cocoapods-cache-v2
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
xcode-version: '16.4'
- name: Format Kotlin
run: ./gradlew formatKotlin
- name: Api File Update
Expand Down
7 changes: 7 additions & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
plugins {
`kotlin-dsl`
}

repositories {
gradlePluginPortal()
}
22 changes: 22 additions & 0 deletions buildSrc/src/main/kotlin/Utils.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package utils

enum class TargetPlatform {
Android, Ios, Macos, Tvos, Jvm, Js
}

fun String.toTargetPlatforms(): List<TargetPlatform> =
split(",").map {
when (it.lowercase().trim()) {
"android" -> TargetPlatform.Android
"ios" -> TargetPlatform.Ios
"macos" -> TargetPlatform.Macos
"tvos" -> TargetPlatform.Tvos
"jvm" -> TargetPlatform.Jvm
"js" -> TargetPlatform.Js
else -> throw IllegalArgumentException("Unknown target platform: $it")
}
}

fun List<TargetPlatform>.supportsApple() = this.any {
it == TargetPlatform.Ios || it == TargetPlatform.Macos || it == TargetPlatform.Tvos
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ class EmulatorJobsMatrix {
mapOf(
"emulator_jobs_matrix.json" to getEmulatorTaskList(rootProject = rootProject),
"ios_test_jobs_matrix.json" to getIosTestTaskList(rootProject = rootProject),
"macos_test_jobs_matrix.json" to getMacosTestTaskList(rootProject = rootProject),
"tvos_test_jobs_matrix.json" to getTvosTestTaskList(rootProject = rootProject),
"js_test_jobs_matrix.json" to getJsTestTaskList(rootProject = rootProject),
"jvm_test_jobs_matrix.json" to getJvmTestTaskList(rootProject = rootProject)
)
Expand All @@ -32,27 +34,49 @@ class EmulatorJobsMatrix {

fun getIosTestTaskList(rootProject: Project): List<List<String>> =
rootProject.subprojects.filter { subProject ->
subProject.name == "test-utils" ||
(rootProject.property("${subProject.name}.skipIosTests") == "true").not()
(subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains(
TargetPlatform.Ios) || subProject.name == "test-utils"
}.map { subProject ->
when (val osArch = System.getProperty("os.arch")) {
"arm64", "arm-v8", "aarch64" -> "${subProject.path}:iosSimulatorArm64Test"
else -> throw Error("Unexpected System.getProperty(\"os.arch\") = $osArch")
}
}.map { listOf("cleanTest", it) }

fun getMacosTestTaskList(rootProject: Project): List<List<String>> =
rootProject.subprojects.filter { subProject ->
(subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains(
TargetPlatform.Macos) || subProject.name == "test-utils"
}.map { subProject ->
when (val osArch = System.getProperty("os.arch")) {
"arm64", "arm-v8", "aarch64" -> "${subProject.path}:macosArm64Test"
else -> throw Error("Unexpected System.getProperty(\"os.arch\") = $osArch")
}
}.map { listOf("cleanTest", it) }

fun getTvosTestTaskList(rootProject: Project): List<List<String>> =
rootProject.subprojects.filter { subProject ->
(subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains(
TargetPlatform.Tvos) || subProject.name == "test-utils"
}.map { subProject ->
when (val osArch = System.getProperty("os.arch")) {
"arm64", "arm-v8", "aarch64" -> "${subProject.path}:tvosSimulatorArm64Test"
else -> throw Error("Unexpected System.getProperty(\"os.arch\") = $osArch")
}
}.map { listOf("cleanTest", it) }

fun getJsTestTaskList(rootProject: Project): List<List<String>> =
rootProject.subprojects.filter { subProject ->
subProject.name == "test-utils" ||
(rootProject.property("${subProject.name}.skipJsTests") == "true").not()
(subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains(
TargetPlatform.Js) || subProject.name == "test-utils"
}.map { subProject ->
"${subProject.path}:jsTest"
}.map { listOf("cleanTest", it) }

fun getJvmTestTaskList(rootProject: Project): List<List<String>> =
rootProject.subprojects.filter { subProject ->
subProject.name == "test-utils" ||
(rootProject.property("${subProject.name}.skipJvmTests") == "true").not()
(subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains(
TargetPlatform.Jvm) || subProject.name == "test-utils"
}.map { subProject ->
"${subProject.path}:jvmTest"
}.map { listOf("cleanTest", it) }
Expand Down Expand Up @@ -101,3 +125,20 @@ fun getSdkmanagerFile(rootDir: File): File? =
println("sdkmanagerFile: $sdkmanagerFile")
sdkmanagerFile
}

enum class TargetPlatform {
Android, Ios, Macos, Tvos, Jvm, Js
}

fun String.toTargetPlatforms(): List<TargetPlatform> =
split(",").map {
when (it.lowercase().trim()) {
"android" -> TargetPlatform.Android
"ios" -> TargetPlatform.Ios
"macos" -> TargetPlatform.Macos
"tvos" -> TargetPlatform.Tvos
"jvm" -> TargetPlatform.Jvm
"js" -> TargetPlatform.Js
else -> throw IllegalArgumentException("Unknown target platform: $it")
}
}
Loading
Loading