dramaling-app/scripts/maintenance/check_issues.sh

207 lines
5.8 KiB
Bash
Executable File

#!/bin/bash
# Drama Ling 問題檢查工具
# 用途:檢查和統計問題狀態
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
ISSUES_FILE="$PROJECT_ROOT/docs/04_technical/issues-tracking.md"
# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
NC='\033[0m'
echo -e "${BLUE}🔍 Drama Ling 問題追蹤檢查${NC}"
echo "=============================================="
if [ ! -f "$ISSUES_FILE" ]; then
echo -e "${RED}❌ 問題追蹤檔案不存在: $ISSUES_FILE${NC}"
exit 1
fi
# 檢查1: 問題總數統計
echo -e "${PURPLE}📊 1. 問題總數統計${NC}"
echo "----------------------------------------"
total_issues=$(grep -c "^## Issue #" "$ISSUES_FILE")
echo "總問題數量: $total_issues"
if [ $total_issues -eq 0 ]; then
echo -e "${GREEN}🎉 沒有問題記錄${NC}"
exit 0
fi
# 依優先級統計
critical_count=$(grep -c "🔴 Critical" "$ISSUES_FILE")
important_count=$(grep -c "🟡 Important" "$ISSUES_FILE")
normal_count=$(grep -c "🔵 Normal" "$ISSUES_FILE")
low_count=$(grep -c "🟢 Low" "$ISSUES_FILE")
echo "🔴 Critical: $critical_count"
echo "🟡 Important: $important_count"
echo "🔵 Normal: $normal_count"
echo "🟢 Low: $low_count"
echo ""
# 檢查2: 狀態統計
echo -e "${PURPLE}📋 2. 問題狀態統計${NC}"
echo "----------------------------------------"
open_count=$(grep -c "status:open" "$ISSUES_FILE")
progress_count=$(grep -c "status:in-progress" "$ISSUES_FILE")
resolved_count=$(grep -c "status:resolved" "$ISSUES_FILE")
closed_count=$(grep -c "status:closed" "$ISSUES_FILE")
blocked_count=$(grep -c "status:blocked" "$ISSUES_FILE")
echo "📂 Open: $open_count"
echo "⚡ In Progress: $progress_count"
echo "✅ Resolved: $resolved_count"
echo "🔒 Closed: $closed_count"
echo "🚫 Blocked: $blocked_count"
echo ""
# 檢查3: 模組分布
echo -e "${PURPLE}🏗️ 3. 問題模組分布${NC}"
echo "----------------------------------------"
api_count=$(grep -c "module:api" "$ISSUES_FILE")
auth_count=$(grep -c "module:auth" "$ISSUES_FILE")
ui_count=$(grep -c "module:ui" "$ISSUES_FILE")
db_count=$(grep -c "module:db" "$ISSUES_FILE")
docs_count=$(grep -c "module:docs" "$ISSUES_FILE")
learning_count=$(grep -c "module:learning" "$ISSUES_FILE")
echo "🔗 API: $api_count"
echo "🔐 Auth: $auth_count"
echo "🎨 UI: $ui_count"
echo "🗄️ Database: $db_count"
echo "📚 Docs: $docs_count"
echo "📖 Learning: $learning_count"
echo ""
# 檢查4: 緊急問題列表
if [ $critical_count -gt 0 ] || [ $blocked_count -gt 0 ]; then
echo -e "${RED}🚨 4. 緊急問題列表${NC}"
echo "----------------------------------------"
if [ $critical_count -gt 0 ]; then
echo -e "${RED}Critical 問題:${NC}"
grep -A 1 "^## Issue #.*" "$ISSUES_FILE" | grep -B 1 "🔴 Critical" | grep "^## Issue #" | head -5
fi
if [ $blocked_count -gt 0 ]; then
echo -e "${RED}被阻擋的問題:${NC}"
grep -A 5 "^## Issue #.*" "$ISSUES_FILE" | grep -B 1 -A 3 "status:blocked" | grep "^## Issue #" | head -5
fi
echo ""
fi
# 檢查5: 逾期問題 (簡化版)
echo -e "${PURPLE}⏰ 5. 待辦問題檢查${NC}"
echo "----------------------------------------"
open_issues=$(grep -A 5 "^## Issue #.*" "$ISSUES_FILE" | grep -B 1 -A 3 "status:open" | grep "^## Issue #")
if [ -n "$open_issues" ]; then
echo "未解決的問題:"
echo "$open_issues" | head -5
if [ $(echo "$open_issues" | wc -l) -gt 5 ]; then
echo "... 還有 $(($(echo "$open_issues" | wc -l) - 5)) 個問題"
fi
else
echo -e "${GREEN}✅ 沒有待辦問題${NC}"
fi
echo ""
# 檢查6: 問題類型分析
echo -e "${PURPLE}🏷️ 6. 問題類型分析${NC}"
echo "----------------------------------------"
spec_count=$(grep -c "type:spec" "$ISSUES_FILE")
conflict_count=$(grep -c "type:conflict" "$ISSUES_FILE")
missing_count=$(grep -c "type:missing" "$ISSUES_FILE")
decision_count=$(grep -c "type:decision" "$ISSUES_FILE")
bug_count=$(grep -c "type:bug" "$ISSUES_FILE")
echo "📋 Spec: $spec_count"
echo "⚡ Conflict: $conflict_count"
echo "❓ Missing: $missing_count"
echo "🤔 Decision: $decision_count"
echo "🐛 Bug: $bug_count"
echo ""
# 生成健康度報告
echo -e "${BLUE}📈 7. 專案健康度評估${NC}"
echo "----------------------------------------"
# 計算健康度分數
health_score=100
# 扣分邏輯
if [ $critical_count -gt 0 ]; then
health_score=$((health_score - critical_count * 20))
fi
if [ $blocked_count -gt 0 ]; then
health_score=$((health_score - blocked_count * 15))
fi
if [ $open_count -gt 10 ]; then
health_score=$((health_score - (open_count - 10) * 2))
fi
# 確保分數不為負數
if [ $health_score -lt 0 ]; then
health_score=0
fi
echo "專案健康度分數: $health_score/100"
if [ $health_score -ge 80 ]; then
echo -e "${GREEN}🎉 狀態: 優秀${NC}"
elif [ $health_score -ge 60 ]; then
echo -e "${YELLOW}👍 狀態: 良好${NC}"
elif [ $health_score -ge 40 ]; then
echo -e "${YELLOW}⚠️ 狀態: 需要關注${NC}"
else
echo -e "${RED}🚨 狀態: 需要緊急處理${NC}"
fi
echo ""
# 提供改進建議
echo -e "${BLUE}💡 改進建議${NC}"
echo "----------------------------------------"
if [ $critical_count -gt 0 ]; then
echo "• 優先解決 $critical_count 個 Critical 問題"
fi
if [ $blocked_count -gt 0 ]; then
echo "• 移除 $blocked_count 個被阻擋的問題"
fi
if [ $open_count -gt 10 ]; then
echo "• 處理過多的待辦問題 (建議控制在10個以內)"
fi
if [ $spec_count -gt 5 ]; then
echo "• 規格問題較多,建議進行規格澄清會議"
fi
if [ $conflict_count -gt 0 ]; then
echo "• 解決 $conflict_count 個衝突問題以避免開發延誤"
fi
echo ""
echo -e "${GREEN}✅ 問題檢查完成${NC}"