287 lines
8.3 KiB
Batchfile
287 lines
8.3 KiB
Batchfile
@echo off
|
|
chcp 65001 >nul
|
|
setlocal enabledelayedexpansion
|
|
|
|
echo.
|
|
echo ========================================
|
|
echo 代码质量保障系统 - 一键部署脚本
|
|
echo ========================================
|
|
echo.
|
|
|
|
REM 检测 Python 是否安装
|
|
python --version >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo ❌ 错误: 未检测到 Python,请先安装 Python 3.7+
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo ✅ Python 已安装
|
|
echo.
|
|
|
|
REM 获取脚本所在目录
|
|
set "SCRIPT_DIR=%~dp0"
|
|
cd /d "%SCRIPT_DIR%"
|
|
|
|
REM 显示部署选项
|
|
echo 请选择部署模式:
|
|
echo.
|
|
echo [1] 全局部署 (推荐)
|
|
echo - 部署到用户目录 (~/.claude/)
|
|
echo - 所有项目自动启用
|
|
echo - 需要管理员权限
|
|
echo.
|
|
echo [2] 项目部署
|
|
echo - 部署到当前项目的 .claude/ 目录
|
|
echo - 仅当前项目启用
|
|
echo - 不需要管理员权限
|
|
echo.
|
|
echo [3] 卸载
|
|
echo - 从系统中移除已部署的组件
|
|
echo.
|
|
echo [Q] 退出
|
|
echo.
|
|
|
|
set /p choice="请输入选择 (1/2/3/Q): "
|
|
|
|
if /i "%choice%"=="1" goto global_deploy
|
|
if /i "%choice%"=="2" goto project_deploy
|
|
if /i "%choice%"=="3" goto uninstall
|
|
if /i "%choice%"=="Q" goto end
|
|
if /i "%choice%"=="q" goto end
|
|
|
|
echo ❌ 无效的选择
|
|
pause
|
|
exit /b 1
|
|
|
|
:global_deploy
|
|
echo.
|
|
echo ========================================
|
|
echo 全局部署模式
|
|
echo ========================================
|
|
echo.
|
|
|
|
REM 检测 Claude Code 配置目录
|
|
set "CLAUDE_DIR=%USERPROFILE%\.claude"
|
|
if not exist "%CLAUDE_DIR%" (
|
|
echo ⚠️ Claude Code 配置目录不存在,正在创建...
|
|
mkdir "%CLAUDE_DIR%"
|
|
)
|
|
|
|
REM 部署 Hooks
|
|
echo 📦 正在部署 Hooks...
|
|
set "HOOKS_DIR=%CLAUDE_DIR%\hooks"
|
|
if not exist "%HOOKS_DIR%" mkdir "%HOOKS_DIR%"
|
|
|
|
copy /Y "%SCRIPT_DIR%hooks\*.py" "%HOOKS_DIR%\" >nul
|
|
if errorlevel 1 (
|
|
echo ❌ Hooks 部署失败
|
|
pause
|
|
exit /b 1
|
|
)
|
|
echo ✅ Hooks 部署成功
|
|
|
|
REM 部署 Skills
|
|
echo 📦 正在部署 Skills...
|
|
set "SKILLS_DIR=%CLAUDE_DIR%\custom-skills\code-quality"
|
|
if not exist "%SKILLS_DIR%" mkdir "%SKILLS_DIR%"
|
|
|
|
copy /Y "%SCRIPT_DIR%custom-skills\code-quality\*" "%SKILLS_DIR%\" >nul
|
|
if errorlevel 1 (
|
|
echo ❌ Skills 部署失败
|
|
pause
|
|
exit /b 1
|
|
)
|
|
echo ✅ Skills 部署成功
|
|
|
|
REM 部署配置
|
|
echo 📦 正在部署配置文件...
|
|
copy /Y "%SCRIPT_DIR%config\code-quality-config.json" "%CLAUDE_DIR%\" >nul
|
|
echo ✅ 配置文件部署成功
|
|
|
|
REM 复制声音文件(如果存在)
|
|
if exist "%SCRIPT_DIR%sounds\*.wav" (
|
|
echo 📦 正在部署声音文件...
|
|
set "SOUNDS_DIR=%CLAUDE_DIR%\sounds"
|
|
if not exist "%SOUNDS_DIR%" mkdir "%SOUNDS_DIR%"
|
|
copy /Y "%SCRIPT_DIR%sounds\*.wav" "%SOUNDS_DIR%\" >nul
|
|
echo ✅ 声音文件部署成功
|
|
) else (
|
|
echo ⚠️ 未找到声音文件,将使用系统提示音
|
|
)
|
|
|
|
REM 安装 Python 依赖
|
|
echo 📦 正在安装 Python 依赖...
|
|
pip install -q plyer pygame
|
|
if errorlevel 1 (
|
|
echo ⚠️ 部分依赖安装失败,通知功能可能不可用
|
|
) else (
|
|
echo ✅ 依赖安装成功
|
|
)
|
|
|
|
REM 配置 settings.json
|
|
echo 📦 正在配置 Claude Code 设置...
|
|
set "SETTINGS_FILE=%CLAUDE_DIR%\settings.json"
|
|
|
|
REM 创建或更新 settings.json
|
|
if exist "%SETTINGS_FILE%" (
|
|
echo 检测到现有配置文件,正在更新...
|
|
python -c "import json; data=json.load(open('%SETTINGS_FILE%', encoding='utf-8')); data.setdefault('hooks', {}).setdefault('TaskEnd', []).append({'type': 'command', 'command': 'python %USERPROFILE%\.claude\hooks/auto-complete-check.py'}); json.dump(data, open('%SETTINGS_FILE%', 'w', encoding='utf-8'), ensure_ascii=False, indent=2)" 2>nul
|
|
) else (
|
|
echo 创建新的配置文件...
|
|
echo {> "%SETTINGS_FILE%"
|
|
echo "hooks": {>> "%SETTINGS_FILE%"
|
|
echo "TaskEnd": [>> "%SETTINGS_FILE%"
|
|
echo {>> "%SETTINGS_FILE%"
|
|
echo "type": "command",>> "%SETTINGS_FILE%"
|
|
echo "command": "python %%USERPROFILE%%\\.claude\\hooks/auto-complete-check.py">> "%SETTINGS_FILE%"
|
|
echo }>> "%SETTINGS_FILE%"
|
|
echo ]>> "%SETTINGS_FILE%"
|
|
echo }>> "%SETTINGS_FILE%"
|
|
echo }>> "%SETTINGS_FILE%"
|
|
)
|
|
echo ✅ 配置文件更新成功
|
|
|
|
echo.
|
|
echo ========================================
|
|
echo ✅ 全局部署完成!
|
|
echo ========================================
|
|
echo.
|
|
echo 部署位置:
|
|
echo - Hooks: %HOOKS_DIR%
|
|
echo - Skills: %SKILLS_DIR%
|
|
echo - 配置: %CLAUDE_DIR%
|
|
echo.
|
|
echo 使用方法:
|
|
echo 1. 重启 Claude Code
|
|
echo 2. 系统将自动检查代码质量
|
|
echo 3. 使用 /code-quality 命令手动检查
|
|
echo.
|
|
echo 注意事项:
|
|
echo - 首次使用建议运行测试: python "%HOOKS_DIR%\notification-sender.py" test
|
|
echo - 配置文件位置: %CLAUDE_DIR%\code-quality-config.json
|
|
echo.
|
|
pause
|
|
exit /b 0
|
|
|
|
:project_deploy
|
|
echo.
|
|
echo ========================================
|
|
echo 项目部署模式
|
|
echo ========================================
|
|
echo.
|
|
|
|
REM 检查是否在 Git 仓库中
|
|
git rev-parse --is-inside-work-tree >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo ⚠️ 当前目录不是 Git 仓库,某些功能可能不可用
|
|
)
|
|
|
|
REM 部署到项目 .claude 目录
|
|
set "PROJECT_CLAUDE_DIR=.claude"
|
|
|
|
echo 📦 正在部署到项目目录...
|
|
if not exist "%PROJECT_CLAUDE_DIR%" mkdir "%PROJECT_CLAUDE_DIR%"
|
|
|
|
REM 复制 Hooks
|
|
if not exist "%PROJECT_CLAUDE_DIR%\hooks" mkdir "%PROJECT_CLAUDE_DIR%\hooks"
|
|
copy /Y "%SCRIPT_DIR%hooks\*.py" "%PROJECT_CLAUDE_DIR%\hooks\" >nul
|
|
|
|
REM 复制 Skills
|
|
if not exist "%PROJECT_CLAUDE_DIR%\custom-skills\code-quality" mkdir "%PROJECT_CLAUDE_DIR%\custom-skills\code-quality"
|
|
copy /Y "%SCRIPT_DIR%custom-skills\code-quality\*" "%PROJECT_CLAUDE_DIR%\custom-skills\code-quality\" >nul
|
|
|
|
REM 复制配置
|
|
copy /Y "%SCRIPT_DIR%config\code-quality-config.json" "%PROJECT_CLAUDE_DIR%\" >nul
|
|
|
|
REM 复制声音文件
|
|
if exist "%SCRIPT_DIR%sounds\*.wav" (
|
|
if not exist "%PROJECT_CLAUDE_DIR%\sounds" mkdir "%PROJECT_CLAUDE_DIR%\sounds"
|
|
copy /Y "%SCRIPT_DIR%sounds\*.wav" "%PROJECT_CLAUDE_DIR%\sounds\" >nul
|
|
)
|
|
|
|
echo ✅ 项目部署成功
|
|
|
|
echo.
|
|
echo ========================================
|
|
echo ✅ 项目部署完成!
|
|
echo ========================================
|
|
echo.
|
|
echo 部署位置: %CD%\%PROJECT_CLAUDE_DIR%
|
|
echo.
|
|
echo 使用方法:
|
|
echo 1. 在项目中打开 Claude Code
|
|
echo 2. 系统将自动检查代码质量
|
|
echo 3. 使用 /code-quality 命令手动检查
|
|
echo.
|
|
pause
|
|
exit /b 0
|
|
|
|
:uninstall
|
|
echo.
|
|
echo ========================================
|
|
echo 卸载模式
|
|
echo ========================================
|
|
echo.
|
|
|
|
echo 请选择要卸载的组件:
|
|
echo.
|
|
echo [1] 全局部署
|
|
echo [2] 项目部署
|
|
echo [B] 返回
|
|
echo.
|
|
|
|
set /p uninstall_choice="请输入选择 (1/2/B): "
|
|
|
|
if /i "%uninstall_choice%"=="1" (
|
|
echo 正在卸载全局部署...
|
|
|
|
set "CLAUDE_DIR=%USERPROFILE%\.claude"
|
|
|
|
REM 删除 Hooks
|
|
if exist "%CLAUDE_DIR%\hooks\auto-complete-check.py" del "%CLAUDE_DIR%\hooks\auto-complete-check.py"
|
|
if exist "%CLAUDE_DIR%\hooks\requirements-tracker.py" del "%CLAUDE_DIR%\hooks\requirements-tracker.py"
|
|
if exist "%CLAUDE_DIR%\hooks\code-analyzer.py" del "%CLAUDE_DIR%\hooks\code-analyzer.py"
|
|
if exist "%CLAUDE_DIR%\hooks\notification-sender.py" del "%CLAUDE_DIR%\hooks\notification-sender.py"
|
|
|
|
REM 删除 Skills
|
|
if exist "%CLAUDE_DIR%\custom-skills\code-quality" rmdir /s /q "%CLAUDE_DIR%\custom-skills\code-quality"
|
|
|
|
REM 删除配置
|
|
if exist "%CLAUDE_DIR%\code-quality-config.json" del "%CLAUDE_DIR%\code-quality-config.json"
|
|
|
|
REM 更新 settings.json(移除 hook 配置)
|
|
set "SETTINGS_FILE=%CLAUDE_DIR%\settings.json"
|
|
if exist "%SETTINGS_FILE%" (
|
|
echo 正在更新配置文件...
|
|
REM 这里需要 Python 来正确处理 JSON
|
|
python -c "import json; data=json.load(open('%SETTINGS_FILE%', encoding='utf-8')); hooks=data.get('hooks', {}).get('TaskEnd', []); data['hooks']['TaskEnd']=[h for h in hooks if 'auto-complete-check' not in str(h)]; json.dump(data, open('%SETTINGS_FILE%', 'w', encoding='utf-8'), ensure_ascii=False, indent=2)" 2>nul
|
|
)
|
|
|
|
echo ✅ 全局部署已卸载
|
|
echo 注意: Python 依赖 (plyer, pygame) 未卸载,如需请手动运行: pip uninstall plyer pygame
|
|
|
|
) else if /i "%uninstall_choice%"=="2" (
|
|
echo 正在卸载项目部署...
|
|
|
|
if exist ".claude" (
|
|
rmdir /s /q ".claude"
|
|
echo ✅ 项目部署已卸载
|
|
) else (
|
|
echo ⚠️ 未找到项目部署
|
|
)
|
|
|
|
) else if /i "%uninstall_choice%"=="B" (
|
|
goto end
|
|
) else (
|
|
echo ❌ 无效的选择
|
|
)
|
|
|
|
echo.
|
|
pause
|
|
exit /b 0
|
|
|
|
:end
|
|
echo 退出部署脚本
|
|
exit /b 0
|