gitlink-cli/demo/pr-guard-workflow.sh

77 lines
4.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# ============================================================
# 代码质量看门人 · 端到端工作流脚本(子任务三)
# 串联 5 步:采集 PR → AI Review → CI 检查 → 汇总评论 → 质量判定
# 用法bash demo/pr-guard-workflow.sh <owner> <repo> <pr_id>
# 例bash demo/pr-guard-workflow.sh myorg myproject 42
# 前置gitlink-cli auth login涉及平台 API
# 说明采集命令真实执行Review 分析由 AI Agent读 pr-guard/SKILL.md完成
# ============================================================
_DIR="$(cd "$(dirname "$0")" && pwd)"
CLI="$_DIR/../gitlink-cli.exe"; [ -f "$CLI" ] || CLI="$_DIR/../gitlink-cli" # Win→.exeLinux→无后缀
OWNER="${1:-}"; REPO="${2:-}"; PR_ID="${3:-}"
G='\033[0;32m'; Y='\033[1;33m'; C='\033[0;36m'; R='\033[0;31m'; B='\033[1m'; N='\033[0m'
banner() { echo -e "\n${B}══════════════════════════════════════════════════════${N}"; echo -e "${B} $1${N}"; echo -e "${B}══════════════════════════════════════════════════════${N}"; }
step() { echo -e "\n${C}━━━ Step $1 ━━━ ${B}$2${N}"; }
ai() { echo -e "🤖 ${G}AI读 pr-guard/SKILL.md 后):${N} $1"; }
run() { echo -e "${Y} $1${N}"; eval "$1" 2>&1 | head -16; echo; }
# ---------- 前置检查 ----------
banner "代码质量看门人 · PR #${PR_ID:-?} 质量流水线"
[ -f "$CLI" ] || { echo -e "${R}✗ 找不到 gitlink-cli${N}"; exit 1; }
if [ -z "$OWNER" ] || [ -z "$REPO" ] || [ -z "$PR_ID" ]; then
echo -e "${R}用法: bash $0 <owner> <repo> <pr_id>${N}"
echo -e "${R}例 : bash $0 myorg myproject 42${N}"; exit 1
fi
echo -e "${G}${N} 目标: ${B}$OWNER/$REPO${N} PR #${B}$PR_ID${N}"
# ---------- Step 1采集 PR 变更 ----------
step 1 "采集 PR 变更pr +view / +files / +diff"
ai "先拉 PR 详情、变更文件、diff 统计,作为审查输入。"
run "\"$CLI\" pr +view --id $PR_ID --format json"
run "\"$CLI\" pr +files --id $PR_ID --format json"
run "\"$CLI\" pr +diff --id $PR_ID --stat"
# ---------- Step 2AI Review复用 code-review 逻辑)----------
step 2 "AI Review按 code-review 分级找问题)"
ai "逐文件分析 diff按安全红线/错误处理/规范分级。这一步由 AI Agent 完成(读 code-review/SKILL.md。"
echo -e " ${C}分级框架${N}"
echo -e " 🔴 Critical硬编码密钥 / SQL·命令注入 / 路径遍历(安全红线,阻断合并)"
echo -e " 🟡 Warning :错误处理缺失 / 边界条件 / 明文敏感信息"
echo -e " 🔵 Suggestion命名 / 性能 / 可配置化"
echo -e " ${C}Agent 在此输出分级清单(示例见 SKILL.md 输出模板)${N}"
# ---------- Step 3CI 检查 ----------
step 3 "CI 检查ci +builds"
ai "查 PR 对应分支的最新构建状态,作为门禁第二维。"
run "\"$CLI\" ci +builds --owner $OWNER --repo $REPO --format json"
echo -e " ${C}判定:从返回按 source_branch 匹配最新构建 → success / failure / pending${N}"
# ---------- Step 4发布汇总评论 ----------
step 4 "发布质量看门人报告api POST .../reviews"
ai "把 Review 意见 + CI 状态 + 质量判定组装成报告,评论到 PR。"
echo -e "${Y} gitlink-cli api POST /$OWNER/$REPO/pulls/$PR_ID/reviews --body '<报告>'${N}"
echo -e " ${C}报告含${N}:质量判定 + Critical/Warning 清单 + CI 状态 + 处置建议"
echo -e " ${C}[实演时此处真实发送;脚本演示仅展示结构]${N}"
# ---------- Step 5质量判定 ----------
step 5 "质量判定(门禁规则 → 合并 / 请求修改)"
ai "按门禁规则决策。注意:合并是写操作,默认只建议,确认后才执行。"
echo -e " ${C}门禁规则${N}"
echo -e " 0 Critical + CI success → ✅ 通过,建议合并"
echo -e " 有 Critical 任一 → 🔴 拒绝,请求修改"
echo -e " CI failure → 🔴 拒绝,附 CI 日志"
echo -e " 仅 Warning/Suggestion → 🟡 通过(带建议)"
echo ""
echo -e " ${G}若判定通过 + 用户确认 →${N} ${Y}gitlink-cli pr +merge --id $PR_ID --method squash${N}"
# ---------- 总结 ----------
banner "流水线完成"
echo -e "${B}代码质量看门人${N} 串联了 ${B}5 步${N},覆盖 ${B}4 个 CLI 域${N}"
echo -e " pr采集/合并)+ code-reviewReview+ ci构建+ api评论"
echo -e "\n${C}真实演示${N}:登录后对本仓库一个真实 PR 跑此脚本,由 AI 完成 Step 2 分析。"
echo -e "详见 ${Y}pr-guard-architecture.md${N}(工作流说明 + 架构图)"
read -p "按回车键继续..."