From 6634407c60a345045743378eabf6bc6f2803530e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sun, 3 Feb 2019 16:52:12 +0100 Subject: [PATCH 01/36] update: allow tests to pass when apksigner is not installed This is only for the v2/v3 signatures. fdroid/fdroidserver#627 --- tests/update.TestCase | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/update.TestCase b/tests/update.TestCase index 1210c78e..bce7e41c 100755 --- a/tests/update.TestCase +++ b/tests/update.TestCase @@ -408,13 +408,16 @@ class UpdateTest(unittest.TestCase): print('USE_ANDROGUARD', use_androguard) - apksigner = fdroidserver.common.find_sdk_tools_cmd('apksigner') - if use_androguard and apksigner: # v2 parsing needs both - config['apksigner'] = apksigner - apk_info = fdroidserver.update.scan_apk('v2.only.sig_2.apk') - self.assertIsNone(apk_info.get('maxSdkVersion')) - self.assertEqual(apk_info.get('versionName'), 'v2-only') - self.assertEqual(apk_info.get('versionCode'), 2) + try: + apksigner = fdroidserver.common.find_sdk_tools_cmd('apksigner') + if use_androguard and apksigner: # v2 parsing needs both + config['apksigner'] = apksigner + apk_info = fdroidserver.update.scan_apk('v2.only.sig_2.apk') + self.assertIsNone(apk_info.get('maxSdkVersion')) + self.assertEqual(apk_info.get('versionName'), 'v2-only') + self.assertEqual(apk_info.get('versionCode'), 2) + except fdroidserver.exception.FDroidException: + print('WARNING: skipping v2-only test since apksigner cannot be found') apk_info = fdroidserver.update.scan_apk('repo/v1.v2.sig_1020.apk') self.assertIsNone(apk_info.get('maxSdkVersion')) From a5851c083da68379d3c47d1d1df988e7966cac65 Mon Sep 17 00:00:00 2001 From: Nico Alt Date: Fri, 22 Mar 2019 17:15:58 +0100 Subject: [PATCH 02/36] Flush file before passing it to next function When downloading a repo index, the downloaded index got written to a file with `.write()` in a `with` clause. Before the file got actually written to the disk, it got already passed into the next function, resulting in a `VerificationException`: ``` JAR signature failed to verify: /tmp/tmppq2r51r0 jarsigner: java.util.zip.ZipException: zip file is empty ``` This behavior got introduced in 869cc114a3926fe6ffbfb55c3e8329f773c532cf. I've found this bug with help of Repomaker's tests: https://gitlab.com/fdroid/repomaker/merge_requests/215#note_148994053 --- fdroidserver/index.py | 1 + 1 file changed, 1 insertion(+) diff --git a/fdroidserver/index.py b/fdroidserver/index.py index d8477dc5..7fbbea44 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -717,6 +717,7 @@ def download_repo_index(url_str, etag=None, verify_fingerprint=True, timeout=600 with tempfile.NamedTemporaryFile() as fp: fp.write(download) + fp.flush() index, public_key, public_key_fingerprint = get_index_from_jar(fp.name, fingerprint) index["repo"]["pubkey"] = hexlify(public_key).decode() index["repo"]["fingerprint"] = public_key_fingerprint From bb80c729f53beffe8a6f36432022803fcf700c61 Mon Sep 17 00:00:00 2001 From: Nico Alt Date: Fri, 29 Mar 2019 08:42:49 +0100 Subject: [PATCH 03/36] Version 1.1.2, including changelog --- CHANGELOG.md | 4 ++++ setup.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a76b7013..e78ed677 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ +### 1.1.2 (2019-03-29) + +* fix bug while downloading repo index ([!636](https://gitlab.com/fdroid/fdroidserver/merge_requests/636)) + ### 1.1.1 (2019-02-03) * support APK Signature v2 and v3 diff --git a/setup.py b/setup.py index 6a4aac60..c32f4449 100755 --- a/setup.py +++ b/setup.py @@ -50,7 +50,7 @@ def get_data_files(): setup(name='fdroidserver', - version='1.1.1', + version='1.1.2', description='F-Droid Server Tools', long_description='README.md', long_description_content_type='text/markdown', From 01fb62fff4c171785f63ede2d1d929a6a790a352 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 11 Apr 2019 13:30:23 +0200 Subject: [PATCH 04/36] publish: fix stupid error in repro-signing and add integration test stoopid mistake in ea84014f9b10114a0022961d86c8e43512b3ba48 --- fdroidserver/publish.py | 2 +- tests/run-tests | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/fdroidserver/publish.py b/fdroidserver/publish.py index ac9a3f44..1369d177 100644 --- a/fdroidserver/publish.py +++ b/fdroidserver/publish.py @@ -280,7 +280,7 @@ def main(): signaturefile, signedfile, manifest = signingfiles with open(signaturefile, 'rb') as f: - devfp = common.signer_fingerprint_short(common.get_signature(f.read())) + devfp = common.signer_fingerprint_short(common.get_certificate(f.read())) devsigned = '{}_{}_{}.apk'.format(appid, vercode, devfp) devsignedtmp = os.path.join(tmp_dir, devsigned) shutil.copy(apkfile, devsignedtmp) diff --git a/tests/run-tests b/tests/run-tests index 63e3b71b..63cefb94 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -1104,6 +1104,35 @@ if have_git_2_3; then fi +#------------------------------------------------------------------------------# +echo_header 'test extracting and publishing with developer signature' + +REPOROOT=`create_test_dir` +cd $REPOROOT +fdroid_init_with_prebuilt_keystore +echo "accepted_formats = ['txt']" >> config.py +echo 'keydname = "CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US"' >> config.py +test -d metadata || mkdir metadata +cp $WORKSPACE/tests/metadata/com.politedroid.txt metadata/ +test -d repo || mkdir repo +test -d unsigned || mkdir unsigned +cp $WORKSPACE/tests/repo/com.politedroid_6.apk unsigned/ +$fdroid signatures unsigned/com.politedroid_6.apk +test -d metadata/com.politedroid/signatures/6 +test -f metadata/com.politedroid/signatures/6/MANIFEST.MF +test -f metadata/com.politedroid/signatures/6/RELEASE.RSA +test -f metadata/com.politedroid/signatures/6/RELEASE.SF +! test -f repo/com.politedroid_6.apk +$fdroid publish +test -f repo/com.politedroid_6.apk +if which jarsigner; then + jarsigner -verify repo/com.politedroid_6.apk +fi +if which apksigner; then + apksigner verify repo/com.politedroid_6.apk +fi + + #------------------------------------------------------------------------------# # remove this to prevent git conflicts and complaining From 833f23cf8965c9a24794b0d25c592c87643ced10 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 1 May 2019 13:34:02 +0200 Subject: [PATCH 05/36] scanner: allow local Debian Maven repo file:///usr/share/maven-repo It is now possible to build an app using only things in Debian. Since the buildserver will always control the contents of file:///usr/share/maven-repo, it is the most safe repo there is. --- fdroidserver/scanner.py | 1 + 1 file changed, 1 insertion(+) diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index 2d9e2a1d..5f315736 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -109,6 +109,7 @@ def scan_source(build_dir, build=metadata.Build()): 's3.amazonaws.com/repo.commonsware.com', # CommonsWare 'plugins.gradle.org/m2', # Gradle plugin repo 'maven.google.com', # Google Maven Repo, https://developer.android.com/studio/build/dependencies.html#google-maven + 'file:///usr/share/maven-repo', # local repo on Debian installs ] ] From 6e7e9b355c1a291b1535f072b5d807a8c62797fe Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 1 May 2019 13:43:24 +0200 Subject: [PATCH 06/36] deploy: if git mirror > 1GB after deleting history, delete the archive git mirrors are meant to be an easy way to host a repo that is zero maintenance. They are not meant to be the canonical repo with full, preserved archive. This option provides the zero maintenance mode. --- fdroidserver/server.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fdroidserver/server.py b/fdroidserver/server.py index ac9cba03..ce210f84 100644 --- a/fdroidserver/server.py +++ b/fdroidserver/server.py @@ -355,6 +355,10 @@ def update_servergitmirrors(servergitmirrors, repo_section): if os.path.isdir(dotgit) and _get_size(git_mirror_path) > 1000000000: logging.warning('Deleting git-mirror history, repo is too big (1 gig max)') shutil.rmtree(dotgit) + if options.no_keep_git_mirror_archive and _get_size(git_mirror_path) > 1000000000: + logging.warning('Deleting archive, repo is too big (1 gig max)') + archive_path = os.path.join(git_mirror_path, 'fdroid', 'archive') + shutil.rmtree(archive_path, ignore_errors=True) # rsync is very particular about trailing slashes common.local_rsync(options, @@ -626,6 +630,8 @@ def main(): help=_("Specify a local folder to sync the repo to")) parser.add_argument("--no-checksum", action="store_true", default=False, help=_("Don't use rsync checksums")) + parser.add_argument("--no-keep-git-mirror-archive", action="store_true", default=False, + help=_("If a git mirror gets to big, allow the archive to be deleted")) options = parser.parse_args() config = common.read_config(options) From 5a2534b60418ba6d19a09eefdc25ee5a1765f11c Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 1 May 2019 13:49:56 +0200 Subject: [PATCH 07/36] nightly: archive older versions; remove archive if git mirror is full --- fdroidserver/nightly.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fdroidserver/nightly.py b/fdroidserver/nightly.py index 9579ae50..d3a11db1 100644 --- a/fdroidserver/nightly.py +++ b/fdroidserver/nightly.py @@ -102,6 +102,8 @@ def main(): help=_('The file to be included in the repo (path or glob)')) parser.add_argument("--no-checksum", action="store_true", default=False, help=_("Don't use rsync checksums")) + parser.add_argument("--archive-older", default=20, + help=_("Set maximum releases in repo before older ones are archived")) # TODO add --with-btlog options = parser.parse_args() @@ -233,6 +235,7 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base, config += "archive_name = '%s'\n" % (repo_git_base + ' archive') config += "archive_url = '%s'\n" % (repo_base + '/archive') config += "archive_icon = 'icon.png'\n" + config += "archive_older = %i\n" % options.archive_older config += "servergitmirrors = '%s'\n" % servergitmirror config += "keystore = '%s'\n" % KEYSTORE_FILE config += "repo_keyalias = '%s'\n" % KEY_ALIAS @@ -293,7 +296,8 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base, if not options.no_deploy: try: - subprocess.check_call(['fdroid', 'server', 'update', '--verbose'], cwd=repo_basedir) + cmd = ['fdroid', 'server', 'update', '--verbose', '--no-keep-git-mirror-archive'] + subprocess.check_call(cmd, cwd=repo_basedir) except subprocess.CalledProcessError: logging.error(_('cannot publish update, did you set the deploy key?') + '\n' + deploy_key_url) From 74a0abc530ddf732dc4dc34132230aac2dd20a2e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 2 May 2019 08:51:39 +0200 Subject: [PATCH 08/36] update bash completion for new deploy/nightly flags --- completion/bash-completion | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/completion/bash-completion b/completion/bash-completion index 531f9131..d00a767a 100644 --- a/completion/bash-completion +++ b/completion/bash-completion @@ -275,7 +275,7 @@ __complete_mirror() { __complete_nightly() { opts="-v -q" - lopts="--show-secret-var" + lopts="--show-secret-var --archive-older" __complete_options } @@ -288,7 +288,7 @@ __complete_stats() { __complete_deploy() { opts="-i -v -q" lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir - --verbose --quiet --no-checksum" + --verbose --quiet --no-checksum --no-keep-git-mirror-archive" __complete_options } From 2e59220644bc25e8c73543f8ee728f327809294b Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sun, 30 Jun 2019 22:48:52 +0200 Subject: [PATCH 09/36] gitlab-ci: disable bandit fail on standard debug keystore password --- fdroidserver/nightly.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdroidserver/nightly.py b/fdroidserver/nightly.py index d3a11db1..7a90294d 100644 --- a/fdroidserver/nightly.py +++ b/fdroidserver/nightly.py @@ -39,7 +39,7 @@ from . import common # hard coded defaults for Android ~/.android/debug.keystore files # https://developers.google.com/android/guides/client-auth KEYSTORE_FILE = os.path.join(os.getenv('HOME'), '.android', 'debug.keystore') -PASSWORD = 'android' +PASSWORD = 'android' # nosec B105 standard hardcoded password for debug keystores KEY_ALIAS = 'androiddebugkey' DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US' From b484e9ecfd50ccf39822c63cbb25c287ed6d7dbd Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 1 Jul 2019 11:43:18 +0200 Subject: [PATCH 10/36] tests: handle when apksigner considers MD5 signatures valid --- tests/common.TestCase | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/common.TestCase b/tests/common.TestCase index b976376f..0bfb166b 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -340,10 +340,16 @@ class CommonTest(unittest.TestCase): fdroidserver.common.config = config self.assertTrue(fdroidserver.common.verify_apk_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk')) - self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk')) - self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk')) - self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk')) - self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_4.apk')) + if 'apksigner' in fdroidserver.common.config: # apksigner considers MD5 signatures valid + self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk')) + self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk')) + self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk')) + self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_4.apk')) + else: + self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk')) + self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk')) + self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk')) + self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_4.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('org.dyndns.fules.ck_20.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('urzip.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-badcert.apk')) From 9e32e2d770ad6993104ac5da09f06a0d093d8dea Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 1 Jul 2019 22:07:15 +0200 Subject: [PATCH 11/36] tests: common.test_sign_apk requires aapt to run --- tests/common.TestCase | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/common.TestCase b/tests/common.TestCase index 0bfb166b..5defdac5 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -569,6 +569,7 @@ class CommonTest(unittest.TestCase): def test_sign_apk(self): try: + fdroidserver.common.find_sdk_tools_cmd('aapt') fdroidserver.common.find_sdk_tools_cmd('zipalign') except fdroidserver.exception.FDroidException: print('\n\nSKIPPING test_sign_apk, zipalign is not installed!\n') From 4ddd840471814b7afbfca99be775482eb646ca77 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 3 Jul 2019 19:39:52 +0200 Subject: [PATCH 12/36] tests: only run hooks/pre-commit if its present (not in source tarball) --- tests/run-tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run-tests b/tests/run-tests index 63cefb94..353005e1 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -128,7 +128,7 @@ set -x # show each command as it is executed echo_header "run commit hooks" cd $WORKSPACE -./hooks/pre-commit +test -x ./hooks/pre-commit && ./hooks/pre-commit #------------------------------------------------------------------------------# From 5ba741912815b55b8e1a1068facf4d9a89f929fd Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 3 Jul 2019 22:33:01 +0200 Subject: [PATCH 13/36] tests: only run source tarball test if running from git clone --- tests/run-tests | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/tests/run-tests b/tests/run-tests index 353005e1..742a1cfc 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -636,19 +636,21 @@ $fdroid install || true #------------------------------------------------------------------------------# -echo_header "create a source tarball" +# only run this test if running from a git repo, not all files are in the tarball +if [ -e .git/config ]; then + echo_header "create a source tarball" -cd $WORKSPACE -./setup.py compile_catalog sdist - -REPOROOT=`create_test_dir` -cd $REPOROOT -tar xzf `ls -1 $WORKSPACE/dist/fdroidserver-*.tar.gz | sort -n | tail -1` -cd $REPOROOT -./fdroidserver-*/fdroid init -copy_apks_into_repo $REPOROOT -./fdroidserver-*/fdroid update --create-metadata --verbose + cd $WORKSPACE + ./setup.py compile_catalog sdist + REPOROOT=`create_test_dir` + cd $REPOROOT + tar xzf `ls -1 $WORKSPACE/dist/fdroidserver-*.tar.gz | sort -n | tail -1` + cd $REPOROOT + ./fdroidserver-*/fdroid init + copy_apks_into_repo $REPOROOT + ./fdroidserver-*/fdroid update --create-metadata --verbose +fi #------------------------------------------------------------------------------# echo_header "test config checks of local_copy_dir" From e8cd0986e357da37832743a51518157bc051a11d Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 3 Jul 2019 18:54:52 +0200 Subject: [PATCH 14/36] include all relevant files in source tarball (MANIFEST.in) --- MANIFEST.in | 550 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 548 insertions(+), 2 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index ba173c91..8be4dabf 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,9 +4,9 @@ include buildserver/provision-android-sdk include buildserver/provision-apt-get-install include buildserver/provision-apt-proxy include buildserver/provision-gradle -include buildserver/provision-pip include buildserver/setup-env-vars include buildserver/Vagrantfile +include CHANGELOG.md include completion/bash-completion include docker/Dockerfile include docker/drozer.py @@ -41,15 +41,513 @@ include locale/uk/LC_MESSAGES/fdroidserver.mo include locale/zh_Hans/LC_MESSAGES/fdroidserver.mo include locale/zh_Hant/LC_MESSAGES/fdroidserver.mo include makebuildserver -include README.rst +include README.md include tests/androguard_test.py include tests/bad-unicode-*.apk include tests/build.TestCase +include tests/build-tools/17.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/17.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/17.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/17.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/17.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/17.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/17.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/17.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/17.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/17.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/17.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/18.1.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/18.1.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/18.1.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/18.1.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/18.1.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/18.1.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/18.1.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/18.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/18.1.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/18.1.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/18.1.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/19.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/19.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/19.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/19.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/19.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/19.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/19.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/19.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/19.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/19.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/19.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/19.1.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/19.1.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/19.1.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/19.1.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/19.1.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/19.1.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/19.1.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/19.1.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/19.1.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/19.1.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/19.1.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/20.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/20.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/20.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/20.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/20.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/20.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/20.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/20.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/20.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/20.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/20.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/21.1.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/21.1.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/21.1.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/21.1.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/21.1.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/21.1.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/21.1.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/21.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/21.1.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/21.1.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/21.1.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/21.1.2/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/21.1.2/aapt-output-com.politedroid_3.txt +include tests/build-tools/21.1.2/aapt-output-com.politedroid_4.txt +include tests/build-tools/21.1.2/aapt-output-com.politedroid_5.txt +include tests/build-tools/21.1.2/aapt-output-com.politedroid_6.txt +include tests/build-tools/21.1.2/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/21.1.2/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/21.1.2/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/21.1.2/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/21.1.2/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/21.1.2/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/22.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/22.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/22.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/22.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/22.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/22.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/22.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/22.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/22.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/22.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/22.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/22.0.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/22.0.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/22.0.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/22.0.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/22.0.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/22.0.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/22.0.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/22.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/22.0.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/22.0.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/22.0.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/23.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/23.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/23.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/23.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/23.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/23.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/23.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/23.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/23.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/23.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/23.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/23.0.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/23.0.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/23.0.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/23.0.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/23.0.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/23.0.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/23.0.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/23.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/23.0.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/23.0.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/23.0.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/23.0.2/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/23.0.2/aapt-output-com.politedroid_3.txt +include tests/build-tools/23.0.2/aapt-output-com.politedroid_4.txt +include tests/build-tools/23.0.2/aapt-output-com.politedroid_5.txt +include tests/build-tools/23.0.2/aapt-output-com.politedroid_6.txt +include tests/build-tools/23.0.2/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/23.0.2/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/23.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/23.0.2/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/23.0.2/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/23.0.2/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/23.0.3/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/23.0.3/aapt-output-com.politedroid_3.txt +include tests/build-tools/23.0.3/aapt-output-com.politedroid_4.txt +include tests/build-tools/23.0.3/aapt-output-com.politedroid_5.txt +include tests/build-tools/23.0.3/aapt-output-com.politedroid_6.txt +include tests/build-tools/23.0.3/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/23.0.3/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/23.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/23.0.3/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/23.0.3/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/23.0.3/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/24.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/24.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/24.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/24.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/24.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/24.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/24.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/24.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/24.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/24.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/24.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/24.0.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/24.0.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/24.0.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/24.0.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/24.0.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/24.0.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/24.0.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/24.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/24.0.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/24.0.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/24.0.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/24.0.2/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/24.0.2/aapt-output-com.politedroid_3.txt +include tests/build-tools/24.0.2/aapt-output-com.politedroid_4.txt +include tests/build-tools/24.0.2/aapt-output-com.politedroid_5.txt +include tests/build-tools/24.0.2/aapt-output-com.politedroid_6.txt +include tests/build-tools/24.0.2/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/24.0.2/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/24.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/24.0.2/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/24.0.2/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/24.0.2/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/24.0.3/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/24.0.3/aapt-output-com.politedroid_3.txt +include tests/build-tools/24.0.3/aapt-output-com.politedroid_4.txt +include tests/build-tools/24.0.3/aapt-output-com.politedroid_5.txt +include tests/build-tools/24.0.3/aapt-output-com.politedroid_6.txt +include tests/build-tools/24.0.3/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/24.0.3/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/24.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/24.0.3/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/24.0.3/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/24.0.3/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/25.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/25.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/25.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/25.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/25.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/25.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/25.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/25.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/25.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/25.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/25.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/25.0.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/25.0.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/25.0.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/25.0.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/25.0.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/25.0.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/25.0.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/25.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/25.0.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/25.0.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/25.0.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/25.0.2/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/25.0.2/aapt-output-com.politedroid_3.txt +include tests/build-tools/25.0.2/aapt-output-com.politedroid_4.txt +include tests/build-tools/25.0.2/aapt-output-com.politedroid_5.txt +include tests/build-tools/25.0.2/aapt-output-com.politedroid_6.txt +include tests/build-tools/25.0.2/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/25.0.2/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/25.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/25.0.2/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/25.0.2/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/25.0.2/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/25.0.3/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/25.0.3/aapt-output-com.politedroid_3.txt +include tests/build-tools/25.0.3/aapt-output-com.politedroid_4.txt +include tests/build-tools/25.0.3/aapt-output-com.politedroid_5.txt +include tests/build-tools/25.0.3/aapt-output-com.politedroid_6.txt +include tests/build-tools/25.0.3/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/25.0.3/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/25.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/25.0.3/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/25.0.3/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/25.0.3/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/26.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/26.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/26.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/26.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/26.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/26.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/26.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/26.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/26.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/26.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/26.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/26.0.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/26.0.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/26.0.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/26.0.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/26.0.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/26.0.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/26.0.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/26.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/26.0.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/26.0.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/26.0.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/26.0.2/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/26.0.2/aapt-output-com.politedroid_3.txt +include tests/build-tools/26.0.2/aapt-output-com.politedroid_4.txt +include tests/build-tools/26.0.2/aapt-output-com.politedroid_5.txt +include tests/build-tools/26.0.2/aapt-output-com.politedroid_6.txt +include tests/build-tools/26.0.2/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/26.0.2/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/26.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/26.0.2/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/26.0.2/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/26.0.2/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/26.0.3/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/26.0.3/aapt-output-com.politedroid_3.txt +include tests/build-tools/26.0.3/aapt-output-com.politedroid_4.txt +include tests/build-tools/26.0.3/aapt-output-com.politedroid_5.txt +include tests/build-tools/26.0.3/aapt-output-com.politedroid_6.txt +include tests/build-tools/26.0.3/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/26.0.3/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/26.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/26.0.3/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/26.0.3/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/26.0.3/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/27.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/27.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/27.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/27.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/27.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/27.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/27.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/27.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/27.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/27.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/27.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/27.0.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/27.0.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/27.0.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/27.0.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/27.0.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/27.0.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/27.0.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/27.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/27.0.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/27.0.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/27.0.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/27.0.2/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/27.0.2/aapt-output-com.politedroid_3.txt +include tests/build-tools/27.0.2/aapt-output-com.politedroid_4.txt +include tests/build-tools/27.0.2/aapt-output-com.politedroid_5.txt +include tests/build-tools/27.0.2/aapt-output-com.politedroid_6.txt +include tests/build-tools/27.0.2/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/27.0.2/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/27.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/27.0.2/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/27.0.2/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/27.0.2/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/27.0.3/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/27.0.3/aapt-output-com.politedroid_3.txt +include tests/build-tools/27.0.3/aapt-output-com.politedroid_4.txt +include tests/build-tools/27.0.3/aapt-output-com.politedroid_5.txt +include tests/build-tools/27.0.3/aapt-output-com.politedroid_6.txt +include tests/build-tools/27.0.3/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/27.0.3/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/27.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/27.0.3/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/27.0.3/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/27.0.3/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/28.0.0/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/28.0.0/aapt-output-com.politedroid_3.txt +include tests/build-tools/28.0.0/aapt-output-com.politedroid_4.txt +include tests/build-tools/28.0.0/aapt-output-com.politedroid_5.txt +include tests/build-tools/28.0.0/aapt-output-com.politedroid_6.txt +include tests/build-tools/28.0.0/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/28.0.0/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/28.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/28.0.0/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/28.0.0/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/28.0.0/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/28.0.1/aapt-output-com.moez.QKSMS_182.txt +include tests/build-tools/28.0.1/aapt-output-com.politedroid_3.txt +include tests/build-tools/28.0.1/aapt-output-com.politedroid_4.txt +include tests/build-tools/28.0.1/aapt-output-com.politedroid_5.txt +include tests/build-tools/28.0.1/aapt-output-com.politedroid_6.txt +include tests/build-tools/28.0.1/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/28.0.1/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/28.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/28.0.1/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/28.0.1/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/28.0.1/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/28.0.2/aapt-output-com.politedroid_3.txt +include tests/build-tools/28.0.2/aapt-output-com.politedroid_4.txt +include tests/build-tools/28.0.2/aapt-output-com.politedroid_5.txt +include tests/build-tools/28.0.2/aapt-output-com.politedroid_6.txt +include tests/build-tools/28.0.2/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/28.0.2/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/28.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/28.0.2/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/28.0.2/aapt-output-org.droidtr.keyboard_34.txt +include tests/build-tools/28.0.2/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/28.0.3/aapt-output-com.example.test.helloworld_1.txt +include tests/build-tools/28.0.3/aapt-output-com.politedroid_3.txt +include tests/build-tools/28.0.3/aapt-output-com.politedroid_4.txt +include tests/build-tools/28.0.3/aapt-output-com.politedroid_5.txt +include tests/build-tools/28.0.3/aapt-output-com.politedroid_6.txt +include tests/build-tools/28.0.3/aapt-output-duplicate.permisssions_9999999.txt +include tests/build-tools/28.0.3/aapt-output-info.guardianproject.urzip_100.txt +include tests/build-tools/28.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt +include tests/build-tools/28.0.3/aapt-output-no.min.target.sdk_987.txt +include tests/build-tools/28.0.3/aapt-output-obb.main.oldversion_1444412523.txt +include tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt +include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101613.txt +include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101615.txt +include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/28.0.3/aapt-output-souch.smsbypass_9.txt +include tests/build-tools/generate.sh +include tests/check-fdroid-apk include tests/common.TestCase include tests/complete-ci-tests include tests/config.py include tests/description-parsing.py +include tests/dummy-keystore.jks include tests/dump_internal_metadata_format.py +include tests/exception.TestCase include tests/extra/convert_metadata_to_yaml_then_txt.sh include tests/extra/manual-vmtools-test.py include tests/getsig/getsig.java @@ -63,6 +561,8 @@ include tests/import_proxy.py include tests/import.TestCase include tests/index.TestCase include tests/install.TestCase +include tests/IsMD5Disabled.java +include tests/janus.apk include tests/keystore.jks include tests/lint.TestCase include tests/metadata/apk/info.guardianproject.urzip.yaml @@ -73,6 +573,7 @@ include tests/metadata/dump/com.politedroid.yaml include tests/metadata/dump/org.adaway.yaml include tests/metadata/dump/org.smssecure.smssecure.yaml include tests/metadata/dump/org.videolan.vlc.yaml +include tests/metadata/duplicate.permisssions.yml include tests/metadata/fake.ota.update.txt include tests/metadata/info.guardianproject.checkey/en-US/description.txt include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png @@ -87,18 +588,27 @@ include tests/metadata/info.guardianproject.urzip/en-US/short_description.txt include tests/metadata/info.guardianproject.urzip/en-US/title.txt include tests/metadata/info.guardianproject.urzip/en-US/video.txt include tests/metadata/info.guardianproject.urzip.yml +include tests/metadata/info.zwanenburg.caffeinetile.yml +include tests/metadata/no.min.target.sdk.yml include tests/metadata/obb.main.oldversion.txt include tests/metadata/obb.mainpatch.current.txt include tests/metadata/obb.main.twoversions.txt include tests/metadata/org.adaway.json include tests/metadata/org.fdroid.ci.test.app.txt include tests/metadata/org.fdroid.fdroid.txt +include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.RSA +include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.SF +include tests/metadata/org.smssecure.smssecure/signatures/134/MANIFEST.MF +include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.RSA +include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.SF +include tests/metadata/org.smssecure.smssecure/signatures/135/MANIFEST.MF include tests/metadata/org.smssecure.smssecure.txt include tests/metadata/org.videolan.vlc.yml include tests/metadata/raw.template.txt include tests/metadata-rewrite-yml/app.with.special.build.params.yml include tests/metadata-rewrite-yml/fake.ota.update.yml include tests/metadata-rewrite-yml/org.fdroid.fdroid.yml +include tests/metadata/souch.smsbypass.txt include tests/metadata.TestCase include tests/openssl-version-check-test.py include tests/org.bitbucket.tickytacky.mirrormirror_1.apk @@ -106,17 +616,23 @@ include tests/org.bitbucket.tickytacky.mirrormirror_2.apk include tests/org.bitbucket.tickytacky.mirrormirror_3.apk include tests/org.bitbucket.tickytacky.mirrormirror_4.apk include tests/org.dyndns.fules.ck_20.apk +include tests/publish.TestCase include tests/repo/categories.txt +include tests/repo/com.example.test.helloworld_1.apk include tests/repo/com.politedroid_3.apk include tests/repo/com.politedroid_4.apk include tests/repo/com.politedroid_5.apk include tests/repo/com.politedroid_6.apk +include tests/repo/duplicate.permisssions_9999999.apk include tests/repo/fake.ota.update_1234.zip +include tests/repo/index-v1.json include tests/repo/index.xml +include tests/repo/info.zwanenburg.caffeinetile_4.apk include tests/repo/main.1101613.obb.main.twoversions.obb include tests/repo/main.1101615.obb.main.twoversions.obb include tests/repo/main.1434483388.obb.main.oldversion.obb include tests/repo/main.1619.obb.mainpatch.current.obb +include tests/repo/no.min.target.sdk_987.apk include tests/repo/obb.main.oldversion_1444412523.apk include tests/repo/obb.mainpatch.current_1619_another-release-key.apk include tests/repo/obb.mainpatch.current_1619.apk @@ -154,19 +670,45 @@ include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot5.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot6.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot8.png include tests/repo/patch.1619.obb.mainpatch.current.obb +include tests/repo/souch.smsbypass_9.apk include tests/repo/urzip-*.apk +include tests/repo/v1.v2.sig_1020.apk include tests/run-tests +include tests/scanner.TestCase +include tests/server.TestCase include tests/signatures.TestCase include tests/signindex/guardianproject.jar include tests/signindex/guardianproject-v1.jar include tests/signindex/testy.jar include tests/signindex/unsigned.jar +include tests/source-files/at.bitfire.davdroid/build.gradle +include tests/source-files/com.kunzisoft.testcase/build.gradle +include tests/source-files/com.nextcloud.client/build.gradle +include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/full_description.txt +include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/short_description.txt +include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/title.txt +include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/full_description.txt +include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/short_description.txt +include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/title.txt +include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/full_description.txt +include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/short_description.txt +include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/title.txt +include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/full_description.txt +include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/short_description.txt +include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/title.txt +include tests/source-files/eu.siacs.conversations/build.gradle +include tests/source-files/eu.siacs.conversations/metadata/en-US/name.txt include tests/source-files/fdroid/fdroidclient/AndroidManifest.xml include tests/source-files/fdroid/fdroidclient/build.gradle +include tests/source-files/firebase-suspect/app/build.gradle +include tests/source-files/firebase-suspect/build.gradle +include tests/source-files/firebase-whitelisted/app/build.gradle +include tests/source-files/firebase-whitelisted/build.gradle include tests/source-files/open-keychain/open-keychain/build.gradle include tests/source-files/open-keychain/open-keychain/OpenKeychain/build.gradle include tests/source-files/osmandapp/osmand/build.gradle include tests/source-files/Zillode/syncthing-silk/build.gradle +include tests/SpeedoMeterApp.main_1.apk include tests/stats/known_apks.txt include tests/testcommon.py include tests/update.TestCase @@ -175,3 +717,7 @@ include tests/urzip-badcert.apk include tests/urzip-badsig.apk include tests/urzip-release.apk include tests/urzip-release-unsigned.apk +include tests/v2.only.sig_2.apk +include tests/valid-package-names/random-package-names +include tests/valid-package-names/RandomPackageNames.java +include tests/valid-package-names/test.py From fd1e22e79140be3b614932b82398b9e034d0ef76 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 3 Jul 2019 16:20:15 +0200 Subject: [PATCH 15/36] ./setup.py release: make upload step manual so CI can run first There is lots of CI tests for the Debian package, so it is good to first run those Debian CI tests before uploading an fdroidserver release. --- setup.cfg | 4 ++-- setup.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.cfg b/setup.cfg index ed171a15..d4887223 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,8 +1,8 @@ # uploading here requires Python 3.5.3+ or setuptools 27+, -# use instead: twine upload dist/fdroidserver*.tar.gz* +# use instead: twine upload --sign dist/fdroidserver*.tar.gz [aliases] -release = versioncheck compile_catalog register sdist upload --sign +release = versioncheck compile_catalog sdist # All this below is for Babel config. Ideally we would only use # Babel, but it is still missing some key features that gettext gives diff --git a/setup.py b/setup.py index c32f4449..43c9be25 100755 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ class VersionCheckCommand(Command): print('ERROR: Release version mismatch! setup.py (%s) does not match git (%s)' % (version, version_git)) sys.exit(1) - print('Upload using: twine upload dist/fdroidserver*.tar.gz*') + print('Upload using: twine upload --sign dist/fdroidserver-%s.tar.gz' % version) def get_data_files(): From fd870c59bd7514bac1a3641d2f2e818467109730 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 3 Jul 2019 19:02:12 +0200 Subject: [PATCH 16/36] bump to version v1.1.3 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 43c9be25..14a0607b 100755 --- a/setup.py +++ b/setup.py @@ -50,7 +50,7 @@ def get_data_files(): setup(name='fdroidserver', - version='1.1.2', + version='1.1.3', description='F-Droid Server Tools', long_description='README.md', long_description_content_type='text/markdown', From 8fe1583f83ecbeadc731286cb5251b8e3aac70d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 7 May 2019 22:43:05 +0200 Subject: [PATCH 17/36] improve bitcoin validation regex + testcases --- fdroidserver/metadata.py | 2 +- tests/metadata.TestCase | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index bbf8d70b..d8ed98b9 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -453,7 +453,7 @@ valuetypes = { ["AuthorEmail"]), FieldValidator("Bitcoin address", - r'^[a-zA-Z0-9]{27,34}$', + r'^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$', ["Bitcoin"]), FieldValidator("Litecoin address", diff --git a/tests/metadata.TestCase b/tests/metadata.TestCase index 486dca09..dc786095 100755 --- a/tests/metadata.TestCase +++ b/tests/metadata.TestCase @@ -39,6 +39,35 @@ class MetadataTest(unittest.TestCase): os.makedirs(self.tmpdir) os.chdir(self.basedir) + def test_FieldValidator(self): + validator = None + for vali in fdroidserver.metadata.valuetypes: + if vali.name == 'Bitcoin address': + validator = vali + break + self.assertIsNotNone(validator, "could not find 'Bitcoin address' validator") + + fdroidserver.metadata.warnings_action = 'error' + + # some valid addresses (P2PKH, P2SH, Bech32) + self.assertIsNone(validator.check('1BrrrrErsrWetrTrnrrrrm4GFg7xJaNVN2', 'fake.app.id')) + self.assertIsNone(validator.check('3JrrrrWrEZr3rNrrvrecrnyirrnqRhWNLy', 'fake.app.id')) + self.assertIsNone(validator.check('bc1qar0srrr7xrkvr5lr43lrdnwrre5rgtrzrf5rrq', 'fake.app.id')) + + # some invalid addresses (various special use/testnet addresses) + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + '21BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + '5Hrgr3ur5rGLrfKrrrrrrHSrqJrroGrrzrQrrrrrrLNrsrDrrrA', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + '92rr46rUrgTrrromrVrirW6r1rrrdrerrdbJrrrhrCsYrrrrrrc', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + 'K1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + 'L1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + 'tb1qw5r8drrejxrrg4y5rrrrrraryrrrrwrkxrjrsx', 'fake.app.id') + def test_read_metadata(self): def _build_yaml_representer(dumper, data): @@ -54,6 +83,7 @@ class MetadataTest(unittest.TestCase): config['ndk_paths'] = dict() config['accepted_formats'] = ['json', 'txt', 'yml'] fdroidserver.common.config = config + fdroidserver.metadata.warnings_action = None apps = fdroidserver.metadata.read_metadata(xref=True) for appid in ('org.smssecure.smssecure', 'org.adaway', @@ -73,6 +103,7 @@ class MetadataTest(unittest.TestCase): def test_rewrite_yaml_fakeotaupdate(self): testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir) fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} + fdroidserver.metadata.warnings_action = None # rewrite metadata allapps = fdroidserver.metadata.read_metadata(xref=True) From 6b013d01aca1a3c343887bd4ce05eb1a9f7d2e22 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 4 Jul 2019 00:13:41 +0200 Subject: [PATCH 18/36] tests: skip disabled_algorithms test when apksigner is present apksigner doesn't treat MD5 signatures as deprecated, so that portion of the tests would always fail. --- tests/update.TestCase | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/update.TestCase b/tests/update.TestCase index bce7e41c..f9a46d88 100755 --- a/tests/update.TestCase +++ b/tests/update.TestCase @@ -625,6 +625,10 @@ class UpdateTest(unittest.TestCase): self.assertFalse(os.path.exists(os.path.join('archive', apkName))) self.assertTrue(os.path.exists(os.path.join('repo', apkName))) + if os.path.exists('/usr/bin/apksigner') or 'apksigner' in config: + print('SKIPPING: apksigner installed and it allows MD5 signatures') + return + javac = config['jarsigner'].replace('jarsigner', 'javac') v = subprocess.check_output([javac, '-version'], stderr=subprocess.STDOUT)[6:-1].decode('utf-8') if LooseVersion(v) < LooseVersion('1.8.0_132'): From dff47beb019c095632002b940097aa42cd584ddf Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 10 Jul 2019 13:22:55 +0200 Subject: [PATCH 19/36] tests: conditionally disable tests that can't work with apksigner apksigner treats MD5 signatures as valid, fdroid does not. --- tests/run-tests | 187 +++++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 90 deletions(-) diff --git a/tests/run-tests b/tests/run-tests index 742a1cfc..c6248954 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -305,80 +305,85 @@ cp $WORKSPACE/tests/urzip.apk \ $sed -i.tmp 's,archive_older = [0-9],archive_older = 3,' config.py $fdroid update --pretty --nosign -echo "This will fail when jarsigner allows MD5 for APK signatures" -test `grep '' archive/index.xml | wc -l` -eq 5 -test `grep '' repo/index.xml | wc -l` -eq 7 - +if which apksigner; then + test `grep '' archive/index.xml | wc -l` -eq 2 + test `grep '' repo/index.xml | wc -l` -eq 10 +else + echo "This will fail when jarsigner allows MD5 for APK signatures" + test `grep '' archive/index.xml | wc -l` -eq 5 + test `grep '' repo/index.xml | wc -l` -eq 7 +fi #------------------------------------------------------------------------------# -echo_header 'test per-app "Archive Policy"' +if ! which apksigner; then + echo_header 'test per-app "Archive Policy"' -REPOROOT=`create_test_dir` -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -echo "accepted_formats = ['txt']" >> config.py -test -d metadata || mkdir metadata -cp $WORKSPACE/tests/metadata/com.politedroid.txt metadata/ -test -d repo || mkdir repo -cp $WORKSPACE/tests/repo/com.politedroid_[0-9].apk repo/ -$sed -i.tmp 's,archive_older = [0-9],archive_older = 3,' config.py + REPOROOT=`create_test_dir` + cd $REPOROOT + fdroid_init_with_prebuilt_keystore + echo "accepted_formats = ['txt']" >> config.py + test -d metadata || mkdir metadata + cp $WORKSPACE/tests/metadata/com.politedroid.txt metadata/ + test -d repo || mkdir repo + cp $WORKSPACE/tests/repo/com.politedroid_[0-9].apk repo/ + $sed -i.tmp 's,archive_older = [0-9],archive_older = 3,' config.py -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 0 -test `grep '' repo/index.xml | wc -l` -eq 4 -grep -F com.politedroid_3.apk repo/index.xml -grep -F com.politedroid_4.apk repo/index.xml -grep -F com.politedroid_5.apk repo/index.xml -grep -F com.politedroid_6.apk repo/index.xml -test -e repo/com.politedroid_3.apk -test -e repo/com.politedroid_4.apk -test -e repo/com.politedroid_5.apk -test -e repo/com.politedroid_6.apk + $fdroid update --pretty --nosign + test `grep '' archive/index.xml | wc -l` -eq 0 + test `grep '' repo/index.xml | wc -l` -eq 4 + grep -F com.politedroid_3.apk repo/index.xml + grep -F com.politedroid_4.apk repo/index.xml + grep -F com.politedroid_5.apk repo/index.xml + grep -F com.politedroid_6.apk repo/index.xml + test -e repo/com.politedroid_3.apk + test -e repo/com.politedroid_4.apk + test -e repo/com.politedroid_5.apk + test -e repo/com.politedroid_6.apk -echo "enable one app in the repo" -$sed -i.tmp 's,^Archive Policy:4,Archive Policy:1,' metadata/com.politedroid.txt -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 3 -test `grep '' repo/index.xml | wc -l` -eq 1 -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_4.apk archive/index.xml -grep -F com.politedroid_5.apk archive/index.xml -grep -F com.politedroid_6.apk repo/index.xml -test -e archive/com.politedroid_3.apk -test -e archive/com.politedroid_4.apk -test -e archive/com.politedroid_5.apk -test -e repo/com.politedroid_6.apk + echo "enable one app in the repo" + $sed -i.tmp 's,^Archive Policy:4,Archive Policy:1,' metadata/com.politedroid.txt + $fdroid update --pretty --nosign + test `grep '' archive/index.xml | wc -l` -eq 3 + test `grep '' repo/index.xml | wc -l` -eq 1 + grep -F com.politedroid_3.apk archive/index.xml + grep -F com.politedroid_4.apk archive/index.xml + grep -F com.politedroid_5.apk archive/index.xml + grep -F com.politedroid_6.apk repo/index.xml + test -e archive/com.politedroid_3.apk + test -e archive/com.politedroid_4.apk + test -e archive/com.politedroid_5.apk + test -e repo/com.politedroid_6.apk -echo "remove all apps from the repo" -$sed -i.tmp 's,^Archive Policy:1,Archive Policy:0,' metadata/com.politedroid.txt -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 4 -test `grep '' repo/index.xml | wc -l` -eq 0 -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_4.apk archive/index.xml -grep -F com.politedroid_5.apk archive/index.xml -grep -F com.politedroid_6.apk archive/index.xml -test -e archive/com.politedroid_3.apk -test -e archive/com.politedroid_4.apk -test -e archive/com.politedroid_5.apk -test -e archive/com.politedroid_6.apk -! test -e repo/com.politedroid_6.apk - -echo "move back one from archive to the repo" -$sed -i.tmp 's,^Archive Policy:0,Archive Policy:1,' metadata/com.politedroid.txt -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 3 -test `grep '' repo/index.xml | wc -l` -eq 1 -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_4.apk archive/index.xml -grep -F com.politedroid_5.apk archive/index.xml -grep -F com.politedroid_6.apk repo/index.xml -test -e archive/com.politedroid_3.apk -test -e archive/com.politedroid_4.apk -test -e archive/com.politedroid_5.apk -! test -e archive/com.politedroid_6.apk -test -e repo/com.politedroid_6.apk + echo "remove all apps from the repo" + $sed -i.tmp 's,^Archive Policy:1,Archive Policy:0,' metadata/com.politedroid.txt + $fdroid update --pretty --nosign + test `grep '' archive/index.xml | wc -l` -eq 4 + test `grep '' repo/index.xml | wc -l` -eq 0 + grep -F com.politedroid_3.apk archive/index.xml + grep -F com.politedroid_4.apk archive/index.xml + grep -F com.politedroid_5.apk archive/index.xml + grep -F com.politedroid_6.apk archive/index.xml + test -e archive/com.politedroid_3.apk + test -e archive/com.politedroid_4.apk + test -e archive/com.politedroid_5.apk + test -e archive/com.politedroid_6.apk + ! test -e repo/com.politedroid_6.apk + echo "move back one from archive to the repo" + $sed -i.tmp 's,^Archive Policy:0,Archive Policy:1,' metadata/com.politedroid.txt + $fdroid update --pretty --nosign + test `grep '' archive/index.xml | wc -l` -eq 3 + test `grep '' repo/index.xml | wc -l` -eq 1 + grep -F com.politedroid_3.apk archive/index.xml + grep -F com.politedroid_4.apk archive/index.xml + grep -F com.politedroid_5.apk archive/index.xml + grep -F com.politedroid_6.apk repo/index.xml + test -e archive/com.politedroid_3.apk + test -e archive/com.politedroid_4.apk + test -e archive/com.politedroid_5.apk + ! test -e archive/com.politedroid_6.apk + test -e repo/com.politedroid_6.apk +fi #------------------------------------------------------------------------------# @@ -505,29 +510,31 @@ test -e repo/org.bitbucket.tickytacky.mirrormirror_3.apk test -e repo/org.bitbucket.tickytacky.mirrormirror_4.apk test -e archive/urzip-badsig.apk -$sed -i.tmp '/allow_disabled_algorithms/d' config.py -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 5 -test `grep '' repo/index.xml | wc -l` -eq 3 -grep -F org.bitbucket.tickytacky.mirrormirror_1.apk archive/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_2.apk archive/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_3.apk archive/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_4.apk archive/index.xml -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_4.apk repo/index.xml -grep -F com.politedroid_5.apk repo/index.xml -grep -F com.politedroid_6.apk repo/index.xml -! grep -F urzip-badsig.apk repo/index.xml -! grep -F urzip-badsig.apk archive/index.xml -test -e archive/org.bitbucket.tickytacky.mirrormirror_1.apk -test -e archive/org.bitbucket.tickytacky.mirrormirror_2.apk -test -e archive/org.bitbucket.tickytacky.mirrormirror_3.apk -test -e archive/org.bitbucket.tickytacky.mirrormirror_4.apk -test -e archive/com.politedroid_3.apk -test -e archive/urzip-badsig.apk -test -e repo/com.politedroid_4.apk -test -e repo/com.politedroid_5.apk -test -e repo/com.politedroid_6.apk +if ! which apksigner; then + $sed -i.tmp '/allow_disabled_algorithms/d' config.py + $fdroid update --pretty --nosign + test `grep '' archive/index.xml | wc -l` -eq 5 + test `grep '' repo/index.xml | wc -l` -eq 3 + grep -F org.bitbucket.tickytacky.mirrormirror_1.apk archive/index.xml + grep -F org.bitbucket.tickytacky.mirrormirror_2.apk archive/index.xml + grep -F org.bitbucket.tickytacky.mirrormirror_3.apk archive/index.xml + grep -F org.bitbucket.tickytacky.mirrormirror_4.apk archive/index.xml + grep -F com.politedroid_3.apk archive/index.xml + grep -F com.politedroid_4.apk repo/index.xml + grep -F com.politedroid_5.apk repo/index.xml + grep -F com.politedroid_6.apk repo/index.xml + ! grep -F urzip-badsig.apk repo/index.xml + ! grep -F urzip-badsig.apk archive/index.xml + test -e archive/org.bitbucket.tickytacky.mirrormirror_1.apk + test -e archive/org.bitbucket.tickytacky.mirrormirror_2.apk + test -e archive/org.bitbucket.tickytacky.mirrormirror_3.apk + test -e archive/org.bitbucket.tickytacky.mirrormirror_4.apk + test -e archive/com.politedroid_3.apk + test -e archive/urzip-badsig.apk + test -e repo/com.politedroid_4.apk + test -e repo/com.politedroid_5.apk + test -e repo/com.politedroid_6.apk +fi #------------------------------------------------------------------------------# From bb36bf6c6708619ed43bc06b04de987dfecfd727 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 15 Aug 2019 10:45:23 +0200 Subject: [PATCH 20/36] update CHANGELOG for v1.1.4 --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e78ed677..27fec605 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,16 @@ +### 1.1.4 (2019-08-15) + +* include bitcoin validation regex required by fdroiddata + +* merged Debian patches to fix test suite there + +### 1.1.3 (2019-07-03) + +* fixed test suite when run from source tarball + +* fixed test runs in Debian + ### 1.1.2 (2019-03-29) * fix bug while downloading repo index ([!636](https://gitlab.com/fdroid/fdroidserver/merge_requests/636)) From c02a98f364a600d6d42a83d61f7a0e7b708d1e1b Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 15 Aug 2019 10:45:50 +0200 Subject: [PATCH 21/36] bump to version v1.1.4 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 14a0607b..61b4e6e1 100755 --- a/setup.py +++ b/setup.py @@ -50,7 +50,7 @@ def get_data_files(): setup(name='fdroidserver', - version='1.1.3', + version='1.1.4', description='F-Droid Server Tools', long_description='README.md', long_description_content_type='text/markdown', From 39e4e05c9f9a8b809c4efa319be4ef4996e80de3 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 15 Aug 2019 12:19:29 +0200 Subject: [PATCH 22/36] setup.py: use officially documented way of including README https://packaging.python.org/tutorials/packaging-projects/ --- setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 61b4e6e1..5a4a9105 100755 --- a/setup.py +++ b/setup.py @@ -48,11 +48,13 @@ def get_data_files(): data_files.append((d, [f, ])) return data_files +with open("README.md", "r") as fh: + long_description = fh.read() setup(name='fdroidserver', version='1.1.4', description='F-Droid Server Tools', - long_description='README.md', + long_description=long_description, long_description_content_type='text/markdown', author='The F-Droid Project', author_email='team@f-droid.org', From 004e2c8f26bb0730830010040f08043ff2eb8aee Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 21 Aug 2019 14:40:41 +0200 Subject: [PATCH 23/36] setup.py: ruamel.yaml >= 0.15 required for yml rewrites --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 5a4a9105..68d897f9 100755 --- a/setup.py +++ b/setup.py @@ -82,7 +82,7 @@ setup(name='fdroidserver', 'python-vagrant', 'PyYAML', 'qrcode', - 'ruamel.yaml >= 0.13', + 'ruamel.yaml >= 0.15', 'requests >= 2.5.2, != 2.11.0, != 2.12.2, != 2.18.0', 'docker-py >= 1.9, < 2.0', ], From aa18746cc4071ddba94432a1b64ec7a129026c9e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 26 Aug 2019 14:58:38 +0200 Subject: [PATCH 24/36] bump to version v1.1.5 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 68d897f9..9f81aaa9 100755 --- a/setup.py +++ b/setup.py @@ -52,7 +52,7 @@ with open("README.md", "r") as fh: long_description = fh.read() setup(name='fdroidserver', - version='1.1.4', + version='1.1.5', description='F-Droid Server Tools', long_description=long_description, long_description_content_type='text/markdown', From f92eaf644fd41fb33156eb795d3db0e26e70be5f Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 3 Dec 2019 00:09:51 +0100 Subject: [PATCH 25/36] nightly: set descriptions for repo and archive --- fdroidserver/nightly.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fdroidserver/nightly.py b/fdroidserver/nightly.py index 7a90294d..1b7fb76d 100644 --- a/fdroidserver/nightly.py +++ b/fdroidserver/nightly.py @@ -232,9 +232,11 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base, config += "repo_name = '%s'\n" % repo_git_base config += "repo_url = '%s'\n" % repo_url config += "repo_icon = 'icon.png'\n" + config += "repo_description = 'Nightly builds from %s'\n" % git_user_email config += "archive_name = '%s'\n" % (repo_git_base + ' archive') config += "archive_url = '%s'\n" % (repo_base + '/archive') config += "archive_icon = 'icon.png'\n" + config += "archive_description = 'Old nightly builds that have been archived.'\n" config += "archive_older = %i\n" % options.archive_older config += "servergitmirrors = '%s'\n" % servergitmirror config += "keystore = '%s'\n" % KEYSTORE_FILE From dcb72a77ce2bba78a6a0a97792bb6d411c5d81ad Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 3 Dec 2019 00:12:26 +0100 Subject: [PATCH 26/36] bump to version v1.1.6 --- setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9f81aaa9..efc46573 100755 --- a/setup.py +++ b/setup.py @@ -48,11 +48,13 @@ def get_data_files(): data_files.append((d, [f, ])) return data_files + with open("README.md", "r") as fh: long_description = fh.read() + setup(name='fdroidserver', - version='1.1.5', + version='1.1.6', description='F-Droid Server Tools', long_description=long_description, long_description_content_type='text/markdown', From 3282687f9e2f3d775232753da84faf3ee5eb751f Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 11 May 2020 10:23:26 -0300 Subject: [PATCH 27/36] Fix nightly --archive-older command line option --- fdroidserver/nightly.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdroidserver/nightly.py b/fdroidserver/nightly.py index 1b7fb76d..b67a4097 100644 --- a/fdroidserver/nightly.py +++ b/fdroidserver/nightly.py @@ -102,7 +102,7 @@ def main(): help=_('The file to be included in the repo (path or glob)')) parser.add_argument("--no-checksum", action="store_true", default=False, help=_("Don't use rsync checksums")) - parser.add_argument("--archive-older", default=20, + parser.add_argument("--archive-older", type=int, default=20, help=_("Set maximum releases in repo before older ones are archived")) # TODO add --with-btlog options = parser.parse_args() From 7b6f0892203e92e7c97f3ba0cedfcaa5cccf0547 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 15 Apr 2020 21:43:41 +0200 Subject: [PATCH 28/36] index: xml.dom.minidom no longer sorts attribs It seems now that xml.dom.minidom preserves the order of attributes, rather than sorting them. We assume alpha-sort, so this manually This diff in the test suite running on Debian/testing pointed it out: https://gitlab.com/fdroid/fdroidserver/-/jobs/486970383 ```diff --- /builds/fdroid/fdroidserver/tests/repo/index.xml 2020-04-11 13:36:57.000000000 +0000 +++ repo/index.xml 2020-04-11 13:41:44.000000000 +0000 @@ -1,6 +1,6 @@ - + This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/u/fdroid. http://foobarfoobarfoobar.onion/fdroid/repo https://foo.bar/fdroid/repo @@ -94,9 +94,9 @@ 2017-12-22 056c9f1554c40ba59a2103009c82b420 ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,CHANGE_WIFI_MULTICAST_STATE,INTERNET,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE - - - + + + @@ -182,9 +182,9 @@ 2013-12-31 eb41d4d6082bb3e81c3d58dbf7fc7332 ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,BLUETOOTH,BLUETOOTH_ADMIN,CHANGE_NETWORK_STATE,CHANGE_WIFI_MULTICAST_STATE,CHANGE_WIFI_STATE,INTERNET,NFC,RECEIVE_BOOT_COMPLETED - - - + + + ``` --- fdroidserver/index.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/fdroidserver/index.py b/fdroidserver/index.py index 7fbbea44..fd659407 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -317,13 +317,17 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing parent.appendChild(el) def addElementCheckLocalized(name, app, key, doc, parent, default=''): - '''Fill in field from metadata or localized block + """Fill in field from metadata or localized block For name/summary/description, they can come only from the app source, or from a dir in fdroiddata. They can be entirely missing from the metadata file if there is localized versions. This will fetch those from the localized version if its not available in the metadata file. - ''' + + Attributes should be alpha-sorted, so they must be added in + alpha- sort order. + + """ el = doc.createElement(name) value = app.get(key) @@ -349,21 +353,20 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing doc.appendChild(root) repoel = doc.createElement("repo") - - repoel.setAttribute("name", repodict['name']) + repoel.setAttribute("icon", os.path.basename(repodict['icon'])) if 'maxage' in repodict: repoel.setAttribute("maxage", str(repodict['maxage'])) - repoel.setAttribute("icon", os.path.basename(repodict['icon'])) + repoel.setAttribute("name", repodict['name']) + pubkey, repo_pubkey_fingerprint = extract_pubkey() + repoel.setAttribute("pubkey", pubkey.decode('utf-8')) + repoel.setAttribute("timestamp", '%d' % repodict['timestamp'].timestamp()) repoel.setAttribute("url", repodict['address']) + repoel.setAttribute("version", str(repodict['version'])) + addElement('description', repodict['description'], doc, repoel) for mirror in repodict.get('mirrors', []): addElement('mirror', mirror, doc, repoel) - repoel.setAttribute("version", str(repodict['version'])) - repoel.setAttribute("timestamp", '%d' % repodict['timestamp'].timestamp()) - - pubkey, repo_pubkey_fingerprint = extract_pubkey() - repoel.setAttribute("pubkey", pubkey.decode('utf-8')) root.appendChild(repoel) for command in ('install', 'uninstall'): @@ -541,16 +544,16 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing for permission in sorted_permissions: permel = doc.createElement('uses-permission') - permel.setAttribute('name', permission[0]) if permission[1] is not None: permel.setAttribute('maxSdkVersion', '%d' % permission[1]) apkel.appendChild(permel) + permel.setAttribute('name', permission[0]) for permission_sdk_23 in sorted(apk['uses-permission-sdk-23']): permel = doc.createElement('uses-permission-sdk-23') - permel.setAttribute('name', permission_sdk_23[0]) if permission_sdk_23[1] is not None: permel.setAttribute('maxSdkVersion', '%d' % permission_sdk_23[1]) apkel.appendChild(permel) + permel.setAttribute('name', permission_sdk_23[0]) if 'nativecode' in apk: addElement('nativecode', ','.join(sorted(apk['nativecode'])), doc, apkel) addElementNonEmpty('features', ','.join(sorted(apk['features'])), doc, apkel) From f5f61155ae023d28b3c74380141202f43fe622d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Fri, 10 May 2019 12:02:13 +0200 Subject: [PATCH 29/36] improve litecoin validation + tests --- fdroidserver/metadata.py | 2 +- tests/metadata.TestCase | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index d8ed98b9..e8bde005 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -457,7 +457,7 @@ valuetypes = { ["Bitcoin"]), FieldValidator("Litecoin address", - r'^L[a-zA-Z0-9]{33}$', + r'^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$', ["Litecoin"]), FieldValidator("Repo Type", diff --git a/tests/metadata.TestCase b/tests/metadata.TestCase index dc786095..d7b72f71 100755 --- a/tests/metadata.TestCase +++ b/tests/metadata.TestCase @@ -39,7 +39,7 @@ class MetadataTest(unittest.TestCase): os.makedirs(self.tmpdir) os.chdir(self.basedir) - def test_FieldValidator(self): + def test_FieldValidator_BitcoinAddress(self): validator = None for vali in fdroidserver.metadata.valuetypes: if vali.name == 'Bitcoin address': @@ -54,9 +54,9 @@ class MetadataTest(unittest.TestCase): self.assertIsNone(validator.check('3JrrrrWrEZr3rNrrvrecrnyirrnqRhWNLy', 'fake.app.id')) self.assertIsNone(validator.check('bc1qar0srrr7xrkvr5lr43lrdnwrre5rgtrzrf5rrq', 'fake.app.id')) - # some invalid addresses (various special use/testnet addresses) + # some invalid addresses self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, - '21BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id') + '21BvMrSYsrWrtrrlL5A10mlGFr7rrarrN2', 'fake.app.id') self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, '5Hrgr3ur5rGLrfKrrrrrrHSrqJrroGrrzrQrrrrrrLNrsrDrrrA', 'fake.app.id') self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, @@ -68,6 +68,35 @@ class MetadataTest(unittest.TestCase): self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, 'tb1qw5r8drrejxrrg4y5rrrrrraryrrrrwrkxrjrsx', 'fake.app.id') + def test_FieldValidator_LitecoinAddress(self): + validator = None + for vali in fdroidserver.metadata.valuetypes: + if vali.name == 'Litecoin address': + validator = vali + break + self.assertIsNotNone(validator, "could not find 'Litecoin address' validator") + + fdroidserver.metadata.warnings_action = 'error' + + # some valid addresses (L, M, 3) + self.assertIsNone(validator.check('LgeGrrrrJAxyXprrPrrBrrX5Qrrrrrrrrd', 'fake.app.id')) + self.assertIsNone(validator.check('MrrrrrrrJAxyXpanPtrrRAX5QHxvUJo8id', 'fake.app.id')) + self.assertIsNone(validator.check('3rereVr9rAryrranrrrrrAXrrHx', 'fake.app.id')) + + # some invalid addresses (various special use/testnet addresses, invalid chars) + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + '21BvMrSYsrWrtrrrn5Au4l4GFr7rrarrN2', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + '5Hrgr3ur5rGLrfKrrrrrr1SrqJrroGrrzrQrrrrrrLNrsrDrrrA', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + '92rr46rUrgTrrromrVrirW6r1rrrdrerrdbJrrrhrCsYrrrrrrc', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + 'K1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + 'L0000rSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id') + self.assertRaises(fdroidserver.exception.MetaDataException, validator.check, + 'tb1qw5r8drrejxrrg4y5rrrrrraryrrrrwrkxrjrsx', 'fake.app.id') + def test_read_metadata(self): def _build_yaml_representer(dumper, data): From 80a467134f7506b73ee32f4bd575f4572dcd4b34 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 14 May 2020 17:49:59 +0200 Subject: [PATCH 30/36] gitlab-ci: run Debian/buster job on all commits --- .gitlab-ci.yml | 10 ++++------ hooks/pre-commit | 3 ++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9828dbc4..07be4899 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -37,16 +37,14 @@ metadata_v0: metadata/dump_*/*.yaml - diff -uw metadata/dump_* -debian_testing: - image: debian:testing - only: - - master@fdroid/fdroidserver +debian_buster: + image: debian:buster script: - apt-get -qy update - apt-get -qy dist-upgrade - apt-get -qy install --no-install-recommends fdroidserver git gnupg python3-defusedxml python3-setuptools - - sed -i -e 's,testing,sid,g' -e 's,testing,sid,g' /etc/apt/sources.list + - echo "deb http://deb.debian.org/debian sid main" >> /etc/apt/sources.list - apt-get -qy update - apt-get install -y --no-install-recommends aapt androguard android-platform-tools-base zipalign - python3 -c 'import fdroidserver' @@ -135,7 +133,7 @@ lint_format_safety_bandit_checks: -x fdroidserver/dscanner.py,docker/install_agent.py,docker/drozer.py -r $CI_PROJECT_DIR fdroid || export EXITVALUE=1 - - safety check --full-report || export EXITVALUE=1 + - safety check --full-report --ignore=38224 || export EXITVALUE=1 - pylint --rcfile=.pylint-rcfile --output-format=colorized --reports=n fdroid makebuildserver diff --git a/hooks/pre-commit b/hooks/pre-commit index 94c55888..369b3620 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -53,10 +53,11 @@ fi # * E501: line too long (82 > 79 characters) # - Recommended for readability but not enforced # - Some lines are awkward to wrap around a char limit +# * E741: ambiguous variable name 'l' # * W503: line break before binary operator # - Quite pedantic -PEP8_IGNORE="E123,E501,W503" +PEP8_IGNORE="E123,E501,E741,W503" err() { echo >&2 ERROR: "$@" From 722a23f571f91a656a76ff36d140b482ce668445 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 15 May 2020 09:22:10 +0200 Subject: [PATCH 31/36] bump to versiob v1.1.7 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index efc46573..2ffcc1fd 100755 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ with open("README.md", "r") as fh: setup(name='fdroidserver', - version='1.1.6', + version='1.1.7', description='F-Droid Server Tools', long_description=long_description, long_description_content_type='text/markdown', From 0ff3c561c08361a87a15641768cd2514e3646fc4 Mon Sep 17 00:00:00 2001 From: Marcus Date: Tue, 10 Mar 2020 14:56:03 +0000 Subject: [PATCH 32/36] add opencollective metadata and index field --- .gitlab-ci.yml | 1 + fdroidserver/index.py | 1 + fdroidserver/metadata.py | 8 ++++++++ tests/metadata/dump/com.politedroid.yaml | 1 + tests/metadata/dump/org.adaway.yaml | 1 + tests/metadata/dump/org.smssecure.smssecure.yaml | 1 + tests/metadata/dump/org.videolan.vlc.yaml | 1 + tests/metadata/info.guardianproject.urzip.yml | 2 ++ tests/repo/index-v1.json | 4 +++- tests/repo/index.xml | 2 ++ 10 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 07be4899..5274a68c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -34,6 +34,7 @@ metadata_v0: - ../tests/dump_internal_metadata_format.py - sed -i -e '/kivy:\sfalse/d' + -e '/OpenCollective/d' metadata/dump_*/*.yaml - diff -uw metadata/dump_* diff --git a/fdroidserver/index.py b/fdroidserver/index.py index fd659407..eb04d597 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -445,6 +445,7 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing addElementNonEmpty('litecoin', app.Litecoin, doc, apel) addElementNonEmpty('flattr', app.FlattrID, doc, apel) addElementNonEmpty('liberapay', app.LiberapayID, doc, apel) + addElementNonEmpty('openCollective', app.OpenCollective, doc, apel) # These elements actually refer to the current version (i.e. which # one is recommended. They are historically mis-named, and need diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index e8bde005..00056d14 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -66,6 +66,7 @@ app_fields = set([ 'Donate', 'FlattrID', 'LiberapayID', + 'OpenCollective', 'Bitcoin', 'Litecoin', 'Name', @@ -110,6 +111,7 @@ yaml_app_field_order = [ 'Donate', 'FlattrID', 'LiberapayID', + 'OpenCollective', 'Bitcoin', 'Litecoin', '\n', @@ -169,6 +171,7 @@ class App(dict): self.Donate = None self.FlattrID = None self.LiberapayID = None + self.OpenCollective = None self.Bitcoin = None self.Litecoin = None self.Name = None @@ -444,6 +447,10 @@ valuetypes = { r'^[0-9]+$', ['LiberapayID']), + FieldValidator("Open Collective", + r'^[0-9a-z-]+$', + ['OpenCollective']), + FieldValidator("HTTP link", r'^http[s]?://', ["WebSite", "SourceCode", "IssueTracker", "Translation", "Changelog", "Donate"]), @@ -1481,6 +1488,7 @@ def write_plaintext_metadata(mf, app, w_comment, w_field, w_build): w_field_nonempty('Donate') w_field_nonempty('FlattrID') w_field_nonempty('LiberapayID') + w_field_nonempty('OpenCollective') w_field_nonempty('Bitcoin') w_field_nonempty('Litecoin') mf.write('\n') diff --git a/tests/metadata/dump/com.politedroid.yaml b/tests/metadata/dump/com.politedroid.yaml index cc1bebbe..5d80e30e 100644 --- a/tests/metadata/dump/com.politedroid.yaml +++ b/tests/metadata/dump/com.politedroid.yaml @@ -23,6 +23,7 @@ Litecoin: null MaintainerNotes: '' Name: null NoSourceSince: '1.5' +OpenCollective: null Provides: null Repo: https://github.com/miguelvps/PoliteDroid.git RepoType: git diff --git a/tests/metadata/dump/org.adaway.yaml b/tests/metadata/dump/org.adaway.yaml index 577d0449..6412aaa3 100644 --- a/tests/metadata/dump/org.adaway.yaml +++ b/tests/metadata/dump/org.adaway.yaml @@ -46,6 +46,7 @@ Litecoin: null MaintainerNotes: '' Name: null NoSourceSince: '' +OpenCollective: null Provides: org.sufficientlysecure.adaway Repo: https://github.com/dschuermann/ad-away.git RepoType: git diff --git a/tests/metadata/dump/org.smssecure.smssecure.yaml b/tests/metadata/dump/org.smssecure.smssecure.yaml index 42e59f07..688e7d26 100644 --- a/tests/metadata/dump/org.smssecure.smssecure.yaml +++ b/tests/metadata/dump/org.smssecure.smssecure.yaml @@ -43,6 +43,7 @@ Litecoin: null MaintainerNotes: '' Name: null NoSourceSince: '' +OpenCollective: null Provides: null Repo: https://github.com/SMSSecure/SMSSecure RepoType: git diff --git a/tests/metadata/dump/org.videolan.vlc.yaml b/tests/metadata/dump/org.videolan.vlc.yaml index 70638ad5..5ab8783d 100644 --- a/tests/metadata/dump/org.videolan.vlc.yaml +++ b/tests/metadata/dump/org.videolan.vlc.yaml @@ -45,6 +45,7 @@ MaintainerNotes: 'Instructions and dependencies here: http://wiki.videolan.org/A ' Name: null NoSourceSince: '' +OpenCollective: null Provides: null Repo: git://git.videolan.org/vlc-ports/android.git RepoType: git diff --git a/tests/metadata/info.guardianproject.urzip.yml b/tests/metadata/info.guardianproject.urzip.yml index 8bb3cd1e..bab1d763 100644 --- a/tests/metadata/info.guardianproject.urzip.yml +++ b/tests/metadata/info.guardianproject.urzip.yml @@ -1,6 +1,8 @@ AutoName: Urzip:本地应用的信息 AutoUpdateMode: None Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk +LiberapayID: '9999999' +OpenCollective: f-droid-just-testing Categories: - Development - GuardianProject diff --git a/tests/repo/index-v1.json b/tests/repo/index-v1.json index a5a1d1e9..f69e7aec 100644 --- a/tests/repo/index-v1.json +++ b/tests/repo/index-v1.json @@ -184,8 +184,10 @@ "suggestedVersionCode": "2147483647", "description": "

It\u2019s Urzip \u662f\u4e00\u4e2a\u83b7\u5f97\u5df2\u5b89\u88c5 APK \u76f8\u5173\u4fe1\u606f\u7684\u5b9e\u7528\u5de5\u5177\u3002\u5b83\u4ece\u60a8\u7684\u8bbe\u5907\u4e0a\u5df2\u5b89\u88c5\u7684\u6240\u6709\u5e94\u7528\u5f00\u59cb\uff0c\u4e00\u952e\u89e6\u6478\u5373\u53ef\u663e\u793a APK \u7684\u6307\u7eb9\uff0c\u5e76\u4e14\u63d0\u4f9b\u5230\u8fbe virustotal.com \u548c androidobservatory.org \u7684\u5feb\u6377\u94fe\u63a5\uff0c\u8ba9\u60a8\u65b9\u4fbf\u5730\u4e86\u89e3\u7279\u5b9a APK \u7684\u6863\u6848\u3002\u5b83\u8fd8\u53ef\u4ee5\u8ba9\u60a8\u5bfc\u51fa\u7b7e\u540d\u8bc1\u4e66\u548c\u751f\u6210 ApkSignaturePin Pin \u6587\u4ef6\u4f9b TrustedIntents \u5e93\u4f7f\u7528\u3002

\u2605 Urzip \u652f\u6301\u4e0b\u5217\u8bed\u8a00\uff1a Deutsch, English, espa\u00f1ol, suomi, \u65e5\u672c\u8a9e, \ud55c\uad6d\uc5b4, Norsk, portugu\u00eas (Portugal), \u0420\u0443\u0441\u0441\u043a\u0438\u0439, Sloven\u0161\u010dina, T\u00fcrk\u00e7e \u6ca1\u770b\u5230\u60a8\u7684\u8bed\u8a00\uff1f\u5e2e\u5fd9\u7ffb\u8bd1\u672c\u5e94\u7528\u5427\uff1a https://www.transifex.com/projects/p/urzip

\u2605 \u81f4\u7528\u6237\uff1a\u6211\u4eec\u8fd8\u7f3a\u5c11\u4f60\u559c\u6b22\u7684\u529f\u80fd\uff1f\u53d1\u73b0\u4e86\u4e00\u4e2a bug\uff1f\u8bf7\u544a\u8bc9\u6211\u4eec\uff01\u6211\u4eec\u4e50\u4e8e\u542c\u53d6\u60a8\u7684\u610f\u89c1\u3002\u8bf7\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u81f3: support@guardianproject.info \u6216\u8005\u52a0\u5165\u6211\u4eec\u7684\u804a\u5929\u5ba4 https://guardianproject.info/contact

", "issueTracker": "https://dev.guardianproject.info/projects/urzip/issues", + "liberapayID": "9999999", "license": "GPL-3.0-only", "name": "urzip-\u03c0\u00c7\u00c7\u03c0\u00c7\u00c7\u73b0\u4ee3\u6c49\u8bed\u901a\u7528\u5b57-\u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438-\u0639\u0631\u0628\u064a1234", + "openCollective": "f-droid-just-testing", "sourceCode": "https://github.com/guardianproject/urzip", "summary": "\u4e00\u4e2a\u5b9e\u7528\u5de5\u5177\uff0c\u83b7\u53d6\u5df2\u5b89\u88c5\u5728\u60a8\u7684\u8bbe\u5907\u4e0a\u7684\u5e94\u7528\u7684\u6709\u5173\u4fe1\u606f", "webSite": "https://dev.guardianproject.info/projects/urzip", @@ -677,4 +679,4 @@ } ] } -} \ No newline at end of file +} diff --git a/tests/repo/index.xml b/tests/repo/index.xml index 313e8876..20b526dc 100644 --- a/tests/repo/index.xml +++ b/tests/repo/index.xml @@ -357,6 +357,8 @@ https://github.com/guardianproject/urzip https://dev.guardianproject.info/projects/urzip/issues 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk + 9999999 + f-droid-just-testing 2147483647 From 6bbf0a1722c51f16788fd8cab44136ff5ba04f73 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 16 Jun 2020 14:39:46 +0200 Subject: [PATCH 33/36] add Liberapay: field with username as data Liberapay was originally included using a numeric ID, since they had not yet finalized the public URLs. Now it is a username. So this logic prefers the username in Liberapay: field, and keeps the old LiberapayID: to ease migration. LiberapayID: will not override Liberapay:. Clients are expected to prefer Liberapay: over LiberapayID: # Conflicts: # fdroidserver/update.py # tests/metadata/info.guardianproject.checkey.yml # tests/metadata/obb.main.oldversion.yml # tests/metadata/org.adaway.yml # tests/update.TestCase --- .gitlab-ci.yml | 2 +- fdroidserver/lint.py | 6 ++++-- fdroidserver/metadata.py | 11 +++++++++++ tests/metadata/dump/com.politedroid.yaml | 1 + tests/metadata/dump/org.adaway.yaml | 3 ++- tests/metadata/dump/org.smssecure.smssecure.yaml | 1 + tests/metadata/dump/org.videolan.vlc.yaml | 1 + tests/metadata/info.guardianproject.checkey.txt | 1 + tests/metadata/obb.main.oldversion.txt | 1 + tests/metadata/org.adaway.json | 1 + tests/repo/index-v1.json | 1 + 11 files changed, 25 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5274a68c..1507e504 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -33,7 +33,7 @@ metadata_v0: - echo "accepted_formats = ('txt', 'yml')" >> config.py - ../tests/dump_internal_metadata_format.py - sed -i - -e '/kivy:\sfalse/d' + -e '/Liberapay:/d' -e '/OpenCollective/d' metadata/dump_*/*.yaml - diff -uw metadata/dump_* diff --git a/fdroidserver/lint.py b/fdroidserver/lint.py index 465954cc..6f8a768e 100644 --- a/fdroidserver/lint.py +++ b/fdroidserver/lint.py @@ -139,9 +139,11 @@ regex_checks = { ], 'Donate': http_checks + [ (re.compile(r'.*flattr\.com'), - _("Flattr donation methods belong in the FlattrID flag")), + _("Flattr donation methods belong in the FlattrID: field")), (re.compile(r'.*liberapay\.com'), - _("Liberapay donation methods belong in the LiberapayID flag")), + _("Liberapay donation methods belong in the Liberapay: field")), + (re.compile(r'.*opencollective\.com'), + _("OpenCollective donation methods belong in the OpenCollective: field")), ], 'Changelog': http_checks, 'Author Name': [ diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 00056d14..14a6f512 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -36,6 +36,10 @@ from fdroidserver.exception import MetaDataException, FDroidException srclibs = None warnings_action = None +# validates usernames based on a loose collection of rules from GitHub, GitLab, +# Liberapay and issuehunt. This is mostly to block abuse. +VALID_USERNAME_REGEX = re.compile(r'^[a-z\d](?:[a-z\d/._-]){0,38}$', re.IGNORECASE) + def warn_or_exception(value): '''output warning or Exception depending on -W''' @@ -65,6 +69,7 @@ app_fields = set([ 'Changelog', 'Donate', 'FlattrID', + 'Liberapay', 'LiberapayID', 'OpenCollective', 'Bitcoin', @@ -110,6 +115,7 @@ yaml_app_field_order = [ 'Changelog', 'Donate', 'FlattrID', + 'Liberapay', 'LiberapayID', 'OpenCollective', 'Bitcoin', @@ -170,6 +176,7 @@ class App(dict): self.Changelog = '' self.Donate = None self.FlattrID = None + self.Liberapay = None self.LiberapayID = None self.OpenCollective = None self.Bitcoin = None @@ -443,6 +450,10 @@ valuetypes = { r'^[0-9a-z]+$', ['FlattrID']), + FieldValidator("Liberapay", + VALID_USERNAME_REGEX, + ['Liberapay']), + FieldValidator("Liberapay ID", r'^[0-9]+$', ['LiberapayID']), diff --git a/tests/metadata/dump/com.politedroid.yaml b/tests/metadata/dump/com.politedroid.yaml index 5d80e30e..4837a93c 100644 --- a/tests/metadata/dump/com.politedroid.yaml +++ b/tests/metadata/dump/com.politedroid.yaml @@ -17,6 +17,7 @@ Disabled: null Donate: null FlattrID: null IssueTracker: https://github.com/miguelvps/PoliteDroid/issues +Liberapay: null LiberapayID: null License: GPL-3.0-only Litecoin: null diff --git a/tests/metadata/dump/org.adaway.yaml b/tests/metadata/dump/org.adaway.yaml index 6412aaa3..ebabcb37 100644 --- a/tests/metadata/dump/org.adaway.yaml +++ b/tests/metadata/dump/org.adaway.yaml @@ -40,7 +40,8 @@ Disabled: null Donate: http://sufficientlysecure.org/index.php/adaway FlattrID: '369138' IssueTracker: https://github.com/dschuermann/ad-away/issues -LiberapayID: null +Liberapay: null +LiberapayID: '1234567890' License: GPL-3.0-only Litecoin: null MaintainerNotes: '' diff --git a/tests/metadata/dump/org.smssecure.smssecure.yaml b/tests/metadata/dump/org.smssecure.smssecure.yaml index 688e7d26..a979e9c1 100644 --- a/tests/metadata/dump/org.smssecure.smssecure.yaml +++ b/tests/metadata/dump/org.smssecure.smssecure.yaml @@ -37,6 +37,7 @@ Disabled: null Donate: null FlattrID: null IssueTracker: https://github.com/SMSSecure/SMSSecure/issues +Liberapay: null LiberapayID: null License: GPL-3.0-only Litecoin: null diff --git a/tests/metadata/dump/org.videolan.vlc.yaml b/tests/metadata/dump/org.videolan.vlc.yaml index 5ab8783d..39d628d4 100644 --- a/tests/metadata/dump/org.videolan.vlc.yaml +++ b/tests/metadata/dump/org.videolan.vlc.yaml @@ -24,6 +24,7 @@ Disabled: null Donate: http://www.videolan.org/contribute.html#money FlattrID: null IssueTracker: http://www.videolan.org/support/index.html#bugs +Liberapay: null LiberapayID: null License: GPL-3.0-only Litecoin: null diff --git a/tests/metadata/info.guardianproject.checkey.txt b/tests/metadata/info.guardianproject.checkey.txt index c6d7557c..1ad98833 100644 --- a/tests/metadata/info.guardianproject.checkey.txt +++ b/tests/metadata/info.guardianproject.checkey.txt @@ -5,6 +5,7 @@ Source Code:https://github.com/guardianproject/checkey Issue Tracker:https://dev.guardianproject.info/projects/checkey/issues Translation:https://www.transifex.com/otf/checkey Bitcoin:1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk +Liberapay:GuardianProject Auto Name:Checkey diff --git a/tests/metadata/obb.main.oldversion.txt b/tests/metadata/obb.main.oldversion.txt index 0a4e4956..52095f10 100644 --- a/tests/metadata/obb.main.oldversion.txt +++ b/tests/metadata/obb.main.oldversion.txt @@ -2,6 +2,7 @@ Categories:Development License:GPL-3.0-only Source Code:https://github.com/eighthave/urzip Bitcoin:1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk +Liberapay:12334 Auto Name:OBB Main Old Version diff --git a/tests/metadata/org.adaway.json b/tests/metadata/org.adaway.json index df71f112..c74017f5 100644 --- a/tests/metadata/org.adaway.json +++ b/tests/metadata/org.adaway.json @@ -22,6 +22,7 @@ "Donate": "http://sufficientlysecure.org/index.php/adaway", "FlattrID": "369138", "IssueTracker": "https://github.com/dschuermann/ad-away/issues", + "LiberapayID": "1234567890", "License": "GPL-3.0-only", "Provides": "org.sufficientlysecure.adaway", "Repo": "https://github.com/dschuermann/ad-away.git", diff --git a/tests/repo/index-v1.json b/tests/repo/index-v1.json index f69e7aec..9ce9ddb9 100644 --- a/tests/repo/index-v1.json +++ b/tests/repo/index-v1.json @@ -104,6 +104,7 @@ "Development" ], "suggestedVersionCode": "99999999", + "liberapay": "12334", "license": "GPL-3.0-only", "name": "OBB Main Old Version", "sourceCode": "https://github.com/eighthave/urzip", From cad4dc18c6d875ab32183767cb5de88010e21585 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 18 Jun 2020 08:01:34 +0200 Subject: [PATCH 34/36] bump to version v1.1.8 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 2ffcc1fd..9d1f1bdf 100755 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ with open("README.md", "r") as fh: setup(name='fdroidserver', - version='1.1.7', + version='1.1.8', description='F-Droid Server Tools', long_description=long_description, long_description_content_type='text/markdown', From 49d414635aab32090fe8dc2521bb8cdb6107d768 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 23 Jun 2020 13:40:00 +0200 Subject: [PATCH 35/36] lint: fix OpenCollective field validator closes fdroiddata#2077 --- fdroidserver/metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 14a6f512..57c675c7 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -459,7 +459,7 @@ valuetypes = { ['LiberapayID']), FieldValidator("Open Collective", - r'^[0-9a-z-]+$', + r'^[0-9A-Za-z-]+$', ['OpenCollective']), FieldValidator("HTTP link", From 87164740836507e2ee06a6d14328fe3afaf3c855 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 24 Jun 2020 21:49:59 +0200 Subject: [PATCH 36/36] bump to v1.1.9 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9d1f1bdf..31de6e30 100755 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ with open("README.md", "r") as fh: setup(name='fdroidserver', - version='1.1.8', + version='1.1.9', description='F-Droid Server Tools', long_description=long_description, long_description_content_type='text/markdown',