#!/bin/bash # 自动更新 CLAUDE.md 文档脚本 # 当项目结构发生变化时,自动同步更新相关模块的 CLAUDE.md set -e echo "📝 开始更新 CLAUDE.md 文档..." # 定义颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 检查是否在项目根目录 if [ ! -f "CLAUDE.md" ]; then echo -e "${RED}❌ 请在项目根目录运行此脚本${NC}" exit 1 fi # 获取当前日期 CURRENT_DATE=$(date +"%Y-%m-%d %H:%M:%S") # 更新根目录 CLAUDE.md 的最后更新时间 update_root_claude_md() { echo -e "${YELLOW}📋 更新根目录 CLAUDE.md...${NC}" # 在文件末尾添加更新时间(如果不存在) if ! grep -q "最后更新时间" CLAUDE.md; then echo "" >> CLAUDE.md echo "---" >> CLAUDE.md echo "**最后更新时间**: $CURRENT_DATE" >> CLAUDE.md else # 更新现有的时间戳 sed -i.bak "s/\*\*最后更新时间\*\*:.*/\*\*最后更新时间\*\*: $CURRENT_DATE/" CLAUDE.md rm CLAUDE.md.bak fi } # 检查前端模块变更 check_frontend_changes() { echo -e "${YELLOW}🎨 检查前端模块变更...${NC}" # 检查前端相关文件是否变更 if git diff --name-only HEAD~1 2>/dev/null | grep -E "^frontend/" > /dev/null; then echo -e "${GREEN}✅ 检测到前端模块变更${NC}" # 更新前端 CLAUDE.md 的时间戳 if [ -f "frontend/CLAUDE.md" ]; then if ! grep -q "最后更新时间" frontend/CLAUDE.md; then echo "" >> frontend/CLAUDE.md echo "---" >> frontend/CLAUDE.md echo "**最后更新时间**: $CURRENT_DATE" >> frontend/CLAUDE.md else sed -i.bak "s/\*\*最后更新时间\*\*:.*/\*\*最后更新时间\*\*: $CURRENT_DATE/" frontend/CLAUDE.md rm frontend/CLAUDE.md.bak fi fi fi } # 检查部署模块变更 check_deployment_changes() { echo -e "${YELLOW}🚀 检查部署模块变更...${NC}" # 检查部署相关文件是否变更 if git diff --name-only HEAD~1 2>/dev/null | grep -E "^docs/deployment/|^\.gitea/workflows/" > /dev/null; then echo -e "${GREEN}✅ 检测到部署模块变更${NC}" # 更新部署 CLAUDE.md 的时间戳 if [ -f "docs/deployment/CLAUDE.md" ]; then if ! grep -q "最后更新时间" docs/deployment/CLAUDE.md; then echo "" >> docs/deployment/CLAUDE.md echo "---" >> docs/deployment/CLAUDE.md echo "**最后更新时间**: $CURRENT_DATE" >> docs/deployment/CLAUDE.md else sed -i.bak "s/\*\*最后更新时间\*\*:.*/\*\*最后更新时间\*\*: $CURRENT_DATE/" docs/deployment/CLAUDE.md rm docs/deployment/CLAUDE.md.bak fi fi fi } # 检查 CI/CD 模块变更 check_cicd_changes() { echo -e "${YELLOW}⚙️ 检查 CI/CD 模块变更...${NC}" # 检查 CI/CD 相关文件是否变更 if git diff --name-only HEAD~1 2>/dev/null | grep -E "^\.gitea/workflows/" > /dev/null; then echo -e "${GREEN}✅ 检测到 CI/CD 模块变更${NC}" # 更新 CI/CD CLAUDE.md 的时间戳 if [ -f ".gitea/workflows/CLAUDE.md" ]; then if ! grep -q "最后更新时间" .gitea/workflows/CLAUDE.md; then echo "" >> .gitea/workflows/CLAUDE.md echo "---" >> .gitea/workflows/CLAUDE.md echo "**最后更新时间**: $CURRENT_DATE" >> .gitea/workflows/CLAUDE.md else sed -i.bak "s/\*\*最后更新时间\*\*:.*/\*\*最后更新时间\*\*: $CURRENT_DATE/" .gitea/workflows/CLAUDE.md rm .gitea/workflows/CLAUDE.md.bak fi fi fi } # 验证所有 CLAUDE.md 文件存在 validate_claude_files() { echo -e "${YELLOW}🔍 验证 CLAUDE.md 文件...${NC}" local files=( "CLAUDE.md" "frontend/CLAUDE.md" "docs/deployment/CLAUDE.md" ".gitea/workflows/CLAUDE.md" ) for file in "${files[@]}"; do if [ -f "$file" ]; then echo -e "${GREEN}✅ $file 存在${NC}" else echo -e "${RED}❌ $file 不存在${NC}" fi done } # 主函数 main() { echo -e "${GREEN}🚀 CLAUDE.md 文档更新工具${NC}" echo "================================================" # 验证文件 validate_claude_files # 更新根目录 update_root_claude_md # 检查各模块变更 check_frontend_changes check_deployment_changes check_cicd_changes echo "================================================" echo -e "${GREEN}✅ CLAUDE.md 文档更新完成!${NC}" echo -e "${YELLOW}💡 提示: 记得提交更新的文档${NC}" } # 如果是通过命令行直接运行 if [ "${BASH_SOURCE[0]}" == "${0}" ]; then main "$@" fi