From a5d966bf0f69195e539302765132fa1878d2cc55 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Sat, 26 Apr 2025 01:58:20 +0800 Subject: [PATCH] calculate all combinations of gradle flavors --- MANIFEST.in | 1 + fdroidserver/scanner.py | 5 +++-- fdroidserver/update.py | 7 +++++-- tests/source-files/flavor.test/build.gradle | 15 +++++++++++++++ tests/test_scanner.py | 6 +++++- 5 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 tests/source-files/flavor.test/build.gradle diff --git a/MANIFEST.in b/MANIFEST.in index fd5eb862..0a24f98b 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -803,6 +803,7 @@ include tests/source-files/firebase-allowlisted/app/build.gradle include tests/source-files/firebase-allowlisted/build.gradle include tests/source-files/firebase-suspect/app/build.gradle include tests/source-files/firebase-suspect/build.gradle +include tests/source-files/flavor.test/build.gradle include tests/source-files/info.guardianproject.ripple/build.gradle include tests/source-files/lockfile.test/flutter/.dart_tool/flutter_gen/pubspec.yaml include tests/source-files/lockfile.test/flutter/pubspec.lock diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index c6cd57a0..3de65d33 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -270,9 +270,10 @@ def get_gradle_compile_commands(build): 'runtimeOnly', ] buildTypes = ['', 'release'] - flavors = [''] if build.gradle and build.gradle != ['yes']: - flavors += build.gradle + flavors = common.calculate_gradle_flavor_combination(build.gradle) + else: + flavors = [''] return [''.join(c) for c in itertools.product(flavors, buildTypes, compileCommands)] diff --git a/fdroidserver/update.py b/fdroidserver/update.py index b1978755..e25a5209 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1180,13 +1180,16 @@ def insert_localized_app_metadata(apps): destdir = os.path.join('repo', packageName, locale) # flavors specified in build receipt - build_flavors = "" + build_flavors = [] if ( apps[packageName] and len(apps[packageName].get('Builds', [])) > 0 and 'gradle' in apps[packageName]['Builds'][-1] + and apps[packageName]['Builds'][-1]['gradle'] != ['yes'] ): - build_flavors = apps[packageName]['Builds'][-1]['gradle'] + build_flavors = common.calculate_gradle_flavor_combination( + apps[packageName]['Builds'][-1]['gradle'] + ) if len(segments) >= 5 and segments[4] == "fastlane" and segments[3] not in build_flavors: logging.debug("ignoring due to wrong flavor") diff --git a/tests/source-files/flavor.test/build.gradle b/tests/source-files/flavor.test/build.gradle new file mode 100644 index 00000000..2c958bdc --- /dev/null +++ b/tests/source-files/flavor.test/build.gradle @@ -0,0 +1,15 @@ +dependenies { + /// dependencies for app building + fossImplementation 'com.android.support:multidex:1.0.2' + implementation 'com.github.nextcloud:android-library:1.0.33' + devImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT' // use always latest master + implementation "com.android.support:support-v4:${supportLibraryVersion}" + prodImplementation "com.android.support:design:${supportLibraryVersion}" + gplayImplementation 'com.jakewharton:disklrucache:2.0.2' + implementation "com.android.support:appcompat-v7:${supportLibraryVersion}" + gplayProdImplementation "com.android.support:cardview-v7:${supportLibraryVersion}" + implementation "com.android.support:exifinterface:${supportLibraryVersion}" + fossDevImplementation 'com.github.tobiasKaminsky:android-floating-action-button:1.10.2' + gplayDevImplementation 'com.github.albfernandez:juniversalchardet:v2.0.0' + fossProdImplementation 'com.google.code.findbugs:annotations:2.0.1' +} diff --git a/tests/test_scanner.py b/tests/test_scanner.py index 82f48d35..3515e858 100755 --- a/tests/test_scanner.py +++ b/tests/test_scanner.py @@ -107,12 +107,16 @@ class ScannerTest(unittest.TestCase): ('source-files/eu.siacs.conversations/build.gradle', 'free', 21), ('source-files/org.mozilla.rocket/app/build.gradle', 'focus', 40), ('source-files/com.jens.automation2/app/build.gradle', 'fdroidFlavor', 5), + ('source-files/flavor.test/build.gradle', ['foss', 'prod'], 7), ] for f, flavor, count in test_files: i = 0 build = fdroidserver.metadata.Build() - build.gradle = [flavor] + if isinstance(flavor, list): + build.gradle = flavor + else: + build.gradle = [flavor] regexs = fdroidserver.scanner.get_gradle_compile_commands_without_catalog( build )