dramaling-app/tools/create_report.sh

170 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
# Drama Ling 報告建立工具
# 用途:快速建立分析報告或決策記錄
# 使用方法: ./create_report.sh [類型] "標題"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPORTS_DIR="$SCRIPT_DIR/reports"
ISSUES_FILE="$SCRIPT_DIR/ISSUES.md"
# 顏色定義
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m'
# 顯示使用說明
show_help() {
echo -e "${BLUE}報告建立工具使用說明:${NC}"
echo "使用方法: $0 [類型] \"標題\""
echo ""
echo -e "${BLUE}類型:${NC}"
echo " analysis - 建立問題分析報告"
echo " decision - 建立技術決策記錄"
echo ""
echo -e "${BLUE}範例:${NC}"
echo " $0 analysis \"API modules structure check\""
echo " $0 decision \"Database technology selection\""
}
# 建立分析報告
create_analysis_report() {
local title="$1"
local date=$(date +"%Y-%m-%d")
local safe_title=$(echo "$title" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')
local filename="${date}_${safe_title}-analysis.md"
local filepath="$REPORTS_DIR/analysis/$filename"
# 複製模板
cp "$REPORTS_DIR/templates/analysis-template.md" "$filepath"
# 替換標題和日期
sed -i '' "1s/.*# $title 分析報告/" "$filepath"
sed -i '' "s/YYYY-MM-DD/$date/g" "$filepath"
echo -e "${GREEN}✅ 分析報告已建立: $filepath${NC}"
# 詢問是否要加入到問題系統
read -p "是否要在 ISSUES.md 中建立對應的問題追蹤? (y/N): " add_issue
if [[ $add_issue =~ ^[Yy]$ ]]; then
add_to_issues "analysis" "$title" "$filename"
fi
# 詢問是否要開啟編輯器
read -p "是否要開啟編輯器編輯報告? (y/N): " edit_report
if [[ $edit_report =~ ^[Yy]$ ]]; then
${EDITOR:-nano} "$filepath"
fi
}
# 建立決策記錄
create_decision_record() {
local title="$1"
local date=$(date +"%Y-%m-%d")
local safe_title=$(echo "$title" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')
local filename="${date}_${safe_title}-decision.md"
local filepath="$REPORTS_DIR/decisions/$filename"
# 複製模板
cp "$REPORTS_DIR/templates/decision-template.md" "$filepath"
# 替換標題和日期
sed -i '' "1s/.*# $title 技術決策記錄/" "$filepath"
sed -i '' "s/YYYY-MM-DD/$date/g" "$filepath"
echo -e "${GREEN}✅ 決策記錄已建立: $filepath${NC}"
# 詢問是否要加入到問題系統
read -p "是否要在 ISSUES.md 中建立對應的問題追蹤? (y/N): " add_issue
if [[ $add_issue =~ ^[Yy]$ ]]; then
add_to_issues "decision" "$title" "$filename"
fi
# 詢問是否要開啟編輯器
read -p "是否要開啟編輯器編輯記錄? (y/N): " edit_report
if [[ $edit_report =~ ^[Yy]$ ]]; then
${EDITOR:-nano} "$filepath"
fi
}
# 加入到問題系統
add_to_issues() {
local type="$1"
local title="$2"
local filename="$3"
echo ""
echo "選擇問題優先級:"
echo "1) 🔥 緊急"
echo "2) ⚠️ 重要"
echo "3) 📝 一般"
read -p "請選擇 (1-3, 預設2): " priority
case $priority in
1) section="## 🔥 緊急問題" ;;
3) section="## 📝 一般問題" ;;
*) section="## ⚠️ 重要問題" ;;
esac
# 建立問題條目
local report_link="./reports/${type}s/$filename"
if [ "$type" = "analysis" ]; then
issue_line="- [ ] $title"$'\n'" - 📊 **分析報告**: [$title 分析報告]($report_link)"$'\n'" - 📋 **後續行動**: [待填寫]"
else
issue_line="- [ ] $title"$'\n'" - 📋 **決策記錄**: [$title 決策記錄]($report_link)"$'\n'" - 📋 **實施狀態**: [待實施]"
fi
# 添加到問題文件
if sed -i '' "/^$section$/a\\
$issue_line
" "$ISSUES_FILE"; then
echo -e "${GREEN}✅ 已加入到問題追蹤系統${NC}"
else
echo -e "${RED}❌ 加入問題追蹤失敗${NC}"
fi
}
# 主程式
main() {
if [ "$1" = "help" ] || [ "$1" = "--help" ] || [ "$1" = "-h" ] || [ $# -eq 0 ]; then
show_help
exit 0
fi
local type="$1"
local title="$2"
if [ -z "$title" ]; then
echo -e "${RED}❌ 錯誤: 請提供報告標題${NC}"
show_help
exit 1
fi
echo -e "${BLUE}📊 建立 Drama Ling 報告${NC}"
echo "================================="
echo -e "${YELLOW}⚠️ 重要提醒:${NC}"
echo " • 所有報告都應該透過此工具創建"
echo " • 確保日期和格式的統一性和正確性"
echo " • 手動建立報告可能導致系統不一致"
echo "================================="
case $type in
analysis|分析)
create_analysis_report "$title"
;;
decision|決策)
create_decision_record "$title"
;;
*)
echo -e "${RED}❌ 未知類型: $type${NC}"
echo "支援的類型: analysis, decision"
show_help
exit 1
;;
esac
}
# 執行主程式
main "$@"