forked from Gitlink/gitlink-cli
fix: CI 状态检测改为读取状态文件,不再硬编码为通过
This commit is contained in:
parent
3a1565422c
commit
40609fa0f8
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/bash
|
||||
# ================================================================
|
||||
# Phase 3: CI 状态检查
|
||||
# 功能:检查 PR 关联的 CI 构建状态
|
||||
# 功能:检查 PR 关联的 CI 构建状态(尝试多个端点)
|
||||
# 使用:bash 03-ci-check.sh <owner> <repo> <pr_id>
|
||||
# ================================================================
|
||||
set -e
|
||||
|
|
@ -18,31 +18,59 @@ echo "[ Phase 3: CI 状态检查 ]"
|
|||
echo "[ PR #$PR_ID ($OWNER/$REPO) ]"
|
||||
echo "[========================================]"
|
||||
|
||||
# Step 1: 获取 CI 构建列表
|
||||
echo "[INFO] 获取 CI 构建列表..."
|
||||
BUILDS=$(gitlink-cli ci +builds --owner "$OWNER" --repo "$REPO" --format json 2>&1) || {
|
||||
echo "[WARN] 获取构建列表失败: $BUILDS"
|
||||
BUILDS='{"data":[]}'
|
||||
}
|
||||
echo "$BUILDS" > "$OUTPUT_DIR/ci-builds.json"
|
||||
CI_PASSING="unknown"
|
||||
CI_DETAIL=""
|
||||
|
||||
# Step 2: 获取 CI 运行记录
|
||||
echo "[INFO] 获取 CI 运行记录..."
|
||||
RUNS=$(gitlink-cli ci +runs --owner "$OWNER" --repo "$REPO" --format json 2>&1) || {
|
||||
echo "[WARN] 获取运行记录失败(可能不支持): $RUNS"
|
||||
RUNS='{"data":[]}'
|
||||
}
|
||||
echo "$RUNS" > "$OUTPUT_DIR/ci-runs.json"
|
||||
# 尝试方法1: ci +builds
|
||||
echo "[INFO] 尝试 ci +builds..."
|
||||
BUILDS=$(gitlink-cli ci +builds --owner "$OWNER" --repo "$REPO" --format json 2>&1) || BUILDS=""
|
||||
if [ -n "$BUILDS" ]; then
|
||||
echo "$BUILDS" > "$OUTPUT_DIR/ci-builds.json"
|
||||
# AI Agent 在此解析 builds 数据
|
||||
fi
|
||||
|
||||
# Step 3: AI 分析 CI 状态
|
||||
echo "[INFO] AI 分析 CI 状态中..."
|
||||
echo "[INFO] 检查:PR 分支关联的最新构建状态"
|
||||
# 尝试方法2: ci +runs
|
||||
echo "[INFO] 尝试 ci +runs..."
|
||||
RUNS=$(gitlink-cli ci +runs --owner "$OWNER" --repo "$REPO" --format json 2>&1) || RUNS=""
|
||||
if [ -n "$RUNS" ]; then
|
||||
echo "$RUNS" > "$OUTPUT_DIR/ci-runs.json"
|
||||
# 检查是否有 running 或成功的 run
|
||||
RUN_STATUS=$(echo "$RUNS" | node -e "
|
||||
let s='';
|
||||
process.stdin.on('data',d=>s+=d).on('end',()=>{
|
||||
try {
|
||||
const d=JSON.parse(s).data||{};
|
||||
const runs=d.runs||[];
|
||||
if(runs.length===0){process.stdout.write('unknown');return;}
|
||||
const hasRunning=runs.some(r=>r.status==='running'||r.status==='pending');
|
||||
const hasSuccess=runs.some(r=>r.status==='success');
|
||||
const hasFail=runs.some(r=>r.status==='fail'||r.status==='error');
|
||||
if(hasRunning)process.stdout.write('running');
|
||||
else if(hasSuccess&&!hasFail)process.stdout.write('passing');
|
||||
else if(hasFail)process.stdout.write('failing');
|
||||
else process.stdout.write('unknown');
|
||||
}catch(e){process.stdout.write('unknown');}
|
||||
});
|
||||
" 2>/dev/null || echo "unknown")
|
||||
CI_PASSING="$RUN_STATUS"
|
||||
CI_DETAIL="ci +runs 返回 ${RUN_STATUS}"
|
||||
fi
|
||||
|
||||
# AI Agent 在此处解析 CI 数据,判断是否全部通过
|
||||
# 输出:CI 状态布尔值、详细信息
|
||||
# 如果所有方法都失败
|
||||
if [ "$CI_PASSING" = "unknown" ]; then
|
||||
echo "[WARN] 无法获取 CI 状态(API 可能不支持该仓库)"
|
||||
CI_DETAIL="未检测到 CI 配置或 API 不可用"
|
||||
fi
|
||||
|
||||
# 写入状态文件供 Phase 4 读取
|
||||
echo "$CI_PASSING" > "$OUTPUT_DIR/ci-status-$PR_ID.txt"
|
||||
echo "$CI_DETAIL" > "$OUTPUT_DIR/ci-detail-$PR_ID.txt"
|
||||
|
||||
echo "[INFO] CI 状态: $CI_PASSING"
|
||||
echo "[INFO] $CI_DETAIL"
|
||||
|
||||
echo ""
|
||||
echo "[========================================]"
|
||||
echo "[ Phase 3 完成 ]"
|
||||
echo "[ CI 数据: $OUTPUT_DIR/ci-builds.json ]"
|
||||
echo "[ CI 状态: $CI_PASSING ]"
|
||||
echo "[========================================]"
|
||||
|
|
|
|||
|
|
@ -40,15 +40,30 @@ echo " 评分模型: 总分 = CodeReview×40% + CI×30% + 设计一致性×30%"
|
|||
echo " 门槛: ≥ 70 分且 CI 通过 → 自动合并"
|
||||
echo ""
|
||||
|
||||
# 读取 CI 状态文件(由 03-ci-check.sh 生成)
|
||||
CI_FILE="$OUTPUT_DIR/ci-status-$PR_ID.txt"
|
||||
CI_STATUS_TEXT="unknown"
|
||||
if [ -f "$CI_FILE" ]; then
|
||||
CI_STATUS_TEXT=$(cat "$CI_FILE")
|
||||
fi
|
||||
|
||||
# 占位评分(AI 在实际运行时计算填充)
|
||||
CODE_REVIEW_SCORE=85
|
||||
CI_STATUS=100
|
||||
DESIGN_SCORE=80
|
||||
|
||||
# CI 状态映射
|
||||
case "$CI_STATUS_TEXT" in
|
||||
passing) CI_STATUS=100; CI_PASSING=true; CI_LABEL="✅ 通过" ;;
|
||||
running) CI_STATUS=50; CI_PASSING=false; CI_LABEL="⏳ 运行中" ;;
|
||||
failing) CI_STATUS=0; CI_PASSING=false; CI_LABEL="❌ 失败" ;;
|
||||
*) CI_STATUS=0; CI_PASSING=false; CI_LABEL="⚠️ 未知(未检测到 CI)" ;;
|
||||
esac
|
||||
|
||||
QUALITY_SCORE=$(( CODE_REVIEW_SCORE * 40 / 100 + CI_STATUS * 30 / 100 + DESIGN_SCORE * 30 / 100 ))
|
||||
CI_PASSING=true
|
||||
|
||||
echo " CodeReview 评分: $CODE_REVIEW_SCORE/100"
|
||||
echo " CI 状态: $CI_STATUS/100 ($([ "$CI_PASSING" = "true" ] && echo "✅ 通过" || echo "❌ 失败"))"
|
||||
echo " CI 状态: $CI_STATUS_TEXT ($CI_LABEL)"
|
||||
echo " 设计一致性: $DESIGN_SCORE/100"
|
||||
echo " 质量总分: $QUALITY_SCORE/100"
|
||||
echo ""
|
||||
|
|
@ -58,7 +73,7 @@ THRESHOLD=70
|
|||
|
||||
if [ "$QUALITY_SCORE" -ge "$THRESHOLD" ] && [ "$CI_PASSING" = "true" ]; then
|
||||
echo "✅ 门禁判定:通过"
|
||||
echo " 评分 $QUALITY_SCORE ≥ $THRESHOLD,CI 通过"
|
||||
echo " 评分 $QUALITY_SCORE ≥ $THRESHOLD,CI $CI_STATUS_TEXT"
|
||||
|
||||
if [ "$DRY_RUN" = "true" ]; then
|
||||
echo ""
|
||||
|
|
|
|||
Loading…
Reference in New Issue