Spaces:
Running
Running
import os | |
import requests | |
import gradio as gr | |
from utils import EN_US | |
ZH2EN = { | |
"仓库拥有者": "Repo owner", | |
"输入用户名或组织名": "Username / organization name", | |
"仓库名": "GitHub repo", | |
"输入仓库名": "Repo name", | |
"输入 personal access token": "Personal access token", | |
"发布标签": "Release tag", | |
"发布标题": "Release title", | |
"发布描述": "Describe this release", | |
"上传发布文件(可多选)": "Binary file(s)", | |
"状态栏": "Status", | |
"上传文件创建一个新的 GitHub 发布": "Upload binary file(s) to create a new GitHub release.", | |
} | |
def _L(zh_txt: str): | |
return ZH2EN[zh_txt] if EN_US else zh_txt | |
def create_github_release(owner, repo, token, tag, name, description, files): | |
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": tag, | |
"name": name, | |
"body": description, | |
"draft": False, | |
"prerelease": False, | |
}, | |
) | |
if response.status_code != 201: | |
raise ConnectionError(f"{response.status_code}: {response.json()}") | |
# 获取上传 URL | |
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: | |
upl_response = requests.post( | |
f"{upload_url}?name={file_name}", | |
headers={ | |
"Authorization": f"token {token}", | |
"Content-Type": "application/octet-stream", | |
}, | |
data=binary_file, | |
) | |
if upl_response.status_code == 201: | |
results += f"Upload '{file_name}' success!" | |
else: | |
results += f"Failed to upload {file_name}: {upl_response.status_code}, {upl_response.json()}" | |
return results | |
except Exception as e: | |
return f"{e}" | |
def github_release_creator(): | |
return gr.Interface( | |
fn=create_github_release, | |
inputs=[ | |
gr.Textbox(label=_L("仓库拥有者"), placeholder=_L("输入用户名或组织名")), | |
gr.Textbox(label=_L("仓库名"), placeholder=_L("输入仓库名")), | |
gr.Textbox( | |
label="GitHub Token", | |
placeholder=_L("输入 personal access token"), | |
type="password", | |
), | |
gr.Textbox(label=_L("发布标签"), placeholder="Release tag"), | |
gr.Textbox(label=_L("发布标题"), placeholder="Release title"), | |
gr.TextArea( | |
label=_L("发布描述"), | |
placeholder=_L("上传文件创建一个新的 GitHub 发布"), | |
), | |
gr.File(label=_L("上传发布文件(可多选)"), file_count="multiple"), | |
], | |
outputs=gr.TextArea(label=_L("状态栏"), show_copy_button=True), | |
flagging_mode="never", | |
) | |