API details
#| default_exp core
#| hide
from nbdev.showdoc import *
#| export
import re
from fasthtml.common import *
from fastcore.all import *
#| export
def find_releases(path:str):
"Given a path, find the latest/pre release versions available"
try: pre,user,repo,*search = path.split('/')
except ValueError: return '!!!Err: Invalid path'
if pre not in ('pre', 'latest'): return '!!!first component should be "pre" or "latest"'
gh = f'https://api.github.com/repos/{user}/{repo}/releases'
if pre=='latest': gh += '/latest'
try: rels=urljson(gh)
except Exception as e: return f'!!!Could not access {gh}; {e}'
if pre=='pre': rels = rels[0]
urls = L(rels['assets']).itemgot('browser_download_url')
if search: urls = [o for o in urls if re.search(search[0], o)]
return '\n'.join(urls)
find_releases('latest/pytorch/pytorch')
'https://github.com/pytorch/pytorch/releases/download/v2.8.0/pytorch-v2.8.0.tar.gz'
find_releases('latest/caddyserver/caddy/linux_amd64.tar.gz$')
'https://github.com/caddyserver/caddy/releases/download/v2.10.2/caddy_2.10.2_linux_amd64.tar.gz'
print(find_releases('pre/electron/electron/darwin-arm64'))
https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/chromedriver-v39.0.0-alpha.5-darwin-arm64.zip https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/electron-v39.0.0-alpha.5-darwin-arm64-dsym-snapshot.zip https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/electron-v39.0.0-alpha.5-darwin-arm64-dsym.zip https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/electron-v39.0.0-alpha.5-darwin-arm64-symbols.zip https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/electron-v39.0.0-alpha.5-darwin-arm64.zip https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/ffmpeg-v39.0.0-alpha.5-darwin-arm64.zip https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/mksnapshot-v39.0.0-alpha.5-darwin-arm64.zip
find_releases('invalid')
'!!!Invalid path'
# Test non-existent repo
find_releases('latest/nonexistent/repo')
'!!!Could not access https://api.github.com/repos/nonexistent/repo/releases/latest; HTTP Error 404: Not Found\n====Error Body====\n{\n "message": "Not Found",\n "documentation_url": "https://docs.github.com/rest/releases/releases#get-the-latest-release",\n "status": "404"\n}\n'
#| hide
import nbdev; nbdev.nbdev_export()