forked from Gitlink/gitlink-cli
refactor: 质量门禁简化为三阶段,移除 CI 检查
This commit is contained in:
parent
7bde356bac
commit
4d6f224bc4
|
|
@ -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 "[========================================]"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue