Skip to content
This repository has been archived by the owner on Oct 31, 2022. It is now read-only.

Add rule for firebase-common #124

Merged
merged 2 commits into from
Jun 12, 2020
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,13 @@ class GradleProjectPlugin implements Plugin<Project> {
'com.google.firebase:firebase-messaging': '17.0.0'
]
],
'com.google.firebase:firebase-common': [
// Tested firebase-common:17.1.0 back to firebase-iid:10.2.1
'18.0.0': [
'com.google.firebase:firebase-iid': '19.0.0'
]
// Tested up to firebase-common:19.3.0
],
'com.google.firebase:firebase-iid': [
'16.2.0': [
'com.google.firebase:firebase-messaging': '17.1.0'
Expand Down Expand Up @@ -806,6 +813,18 @@ class GradleProjectPlugin implements Plugin<Project> {
configuration.resolvedConfiguration.rethrowFailure()
}

/**
* Given a child dependency this adds a minimum version dependency rule for any of it's parents.
* Gradle does NOT check if upgrading a dependency will break any of it's parent's when upgrading
* so we do this here.
* This works off a whitelist defined in MODULE_DEPENDENCY_MINIMUMS today, however it
* might be possible to generate on the fly in the future
* A request to build such a functionality into Gradle and an in depth explanation:
* https://github.com/gradle/gradle/issues/10170
* @param group - String - Gradle group such as "com.company"
* @param module - String - Gradle module such as "OneSignal"
* @param version - String - Exact version or a valid Gradle version range such as "[1.0.0, 2.0.0)"
*/
static void updateVersionModuleAligns(String group, String module, String version) {
def inputModule = "$group:$module"

Expand Down Expand Up @@ -835,21 +854,31 @@ class GradleProjectPlugin implements Plugin<Project> {

if (parentModuleVersionEntry != null) {
def compareVersionResult = acceptedOrIntersectVersion(
parentModuleEntry.value as String,
parentModuleEntry.value,
parentModuleVersionEntry['version'] as String
)
if (compareVersionResult != parentModuleVersionEntry['version'])
versionModuleAligns[parentModuleEntry.key]['version'] = parentModuleEntry.value
updateVersionModuleAlignsKey(parentModuleEntry.key, parentModuleEntry.value)
}
else
versionModuleAligns[parentModuleEntry.key] = [version: parentModuleEntry.value]
updateVersionModuleAlignsKey(parentModuleEntry.key, parentModuleEntry.value)
}
}

if (group == GROUP_GMS && module == 'play-services')
hasFullPlayServices = true
}

static void updateVersionModuleAlignsKey(String groupAndModule, String version) {
versionModuleAligns[groupAndModule] = [version: version]

// Recursive call to check the parent of this parent rule we just added
// Updating a child dependency can have an upwards cascading affect through dependencies
def group = groupAndModule.split(':')[0]
def module = groupAndModule.split(':')[1]
updateVersionModuleAligns(group, module, version)
}

static boolean shouldSkipCalcIfParent(DependencyResult result) {
def group = result.from.id.displayName.split(':')[0]
SKIP_CALC_WHEN_PARENT.contains(group)
Expand Down
21 changes: 20 additions & 1 deletion src/test/groovy/com/onesignal/androidsdk/MainTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class MainTest extends Specification {

then:
results.each {
assert it.value.contains('com.onesignal:OneSignal:[3.8.3, 3.99.99] -> 3.13.2')
assert it.value.contains('com.onesignal:OneSignal:[3.8.3, 3.99.99] -> 3.14.0')
}
}

Expand Down Expand Up @@ -1023,6 +1023,25 @@ class MainTest extends Specification {
}
}

def 'when firebase-common:18.0.0 ensure firebase-iid:19.0.0 and a cascade firebase-messaging:18.0.0 update'() {
when:
def results = runGradleProject([
'android.useAndroidX': true,
skipGradleVersion: GRADLE_OLDEST_VERSION,
compileLines: """
implementation 'com.google.firebase:firebase-messaging:[10.2.1, 17.3.99]'
implementation 'com.google.firebase:firebase-common:18.0.0'
"""
])

then:
assert results // Asserting existence and contains 1+ entries
results.each {
assert it.value.contains('com.google.firebase:firebase-iid:18.0.0 -> 19.0.0')
assert it.value.contains('com.google.firebase:firebase-messaging:[10.2.1, 17.3.99] -> 18.0.0')
}
}

def 'when firebase-app-unity and firebase-messaging'() {
when:
def results = runGradleProject([
Expand Down