forked from Gitlink/gitlink-cli
81 lines
2.5 KiB
Bash
81 lines
2.5 KiB
Bash
#!/bin/bash
|
||
# ================================================================
|
||
# 代码质量看门人 — 全流程串联脚本
|
||
# 功能:遍历所有待审 PR,执行采集 → 审查 → CI 检查 → 门禁决策
|
||
# 使用:bash quality-gate-full.sh <owner> <repo>
|
||
# 环境变量:DRY_RUN=true|false (默认 true)
|
||
# ================================================================
|
||
set -e
|
||
|
||
OWNER=${1:?"Usage: $0 <owner> <repo>"}
|
||
REPO=${2}
|
||
DRY_RUN=${DRY_RUN:-true}
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
OUTPUT_DIR="$SCRIPT_DIR/_output"
|
||
mkdir -p "$OUTPUT_DIR"
|
||
|
||
echo "============================================"
|
||
echo " 代码质量看门人"
|
||
echo " Target: $OWNER/$REPO"
|
||
echo " DRY_RUN: $DRY_RUN"
|
||
echo " 开始时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
||
echo "============================================"
|
||
echo ""
|
||
|
||
# Phase 1: 采集待审 PR
|
||
echo "▸ Phase 1/4: PR 采集"
|
||
bash "$SCRIPT_DIR/01-collect-prs.sh" "$OWNER" "$REPO"
|
||
echo ""
|
||
|
||
# 读取待审 PR 列表
|
||
PR_LIST="$OUTPUT_DIR/prs-to-review.json"
|
||
if [ ! -f "$PR_LIST" ]; then
|
||
echo "[ERROR] 未找到 PR 列表,请先运行 Phase 1"
|
||
exit 1
|
||
fi
|
||
|
||
PR_COUNT=$(node -e "const d=require('fs').readFileSync('$PR_LIST','utf8');process.stdout.write(String(JSON.parse(d).length))" 2>/dev/null || echo "0")
|
||
|
||
if [ "$PR_COUNT" -eq 0 ]; then
|
||
echo "[INFO] 没有待审 PR,流程结束"
|
||
exit 0
|
||
fi
|
||
|
||
echo "[INFO] 共 $PR_COUNT 个 PR 需要审查"
|
||
|
||
# 遍历每个 PR
|
||
for i in $(seq 0 $((PR_COUNT - 1))); do
|
||
PR_ID=$(node -e "const d=require('fs').readFileSync('$PR_LIST','utf8');const items=JSON.parse(d);process.stdout.write(String(items[$i].id))" 2>/dev/null || echo "")
|
||
|
||
if [ -z "$PR_ID" ]; then
|
||
echo "[WARN] PR #$i: 无法解析 PR ID,跳过"
|
||
continue
|
||
fi
|
||
|
||
echo "--------------------------------------------"
|
||
echo " 处理 PR #$PR_ID"
|
||
echo "--------------------------------------------"
|
||
|
||
# Phase 2: 深度审查
|
||
echo "▸ Phase 2/4: 深度审查"
|
||
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: 门禁决策"
|
||
bash "$SCRIPT_DIR/04-quality-gate-decision.sh" "$OWNER" "$REPO" "$PR_ID"
|
||
echo ""
|
||
done
|
||
|
||
echo "============================================"
|
||
echo " 全流程完成"
|
||
echo " 结束时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
||
echo " 处理 PR 数: $PR_COUNT"
|
||
echo " 输出目录: $OUTPUT_DIR/"
|
||
echo "============================================"
|