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()