|
import os |
|
import requests |
|
import gradio as gr |
|
|
|
|
|
def create_github_release( |
|
owner: str, |
|
repo: str, |
|
token: str, |
|
release_tag: str, |
|
release_name: str, |
|
release_description: str, |
|
files: list, |
|
): |
|
try: |
|
|
|
release_response = requests.post( |
|
f"https://api.github.com/repos/{owner}/{repo}/releases", |
|
headers={ |
|
"Authorization": f"token {token}", |
|
"Accept": "application/vnd.github.v3+json", |
|
}, |
|
json={ |
|
"tag_name": release_tag, |
|
"name": release_name, |
|
"body": release_description, |
|
"draft": False, |
|
"prerelease": False, |
|
}, |
|
) |
|
|
|
if release_response.status_code != 201: |
|
return f"Failed to create release: {release_response.status_code}, {release_response.json()}" |
|
|
|
|
|
release = release_response.json() |
|
upload_url = release["upload_url"].split("{")[0] |
|
|
|
|
|
results = [] |
|
for file_path in files: |
|
file_name = os.path.basename(file_path) |
|
with open(file_path, "rb") as binary_file: |
|
upload_response = requests.post( |
|
f"{upload_url}?name={file_name}", |
|
headers={ |
|
"Authorization": f"token {token}", |
|
"Content-Type": "application/octet-stream", |
|
}, |
|
data=binary_file, |
|
) |
|
|
|
if upload_response.status_code == 201: |
|
results.append(f"Binary file '{file_name}' uploaded successfully!") |
|
else: |
|
results.append( |
|
f"Failed to upload binary file '{file_name}': {upload_response.status_code}, {upload_response.json()}" |
|
) |
|
|
|
return "\n".join(results) |
|
|
|
except Exception as e: |
|
return f"Release failed: {e}" |
|
|
|
|
|
if __name__ == "__main__": |
|
gr.Interface( |
|
fn=create_github_release, |
|
inputs=[ |
|
gr.Textbox( |
|
label="GitHub Owner", |
|
placeholder="username / organization name", |
|
show_copy_button=True, |
|
), |
|
gr.Textbox( |
|
label="GitHub Repo", |
|
placeholder="repo name", |
|
show_copy_button=True, |
|
), |
|
gr.Textbox( |
|
label="GitHub Token", |
|
placeholder="personal access token", |
|
type="password", |
|
), |
|
gr.Textbox( |
|
label="Release Tag", |
|
placeholder="v1.0.0", |
|
show_copy_button=True, |
|
), |
|
gr.Textbox( |
|
label="Release Name", |
|
placeholder="My New Release", |
|
show_copy_button=True, |
|
), |
|
gr.TextArea( |
|
label="Describe this release", |
|
placeholder="Release with binary file(s) and source code.", |
|
show_copy_button=True, |
|
), |
|
gr.File(label="Binary File(s)", file_count="multiple"), |
|
], |
|
outputs=gr.TextArea(label="Status", show_copy_button=True), |
|
title="GitHub Release Creator", |
|
description="Upload binary file(s) to create a new GitHub release.", |
|
flagging_mode="never", |
|
).launch() |
|
|