Skip to content

Commit

Permalink
feat!: all packages should depend on core (#3613)
Browse files Browse the repository at this point in the history
All packages now peer-depend on an explicit version of the `app` package.

BREAKING CHANGE: breaking change to mark new internal versioning requirements.
  • Loading branch information
Salakar committed May 5, 2020
1 parent 4b75d55 commit 252a423
Show file tree
Hide file tree
Showing 52 changed files with 660 additions and 213 deletions.
14 changes: 12 additions & 2 deletions packages/admob/RNFBAdMob.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
require 'json'
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))

firebase_sdk_version = '~> 6.13.0'
appPackage = JSON.parse(File.read(File.join('..', 'app', 'package.json')))

coreVersionDetected = appPackage['version']
coreVersionRequired = package['peerDependencies'][appPackage['name']]
if appPackage['sdkVersions']
firebase_sdk_version = appPackage['sdkVersions']['ios']['firebase']
else
firebase_sdk_version = '~> 6.13.0'
end
if coreVersionDetected != coreVersionRequired
Pod::UI.warn "NPM package '#{package['name']}' depends on '#{appPackage['name']}' v#{coreVersionRequired} but found v#{coreVersionDetected}, this might cause build issues or runtime crashes."
end

Pod::Spec.new do |s|
s.name = "RNFBAdMob"
Expand Down
40 changes: 28 additions & 12 deletions packages/admob/android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import io.invertase.gradle.common.PackageJson

buildscript {
// The Android Gradle plugin is only required when opening the android folder stand-alone.
// This avoids unnecessary downloads and potential conflicts when the library is included as a
Expand All @@ -18,10 +20,30 @@ plugins {
id "io.invertase.gradle.build" version "1.4"
}

def appProject
if (findProject(':@react-native-firebase_app')) {
appProject = project(':@react-native-firebase_app')
} else if (findProject(':react-native-firebase_app')) {
appProject = project(':react-native-firebase_app')
} else {
throw new GradleException('Could not find the react-native-firebase/app package, have you installed it?')
}
def packageJson = PackageJson.getForProject(project)
def appPackageJson = PackageJson.getForProject(appProject)
def firebaseBomVersion = appPackageJson['sdkVersions'] ? appPackageJson['sdkVersions']['android']['firebase'] : "24.1.0"
def coreVersionDetected = appPackageJson['version']
def coreVersionRequired = packageJson['peerDependencies'][appPackageJson['name']]
// Only log after build completed so log warning appears at the end
if (coreVersionDetected != coreVersionRequired) {
gradle.buildFinished {
project.logger.warn("ReactNativeFirebase WARNING: NPM package '${packageJson['name']}' depends on '${appPackageJson['name']}' v${coreVersionRequired} but found v${coreVersionDetected}, this might cause build issues or runtime crashes.")
}
}

project.ext {
set('react-native', [
versions: [
android : [
android : [
minSdk : 16,
targetSdk : 28,
compileSdk: 28,
Expand All @@ -30,11 +52,11 @@ project.ext {
buildTools: "28.0.3"
],

firebase : [
bom: "24.1.0"
firebase: [
bom: firebaseBomVersion
],

ads : [
ads : [
consent: "1.0.6"
],
],
Expand All @@ -59,7 +81,7 @@ android {
defaultConfig {
multiDexEnabled true
manifestPlaceholders = [
firebaseJSONAdmobAppID: firebaseJSONAdmobAppIDString,
firebaseJSONAdmobAppID : firebaseJSONAdmobAppIDString,
firebaseJSONAdmobDelayAppMeasurementInit: firebaseJSONAdmobDelayAppMeasurementInitBool
]
}
Expand All @@ -79,13 +101,7 @@ repositories {
}

dependencies {
if (findProject(':@react-native-firebase_app')) {
api project(':@react-native-firebase_app')
} else if (findProject(':react-native-firebase_app')) {
api project(':react-native-firebase_app')
} else {
throw new GradleException('Could not find the react-native-firebase/app package, have you installed it?')
}
api appProject
implementation platform("com.google.firebase:firebase-bom:${ReactNative.ext.getVersion("firebase", "bom")}")
implementation "com.google.firebase:firebase-ads"
implementation "com.google.android.ads.consent:consent-library:${ReactNative.ext.getVersion("ads", "consent")}"
Expand Down
2 changes: 1 addition & 1 deletion packages/admob/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"ad consent"
],
"peerDependencies": {
"@react-native-firebase/app": "*"
"@react-native-firebase/app": "6.7.1"
},
"publishConfig": {
"access": "public"
Expand Down
12 changes: 11 additions & 1 deletion packages/analytics/RNFBAnalytics.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
require 'json'
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
appPackage = JSON.parse(File.read(File.join('..', 'app', 'package.json')))

firebase_sdk_version = '~> 6.13.0'
coreVersionDetected = appPackage['version']
coreVersionRequired = package['peerDependencies'][appPackage['name']]
if appPackage['sdkVersions']
firebase_sdk_version = appPackage['sdkVersions']['ios']['firebase']
else
firebase_sdk_version = '~> 6.13.0'
end
if coreVersionDetected != coreVersionRequired
Pod::UI.warn "NPM package '#{package['name']}' depends on '#{appPackage['name']}' v#{coreVersionRequired} but found v#{coreVersionDetected}, this might cause build issues or runtime crashes."
end

Pod::Spec.new do |s|
s.name = "RNFBAnalytics"
Expand Down
33 changes: 25 additions & 8 deletions packages/analytics/android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import io.invertase.gradle.common.PackageJson

buildscript {
// The Android Gradle plugin is only required when opening the android folder stand-alone.
// This avoids unnecessary downloads and potential conflicts when the library is included as a
Expand All @@ -18,6 +20,27 @@ plugins {
id "io.invertase.gradle.build" version "1.4"
}

def appProject
if (findProject(':@react-native-firebase_app')) {
appProject = project(':@react-native-firebase_app')
} else if (findProject(':react-native-firebase_app')) {
appProject = project(':react-native-firebase_app')
} else {
throw new GradleException('Could not find the react-native-firebase/app package, have you installed it?')
}
def packageJson = PackageJson.getForProject(project)
def appPackageJson = PackageJson.getForProject(appProject)
def firebaseBomVersion = appPackageJson['sdkVersions'] ? appPackageJson['sdkVersions']['android']['firebase'] : "24.1.0"
def coreVersionDetected = appPackageJson['version']
def coreVersionRequired = packageJson['peerDependencies'][appPackageJson['name']]
// Only log after build completed so log warning appears at the end
if (coreVersionDetected != coreVersionRequired) {
gradle.buildFinished {
project.logger.warn("ReactNativeFirebase WARNING: NPM package '${packageJson['name']}' depends on '${appPackageJson['name']}' v${coreVersionRequired} but found v${coreVersionDetected}, this might cause build issues or runtime crashes.")
}
}


project.ext {
set('react-native', [
versions: [
Expand All @@ -31,7 +54,7 @@ project.ext {
],

firebase : [
bom: "24.1.0",
bom: firebaseBomVersion,
],
],
])
Expand Down Expand Up @@ -62,13 +85,7 @@ repositories {
}

dependencies {
if (findProject(':@react-native-firebase_app')) {
api project(':@react-native-firebase_app')
} else if (findProject(':react-native-firebase_app')) {
api project(':react-native-firebase_app')
} else {
throw new GradleException('Could not find the react-native-firebase/app package, have you installed it?')
}
api appProject
implementation platform("com.google.firebase:firebase-bom:${ReactNative.ext.getVersion("firebase", "bom")}")
implementation "com.google.firebase:firebase-analytics"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/analytics/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"analytics"
],
"peerDependencies": {
"@react-native-firebase/app": "*"
"@react-native-firebase/app": "6.7.1"
},
"publishConfig": {
"access": "public"
Expand Down
3 changes: 1 addition & 2 deletions packages/app/RNFBApp.podspec
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
require 'json'
require './firebase_json'
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))

firebase_sdk_version = '~> 6.13.0'
firebase_sdk_version = package['sdkVersions']['ios']['firebase'] || '~> 6.13.0'

Pod::Spec.new do |s|
s.name = "RNFBApp"
Expand Down
7 changes: 6 additions & 1 deletion packages/app/android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import io.invertase.gradle.common.PackageJson

buildscript {
// The Android Gradle plugin is only required when opening the android folder stand-alone.
// This avoids unnecessary downloads and potential conflicts when the library is included as a
Expand All @@ -18,6 +20,9 @@ plugins {
id "io.invertase.gradle.build" version "1.4"
}

def packageJson = PackageJson.getForProject(project)
def firebaseBomVersion = packageJson['sdkVersions']['android']['firebase']

project.ext {
set('react-native', [
versions: [
Expand All @@ -31,7 +36,7 @@ project.ext {
],

firebase: [
bom: "24.1.0",
bom: firebaseBomVersion,
],
],
])
Expand Down
8 changes: 8 additions & 0 deletions packages/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,13 @@
},
"publishConfig": {
"access": "public"
},
"sdkVersions": {
"ios" : {
"firebase": "~> 6.13.0"
},
"android": {
"firebase": "24.1.0"
}
}
}
12 changes: 11 additions & 1 deletion packages/auth/RNFBAuth.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
require 'json'
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
appPackage = JSON.parse(File.read(File.join('..', 'app', 'package.json')))

firebase_sdk_version = '~> 6.13.0'
coreVersionDetected = appPackage['version']
coreVersionRequired = package['peerDependencies'][appPackage['name']]
if appPackage['sdkVersions']
firebase_sdk_version = appPackage['sdkVersions']['ios']['firebase']
else
firebase_sdk_version = '~> 6.13.0'
end
if coreVersionDetected != coreVersionRequired
Pod::UI.warn "NPM package '#{package['name']}' depends on '#{appPackage['name']}' v#{coreVersionRequired} but found v#{coreVersionDetected}, this might cause build issues or runtime crashes."
end

Pod::Spec.new do |s|
s.name = "RNFBAuth"
Expand Down
33 changes: 25 additions & 8 deletions packages/auth/android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import io.invertase.gradle.common.PackageJson

buildscript {
// The Android Gradle plugin is only required when opening the android folder stand-alone.
// This avoids unnecessary downloads and potential conflicts when the library is included as a
Expand All @@ -18,6 +20,27 @@ plugins {
id "io.invertase.gradle.build" version "1.4"
}

def appProject
if (findProject(':@react-native-firebase_app')) {
appProject = project(':@react-native-firebase_app')
} else if (findProject(':react-native-firebase_app')) {
appProject = project(':react-native-firebase_app')
} else {
throw new GradleException('Could not find the react-native-firebase/app package, have you installed it?')
}
def packageJson = PackageJson.getForProject(project)
def appPackageJson = PackageJson.getForProject(appProject)
def firebaseBomVersion = appPackageJson['sdkVersions'] ? appPackageJson['sdkVersions']['android']['firebase'] : "24.1.0"
def coreVersionDetected = appPackageJson['version']
def coreVersionRequired = packageJson['peerDependencies'][appPackageJson['name']]
// Only log after build completed so log warning appears at the end
if (coreVersionDetected != coreVersionRequired) {
gradle.buildFinished {
project.logger.warn("ReactNativeFirebase WARNING: NPM package '${packageJson['name']}' depends on '${appPackageJson['name']}' v${coreVersionRequired} but found v${coreVersionDetected}, this might cause build issues or runtime crashes.")
}
}


project.ext {
set('react-native', [
versions: [
Expand All @@ -30,7 +53,7 @@ project.ext {
buildTools: "28.0.3"
],
firebase : [
bom : "24.1.0",
bom : firebaseBomVersion,
],
],
])
Expand All @@ -56,13 +79,7 @@ repositories {
}

dependencies {
if (findProject(':@react-native-firebase_app')) {
api project(':@react-native-firebase_app')
} else if (findProject(':react-native-firebase_app')) {
api project(':react-native-firebase_app')
} else {
throw new GradleException('Could not find the react-native-firebase/app package, have you installed it?')
}
api appProject
implementation platform("com.google.firebase:firebase-bom:${ReactNative.ext.getVersion("firebase", "bom")}")
implementation "com.google.firebase:firebase-auth"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/auth/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"auth"
],
"peerDependencies": {
"@react-native-firebase/app": "*"
"@react-native-firebase/app": "6.7.1"
},
"publishConfig": {
"access": "public"
Expand Down
12 changes: 11 additions & 1 deletion packages/crashlytics/RNFBCrashlytics.podspec
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
require 'json'
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
appPackage = JSON.parse(File.read(File.join('..', 'app', 'package.json')))

# Firebase SDK Override
firebase_sdk_version = '~> 6.13.0'
coreVersionDetected = appPackage['version']
coreVersionRequired = package['peerDependencies'][appPackage['name']]
if appPackage['sdkVersions']
firebase_sdk_version = appPackage['sdkVersions']['ios']['firebase']
else
firebase_sdk_version = '~> 6.13.0'
end
if coreVersionDetected != coreVersionRequired
Pod::UI.warn "NPM package '#{package['name']}' depends on '#{appPackage['name']}' v#{coreVersionRequired} but found v#{coreVersionDetected}, this might cause build issues or runtime crashes."
end

# Fabric SDK Override
fabric_sdk_version = '~> 1.10.2'
Expand Down
31 changes: 24 additions & 7 deletions packages/crashlytics/android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import io.invertase.gradle.common.PackageJson

buildscript {
// The Android Gradle plugin is only required when opening the android folder stand-alone.
// This avoids unnecessary downloads and potential conflicts when the library is included as a
Expand All @@ -18,6 +20,27 @@ plugins {
id "io.invertase.gradle.build" version "1.4"
}

def appProject
if (findProject(':@react-native-firebase_app')) {
appProject = project(':@react-native-firebase_app')
} else if (findProject(':react-native-firebase_app')) {
appProject = project(':react-native-firebase_app')
} else {
throw new GradleException('Could not find the react-native-firebase/app package, have you installed it?')
}
def packageJson = PackageJson.getForProject(project)
def appPackageJson = PackageJson.getForProject(appProject)
def firebaseBomVersion = appPackageJson['sdkVersions'] ? appPackageJson['sdkVersions']['android']['firebase'] : "24.1.0"
def coreVersionDetected = appPackageJson['version']
def coreVersionRequired = packageJson['peerDependencies'][appPackageJson['name']]
// Only log after build completed so log warning appears at the end
if (coreVersionDetected != coreVersionRequired) {
gradle.buildFinished {
project.logger.warn("ReactNativeFirebase WARNING: NPM package '${packageJson['name']}' depends on '${appPackageJson['name']}' v${coreVersionRequired} but found v${coreVersionDetected}, this might cause build issues or runtime crashes.")
}
}


project.ext {
set('react-native', [
versions: [
Expand Down Expand Up @@ -58,13 +81,7 @@ repositories {
}

dependencies {
if (findProject(':@react-native-firebase_app')) {
api project(':@react-native-firebase_app')
} else if (findProject(':react-native-firebase_app')) {
api project(':react-native-firebase_app')
} else {
throw new GradleException('Could not find the react-native-firebase/app package, have you installed it?')
}
api appProject
// don't use firebase bom here as crashlytics-ndk is not included in the bom, trying to partially use bom here fails
implementation "com.crashlytics.sdk.android:crashlytics:${ReactNative.ext.getVersion("firebase", "crashlytics")}"
// ndk not in Firebase BoM
Expand Down
Loading

0 comments on commit 252a423

Please sign in to comment.