Skip to content

Commit 249c99e

Browse files
committed
add project support for task priority (default by label) and optimize summary reporter
1 parent bd43f9f commit 249c99e

File tree

5 files changed

+669
-20
lines changed

5 files changed

+669
-20
lines changed
Lines changed: 296 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,296 @@
1+
# Task Checker 优先级设置指南
2+
3+
## 概述
4+
5+
Task Checker 支持两种方式识别 Issue 的优先级:
6+
7+
1. **GitHub Labels(标签)** - 简单直接
8+
2. **GitHub Projects V2 字段** - 功能强大但需要额外配置
9+
10+
## 方法 1: 使用 Labels(推荐用于简单场景)
11+
12+
### 设置步骤
13+
14+
1. **创建优先级标签**
15+
16+
在仓库中创建以下标签:
17+
- `P0` - 最高优先级(紧急)
18+
- `P1` - 重要优先级
19+
- `P2` - 一般优先级
20+
21+
2. **给 Issue 添加标签**
22+
23+
为需要检查的 Task Issue 添加对应的优先级标签。
24+
25+
3. **配置文件**
26+
27+
`config/task-checker.yml` 中配置:
28+
```yaml
29+
priority_pattern: "^P([012])$" # 匹配 P0, P1, P2 标签
30+
```
31+
32+
### 优点
33+
- ✅ 简单直接,易于设置
34+
- ✅ 无需额外 API 权限
35+
- ✅ 在 Issue 列表中可见
36+
37+
### 缺点
38+
- ❌ 标签会显示在 Issue 上,可能造成视觉混乱
39+
- ❌ 无法使用 Projects 的高级功能(看板、视图等)
40+
41+
## 方法 2: 使用 GitHub Projects V2 字段
42+
43+
### 设置步骤
44+
45+
1. **创建 GitHub Project**
46+
47+
- 进入组织或仓库
48+
- 创建一个新的 Project (Projects V2)
49+
50+
2. **添加优先级字段**
51+
52+
在 Project 中添加一个 **Single Select** 类型的自定义字段:
53+
- 字段名称:`Priority` 或 `优先级`
54+
- 选项值:
55+
- `P0` - 紧急
56+
- `P1` - 重要
57+
- `P2` - 一般
58+
59+
3. **添加 Issues 到 Project**
60+
61+
- 将需要检查的 Task Issues 添加到 Project
62+
- 为每个 Issue 设置优先级字段
63+
64+
4. **配置 GitHub Token 权限**
65+
66+
**重要:** 使用 Projects V2 需要特殊的 API 权限。
67+
68+
目前 GitHub 的 REST API Search 不返回 Projects V2 数据,需要使用 **GraphQL API**。
69+
70+
### 当前限制
71+
72+
⚠️ **注意:** 当前版本的 `get_priority_from_project()` 函数期望 Issue 对象包含 `projectItems` 字段,但标准的 REST API Search 不会返回这个字段。
73+
74+
要使用 Project 字段功能,需要:
75+
76+
#### 选项 A: 使用 GraphQL API(需要代码修改)
77+
78+
修改 `search_issues()` 函数使用 GraphQL API 查询:
79+
80+
```graphql
81+
query {
82+
search(query: "repo:owner/name is:issue is:open label:Task", type: ISSUE, first: 100) {
83+
nodes {
84+
... on Issue {
85+
number
86+
title
87+
url
88+
updatedAt
89+
projectItems(first: 10) {
90+
nodes {
91+
fieldValues(first: 20) {
92+
nodes {
93+
... on ProjectV2ItemFieldSingleSelectValue {
94+
field {
95+
... on ProjectV2FieldCommon {
96+
name
97+
}
98+
}
99+
name
100+
}
101+
}
102+
}
103+
}
104+
}
105+
}
106+
}
107+
}
108+
}
109+
```
110+
111+
#### 选项 B: 暂时使用 Labels
112+
113+
在 Projects V2 完全支持之前,建议使用 **Labels** 方式设置优先级。
114+
115+
## 混合使用
116+
117+
Bot 会自动尝试两种方式:
118+
1. 首先检查 Labels
119+
2. 如果没有找到,尝试检查 Project 字段
120+
121+
这样可以同时支持两种方式,灵活使用。
122+
123+
## 检查优先级设置是否生效
124+
125+
### 运行 verbose 模式
126+
127+
```bash
128+
python src/main.py task-checker --verbose
129+
```
130+
131+
### 查看输出
132+
133+
```
134+
找到 15 个 Task 标签的 Issue
135+
136+
检查 Issue #123: 修复登录问题
137+
⊘ 跳过: 未设置优先级(无标签或Project字段)
138+
139+
检查 Issue #124: 性能优化
140+
优先级: P1, 超时阈值: 48h, 距上次更新: 50.2h
141+
✓ 发送超时提醒
142+
```
143+
144+
### 查看摘要报告
145+
146+
摘要会显示详细的统计信息:
147+
148+
```markdown
149+
### ⏰ 任务检查器 (Task Checker)
150+
- **问题总数 (Task标签):** 15
151+
- **检查的问题 (有优先级):** 10
152+
- **发送提醒:** 3 📬
153+
- **跳过的问题:** 5
154+
- 未设置优先级 (无Project/标签): 5
155+
```
156+
157+
**解读:**
158+
- 找到 15 个有 Task 标签的 Issue
159+
- 其中 10 个设置了优先级(通过 Label 或 Project)
160+
- 5 个没有设置优先级,被跳过
161+
162+
## 故障排除
163+
164+
### 问题:检查的问题为 0
165+
166+
**原因:** 所有 Issue 都没有设置优先级。
167+
168+
**解决方案:**
169+
1. 检查是否创建了 P0/P1/P2 标签
170+
2. 检查 Issue 是否添加了这些标签
171+
3. 如果使用 Projects,确认:
172+
- Issue 已添加到 Project
173+
- Priority 字段已设置
174+
- API 返回了 `projectItems` 数据(当前可能不支持)
175+
176+
### 问题:使用 Project 但优先级识别失败
177+
178+
**原因:** REST API Search 不返回 Projects V2 数据。
179+
180+
**解决方案:**
181+
1. 临时使用 Labels 方式
182+
2. 等待代码更新支持 GraphQL API
183+
3. 或者自行修改代码使用 GraphQL
184+
185+
### 问题:部分 Issue 被跳过
186+
187+
查看 verbose 输出和摘要报告的详细统计:
188+
- **未设置优先级**: 没有 Label 也没有 Project 字段
189+
- **优先级不在检查范围**: 比如设置了 P3,但配置只检查 P0/P1/P2
190+
- **未配置超时**: 比如设置了 P1,但配置文件中没有 P1 的 `timeout_hours`
191+
- **未超时**: 有优先级且距上次更新时间未超过阈值
192+
193+
## 推荐配置
194+
195+
### 简单场景(小团队/少量仓库)
196+
197+
使用 **Labels** 方式:
198+
199+
```yaml
200+
# config/task-checker.yml
201+
task_label: Task
202+
priority_pattern: "^P([012])$"
203+
204+
priorities_to_check:
205+
- P0
206+
- P1
207+
- P2
208+
209+
timeout_hours:
210+
P0: 24 # 24小时
211+
P1: 48 # 48小时
212+
P2: 120 # 5天
213+
```
214+
215+
### 复杂场景(大团队/多仓库)
216+
217+
未来支持 Projects V2 后:
218+
219+
```yaml
220+
# config/task-checker.yml
221+
task_label: Task
222+
use_project_priority: true # 优先使用 Project 字段
223+
priority_pattern: "^P([012])$" # 作为备用
224+
225+
priorities_to_check:
226+
- P0
227+
- P1
228+
- P2
229+
230+
timeout_hours:
231+
P0: 12 # 12小时(紧急)
232+
P1: 48 # 48小时(重要)
233+
P2: 168 # 7天(一般)
234+
```
235+
236+
## 相关配置
237+
238+
### task-checker.yml 完整示例
239+
240+
```yaml
241+
# 扫描模式: "repo" 或 "org"
242+
scan_mode: org
243+
244+
# 组织名称(scan_mode=org 时使用)
245+
org: mcpp-community
246+
247+
# 仓库名称(scan_mode=repo 时使用)
248+
# repo: mcpp-community/mcpp-bot
249+
250+
# 任务标签
251+
task_label: Task
252+
253+
# 优先级标签匹配模式
254+
priority_pattern: "^P([012])$"
255+
256+
# 需要检查的优先级
257+
priorities_to_check:
258+
- P0
259+
- P1
260+
- P2
261+
262+
# 超时时间配置(小时)
263+
timeout_hours:
264+
P0: 24 # 24小时
265+
P1: 48 # 48小时
266+
P2: 120 # 5天
267+
268+
# 排除的仓库(可选)
269+
exclude_repos:
270+
- mcpp-community/archived-repo
271+
- test-repo
272+
273+
# 提醒消息模板(可选)
274+
reminder_template: |
275+
⏰ **任务提醒**
276+
277+
{assignees} 这个 {priority} 优先级的任务已经 {hours:.1f} 小时没有更新了。
278+
279+
请及时更新进度或状态。
280+
281+
**Issue:** {title}
282+
**超时阈值:** {timeout} 小时
283+
284+
# 是否提醒未分配的任务(可选)
285+
notify_unassigned: false
286+
287+
# 未分配任务的默认提及(可选)
288+
default_mention: "@team"
289+
```
290+
291+
## 总结
292+
293+
- ✅ **现在推荐**:使用 Labels (P0, P1, P2) 方式
294+
- 🚧 **未来支持**:GitHub Projects V2 字段(需要 GraphQL API)
295+
- 📊 **新增功能**:详细的跳过原因统计
296+
- 🔍 **调试工具**:verbose 模式显示每个 issue 的处理过程

0 commit comments

Comments
 (0)