diff --git a/contrib/add_cosigner b/contrib/add_cosigner new file mode 100755 index 000000000..549911d3c --- /dev/null +++ b/contrib/add_cosigner @@ -0,0 +1,45 @@ +#!/usr/bin/python3 +import re +import os +import sys +import importlib + +# load version.py; needlessly complicated alternative to "imp.load_source": +version_spec = importlib.util.spec_from_file_location('version', 'electrum/version.py') +version_module = importlib.util.module_from_spec(version_spec) +version_spec.loader.exec_module(version_module) + +ELECTRUM_VERSION = version_module.ELECTRUM_VERSION +APK_VERSION = version_module.APK_VERSION +print("version", ELECTRUM_VERSION) + +# GPG names of cosigner +cosigner = sys.argv[1] + +version = version_win = version_mac = version_android = ELECTRUM_VERSION + +files = { + 'tgz': "Electrum-%s.tar.gz" % version, + 'appimage': "electrum-%s-x86_64.AppImage" % version, + 'mac': "electrum-%s.dmg" % version_mac, + 'win': "electrum-%s.exe" % version_win, + 'win_setup': "electrum-%s-setup.exe" % version_win, + 'win_portable': "electrum-%s-portable.exe" % version_win, + 'apk_arm64': "Electrum-%s-arm64-v8a-release.apk" % APK_VERSION, + 'apk_armeabi': "Electrum-%s-armeabi-v7a-release.apk" % APK_VERSION, +} + + +for k, n in files.items(): + path = "dist/%s"%n + link = "https://download.electrum.org/%s/%s"%(version,n) + if not os.path.exists(path): + os.system("wget -q %s -O %s" % (link, path)) + if not os.path.getsize(path): + raise Exception(path) + sig_name = n + '.'+cosigner+'.asc' + sig_url = "https://raw.githubusercontent.com/spesmilo/electrum-signatures/master/%s/%s/%s"%(version, n, sig_name) + sig_path = "dist/%s"% sig_name + os.system("wget -nc %s -O %s"%(sig_url, sig_path)) + if os.system("gpg --verify %s %s"%(sig_path, path)) != 0: + raise Exception(sig_name) diff --git a/contrib/make_download b/contrib/make_download index a1c84f638..4d2cd449f 100755 --- a/contrib/make_download +++ b/contrib/make_download @@ -3,6 +3,7 @@ import re import os import sys import importlib +from collections import defaultdict # load version.py; needlessly complicated alternative to "imp.load_source": version_spec = importlib.util.spec_from_file_location('version', 'electrum/version.py') @@ -15,9 +16,6 @@ print("version", ELECTRUM_VERSION) dirname = sys.argv[1] -# GPG names of extra signers -extra_signers = sys.argv[2:] - print("directory", dirname) download_page = os.path.join(dirname, "panel-download.html") @@ -44,33 +42,35 @@ files = { 'apk_armeabi': "Electrum-%s-armeabi-v7a-release.apk" % APK_VERSION, } +# default signers +signers = ['ThomasV', 'SomberNight'] -for k, n in files.items(): - path = "dist/%s"%n - link = "https://download.electrum.org/%s/%s"%(version,n) - if not os.path.exists(path): - os.system("wget -q %s -O %s" % (link, path)) - if not os.path.getsize(path): - raise Exception(path) +# detect extra signers +list_dir = os.listdir('dist') +detected_sigs = defaultdict(set) +for f in list_dir: + if f.endswith('.asc'): + parts = f.split('.') + signer = parts[-2] + filename = '.'.join(parts[0:-2]) + detected_sigs[signer].add(filename) +for k, v in detected_sigs.items(): + if v == set(files.values()): + if k not in signers: + signers.append(k) - string = string.replace("##link_%s##"%k, link) - sig_ThomasV = link + '.ThomasV.asc' - sig_SomberNight = link + '.sombernight_releasekey.asc' - sigs = [ - "%s"%(sig_ThomasV, 'ThomasV'), - "%s"%(sig_SomberNight, 'SomberNight'), - ] +print("signers:", signers) - for signer in extra_signers: - sig_name = n + '.'+signer+'.asc' - sig_url = "https://raw.githubusercontent.com/spesmilo/electrum-signatures/master/%s/%s/%s"%(version, n, sig_name) - sig_path = "dist/%s"% sig_name - os.system("wget %s -O %s"%(sig_url, sig_path)) - if os.system("gpg --verify %s %s"%(sig_path, path)) != 0: - raise Exception(sig_name) - sigs.append( "%s"%(sig_url, signer) ) - sigs = '\n'+',\n'.join(sigs)+'\n' - string = string.replace("##sigs_%s##"%k, sigs) +gpg_name = lambda x: 'sombernight_releasekey' if x=='SomberNight' else x +signers_list = ', '.join("%s"%(gpg_name(x), x) for x in signers) +string = string.replace("##signers_list##", signers_list) + +for k, filename in files.items(): + path = "dist/%s"%filename + assert filename in list_dir + link = "https://download.electrum.org/%s/%s"%(version, filename) + string = string.replace("##link_%s##"%k, link) + string = string.replace("##sigs_%s##"%k, link+'.asc') with open(download_page,'w') as f: f.write(string)