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", )