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.
		
		
		
		
		
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.2 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
 | 
						|
    gh_token = os.environ.get('GH_TOKEN')
 | 
						|
    g = Github(gh_token if gh_token else None) # ensure it's none if it's falsy
 | 
						|
 | 
						|
    # 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()
 |