1
0
Files
electrum/contrib/add_cosigner
SomberNight 697c700a1f release process: split release.sh into two
This allows the add_cosigner workflow to be done before the website links to new binaries.
(so Emzy or other builders can try to reproduce builds and add signatures before new binaries are fully live)
2023-01-26 13:49:51 +00:00

73 lines
2.7 KiB
Python
Executable File

#!/usr/bin/python3
#
# This script is part of the workflow for BUILDERs to reproduce and sign the
# release binaries. (for builders who do not have sftp access to "electrum-downloads-airlock")
#
# env vars:
# - SSHUSER
#
#
# - BUILDER builds all binaries and checks they match the official releases
# (using release.sh, and perhaps some manual steps)
# - BUILDER creates a PR against https://github.com/spesmilo/electrum-signatures/
# to add their sigs for a given release, which then gets merged
# - SFTPUSER runs `$ SSHUSER=$SFTPUSER electrum/contrib/add_cosigner $BUILDER`
# - SFTPUSER runs `$ electrum/contrib/make_download $WWW_DIR`
# - $ (cd $WWW_DIR; git commit -a -m "add_cosigner"; git push)
# - SFTPUSER runs `$ electrum-web/publish.sh $SFTPUSER`
# - (for the website to be updated, both ThomasV and SomberNight needs to run publish.sh)
import re
import os
import sys
import importlib
import subprocess
# cd to project root
os.chdir(os.path.dirname(os.path.dirname(__file__)))
# 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 name of cosigner
cosigner = sys.argv[1]
version = version_win = version_mac = ELECTRUM_VERSION
files = {
"tgz": f"Electrum-{version}.tar.gz",
"tgz_srconly": f"Electrum-sourceonly-{version}.tar.gz",
"appimage": f"electrum-{version}-x86_64.AppImage",
"mac": f"electrum-{version_mac}.dmg",
"win": f"electrum-{version_win}.exe",
"win_setup": f"electrum-{version_win}-setup.exe",
"win_portable": f"electrum-{version_win}-portable.exe",
"apk_arm64": f"Electrum-{APK_VERSION}-arm64-v8a-release.apk",
"apk_armeabi": f"Electrum-{APK_VERSION}-armeabi-v7a-release.apk",
}
for shortname, filename in files.items():
path = f"dist/{filename}"
link = f"https://download.electrum.org/{version}/{filename}"
if not os.path.exists(path):
os.system(f"wget -q {link} -O {path}")
if not os.path.getsize(path):
raise Exception(path)
sig_name = f"{filename}.{cosigner}.asc"
sig_url = f"https://raw.githubusercontent.com/spesmilo/electrum-signatures/master/{version}/{filename}/{sig_name}"
sig_path = f"dist/{sig_name}"
os.system(f"wget -nc {sig_url} -O {sig_path}")
if os.system(f"gpg --verify {sig_path} {path}") != 0:
raise Exception(sig_name)
print("Calling upload.sh now... This might take some time.")
subprocess.check_output(["./contrib/upload.sh", ])