242 lines
7.5 KiB
Bash
Executable File
242 lines
7.5 KiB
Bash
Executable File
#!/bin/bash
|
||
# ================= MOMO 系統 - Quick Review / QA 腳本 =================
|
||
# 功能:快速觸發 Aider Code Review 或 AI 觀測台 QA
|
||
# 使用方法:./quick_review.sh [檔案名稱...]
|
||
# 範例:./quick_review.sh app.py routes/sales_routes.py
|
||
# 範例:./quick_review.sh --observability-qa
|
||
# =======================================================================
|
||
|
||
# 顏色定義
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 獲取專案根目錄
|
||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
CODE_REVIEW_SCRIPT="$PROJECT_ROOT/scripts/code_review.py"
|
||
OBSERVABILITY_UI_GUARD="$PROJECT_ROOT/scripts/check_observability_ui.py"
|
||
OBSERVABILITY_PAGE_SMOKE="$PROJECT_ROOT/scripts/check_observability_pages.py"
|
||
OBSERVABILITY_QA_SUITE="$PROJECT_ROOT/scripts/check_observability_suite.sh"
|
||
OBSERVABILITY_CSS_SYNC="$PROJECT_ROOT/scripts/sync_observability_css.py"
|
||
RESPONSIVE_OVERFLOW_GUARD="$PROJECT_ROOT/scripts/check_responsive_overflow.sh"
|
||
REVIEW_REPORT_HINT=0
|
||
|
||
# 顯示標題
|
||
echo -e "${BLUE}========================================${NC}"
|
||
echo -e "${BLUE}🔍 MOMO 系統 - Quick Review / QA${NC}"
|
||
echo -e "${BLUE}========================================${NC}"
|
||
|
||
# 檢查Python環境
|
||
if ! command -v python3 &> /dev/null; then
|
||
echo -e "${RED}❌ Python3未安裝${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
run_code_review() {
|
||
if [ ! -f "$CODE_REVIEW_SCRIPT" ]; then
|
||
echo -e "${RED}❌ Code Review腳本不存在: $CODE_REVIEW_SCRIPT${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
if ! command -v aider &> /dev/null; then
|
||
echo -e "${RED}❌ Aider未安裝或不在PATH中${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
python3 "$CODE_REVIEW_SCRIPT" "$@"
|
||
}
|
||
|
||
run_observability_ui_guard() {
|
||
if [ ! -f "$OBSERVABILITY_UI_GUARD" ]; then
|
||
echo -e "${RED}❌ AI觀測台 UI guard 不存在: $OBSERVABILITY_UI_GUARD${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${GREEN}🎛️ 開始 AI觀測台 UI/UX 防回歸檢查...${NC}"
|
||
python3 "$OBSERVABILITY_UI_GUARD"
|
||
}
|
||
|
||
run_observability_page_smoke() {
|
||
if [ ! -f "$OBSERVABILITY_PAGE_SMOKE" ]; then
|
||
echo -e "${RED}❌ AI觀測台頁面巡檢不存在: $OBSERVABILITY_PAGE_SMOKE${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${GREEN}🌐 開始 AI觀測台 10頁線上巡檢...${NC}"
|
||
python3 "$OBSERVABILITY_PAGE_SMOKE" "$@"
|
||
}
|
||
|
||
run_observability_qa_suite() {
|
||
if [ ! -f "$OBSERVABILITY_QA_SUITE" ]; then
|
||
echo -e "${RED}❌ AI觀測台 QA 套件不存在: $OBSERVABILITY_QA_SUITE${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${GREEN}🏛️ 開始 AI觀測台完整 QA 套件...${NC}"
|
||
bash "$OBSERVABILITY_QA_SUITE" "$@"
|
||
}
|
||
|
||
run_observability_css_sync() {
|
||
if [ ! -f "$OBSERVABILITY_CSS_SYNC" ]; then
|
||
echo -e "${RED}❌ AI觀測台 CSS 同步腳本不存在: $OBSERVABILITY_CSS_SYNC${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${GREEN}🎨 同步 AI觀測台 CSS 到 Flask static path...${NC}"
|
||
python3 "$OBSERVABILITY_CSS_SYNC" "$@"
|
||
}
|
||
|
||
run_responsive_overflow_guard() {
|
||
if [ ! -f "$RESPONSIVE_OVERFLOW_GUARD" ]; then
|
||
echo -e "${RED}❌ Responsive overflow guard 不存在: $RESPONSIVE_OVERFLOW_GUARD${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${GREEN}📱 開始全頁 responsive overflow 檢查...${NC}"
|
||
bash "$RESPONSIVE_OVERFLOW_GUARD" "$@"
|
||
}
|
||
|
||
# 非互動入口:給部署腳本、CI、或 Codex session 直接呼叫。
|
||
if [ $# -gt 0 ]; then
|
||
case "$1" in
|
||
--observability-ui)
|
||
shift
|
||
run_observability_ui_guard
|
||
exit $?
|
||
;;
|
||
--observability-smoke)
|
||
shift
|
||
run_observability_page_smoke "$@"
|
||
exit $?
|
||
;;
|
||
--observability-qa)
|
||
shift
|
||
run_observability_qa_suite "$@"
|
||
exit $?
|
||
;;
|
||
--sync-observability-css)
|
||
shift
|
||
run_observability_css_sync "$@"
|
||
exit $?
|
||
;;
|
||
--check-observability-css)
|
||
shift
|
||
run_observability_css_sync --check
|
||
exit $?
|
||
;;
|
||
--responsive-overflow)
|
||
shift
|
||
run_responsive_overflow_guard "$@"
|
||
exit $?
|
||
;;
|
||
--observability-help)
|
||
cat <<'EOF'
|
||
AI observability quick-review flags:
|
||
--sync-observability-css
|
||
Sync static/css/observability-system.css to web/static/css mirror.
|
||
--check-observability-css
|
||
Verify CSS mirror is already committed and in sync.
|
||
--observability-ui
|
||
Run static UI/template/navigation guard only.
|
||
--observability-smoke [--base-url URL] [--timeout SEC]
|
||
Run production page/CSS smoke against the target URL.
|
||
--observability-qa [--base-url URL] [--skip-production]
|
||
Run the full QA suite.
|
||
--responsive-overflow [--base-url URL] [--route PATH ...]
|
||
Run desktop/tablet/mobile body horizontal overflow checks for Flask routes.
|
||
EOF
|
||
exit 0
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
# 顯示選單
|
||
if [ $# -eq 0 ]; then
|
||
echo -e "${YELLOW}請選擇操作:${NC}"
|
||
echo "1) 自動Review暫存檔案 (Git staged)"
|
||
echo "2) Review所有變更檔案"
|
||
echo "3) 指定檔案Review"
|
||
echo "4) 安全檢查 (Security Review)"
|
||
echo "5) 效能檢查 (Performance Review)"
|
||
echo "6) AI觀測台 UI/UX 防回歸檢查"
|
||
echo "7) AI觀測台 10頁線上巡檢"
|
||
echo "8) AI觀測台完整 QA 套件"
|
||
echo "9) 同步 AI觀測台 CSS static mirror"
|
||
echo "10) 全頁 responsive overflow 檢查"
|
||
echo ""
|
||
read -p "請輸入選項 (1-10): " choice
|
||
|
||
case $choice in
|
||
1)
|
||
echo -e "${GREEN}🚀 開始自動Review暫存檔案...${NC}"
|
||
REVIEW_REPORT_HINT=1
|
||
run_code_review --auto --type basic
|
||
;;
|
||
2)
|
||
echo -e "${GREEN}🚀 開始Review所有變更檔案...${NC}"
|
||
REVIEW_REPORT_HINT=1
|
||
run_code_review --type basic
|
||
;;
|
||
3)
|
||
echo -e "${YELLOW}請輸入要Review的檔案路徑 (用空格分隔):${NC}"
|
||
read -r files_input
|
||
if [ -n "$files_input" ]; then
|
||
echo -e "${GREEN}🚀 開始Review指定檔案...${NC}"
|
||
REVIEW_REPORT_HINT=1
|
||
run_code_review --files $files_input --type basic
|
||
else
|
||
echo -e "${RED}❌ 未指定檔案${NC}"
|
||
exit 1
|
||
fi
|
||
;;
|
||
4)
|
||
echo -e "${GREEN}🛡️ 開始安全檢查...${NC}"
|
||
REVIEW_REPORT_HINT=1
|
||
run_code_review --auto --type security
|
||
;;
|
||
5)
|
||
echo -e "${GREEN}⚡ 開始效能檢查...${NC}"
|
||
REVIEW_REPORT_HINT=1
|
||
run_code_review --auto --type performance
|
||
;;
|
||
6)
|
||
run_observability_ui_guard
|
||
;;
|
||
7)
|
||
run_observability_page_smoke
|
||
;;
|
||
8)
|
||
run_observability_qa_suite
|
||
;;
|
||
9)
|
||
run_observability_css_sync
|
||
;;
|
||
10)
|
||
run_responsive_overflow_guard
|
||
;;
|
||
*)
|
||
echo -e "${RED}❌ 無效選項${NC}"
|
||
exit 1
|
||
;;
|
||
esac
|
||
else
|
||
# 有指定檔案,直接Review
|
||
echo -e "${GREEN}🚀 開始Review指定檔案...${NC}"
|
||
echo -e "${BLUE}檔案:$@${NC}"
|
||
REVIEW_REPORT_HINT=1
|
||
run_code_review --files "$@" --type basic
|
||
fi
|
||
|
||
# 檢查執行結果
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}✅ Quick Review / QA 完成!${NC}"
|
||
if [ "$REVIEW_REPORT_HINT" -eq 1 ]; then
|
||
echo -e "${BLUE}📄 Review報告位置:$PROJECT_ROOT/logs/${NC}"
|
||
fi
|
||
else
|
||
echo -e "${RED}❌ Quick Review / QA 失敗!${NC}"
|
||
exit 1
|
||
fi
|