#!/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" 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" "$@" } # 非互動入口:給部署腳本、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 $? ;; --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. 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 "" read -p "請輸入選項 (1-9): " 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 ;; *) 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