2025-10-27 19:18:28 +00:00
|
|
|
import os
|
2025-11-03 21:39:40 +00:00
|
|
|
import json
|
|
|
|
|
from urllib.request import urlopen, Request
|
2025-10-27 19:18:28 +00:00
|
|
|
|
|
|
|
|
OWNER = "Nonannet"
|
|
|
|
|
REPO = "copapy"
|
|
|
|
|
|
2025-11-03 21:39:40 +00:00
|
|
|
def fetch_json(url: str):
|
|
|
|
|
req = Request(url, headers={"User-Agent": "Python"})
|
|
|
|
|
with urlopen(req, timeout=10) as resp:
|
|
|
|
|
assert resp.status == 200
|
|
|
|
|
return json.load(resp)
|
|
|
|
|
|
|
|
|
|
def download_file(url: str, dest_path: str):
|
|
|
|
|
req = Request(url, headers={"User-Agent": "Python"})
|
|
|
|
|
with urlopen(req, timeout=30) as resp, open(dest_path, "wb") as f:
|
|
|
|
|
f.write(resp.read())
|
|
|
|
|
|
2025-10-27 19:18:28 +00:00
|
|
|
def main() -> None:
|
|
|
|
|
# Get all releases (includes prereleases)
|
|
|
|
|
api_url = f"https://api.github.com/repos/{OWNER}/{REPO}/releases"
|
2025-11-03 21:39:40 +00:00
|
|
|
releases = fetch_json(api_url)
|
2025-10-27 19:18:28 +00:00
|
|
|
|
|
|
|
|
assert releases, "No releases found."
|
|
|
|
|
|
|
|
|
|
release = releases[0] # newest release (first in list)
|
|
|
|
|
tag = release["tag_name"]
|
|
|
|
|
print(f"Found latest release: {tag}")
|
|
|
|
|
|
|
|
|
|
assets = release.get("assets", [])
|
|
|
|
|
assert assets, "No assets found for this release."
|
|
|
|
|
|
|
|
|
|
for asset in assets:
|
|
|
|
|
url = asset["browser_download_url"]
|
|
|
|
|
name: str = asset["name"]
|
|
|
|
|
|
|
|
|
|
if name.endswith('.o'):
|
|
|
|
|
dest = 'src/copapy/obj'
|
|
|
|
|
elif name == 'coparun.exe' and os.name == 'nt':
|
|
|
|
|
dest = 'bin'
|
|
|
|
|
elif name == 'coparun' and os.name == 'posix':
|
|
|
|
|
dest = 'bin'
|
2025-10-30 09:55:23 +00:00
|
|
|
elif name.startswith('coparun-'):
|
|
|
|
|
dest = 'bin'
|
2025-10-27 19:18:28 +00:00
|
|
|
else:
|
|
|
|
|
dest = ''
|
|
|
|
|
|
|
|
|
|
if dest:
|
|
|
|
|
os.makedirs(dest, exist_ok=True)
|
|
|
|
|
print(f"- Downloading {name} ...")
|
2025-11-03 21:39:40 +00:00
|
|
|
download_file(url, os.path.join(dest, name))
|
2025-10-27 19:18:28 +00:00
|
|
|
print(f"- Saved {name} to {dest}")
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|