Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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}.supportedTargets") 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}.supportedTargets") 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}.supportedTargets") 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}.supportedTargets") 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}.supportedTargets") 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