203 lines
5.9 KiB
Bash
Executable File
203 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# SOP一致性檢查腳本 - 防止工具與SOP脫節
|
||
# 使用方法: ./sop_consistency_check.sh
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
||
|
||
# 設定報告檔案
|
||
CURRENT_DATE=$(date +"%Y-%m-%d")
|
||
CURRENT_TIME=$(date +"%H%M%S")
|
||
REPORT_FILE="$PROJECT_ROOT/sop/reports/logs/${CURRENT_DATE}_sop-consistency-check-${CURRENT_TIME}.md"
|
||
|
||
# 顏色定義
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
RED='\033[0;31m'
|
||
NC='\033[0m'
|
||
|
||
# 初始化報告檔案
|
||
init_report() {
|
||
cat > "$REPORT_FILE" << EOF
|
||
# SOP一致性檢查報告
|
||
|
||
## 📊 檢查概要
|
||
|
||
**檢查日期**: $CURRENT_DATE
|
||
**檢查時間**: $(date +"%H:%M:%S")
|
||
**執行腳本**: sop/scripts/sop_consistency_check.sh
|
||
**檢查範圍**: 全系統SOP工具一致性驗證
|
||
|
||
## 🔍 檢查結果詳細
|
||
|
||
EOF
|
||
}
|
||
|
||
# 寫入檢查結果到報告
|
||
log_result() {
|
||
echo "$1" >> "$REPORT_FILE"
|
||
}
|
||
|
||
# 顯示並記錄
|
||
log_and_show() {
|
||
echo -e "$1"
|
||
echo "$2" >> "$REPORT_FILE"
|
||
}
|
||
|
||
init_report
|
||
|
||
echo -e "${BLUE}🔍 SOP一致性檢查工具${NC}"
|
||
echo "=================================="
|
||
echo -e "📄 報告將儲存至: ${YELLOW}$REPORT_FILE${NC}"
|
||
echo ""
|
||
|
||
ISSUES_COUNT=0
|
||
|
||
# 檢查1: 過時檔案引用
|
||
log_and_show "${BLUE}檢查1: 過時檔案引用${NC}" "### 檢查1: 過時檔案引用"
|
||
echo "--------------------------------"
|
||
log_result ""
|
||
|
||
# 檢查ISSUES.md引用
|
||
ISSUES_MD_REFS=$(grep -r "ISSUES\.md" "$PROJECT_ROOT/sop/" 2>/dev/null | grep -v "archive" | grep -v "sop_consistency_check.sh")
|
||
if [ -n "$ISSUES_MD_REFS" ]; then
|
||
log_and_show "${RED}❌ 發現工具仍在使用過時的 ISSUES.md${NC}" "**❌ ISSUES.md引用檢查**: 失敗"
|
||
log_result ""
|
||
log_result "發現以下過時引用:"
|
||
log_result '```'
|
||
echo "$ISSUES_MD_REFS" >> "$REPORT_FILE"
|
||
log_result '```'
|
||
ISSUES_COUNT=$((ISSUES_COUNT + 1))
|
||
else
|
||
log_and_show "${GREEN}✅ 沒有工具使用過時的 ISSUES.md${NC}" "**✅ ISSUES.md引用檢查**: 通過"
|
||
fi
|
||
|
||
# 檢查PROJECTS.md引用
|
||
if grep -r "PROJECTS\.md\|PROJECT\.md" "$PROJECT_ROOT/sop/" 2>/dev/null | grep -v "archive" | grep -v "sop_consistency_check.sh"; then
|
||
echo -e "${RED}❌ 發現工具仍在使用過時的 PROJECTS.md${NC}"
|
||
ISSUES_COUNT=$((ISSUES_COUNT + 1))
|
||
else
|
||
echo -e "${GREEN}✅ 沒有工具使用過時的 PROJECTS.md${NC}"
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# 檢查2: 必要檔案存在性
|
||
echo -e "${BLUE}檢查2: 必要檔案存在性${NC}"
|
||
echo "--------------------------------"
|
||
|
||
# 檢查TASKS.md
|
||
if [ -f "$PROJECT_ROOT/TASKS.md" ]; then
|
||
echo -e "${GREEN}✅ TASKS.md 存在${NC}"
|
||
else
|
||
echo -e "${RED}❌ TASKS.md 不存在${NC}"
|
||
ISSUES_COUNT=$((ISSUES_COUNT + 1))
|
||
fi
|
||
|
||
# 檢查CLAUDE.md
|
||
if [ -f "$PROJECT_ROOT/sop/docs/CLAUDE.md" ]; then
|
||
echo -e "${GREEN}✅ CLAUDE.md 存在${NC}"
|
||
else
|
||
echo -e "${RED}❌ CLAUDE.md 不存在${NC}"
|
||
ISSUES_COUNT=$((ISSUES_COUNT + 1))
|
||
fi
|
||
|
||
# 檢查報告模板
|
||
if [ -f "$PROJECT_ROOT/sop/tools/reports/templates/analysis-template.md" ]; then
|
||
echo -e "${GREEN}✅ 分析報告模板存在${NC}"
|
||
else
|
||
echo -e "${RED}❌ 分析報告模板不存在${NC}"
|
||
ISSUES_COUNT=$((ISSUES_COUNT + 1))
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# 檢查3: 目錄結構
|
||
echo -e "${BLUE}檢查3: 目錄結構完整性${NC}"
|
||
echo "--------------------------------"
|
||
|
||
REQUIRED_DIRS=(
|
||
"sop/tools/reports/templates"
|
||
"sop/tools/reports/analysis"
|
||
"sop/tools/reports/decision"
|
||
"sop/reports/analysis"
|
||
"sop/reports/decision"
|
||
"sop/reports/logs"
|
||
"sop/scripts"
|
||
"sop/archive"
|
||
)
|
||
|
||
for dir in "${REQUIRED_DIRS[@]}"; do
|
||
if [ -d "$PROJECT_ROOT/$dir" ]; then
|
||
echo -e "${GREEN}✅ $dir 存在${NC}"
|
||
else
|
||
echo -e "${RED}❌ $dir 不存在${NC}"
|
||
ISSUES_COUNT=$((ISSUES_COUNT + 1))
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
|
||
# 檢查4: 工具腳本可執行性
|
||
echo -e "${BLUE}檢查4: 關鍵工具可執行性${NC}"
|
||
echo "--------------------------------"
|
||
|
||
# 檢查./dl指令
|
||
if [ -x "$PROJECT_ROOT/dl" ]; then
|
||
echo -e "${GREEN}✅ ./dl 可執行${NC}"
|
||
else
|
||
echo -e "${RED}❌ ./dl 不可執行或不存在${NC}"
|
||
ISSUES_COUNT=$((ISSUES_COUNT + 1))
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# 總結
|
||
log_and_show "${BLUE}檢查總結${NC}" "## 📊 檢查總結"
|
||
echo "=================================="
|
||
log_result ""
|
||
|
||
if [ $ISSUES_COUNT -eq 0 ]; then
|
||
log_and_show "${GREEN}🎉 所有檢查通過!SOP與工具系統一致${NC}" "**結果**: ✅ 所有檢查通過"
|
||
log_result ""
|
||
log_result "系統狀態良好,所有工具與SOP v4.1完全一致。"
|
||
|
||
# 完成報告
|
||
log_result ""
|
||
log_result "## 📋 建議行動"
|
||
log_result ""
|
||
log_result "- 無需立即行動"
|
||
log_result "- 建議定期執行此檢查 (每次SOP更新後)"
|
||
log_result "- 繼續保持工具與SOP的一致性"
|
||
|
||
echo -e "📄 詳細檢查報告已儲存至: ${YELLOW}$REPORT_FILE${NC}"
|
||
exit 0
|
||
else
|
||
log_and_show "${RED}⚠️ 發現 $ISSUES_COUNT 個問題,需要修正${NC}" "**結果**: ❌ 發現 $ISSUES_COUNT 個問題"
|
||
echo ""
|
||
log_result ""
|
||
log_result "## 📋 修正建議"
|
||
log_result ""
|
||
|
||
echo -e "${YELLOW}建議執行以下修正:${NC}"
|
||
echo "1. 更新過時的工具腳本"
|
||
echo "2. 建立缺失的目錄結構"
|
||
echo "3. 確認所有引用使用TASKS.md而非ISSUES.md"
|
||
echo "4. 重新執行此檢查直到所有問題解決"
|
||
|
||
log_result "1. **更新過時工具腳本**: 修正所有仍使用 ISSUES.md/PROJECTS.md 的腳本"
|
||
log_result "2. **建立缺失目錄**: 確保所有必要的目錄結構存在"
|
||
log_result "3. **統一引用標準**: 所有工具改用 TASKS.md 系統"
|
||
log_result "4. **驗證修正**: 重新執行檢查直到通過"
|
||
log_result ""
|
||
log_result "## 📋 後續追蹤"
|
||
log_result ""
|
||
log_result "- 建議在 TASKS.md 中記錄修正任務"
|
||
log_result "- 修正完成後再次執行此檢查"
|
||
log_result "- 建立定期檢查機制防止問題復發"
|
||
|
||
echo -e "📄 詳細檢查報告已儲存至: ${YELLOW}$REPORT_FILE${NC}"
|
||
exit 1
|
||
fi |