Spaces:
Running
Running
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 | |
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()}" | |
# 获取上传 URL | |
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() | |