diff --git a/fdroidserver/common.py b/fdroidserver/common.py index b5e06280..2c8e3630 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -460,7 +460,7 @@ def has_extension(filename, ext): return ext == f_ext -apk_regex = re.compile(r"^(.+)_([0-9]+)\.apk$") +publish_name_regex = re.compile(r"^(.+)_([0-9]+)\.(apk|zip)$") def clean_description(description): @@ -476,13 +476,13 @@ def clean_description(description): return returnstring.rstrip('\n') -def apknameinfo(filename): +def publishednameinfo(filename): filename = os.path.basename(filename) - m = apk_regex.match(filename) + m = publish_name_regex.match(filename) try: result = (m.group(1), m.group(2)) except AttributeError: - raise FDroidException("Invalid apk name: %s" % filename) + raise FDroidException("Invalid name for published file: %s" % filename) return result diff --git a/fdroidserver/install.py b/fdroidserver/install.py index 022b6262..5849acad 100644 --- a/fdroidserver/install.py +++ b/fdroidserver/install.py @@ -72,7 +72,7 @@ def main(): for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk'))): try: - appid, vercode = common.apknameinfo(apkfile) + appid, vercode = common.publishednameinfo(apkfile) except FDroidException: continue if appid not in apks: @@ -87,7 +87,7 @@ def main(): else: - apks = {common.apknameinfo(apkfile)[0]: apkfile for apkfile in + apks = {common.publishednameinfo(apkfile)[0]: apkfile for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk')))} for appid, apk in apks.items(): diff --git a/fdroidserver/publish.py b/fdroidserver/publish.py index 62674480..14942c8a 100644 --- a/fdroidserver/publish.py +++ b/fdroidserver/publish.py @@ -102,10 +102,11 @@ def main(): logging.info("{0} apps, {0} key aliases".format(len(allapps), len(allaliases))) - # Process any apks that are waiting to be signed... - for apkfile in sorted(glob.glob(os.path.join(unsigned_dir, '*.apk'))): + # Process any APKs or ZIPs that are waiting to be signed... + for apkfile in sorted(glob.glob(os.path.join(unsigned_dir, '*.apk')) + + glob.glob(os.path.join(unsigned_dir, '*.zip'))): - appid, vercode = common.apknameinfo(apkfile) + appid, vercode = common.publishednameinfo(apkfile) apkfilename = os.path.basename(apkfile) if vercodes and appid not in vercodes: continue @@ -122,7 +123,7 @@ def main(): sys.exit(1) app = allapps[appid] - if app.Binaries is not None: + if app.Binaries: # It's an app where we build from source, and verify the apk # contents against a developer's binary, and then publish their @@ -143,6 +144,12 @@ def main(): shutil.move(srcapk, os.path.join(output_dir, apkfilename)) os.remove(apkfile) + elif apkfile.endswith('.zip'): + + # OTA ZIPs built by fdroid do not need to be signed by jarsigner, + # just to be moved into place in the repo + shutil.move(apkfile, os.path.join(output_dir, apkfilename)) + else: # It's a 'normal' app, i.e. we sign and publish it... diff --git a/fdroidserver/verify.py b/fdroidserver/verify.py index 4c381984..c277cf71 100644 --- a/fdroidserver/verify.py +++ b/fdroidserver/verify.py @@ -60,7 +60,7 @@ def main(): for apkfile in sorted(glob.glob(os.path.join(unsigned_dir, '*.apk'))): apkfilename = os.path.basename(apkfile) - appid, vercode = common.apknameinfo(apkfile) + appid, vercode = common.publishednameinfo(apkfile) if vercodes and appid not in vercodes: continue