2025-10-27 19:18:28 +00:00
|
|
|
import os
|
|
|
|
|
import requests
|
|
|
|
|
|
|
|
|
|
OWNER = "Nonannet"
|
|
|
|
|
REPO = "copapy"
|
|
|
|
|
|
|
|
|
|
def main() -> None:
|
|
|
|
|
# Get all releases (includes prereleases)
|
|
|
|
|
api_url = f"https://api.github.com/repos/{OWNER}/{REPO}/releases"
|
|
|
|
|
resp = requests.get(api_url, timeout=10)
|
|
|
|
|
resp.raise_for_status()
|
|
|
|
|
releases = resp.json()
|
|
|
|
|
|
|
|
|
|
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} ...")
|
|
|
|
|
r = requests.get(url, stream=True, timeout=30)
|
|
|
|
|
r.raise_for_status()
|
|
|
|
|
with open(os.path.join(dest, name), "wb") as f:
|
|
|
|
|
for chunk in r.iter_content(chunk_size=8192):
|
|
|
|
|
f.write(chunk)
|
|
|
|
|
print(f"- Saved {name} to {dest}")
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|