diff --git a/skills/gitlink-quality-gate/scripts/04-quality-gate-decision.sh b/skills/gitlink-quality-gate/scripts/04-quality-gate-decision.sh index a844847..601cf2e 100644 --- a/skills/gitlink-quality-gate/scripts/04-quality-gate-decision.sh +++ b/skills/gitlink-quality-gate/scripts/04-quality-gate-decision.sh @@ -1,6 +1,6 @@ #!/bin/bash # ================================================================ -# Phase 4: 质量门禁决策 +# Phase 3: 质量门禁决策 # 功能:计算质量评分 → 门禁判定 → 自动合并或反馈建议 # 使用:bash 04-quality-gate-decision.sh # 环境变量: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 "[========================================]" diff --git a/skills/gitlink-quality-gate/scripts/quality-gate-full.sh b/skills/gitlink-quality-gate/scripts/quality-gate-full.sh index 184eb9d..f32f516 100644 --- a/skills/gitlink-quality-gate/scripts/quality-gate-full.sh +++ b/skills/gitlink-quality-gate/scripts/quality-gate-full.sh @@ -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