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):
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
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:
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():
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
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
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...
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