refactor: 质量门禁简化为三阶段,移除 CI 检查

This commit is contained in:
赵昌 2026-07-07 18:28:42 +08:00
parent 7bde356bac
commit 4d6f224bc4
2 changed files with 25 additions and 91 deletions

View File

@ -1,6 +1,6 @@
#!/bin/bash
# ================================================================
# Phase 4: 质量门禁决策
# Phase 3: 质量门禁决策
# 功能:计算质量评分 → 门禁判定 → 自动合并或反馈建议
# 使用bash 04-quality-gate-decision.sh <owner> <repo> <pr_id>
# 环境变量DRY_RUN=true|false (默认 true)
@ -16,88 +16,38 @@ OUTPUT_DIR="$SCRIPT_DIR/_output"
mkdir -p "$OUTPUT_DIR"
echo "[========================================]"
echo "[ Phase 4: 质量门禁决策 ]"
echo "[ Phase 3: 质量门禁决策 ]"
echo "[ PR #$PR_ID ($OWNER/$REPO) ]"
echo "[ DRY_RUN: $DRY_RUN ]"
echo "[========================================]"
# ---- 质量评分模型 ----
# AI Agent 在此处读取 Phase 2 和 Phase 3 的输出数据,计算评分
#
# 评分 = CodeReview_Score × 60% + Design_Score × 40%
# CodeReview_Score (0-100): 从 Phase 2 的审查结果获取
# CI_Status (0 or 100): 从 Phase 3 的 CI 检查获取
# Design_Score (0-100): AI 评估 PR 描述与代码变更的匹配度
#
# Quality_Score = CodeReview_Score × 0.4 + CI_Status × 0.3 + Design_Score × 0.3
# Threshold = 70
#
# 判定:
# - Quality_Score >= 70 且 CI 通过 → 通过门禁
# - 否则 → 阻塞
# 门槛:≥ 70 分 → 通过门禁
echo "[INFO] 评分计算中..."
echo " 评分模型: 总分 = CodeReview×40% + CI×30% + 设计一致性×30%"
echo " 门槛: ≥ 70 分且 CI 通过 → 自动合并"
echo " 评分模型: 总分 = CodeReview×60% + 设计一致性×40%"
echo " 门槛: ≥ 70 分"
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 在实际运行时计算填充)
# 占位评分AI 在实际运行时根据 Phase 2 数据计算)
CODE_REVIEW_SCORE=85
CI_STATUS=100
DESIGN_SCORE=80
QUALITY_SCORE=$(( CODE_REVIEW_SCORE * 60 / 100 + DESIGN_SCORE * 40 / 100 ))
THRESHOLD=70
# CI 状态映射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=true; CI_LABEL="⚠️ 未检测(已跳过,不阻塞)"
echo "[INFO] CI 状态未知,已跳过 CI 权重(重新分配到 CodeReview 和设计一致性)"
echo " → 评分模型临时调整为CodeReview×57% + 设计一致性×43%"
# 当 CI 不可用时,将 CI 的 30% 权重重新分配
QUALITY_SCORE=$(( CODE_REVIEW_SCORE * 57 / 100 + DESIGN_SCORE * 43 / 100 ))
echo ""
echo " CodeReview 评分: $CODE_REVIEW_SCORE/100"
echo " CI 状态: ${CI_STATUS_TEXT} (${CI_LABEL})"
echo " 设计一致性: $DESIGN_SCORE/100"
echo " 质量总分: $QUALITY_SCORE/100"
echo ""
# 重新计算后的门槛
THRESHOLD=60
if [ "$QUALITY_SCORE" -ge "$THRESHOLD" ]; then
echo "✅ 门禁判定通过CI 已跳过)"
echo " 评分 $QUALITY_SCORE$THRESHOLD(临时门槛)"
else
echo "❌ 门禁判定:阻塞"
echo " 评分 $QUALITY_SCORE < $THRESHOLD(未达门槛)"
fi
# 跳过后续 CI 相关的门禁逻辑
SKIP_CI=true
;;
esac
echo " CodeReview 评分: $CODE_REVIEW_SCORE/100"
echo " 设计一致性: $DESIGN_SCORE/100"
echo " 质量总分: $QUALITY_SCORE/100"
echo ""
if [ "$SKIP_CI" != "true" ]; then
QUALITY_SCORE=$(( CODE_REVIEW_SCORE * 40 / 100 + CI_STATUS * 30 / 100 + DESIGN_SCORE * 30 / 100 ))
echo " CodeReview 评分: $CODE_REVIEW_SCORE/100"
echo " CI 状态: $CI_STATUS_TEXT ($CI_LABEL)"
echo " 设计一致性: $DESIGN_SCORE/100"
echo " 质量总分: $QUALITY_SCORE/100"
echo ""
# ---- 门禁判定 ----
THRESHOLD=70
if [ "$QUALITY_SCORE" -ge "$THRESHOLD" ] && [ "$CI_PASSING" = "true" ]; then
echo "✅ 门禁判定:通过"
echo " 评分 $QUALITY_SCORE$THRESHOLD"
# ---- 门禁判定 ----
if [ "$QUALITY_SCORE" -ge "$THRESHOLD" ]; then
echo "✅ 门禁判定:通过"
echo " 评分 $QUALITY_SCORE$THRESHOLD"
if [ "$DRY_RUN" = "true" ]; then
echo ""
@ -117,13 +67,7 @@ if [ "$SKIP_CI" != "true" ]; then
fi
else
echo "❌ 门禁判定:阻塞"
if [ "$QUALITY_SCORE" -lt "$THRESHOLD" ]; then
echo " 评分 $QUALITY_SCORE < $THRESHOLD(未达门槛)"
fi
if [ "$CI_PASSING" != "true" ]; then
echo " CI 状态:未通过"
fi
echo " 评分 $QUALITY_SCORE < $THRESHOLD(未达门槛)"
if [ "$DRY_RUN" = "true" ]; then
echo ""
@ -134,18 +78,13 @@ else
else
echo "[INFO] 提交修改建议..."
gitlink-cli pr +review --id "$PR_ID" --owner "$OWNER" --repo "$REPO" \
--status common --content "❌ 质量门禁未通过
评分:$QUALITY_SCORE/100要求 ≥ $THRESHOLD
CI$([ "$CI_PASSING" = "true" ] && echo "✅" || echo "❌")
请修复以上问题后重新提交。"
--status common --content "❌ 质量门禁未通过,评分:$QUALITY_SCORE/100\n请修复后重新提交。"
echo "[INFO] 修改建议已提交"
fi
fi
echo ""
echo "[========================================]"
echo "[ Phase 4 完成 ]"
echo "[ 决策结果: $([ "$QUALITY_SCORE" -ge "$THRESHOLD" ] && [ "$CI_PASSING" = "true" ] && echo "通过" || echo "阻塞") ]"
echo "[ Phase 3 完成 ]"
echo "[ 决策结果: $([ "$QUALITY_SCORE" -ge "$THRESHOLD" ] && echo "通过" || echo "阻塞") ]"
echo "[========================================]"

View File

@ -23,7 +23,7 @@ echo "============================================"
echo ""
# Phase 1: 采集待审 PR
echo "▸ Phase 1/4: PR 采集"
echo "▸ Phase 1/3: PR 采集"
bash "$SCRIPT_DIR/01-collect-prs.sh" "$OWNER" "$REPO"
echo ""
@ -57,17 +57,12 @@ for i in $(seq 0 $((PR_COUNT - 1))); do
echo "--------------------------------------------"
# Phase 2: 深度审查
echo "▸ Phase 2/4: 深度审查"
echo "▸ Phase 2/3: 深度审查"
bash "$SCRIPT_DIR/02-deep-review.sh" "$OWNER" "$REPO" "$PR_ID"
echo ""
# Phase 3: CI 检查
echo "▸ Phase 3/4: CI 检查"
bash "$SCRIPT_DIR/03-ci-check.sh" "$OWNER" "$REPO" "$PR_ID"
echo ""
# Phase 4: 门禁决策
echo "▸ Phase 4/4: 门禁决策"
# Phase 3: 门禁决策
echo "▸ Phase 3/3: 门禁决策"
bash "$SCRIPT_DIR/04-quality-gate-decision.sh" "$OWNER" "$REPO" "$PR_ID"
echo ""
done