implement automatic updater
This commit is contained in:
48
updater/main.py
Normal file
48
updater/main.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import urllib.request
|
||||
from os import path
|
||||
|
||||
import certificates
|
||||
import git
|
||||
from sources import ApkRelease, fdroid_recommended_release
|
||||
|
||||
|
||||
def update_if_needed(module: str, release: ApkRelease):
|
||||
module_dir = path.abspath(path.join(path.dirname(__file__), '..', module))
|
||||
with open(path.join(module_dir, '.version_code'), 'r+') as version_code_file:
|
||||
version_code = int(version_code_file.read())
|
||||
if version_code < release.version_code:
|
||||
print('updating {} to {}'.format(module, release.version_name))
|
||||
apk_filename = path.join(module_dir, '{}.apk'.format(module))
|
||||
|
||||
old_sig = certificates.get_apk_certificate(apk_filename)
|
||||
|
||||
print('downloading {} ...'.format(release.download_url))
|
||||
urllib.request.urlretrieve(release.download_url, apk_filename)
|
||||
|
||||
new_sig = certificates.get_apk_certificate(apk_filename)
|
||||
if old_sig != new_sig:
|
||||
raise Exception('Signature mismatch for {} old sig: {} new sig: {}'.format(module, old_sig, new_sig))
|
||||
|
||||
version_code_file.seek(0)
|
||||
version_code_file.write(str(release.version_code))
|
||||
version_code_file.truncate()
|
||||
version_code_file.close()
|
||||
|
||||
print('commit and push...')
|
||||
git.add_commit_push(module_dir, 'Update {} to {}'.format(module, release.version_name))
|
||||
|
||||
elif version_code > release.version_code:
|
||||
print('{} ahead of suggested version ({} > {})'.format(module, version_code, release.version_code))
|
||||
elif version_code == release.version_code:
|
||||
print('{} up to date.'.format(module))
|
||||
|
||||
fdroid_main_repo = 'https://www.f-droid.org/repo'
|
||||
fdroid_microg_repo = 'https://microg.org/fdroid/repo'
|
||||
|
||||
update_if_needed('FakeStore', fdroid_recommended_release(fdroid_microg_repo, 'com.android.vending'))
|
||||
update_if_needed('FDroid', fdroid_recommended_release(fdroid_main_repo, 'org.fdroid.fdroid'))
|
||||
update_if_needed('FDroidPrivilegedExtension', fdroid_recommended_release(fdroid_main_repo, 'org.fdroid.fdroid.privileged'))
|
||||
update_if_needed('GmsCore', fdroid_recommended_release(fdroid_microg_repo, 'com.google.android.gms'))
|
||||
update_if_needed('GsfProxy', fdroid_recommended_release(fdroid_microg_repo, 'com.google.android.gsf'))
|
||||
update_if_needed('IchnaeaNlpBackend', fdroid_recommended_release(fdroid_main_repo, 'org.microg.nlp.backend.ichnaea'))
|
||||
update_if_needed('NominatimGeocoderBackend', fdroid_recommended_release(fdroid_main_repo, 'org.microg.nlp.backend.nominatim'))
|
Reference in New Issue
Block a user