From 7a1d236c8dabe0f12b759c74f3ab931be67f1fd3 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 26 May 2021 17:12:28 +0200 Subject: [PATCH] only support zipballs in NDK provisioning Since I discovered there is an r10e zipball, this can now get all NDKs in zipball form. fdroid/android-sdk-transparency-log@447fea86e719295af6cd8a3bbee4529d114ece2d closes #902 --- buildserver/provision-android-ndk | 5 ----- buildserver/provision-apt-get-install | 1 - fdroidserver/common.py | 18 +++++++++++++++++- makebuildserver | 2 -- tests/common.TestCase | 26 +++++++++++++++++++++++++- 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/buildserver/provision-android-ndk b/buildserver/provision-android-ndk index 655bf06f..99e7c32e 100644 --- a/buildserver/provision-android-ndk +++ b/buildserver/provision-android-ndk @@ -10,11 +10,6 @@ NDK_BASE=$1 test -e $NDK_BASE || mkdir -p $NDK_BASE cd $NDK_BASE -if [ ! -e $NDK_BASE/r10e ]; then - 7zr x /vagrant/cache/android-ndk-r10e-linux-x86_64.bin > /dev/null - mv android-ndk-r10e r10e -fi - for version in r21e r22b; do if [ ! -e ${NDK_BASE}/${version} ]; then unzip /vagrant/cache/android-ndk-${version}-linux-x86_64.zip > /dev/null diff --git a/buildserver/provision-apt-get-install b/buildserver/provision-apt-get-install index 1767bb13..070fb6b3 100644 --- a/buildserver/provision-apt-get-install +++ b/buildserver/provision-apt-get-install @@ -96,7 +96,6 @@ packages=" openjdk-8-jre-headless openjdk-8-jdk-headless optipng - p7zip pkg-config python-gnupg python-lxml diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 8e6f5ac1..9faa8490 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -307,7 +307,7 @@ def fill_config_defaults(thisconfig): for k in list(ndk_paths.keys()): if not re.match(r'r[1-9][0-9]*[a-z]?', k): for ndkdict in NDKS: - if k == ndkdict['revision']: + if k == ndkdict.get('revision'): ndk_paths[ndkdict['release']] = ndk_paths.pop(k) break @@ -4015,12 +4015,23 @@ def sha256base64(filename): def get_ndk_version(ndk_path): + """Get the version info from the metadata in the NDK package + + Since r11, the info is nice and easy to find in + sources.properties. Before, there was a kludgey format in + RELEASE.txt. This is only needed for r10e. + + """ source_properties = os.path.join(ndk_path, 'source.properties') + release_txt = os.path.join(ndk_path, 'RELEASE.TXT') if os.path.exists(source_properties): with open(source_properties) as fp: m = re.search(r'^Pkg.Revision *= *(.+)', fp.read(), flags=re.MULTILINE) if m: return m.group(1) + elif os.path.exists(release_txt): + with open(release_txt) as fp: + return fp.read().split('-')[0] def auto_install_ndk(build): @@ -4118,6 +4129,11 @@ def _install_ndk(ndk): """Derived from https://gitlab.com/fdroid/android-sdk-transparency-log/-/blob/master/checksums.json""" NDKS = [ + { + "release": "r10e", + "sha256": "ee5f405f3b57c4f5c3b3b8b5d495ae12b660e03d2112e4ed5c728d349f1e520c", + "url": "https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip" + }, { "release": "r11", "revision": "11.0.2655954", diff --git a/makebuildserver b/makebuildserver index 4f1864a8..d1298720 100755 --- a/makebuildserver +++ b/makebuildserver @@ -291,8 +291,6 @@ CACHE_FILES = [ 'dccda8aa069563c8ba2f6cdfd0777df0e34a5b4d15138ca8b9757e94f4e8a8cb'), ('https://services.gradle.org/distributions/gradle-7.0.2-bin.zip', '0e46229820205440b48a5501122002842b82886e76af35f0f3a069243dca4b3c'), - ('https://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin', - '102d6723f67ff1384330d12c45854315d6452d6510286f4e5891e00a5a8f1d5a'), ('https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip', 'ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e'), ('https://dl.google.com/android/repository/android-ndk-r22b-linux-x86_64.zip', diff --git a/tests/common.TestCase b/tests/common.TestCase index 6eca64bc..d73bc497 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -1825,13 +1825,27 @@ class CommonTest(unittest.TestCase): list_entry = mock.Mock() calls = [] - build.ndk = ['11.0.2655954', 'r12b', 'r21e'] + build.ndk = ['r10e', '11.0.2655954', 'r12b', 'r21e'] for n in build.ndk: calls.append(mock.call(n)) with mock.patch('fdroidserver.common._install_ndk', list_entry): fdroidserver.common.auto_install_ndk(build) list_entry.assert_has_calls(calls) + @unittest.skip("This test downloads and unzips a 1GB file.") + def test_install_ndk(self): + """NDK r10e is a special case since its missing source.properties""" + sdk_path = tempfile.mkdtemp( + prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir + ) + config = {'sdk_path': sdk_path} + fdroidserver.common.config = config + fdroidserver.common._install_ndk('r10e') + r10e = os.path.join(sdk_path, 'ndk', 'r10e') + self.assertEqual('r10e', fdroidserver.common.get_ndk_version(r10e)) + fdroidserver.common.fill_config_defaults(config) + self.assertEqual({'r10e': r10e}, config['ndk_paths']) + def test_fill_config_defaults(self): """Test the auto-detection of NDKs installed in standard paths""" sdk_path = tempfile.mkdtemp( @@ -1854,6 +1868,16 @@ class CommonTest(unittest.TestCase): fdroidserver.common.fill_config_defaults(config) self.assertEqual({'r17c': ndk_bundle, 'r21e': r21e}, config['ndk_paths']) + r10e = os.path.join(sdk_path, 'ndk', 'r10e') + os.makedirs(r10e) + with open(os.path.join(r10e, 'RELEASE.TXT'), 'w') as fp: + fp.write('r10e-rc4 (64-bit)\n') + config = {'sdk_path': sdk_path} + fdroidserver.common.fill_config_defaults(config) + self.assertEqual( + {'r10e': r10e, 'r17c': ndk_bundle, 'r21e': r21e}, config['ndk_paths'] + ) + if __name__ == "__main__": os.chdir(os.path.dirname(__file__))