Last active
August 22, 2020 15:33
-
-
Save goaaats/9317ee23d406fa66f29bb6bddf53b535 to your computer and use it in GitHub Desktop.
Linux updater for yuzu Early Access
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import http.client | |
import argparse | |
import os | |
import base64 | |
import json | |
import re | |
import tarfile | |
import subprocess | |
def str2bool(v): | |
if isinstance(v, bool): | |
return v | |
if v.lower() in ('yes', 'true', 't', 'y', '1'): | |
return True | |
elif v.lower() in ('no', 'false', 'f', 'n', '0'): | |
return False | |
else: | |
raise argparse.ArgumentTypeError('Boolean value expected.') | |
parser = argparse.ArgumentParser(description='Downloads and builds yuzu Early Access on linux.') | |
parser.add_argument('--token', help='The base64 authentication token from https://profile.yuzu-emu.org/. If not provided, the environment variable YUZU_TOKEN will be used.', default=os.getenv('YUZU_TOKEN')) | |
parser.add_argument('--dry', type=str2bool, help="Don't build yuzu, just download it.", nargs='?', const=True, default=False) | |
args = parser.parse_args() | |
if not args.token: | |
print("ERROR: No token provided. Please use -h to see possible values.") | |
raise SystemExit | |
print(args.token) | |
rawToken = base64.b64decode(args.token + "==").decode().split(":") | |
userName = rawToken[0] | |
auth = rawToken[1] | |
print("Username: " + userName) | |
print("Token:" + auth) | |
conn = http.client.HTTPSConnection("api.yuzu-emu.org") | |
### GET JWT TOKEN | |
payload = "" | |
headers = { | |
'user-agent': "liftinstall (j-selby)", | |
'x-username': userName, | |
'x-token': auth | |
} | |
conn.request("POST", "/jwt/installer/", payload, headers) | |
res = conn.getresponse() | |
data = res.read() | |
jwt = data.decode("utf-8") | |
### GET RELEASES LIST | |
payload = "" | |
headers = { | |
'user-agent': "liftinstall (j-selby)" | |
} | |
conn.request("GET", "/downloads/earlyaccess", payload, headers) | |
res = conn.getresponse() | |
data = res.read() | |
release = json.loads(data.decode("utf-8")) | |
print(release) | |
versionFile = open("ea-rev", "r+") | |
localVer = versionFile.read() | |
if (localVer == str(release["version"])): | |
print("yuzu Early Access is up-to-date.") | |
raise SystemExit | |
print("New yuzu version found: " + str(release["version"])) | |
versionFile.close() | |
filePattern = re.compile("^yuzu-windows-msvc-source-[0-9]*-[0-9a-f]*.tar.xz$") | |
for releaseEntry in release["files"]: | |
if filePattern.match(releaseEntry["name"]): | |
print("Downloading " + releaseEntry["url"]) | |
payload = "" | |
headers = { | |
'user-agent': "liftinstall (j-selby)", | |
'authorization': "Bearer " + jwt | |
} | |
conn.request("GET", releaseEntry["url"], payload, headers) | |
res = conn.getresponse() | |
data = res.read() | |
releaseFile = open(releaseEntry["name"], "wb+") | |
releaseFile.write(data) | |
releaseFile.close() | |
print("Extracting...") | |
tar = tarfile.open(releaseEntry["name"], "r:xz") | |
tar.extractall("source") | |
tar.close() | |
os.remove(releaseEntry["name"]) | |
if not args.dry: | |
p = subprocess.Popen(["cmake --build ."], cwd="source") | |
p.wait() | |
versionFile = open("ea-rev", "w") | |
versionFile.write(str(release["version"])) | |
versionFile.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment