You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
import platform
|
|
import requests
|
|
import shutil
|
|
import os
|
|
import re
|
|
import sys
|
|
from collections import OrderedDict
|
|
|
|
from github import Github
|
|
|
|
machine = platform.machine()
|
|
|
|
# https://stackoverflow.com/questions/45125516/possible-values-for-uname-m
|
|
MACHINES_TO_ZIP = OrderedDict([
|
|
("x86_64", "Linux-x64"),
|
|
("aarch64", "LinuxArm64"),
|
|
("armv8", "LinuxArm64"),
|
|
("arm", "LinuxArm"),
|
|
("AMD64", "Windows-x64")
|
|
])
|
|
|
|
def getZipName():
|
|
for possibleMachine, possibleZipName in MACHINES_TO_ZIP.items():
|
|
if possibleMachine in machine:
|
|
return possibleZipName
|
|
|
|
def getLatestFileInRepo(repo, search_string):
|
|
# Create an unauthenticated instance of the Github object
|
|
g = Github(os.environ.get('GH_TOKEN'))
|
|
|
|
# Replace with the repository owner and name
|
|
repo = g.get_repo(repo)
|
|
|
|
# Get all releases of the repository
|
|
releases = repo.get_releases()
|
|
|
|
# Loop through the releases in reverse order (from latest to oldest)
|
|
for release in list(releases):
|
|
# Get the release assets (files attached to the release)
|
|
assets = release.get_assets()
|
|
|
|
# Loop through the assets
|
|
for asset in assets:
|
|
if re.search(search_string, asset.name):
|
|
print(f'Downloading: {asset.name}')
|
|
response = requests.get(asset.browser_download_url)
|
|
with open(asset.name, 'wb') as f:
|
|
f.write(response.content)
|
|
print(f'Download complete: {asset.name}. Unzipping...')
|
|
shutil.unpack_archive(asset.name, './')
|
|
print(f'Unzipping complete!')
|
|
os.remove(asset.name)
|
|
break
|
|
else:
|
|
continue
|
|
break
|
|
else:
|
|
# If no matching release is found, print a message
|
|
print(f'No release found with {search_string}')
|
|
|
|
def getLatestCLIRelease():
|
|
zipName = getZipName()
|
|
if not zipName:
|
|
print(f"GetTwitchDownloader.py could not get valid path for '{machine}'. Exiting...")
|
|
sys.exit(1)
|
|
searchString = r'.*CLI.*' + zipName
|
|
getLatestFileInRepo("lay295/TwitchDownloader", searchString)
|
|
|
|
getLatestCLIRelease()
|