mirror of https://github.com/PurpleI2P/pyseeder
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.8 KiB
55 lines
1.8 KiB
#!/usr/bin/env python3 |
|
# (re)uploads reseed file to github repository releases as an asset |
|
import requests |
|
|
|
from urllib.parse import urljoin |
|
from mimetypes import guess_type |
|
import sys |
|
import os |
|
|
|
from pyseeder.utils import TransportException |
|
|
|
TRANSPORT_NAME = "github" |
|
|
|
def run(filename, config): |
|
API_URL = "https://api.github.com/" |
|
asset_name = os.path.split(filename)[-1] |
|
content_type = guess_type(asset_name)[0] or "application/zip" |
|
creds = (config["username"], config["token"]) |
|
release_info_url = urljoin(API_URL, "/repos/{}/releases/tags/{}".format( |
|
config["repo"], config["release_tag"])) |
|
|
|
# get release info |
|
try: |
|
release = requests.get(release_info_url, auth=creds) |
|
except: |
|
raise TransportException("Failed to connect to GitHub API") |
|
|
|
if release.status_code is not 200: |
|
raise TransportException("Check your GitHub API auth settings") |
|
|
|
# fetch release assets |
|
try: |
|
assets = requests.get(release.json()["assets_url"], auth=creds) |
|
except: |
|
raise TransportException("Unable get release assets") |
|
|
|
# delete old asset |
|
for x in assets.json(): |
|
if x["name"] == asset_name: |
|
r = requests.delete(x["url"], auth=creds) |
|
if r.status_code is not 204: |
|
raise TransportException("Failed to delete asset from GitHub") |
|
|
|
# upload new asset |
|
upload_url = release.json()["upload_url"].split("{")[0] # wat |
|
headers = {'Content-Type': content_type} |
|
params = {'name': asset_name} |
|
|
|
data = open(filename, 'rb').read() |
|
r = requests.post(upload_url, headers=headers, params=params, auth=creds, |
|
data=data) |
|
|
|
if r.status_code is not 201: |
|
raise TransportException("Failed to upload asset to GitHub API : code %d" % (r.status_code)) |
|
|
|
|