online_tools / modules /github.py
admin
sync ms
35429ce
raw
history blame
3.35 kB
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",
)