Skip to content
Merged
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
29 changes: 22 additions & 7 deletions .github/scripts/compare-types/configs/ai.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,27 +108,33 @@ const config: PackageConfig = {
{
name: 'BaseSpeechConfig',
reason:
'Shared speech-config base type for multi/single-speaker TTS options newly exported by firebase-js-sdk. RN Firebase still uses the simpler VoiceConfig-based SpeechConfig shape.',
'Shared base for firebase-js-sdk single-/multi-speaker TTS configs. RN Firebase ' +
'AI still exposes the pre-union `{ voiceConfig?: VoiceConfig }` SpeechConfig shape ' +
'and does not model the split BaseSpeechConfig hierarchy.',
},
{
name: 'MultiSpeakerSpeechConfig',
reason:
'Multi-speaker speech config type added in firebase-js-sdk; not yet surfaced in React Native Firebase AI.',
'firebase-js-sdk multi-speaker TTS config. RN Firebase AI SpeechConfig remains the ' +
'legacy single VoiceConfig object; multi-speaker TTS request shaping is not implemented.',
},
{
name: 'MultiSpeakerVoiceConfig',
reason:
'Multi-speaker voice config type added in firebase-js-sdk; not yet surfaced in React Native Firebase AI.',
'firebase-js-sdk multi-speaker voice list type used by MultiSpeakerSpeechConfig. ' +
'RN Firebase AI has no multi-speaker TTS path, so this type is omitted.',
},
{
name: 'SingleSpeakerSpeechConfig',
reason:
'Single-speaker speech config type added in firebase-js-sdk; RN Firebase still uses the legacy VoiceConfig-based SpeechConfig object.',
'firebase-js-sdk single-speaker TTS config in the SpeechConfig union. RN Firebase ' +
'AI keeps the legacy `{ voiceConfig?: VoiceConfig }` object instead of the union arm.',
},
{
name: 'SpeakerVoiceConfig',
reason:
'Per-speaker voice config type added in firebase-js-sdk for multi-speaker TTS; not yet surfaced in React Native Firebase AI.',
'firebase-js-sdk per-speaker voice entry for multi-speaker TTS. RN Firebase AI has no ' +
'multi-speaker TTS path, so this type is omitted.',
},
],
extraInRN: [
Expand All @@ -142,6 +148,11 @@ const config: PackageConfig = {
reason:
'RN Firebase-specific schema helper interface used by the local schema-builder implementation and request typing.',
},
{
name: 'ChatSessionBase',
reason:
'RN Firebase exports the shared chat-session base class used by internal ChatSession / TemplateChatSession implementations. The JS SDK keeps this implementation detail private.',
},
],
differentShape: [
{
Expand Down Expand Up @@ -177,7 +188,9 @@ const config: PackageConfig = {
{
name: 'GenerationConfig',
reason:
'firebase-js-sdk GenerationConfig gained optional `speechConfig` for TTS. RN Firebase has not yet added that field to GenerationConfig.',
'firebase-js-sdk GenerationConfig includes optional `speechConfig` for TTS. RN Firebase ' +
'GenerationConfig omits that field because SpeechConfig is still the legacy VoiceConfig ' +
'object and multi-speaker TTS request shaping is not implemented.',
},
{
name: 'InferenceMode',
Expand All @@ -187,7 +200,9 @@ const config: PackageConfig = {
{
name: 'SpeechConfig',
reason:
'firebase-js-sdk SpeechConfig is now a single-/multi-speaker union. RN Firebase still uses the legacy `{ voiceConfig?: VoiceConfig }` object shape.',
'firebase-js-sdk SpeechConfig is a SingleSpeakerSpeechConfig | MultiSpeakerSpeechConfig ' +
'union. RN Firebase keeps `{ voiceConfig?: VoiceConfig }` because multi-speaker TTS is ' +
'not implemented and existing callers use the VoiceConfig object.',
},
{
name: 'URLRetrievalStatus',
Expand Down
50 changes: 50 additions & 0 deletions .github/scripts/compare-types/configs/firestore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,49 @@ const config: PackageConfig = {
},

// --- Types / Interfaces ---
{
name: 'BsonObjectId',
reason:
'firebase-js-sdk 13 MongoDB-compatible BSON ObjectId value type. RN Firebase ' +
'Firestore is native-backed; Android/iOS Firestore SDKs do not expose a public ' +
'BsonObjectId constructor or serializer for this type.',
},
{
name: 'BsonTimestamp',
reason:
'firebase-js-sdk 13 MongoDB-compatible BSON Timestamp value type. Native ' +
'Android/iOS Firestore SDKs do not expose an equivalent public BSON timestamp type.',
},
{
name: 'Decimal128Value',
reason:
'firebase-js-sdk 13 MongoDB-compatible Decimal128 value type. Native Android/iOS ' +
'Firestore SDKs do not expose a public Decimal128 constructor for RN bridging.',
},
{
name: 'Int32Value',
reason:
'firebase-js-sdk 13 MongoDB-compatible Int32 value type. Native Android/iOS ' +
'Firestore SDKs do not expose a public Int32Value type for RN bridging.',
},
{
name: 'MaxKey',
reason:
'firebase-js-sdk 13 MongoDB-compatible MaxKey sentinel. Native Android/iOS ' +
'Firestore SDKs do not expose MaxKey for typed document values.',
},
{
name: 'MinKey',
reason:
'firebase-js-sdk 13 MongoDB-compatible MinKey sentinel. Native Android/iOS ' +
'Firestore SDKs do not expose MinKey for typed document values.',
},
{
name: 'RegexValue',
reason:
'firebase-js-sdk 13 MongoDB-compatible Regex value type. Native Android/iOS ' +
'Firestore SDKs do not expose a public RegexValue constructor for RN bridging.',
},
{
name: 'FirestoreErrorCode',
reason:
Expand Down Expand Up @@ -264,6 +307,13 @@ const config: PackageConfig = {
// Different shape
// ---------------------------------------------------------------------------
differentShape: [
{
name: 'ChildTypes',
reason:
'UpdateData helper type added in firebase-js-sdk 13. RN Firebase mirrors the same ' +
'conditional (Record child union | T); declaration formatting/normalization differs ' +
'in compare-types output but the public type semantics match.',
},
{
name: 'deleteAllPersistentCacheIndexes',
reason:
Expand Down
27 changes: 0 additions & 27 deletions .github/scripts/compare-types/configs/ml.ts

This file was deleted.

10 changes: 0 additions & 10 deletions .github/scripts/compare-types/src/registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import analyticsConfig from '../configs/analytics';
import crashlyticsConfig from '../configs/crashlytics';
import inAppMessagingConfig from '../configs/in-app-messaging';
import appDistributionConfig from '../configs/app-distribution';
import mlConfig from '../configs/ml';
import functionsConfig from '../configs/functions';
import messagingConfig from '../configs/messaging';
import phoneNumberVerificationConfig from '../configs/phone-number-verification';
Expand Down Expand Up @@ -373,15 +372,6 @@ export const packages: PackageEntry[] = [
],
config: appDistributionConfig,
}),
rnOnlyPackage({
name: 'ml',
rnFirebaseModularFiles: [
path.join(rnDist('ml'), 'index.d.ts'),
path.join(rnDist('ml'), 'types', 'ml.d.ts'),
],
rnFirebaseSupportFiles: [path.join(rnDist('ml'), 'types', 'internal.d.ts')],
config: mlConfig,
}),
{
name: 'functions',
firebaseSdkTypesPaths: [requiredFirebaseTypes('functions')],
Expand Down
65 changes: 0 additions & 65 deletions .github/workflows/scripts/configure-ios-dep-resolution.sh

This file was deleted.

45 changes: 16 additions & 29 deletions .github/workflows/tests_e2e_ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,23 +88,20 @@ jobs:
}

// we want to test debug and release - they generate different code
// Firebase Apple SDK 13+ is SPM-only (CocoaPods Firebase removed)
let buildmode = ['debug', 'release'];

// Test both SPM and CocoaPods dependency resolution modes
let depResolution = ['spm', 'cocoapods'];

return {
"iteration": iterationArray,
"buildmode": buildmode,
"dep-resolution": depResolution
"buildmode": buildmode
}
- name: Debug Output
run: echo "${{ steps.build-matrix.outputs.result }}"

# This uses the matrix generated from the matrix-prep stage
# it will run unit tests on whatever OS combinations are desired
ios:
name: iOS (${{ matrix.buildmode }}, ${{ matrix.dep-resolution }}, ${{ matrix.iteration }})
name: iOS (${{ matrix.buildmode }}, ${{ matrix.iteration }})
runs-on: xcode-27
needs: matrix_prep
# TODO matrix across APIs, at least 11 and 15 (lowest to highest)
Expand Down Expand Up @@ -201,8 +198,8 @@ jobs:
- uses: hendrikmuhs/ccache-action@f09c25b45002a07be2955cbe52e8cee55643f89d # v1.2.24
name: Xcode Compile Cache
with:
# Sticky content-hash key (append-timestamp: false). Dimensions keep spm/cocoapods and debug/release caches distinct.
key: ${{ runner.os }}-e2e-${{ matrix.buildmode }}-${{ matrix.dep-resolution }}-ios-v5-xcode27-${{ hashFiles('yarn.lock', 'packages/*/*.podspec', 'packages/*/ios/**', 'tests/ios/Podfile.lock') }}
# Sticky content-hash key (append-timestamp: false). SPM-only matrix (no cocoapods leg); debug/release stay distinct.
key: ${{ runner.os }}-e2e-${{ matrix.buildmode }}-ios-v5-xcode27-${{ hashFiles('yarn.lock', 'packages/*/*.podspec', 'packages/*/ios/**', 'tests/ios/Podfile.lock') }}
save: "${{ github.ref == 'refs/heads/main' && matrix.iteration == 0 }}"
append-timestamp: false
create-symlink: true
Expand Down Expand Up @@ -255,7 +252,7 @@ jobs:
run: yarn tests:ios:unit

- name: Verify Firebase SPM Ruby helpers
if: matrix.buildmode == 'debug' && matrix.dep-resolution == 'spm'
if: matrix.buildmode == 'debug'
# Canonical entrypoint — discovers all *_test.rb; shape/embed run for real here.
run: yarn tests:ios:ruby

Expand All @@ -267,11 +264,8 @@ jobs:
with:
path: tests/ios/Pods
# Hermes CONFIG is handled by tests/patches/react-native+0.88.0-rc.3.patch (#59116); Pods cache is shared across buildmode again.
key: ${{ runner.os }}-${{ matrix.dep-resolution }}-ios-pods-v6-${{ hashFiles('tests/ios/Podfile.lock') }}
restore-keys: ${{ runner.os }}-${{ matrix.dep-resolution }}-ios-pods-v6

- name: Configure Dependency Resolution Mode
run: .github/workflows/scripts/configure-ios-dep-resolution.sh "${{ matrix.dep-resolution }}"
key: ${{ runner.os }}-ios-pods-v7-${{ hashFiles('tests/ios/Podfile.lock') }}
restore-keys: ${{ runner.os }}-ios-pods-v7

- name: Pod Install
# https://github.com/nick-fields/retry/releases
Expand Down Expand Up @@ -549,7 +543,7 @@ jobs:

- name: Upload Codecov iOS Ruby
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
if: matrix.buildmode == 'debug' && matrix.dep-resolution == 'spm'
if: matrix.buildmode == 'debug'
continue-on-error: true
with:
files: coverage/ios-ruby/lcov.info
Expand Down Expand Up @@ -596,7 +590,7 @@ jobs:
- name: Metro Bundler Cache Save
# https://github.com/actions/cache/releases
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
if: contains(matrix.buildmode, 'debug') && matrix.dep-resolution == 'spm' && matrix.iteration == 0 && github.ref == 'refs/heads/main' && steps.metro-bundler-cache.outputs.cache-hit != 'true'
if: contains(matrix.buildmode, 'debug') && matrix.iteration == 0 && github.ref == 'refs/heads/main' && steps.metro-bundler-cache.outputs.cache-hit != 'true'
continue-on-error: true
with:
path: ${{ steps.workflow-variables.outputs.metro-cache }}
Expand All @@ -612,7 +606,7 @@ jobs:
# bundle is actually loadable. See .github/workflows/scripts/verify-ios-release-archive.sh
# and okf-bundle/ios-spm-native-imports.md "Runtime framework embedding".
ios-release-archive:
name: iOS Release Archive (${{ matrix.dep-resolution }})
name: iOS Release Archive
runs-on: xcode-27
timeout-minutes: 45
env:
Expand All @@ -623,10 +617,6 @@ jobs:
CCACHE_LIMIT_MULTIPLE: 0.95
XCODE_VERSION: '27.0'
RNFB_CI_REQUIRE_IOS_SIM_RUNTIME: '0'
strategy:
fail-fast: false
matrix:
dep-resolution: ['spm', 'cocoapods']
steps:
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
Expand Down Expand Up @@ -655,8 +645,8 @@ jobs:
- uses: hendrikmuhs/ccache-action@f09c25b45002a07be2955cbe52e8cee55643f89d # v1.2.24
name: Xcode Compile Cache
with:
# Sticky content-hash key (append-timestamp: false). dep-resolution keeps spm/cocoapods caches distinct.
key: ${{ runner.os }}-e2e-archive-${{ matrix.dep-resolution }}-ios-v3-xcode27-${{ hashFiles('yarn.lock', 'packages/*/*.podspec', 'packages/*/ios/**', 'tests/ios/Podfile.lock') }}
# Sticky content-hash key (append-timestamp: false). SPM-only archive job.
key: ${{ runner.os }}-e2e-archive-ios-v3-xcode27-${{ hashFiles('yarn.lock', 'packages/*/*.podspec', 'packages/*/ios/**', 'tests/ios/Podfile.lock') }}
save: "${{ github.ref == 'refs/heads/main' }}"
append-timestamp: false
create-symlink: true
Expand Down Expand Up @@ -695,11 +685,8 @@ jobs:
with:
path: tests/ios/Pods
# Hermes CONFIG is handled by tests/patches/react-native+0.88.0-rc.3.patch (#59116); Pods cache is shared across buildmode again.
key: ${{ runner.os }}-${{ matrix.dep-resolution }}-ios-pods-v6-${{ hashFiles('tests/ios/Podfile.lock') }}
restore-keys: ${{ runner.os }}-${{ matrix.dep-resolution }}-ios-pods-v6

- name: Configure Dependency Resolution Mode
run: .github/workflows/scripts/configure-ios-dep-resolution.sh "${{ matrix.dep-resolution }}"
key: ${{ runner.os }}-ios-pods-v7-${{ hashFiles('tests/ios/Podfile.lock') }}
restore-keys: ${{ runner.os }}-ios-pods-v7

- name: Pod Install
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4.0.0
Expand Down Expand Up @@ -731,7 +718,7 @@ jobs:
continue-on-error: true
if: failure()
with:
name: ios-release-archive-${{ matrix.dep-resolution }}
name: ios-release-archive
path: tests/ios/build/testing.xcarchive/Products/Applications/*/Info.plist
if-no-files-found: ignore

Expand Down
Loading
Loading