Update packager to include modulo on Windows

This commit is contained in:
Federico Terzi 2020-08-16 17:25:48 +02:00
parent b9fad30878
commit 4ad96eb2f3
2 changed files with 34 additions and 5 deletions

View File

@ -9,6 +9,9 @@ homepage = "https://github.com/federico-terzi/espanso"
edition = "2018" edition = "2018"
build="build.rs" build="build.rs"
[modulo]
version = "0.1.0"
[dependencies] [dependencies]
widestring = "0.4.0" widestring = "0.4.0"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }

View File

@ -20,6 +20,7 @@ class PackageInfo:
description: str description: str
publisher: str publisher: str
url: str url: str
modulo_version: str
@click.group() @click.group()
def cli(): def cli():
@ -44,7 +45,8 @@ def build(skipcargo):
cargo_info["package"]["version"], cargo_info["package"]["version"],
cargo_info["package"]["description"], cargo_info["package"]["description"],
cargo_info["package"]["authors"][0], cargo_info["package"]["authors"][0],
cargo_info["package"]["homepage"]) cargo_info["package"]["homepage"],
cargo_info["modulo"]["version"])
print(package_info) print(package_info)
if not skipcargo: if not skipcargo:
@ -58,6 +60,11 @@ def build(skipcargo):
elif TARGET_OS == "macos": elif TARGET_OS == "macos":
build_mac(package_info) build_mac(package_info)
def calculate_sha256(file):
with open(file, "rb") as f:
b = f.read() # read entire file as bytes
readable_hash = hashlib.sha256(b).hexdigest()
return readable_hash
def build_windows(package_info): def build_windows(package_info):
print("Starting packaging process for Windows...") print("Starting packaging process for Windows...")
@ -78,6 +85,22 @@ def build_windows(package_info):
TARGET_DIR = os.path.join(PACKAGER_TARGET_DIR, "win") TARGET_DIR = os.path.join(PACKAGER_TARGET_DIR, "win")
os.makedirs(TARGET_DIR, exist_ok=True) os.makedirs(TARGET_DIR, exist_ok=True)
modulo_url = "https://github.com/federico-terzi/modulo/releases/download/v{0}/modulo-win.exe".format(package_info.modulo_version)
modulo_sha_url = "https://github.com/federico-terzi/modulo/releases/download/v{0}/modulo-win.exe.sha256.txt".format(package_info.modulo_version)
print("Pulling modulo depencency from:", modulo_url)
modulo_target_file = os.path.join(TARGET_DIR, "modulo.exe")
urllib.request.urlretrieve(modulo_url, modulo_target_file)
print("Pulling SHA signature from:", modulo_sha_url)
modulo_sha_file = os.path.join(TARGET_DIR, "modulo.sha256")
urllib.request.urlretrieve(modulo_sha_url, modulo_sha_file)
print("Checking signatures...")
expected_sha = None
with open(modulo_sha_file, "r") as sha_f:
expected_sha = sha_f.read()
actual_sha = calculate_sha256(modulo_target_file)
if actual_sha != expected_sha:
raise Exception("Modulo SHA256 is not matching")
print("Gathering CRT DLLs...") print("Gathering CRT DLLs...")
msvc_dirs = glob.glob("C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\*\\VC\\Redist\\MSVC\\*") msvc_dirs = glob.glob("C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\*\\VC\\Redist\\MSVC\\*")
print("Found Redists: ", msvc_dirs) print("Found Redists: ", msvc_dirs)
@ -104,12 +127,15 @@ def build_windows(package_info):
dll_files = glob.glob(msvc_dir + "\\x64\\*CRT\\*.dll") dll_files = glob.glob(msvc_dir + "\\x64\\*CRT\\*.dll")
print("Found DLLs:") print("Found DLLs:")
dll_include_list = [] include_list = []
for dll in dll_files: for dll in dll_files:
print("Including: "+dll) print("Including: "+dll)
dll_include_list.append("Source: \""+dll+"\"; DestDir: \"{app}\"; Flags: ignoreversion") include_list.append("Source: \""+dll+"\"; DestDir: \"{app}\"; Flags: ignoreversion")
dll_include = "\r\n".join(dll_include_list) print("Including modulo")
include_list.append("Source: \""+modulo_target_file+"\"; DestDir: \"{app}\"; Flags: ignoreversion")
include = "\r\n".join(include_list)
INSTALLER_NAME = f"espanso-win-installer" INSTALLER_NAME = f"espanso-win-installer"
@ -130,7 +156,7 @@ def build_windows(package_info):
content = content.replace("{{{executable_path}}}", os.path.abspath("target/release/espanso.exe")) content = content.replace("{{{executable_path}}}", os.path.abspath("target/release/espanso.exe"))
content = content.replace("{{{output_dir}}}", os.path.abspath(TARGET_DIR)) content = content.replace("{{{output_dir}}}", os.path.abspath(TARGET_DIR))
content = content.replace("{{{output_name}}}", INSTALLER_NAME) content = content.replace("{{{output_name}}}", INSTALLER_NAME)
content = content.replace("{{{dll_include}}}", dll_include) content = content.replace("{{{dll_include}}}", include)
with open(os.path.join(TARGET_DIR, "setupscript.iss"), "w") as output_script: with open(os.path.join(TARGET_DIR, "setupscript.iss"), "w") as output_script:
output_script.write(content) output_script.write(content)