diff --git a/skills/gitlink-community-ops/scripts/01-issue-triage.sh b/skills/gitlink-community-ops/scripts/01-issue-triage.sh index c5563f5..9767cd8 100644 --- a/skills/gitlink-community-ops/scripts/01-issue-triage.sh +++ b/skills/gitlink-community-ops/scripts/01-issue-triage.sh @@ -7,7 +7,6 @@ # ================================================================ set -e -# ---- 参数解析 ---- OWNER=${1:?"Usage: $0 "} REPO=${2} DRY_RUN=${DRY_RUN:-true} @@ -21,7 +20,7 @@ echo "[ Target: $OWNER/$REPO ]" echo "[ DRY_RUN: $DRY_RUN ]" echo "[========================================]" -# ---- Step 1: 获取所有打开的 Issue ---- +# Step 1: 获取所有打开的 Issue echo "[INFO] 获取所有打开的 Issue..." ISSUES=$(gitlink-cli issue +list --owner "$OWNER" --repo "$REPO" --state open --format json 2>&1) || { echo "[ERROR] 获取 Issue 列表失败: $ISSUES" @@ -29,7 +28,6 @@ ISSUES=$(gitlink-cli issue +list --owner "$OWNER" --repo "$REPO" --state open -- } echo "$ISSUES" > "$OUTPUT_DIR/issues-open.json" -# 解析 Issue 数量(支持两种 data 格式:数组或 {total_count, issues[]}) TOTAL=$(echo "$ISSUES" | node -e " let s=''; process.stdin.on('data',d=>s+=d).on('end',()=>{ @@ -40,25 +38,22 @@ TOTAL=$(echo "$ISSUES" | node -e " " 2>/dev/null || echo "0") echo "[INFO] 发现 $TOTAL 个待处理的 Issue" - if [ "$TOTAL" -eq 0 ]; then echo "[INFO] 没有待处理的 Issue,跳过" exit 0 fi -# ---- Step 2: 获取可用标签 ---- +# Step 2: 获取可用标签 echo "[INFO] 获取可用标签列表..." LABELS=$(gitlink-cli label +list --owner "$OWNER" --repo "$REPO" --format json 2>&1) || { - echo "[WARN] 获取标签列表失败,使用默认标签: $LABELS" + echo "[WARN] 获取标签列表失败" LABELS='{"data":[]}' } echo "$LABELS" > "$OUTPUT_DIR/labels.json" -# ---- Step 3: 逐 Issue 分析 ---- +# Step 3: 逐 Issue 分析 echo "[INFO] 开始分析每个 Issue..." - for i in $(seq 0 $((TOTAL - 1))); do - # 提取 Issue 基本信息 ISSUE_DATA=$(echo "$ISSUES" | node -e " let s=''; process.stdin.on('data',d=>s+=d).on('end',()=>{ @@ -79,35 +74,48 @@ for i in $(seq 0 $((TOTAL - 1))); do echo "" echo "[INFO] --- Issue #$NUMBER: $SUBJECT ---" - # 获取 Issue 详情(含 description) + # 获取 Issue 详情 DETAIL=$(gitlink-cli issue +view --owner "$OWNER" --repo "$REPO" --number "$NUMBER" --format json 2>&1) || { echo "[WARN] 获取 Issue #$NUMBER 详情失败,使用标题分析" DETAIL="{\"data\":{\"subject\":\"$SUBJECT\",\"description\":\"\"}}" } echo "$DETAIL" > "$OUTPUT_DIR/issue-$NUMBER-detail.json" - # ---- 关键词权重分析(AI 在此处执行) ---- - # AI Agent 读取 title + description,按权重矩阵计算分类得分 - # 注意:以下分析由 AI 在运行脚本时根据实际内容进行 - echo "[INFO] AI 分析中...(关键词权重评分)" - echo "[INFO] 分析依据:gitlink-issue-triage/SKILL.md 权重分类矩阵" - echo "[INFO] 参考命令:issue +view -> labels -> issue +update + issue +comment" - - # 生成分类建议(占位,AI 在实际运行时填入) + # ---- Step 4: 关键词权重分析(自动分类) ---- CATEGORY="needs-triage" LABEL_ID="" - URGENCY="P3" - COMMENT_BODY="" + LABEL_NAME="" + COMMENT_TEXT="" - # ---- Step 4: 打标签(dry-run 保护) ---- + # 简单关键词匹配 + case "$SUBJECT" in + *[Bb]ug*|*错误*|*失败*|*异常*|*crash*|*报错*) + CATEGORY="bug"; LABEL_ID="325573"; LABEL_NAME="缺陷" + COMMENT_TEXT="AI 自动分类结果:🐛 Bug(缺陷)" + ;; + *建议*|*希望*|*需要*|*feature*|*新增*|*支持*) + CATEGORY="enhancement"; LABEL_ID="325574"; LABEL_NAME="功能" + COMMENT_TEXT="AI 自动分类结果:✨ 功能需求" + ;; + *文档*|*README*|*拼写*|*帮助*|*doc*) + CATEGORY="documentation"; LABEL_ID="325580"; LABEL_NAME="文档" + COMMENT_TEXT="AI 自动分类结果:📝 文档" + ;; + esac + echo "[INFO] 分类结果: $CATEGORY (标签: $LABEL_NAME)" + + # ---- Step 5: 打标签 + 加评论 ---- if [ "$DRY_RUN" = "true" ]; then - echo "[DRY-RUN] 将为 Issue #$NUMBER 添加标签: \$CATEGORY" - echo "[DRY-RUN] 将添加引导评论" + echo "[DRY-RUN] 将为 Issue #$NUMBER 添加标签: $LABEL_NAME ($LABEL_ID)" + echo "[DRY-RUN] 将添加引导评论: $COMMENT_TEXT" else echo "[INFO] 为 Issue #$NUMBER 打标签和添加评论..." - # 实际执行(由 AI 填入具体参数) - # gitlink-cli issue +update --owner "$OWNER" --repo "$REPO" --number "$NUMBER" --labels "$LABEL_ID" - # gitlink-cli issue +comment --owner "$OWNER" --repo "$REPO" --number "$NUMBER" --body "$COMMENT_BODY" + if [ -n "$LABEL_ID" ]; then + gitlink-cli issue +update --owner "$OWNER" --repo "$REPO" --number "$NUMBER" --labels "$LABEL_ID" 2>&1 || echo "[WARN] 打标签失败" + fi + if [ -n "$COMMENT_TEXT" ]; then + gitlink-cli issue +comment --owner "$OWNER" --repo "$REPO" --number "$NUMBER" --body "$COMMENT_TEXT" 2>&1 || echo "[WARN] 添加评论失败" + fi echo "[INFO] Issue #$NUMBER 处理完成" fi done