mirror of
https://github.com/1c7/chinese-independent-developer.git
synced 2026-08-16 18:13:28 +08:00
自动化
This commit is contained in:
30
.github/README.md
vendored
30
.github/README.md
vendored
@@ -1,15 +1,29 @@
|
||||
## `.github/` 的文档
|
||||
|
||||
## 需求(想做到什么?)
|
||||
我希望将 "用户提交产品"(新增一条 Github Issue 的 Comment)
|
||||
到 "存入 .md 文件",这个流程进行自动化。减少我的时间投入。
|
||||
## 概括
|
||||
用户在 https://github.com/1c7/chinese-independent-developer/issues/160 提交评论。
|
||||
大部分情况下,格式是不符合规范的(可以理解)
|
||||
需要用程序自动化处理,减少我的时间投入。
|
||||
|
||||
## 如何本地运行
|
||||
## 流程
|
||||
1. 我在用户提交的评论点击 🚀 图标(表情)
|
||||
1. 触发 Github Action 执行(手动触发 或 定时执行(每 6 小时)
|
||||
1. Github Action 会触发 .github/scripts/process_item.py
|
||||
2. 查找 "当前日期-3天" 开始(这个时间点往后) 所有标记 🚀 图标 的评论
|
||||
3. 处理格式,创建 Pull Request。
|
||||
4. 给评论新增一个 🎉 图标(意思是"处理完成")
|
||||
7. 回复这条评论:感谢提交,已添加。
|
||||
|
||||
我只需要修改 PR 然后 merge 就行。
|
||||
|
||||
一句话概括:我点击 🚀 标签,然后 PR 会自动创建,我只需要 merge PR。我大概点击 3 次左右就可以了(如果介绍语有改进空间,我还得改一下文字,然后才 merge)
|
||||
|
||||
## 本地运行(为了开发调试)
|
||||
```bash
|
||||
export GITHUB_TOKEN="你的_github_token"
|
||||
export LLM_API_KEY="你的_ai_key"
|
||||
export GITHUB_REPOSITORY="你的用户名/你的仓库名"
|
||||
cp .env.example .env
|
||||
|
||||
python .github/scripts/process_item.py
|
||||
uv sync
|
||||
|
||||
uv run .github/scripts/process_item.py
|
||||
```
|
||||
|
||||
|
||||
27
.github/scripts/process_item.py
vendored
27
.github/scripts/process_item.py
vendored
@@ -13,7 +13,7 @@ REPO_NAME = "1c7/chinese-independent-developer" # os.getenv("GITHUB_REPOSITORY")
|
||||
ISSUE_NUMBER = 160 # 你在维护的那个 Issue 编号
|
||||
ADMIN_HANDLE = "1c7" # 替换为你的 GitHub ID
|
||||
TRIGGER_EMOJI = "rocket" # 🚀
|
||||
SUCCESS_EMOJI = "white_check_mark" # ✅
|
||||
SUCCESS_EMOJI = "hooray" # 🎉
|
||||
# ==========================================
|
||||
|
||||
def get_ai_format(raw_text):
|
||||
@@ -21,10 +21,6 @@ def get_ai_format(raw_text):
|
||||
prompt = f"""
|
||||
你是一个严格的文案编辑。任务是将用户的项目介绍转换为标准的 Markdown 格式。
|
||||
|
||||
严格规则:
|
||||
1. 严禁使用“一款、一个、一种、完全免费、高效、简洁、强大、快速、好用”等营销形容词。
|
||||
2. 描述部分必须以“用途”或“核心功能”作为动词开头,直接描述它是什么。
|
||||
3. 严禁使用加粗格式(即不要使用 ** 包裹文字)。
|
||||
4. 格式模板:
|
||||
#### 制作者名字 - [Github](链接)
|
||||
* :white_check_mark: [项目名](链接):用途描述
|
||||
@@ -33,7 +29,7 @@ def get_ai_format(raw_text):
|
||||
{raw_text}
|
||||
"""
|
||||
response = client.chat.completions.create(
|
||||
model="gpt-4o-mini", # 或者使用 deepseek-chat
|
||||
model="deepseek-reasoner", # 或者使用 deepseek-chat
|
||||
messages=[{"role": "user", "content": prompt}],
|
||||
temperature=0.3
|
||||
)
|
||||
@@ -59,7 +55,7 @@ def main():
|
||||
# 1. 检查是否有你的 🚀 反应
|
||||
reactions = comment.get_reactions()
|
||||
has_trigger = any(r.content == TRIGGER_EMOJI and r.user.login == ADMIN_HANDLE for r in reactions)
|
||||
# 2. 检查是否已经标记过 ✅
|
||||
# 2. 检查是否已经标记过成功 🎉
|
||||
has_success = any(r.content == SUCCESS_EMOJI for r in reactions)
|
||||
|
||||
if has_trigger and not has_success:
|
||||
@@ -73,7 +69,7 @@ def main():
|
||||
readme_text = content.decoded_content.decode("utf-8")
|
||||
|
||||
# 插入日期逻辑
|
||||
today_str = datetime.datetime.now().strftime("%Y 年 %m 月 %d 号添加")
|
||||
today_str = datetime.now().strftime("%Y 年 %m 月 %d 号添加")
|
||||
date_header = f"### {today_str}"
|
||||
|
||||
if date_header not in readme_text:
|
||||
@@ -89,6 +85,15 @@ def main():
|
||||
# 创建新分支并提交 PR
|
||||
branch_name = f"add-project-{comment.id}"
|
||||
base = repo.get_branch("master")
|
||||
|
||||
# 检查分支是否已存在,如果存在则删除
|
||||
try:
|
||||
existing_ref = repo.get_git_ref(f"heads/{branch_name}")
|
||||
existing_ref.delete()
|
||||
print(f"已删除现有分支: {branch_name}")
|
||||
except:
|
||||
pass # 分支不存在,继续
|
||||
|
||||
repo.create_git_ref(ref=f"refs/heads/{branch_name}", sha=base.commit.sha)
|
||||
|
||||
repo.update_file(
|
||||
@@ -99,16 +104,16 @@ def main():
|
||||
branch=branch_name
|
||||
)
|
||||
|
||||
repo.create_pull(
|
||||
pr = repo.create_pull(
|
||||
title=f"新增项目:来自评论 {comment.id}",
|
||||
body=f"由管理员 {ADMIN_HANDLE} 标记并自动生成。\n原始评论:{comment.html_url}",
|
||||
head=branch_name,
|
||||
base="master"
|
||||
)
|
||||
|
||||
# 标记为成功,并回复
|
||||
# 用表情标记为成功,并回复
|
||||
comment.create_reaction(SUCCESS_EMOJI)
|
||||
comment.create_comment("感谢提交,已添加至待审核列表(PR 已创建)。")
|
||||
# comment.create_comment(f"感谢提交,已添加!\n\nPR 链接:{pr.html_url}")
|
||||
|
||||
processed_count += 1
|
||||
print(f"评论 {comment.id} 处理成功,已创建 PR。")
|
||||
|
||||
2
.github/workflows/process_list.yml
vendored
2
.github/workflows/process_list.yml
vendored
@@ -25,5 +25,5 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
|
||||
# 如果你用的不是 OpenAI 原生接口,可以设置这个环境变量,否则默认使用 OpenAI
|
||||
# LLM_BASE_URL: "https://api.deepseek.com/v1"
|
||||
LLM_BASE_URL: "https://api.deepseek.com"
|
||||
run: python .github/scripts/process_item.py
|
||||
Reference in New Issue
Block a user