H:\project\questions_mcp_server\publish.bat@echo off
REM Questions MCP Server 一键打包上传脚本
REM 功能：自动构建、上传到 PyPI、验证安装

chcp 65001 >nul
setlocal EnableDelayedExpansion

echo.
echo ========================================
echo Questions MCP Server 发布工具
echo ========================================
echo.

REM 1. 检查必要工具
echo [步骤 1/6] 检查必要工具...
echo.

REM 检查 uv
uv --version >nul 2>&1
if errorlevel 1 (
    echo [错误] uv 未安装，正在安装...
    pip install uv
    if errorlevel 1 (
        echo [错误] uv 安装失败，请手动安装: pip install uv
        pause
        exit /b 1
    )
    echo [OK] uv 安装成功
) else (
    echo [OK] uv 已安装
)

REM 检查 twine
twine --version >nul 2>&1
if errorlevel 1 (
    echo [错误] twine 未安装，正在安装...
    pip install twine
    if errorlevel 1 (
        echo [错误] twine 安装失败，请手动安装: pip install twine
        pause
        exit /b 1
    )
    echo [OK] twine 安装成功
) else (
    echo [OK] twine 已安装
)

echo.

REM 2. 读取当前版本号
echo [步骤 2/6] 读取版本信息...
echo.

REM 从 pyproject.toml 读取版本号
for /f "tokens=2 delims==" %%a in ('findstr /C:"version = " pyproject.toml') do (
    set VERSION_LINE=%%a
)

REM 去除引号和空格
set VERSION=%VERSION_LINE:"=%
set VERSION=%VERSION: =%

echo 当前版本: %VERSION%
echo.

REM 3. 清理旧的构建文件
echo [步骤 3/6] 清理旧的构建文件...
echo.

if exist dist (
    echo 删除旧的 dist 目录...
    rmdir /s /q dist
)

if exist build (
    echo 删除旧的 build 目录...
    rmdir /s /q build
)

if exist *.egg-info (
    echo 删除旧的 egg-info...
    rmdir /s /q *.egg-info
)

echo [OK] 清理完成
echo.

REM 4. 构建包
echo [步骤 4/6] 构建 Python 包...
echo.

uv build
if errorlevel 1 (
    echo [错误] 构建失败！
    pause
    exit /b 1
)

echo [OK] 构建成功
echo.

REM 列出构建的文件
echo 构建的文件:
dir /b dist
echo.

REM 5. 上传到 PyPI
echo [步骤 5/6] 上传到 PyPI...
echo.

echo 请选择上传目标:
echo 1. PyPI (生产环境)
echo 2. TestPyPI (测试环境)
echo.
set /p UPLOAD_TARGET="请输入选项 (1/2，默认为 2): "

REM 设置默认值
if not defined UPLOAD_TARGET set "UPLOAD_TARGET=2"
if "%UPLOAD_TARGET%"=="" set "UPLOAD_TARGET=2"

echo.
if "%UPLOAD_TARGET%"=="1" (
    echo 正在上传到 PyPI (生产环境)...
    twine upload dist/*
    if errorlevel 1 (
        echo.
        echo [错误] 上传失败！
        echo.
        echo 可能的原因:
        echo 1. 版本号已存在 (PyPI 不允许覆盖已发布的版本)
        echo 2. 认证失败 (请检查 ~/.pypirc 配置)
        echo 3. 网络问题
        echo.
        echo 建议:
        echo - 检查版本号是否需要更新
        echo - 验证 PyPI 凭据
        echo.
        pause
        exit /b 1
    )
    set PYPI_URL=https://pypi.org/project/questions-mcp-server/
    set INSTALL_COMMAND=pip install questions-mcp-server==%VERSION%
) else (
    echo.
    echo 正在上传到 TestPyPI (测试环境)...
    twine upload --repository testpypi dist/*
    if errorlevel 1 (
        echo.
        echo [错误] 上传失败！
        echo.
        echo 可能的原因:
        echo 1. 版本号已存在 (PyPI 不允许覆盖已发布的版本)
        echo 2. 认证失败 (请检查 ~/.pypirc 配置)
        echo 3. 网络问题
        echo.
        echo 建议:
        echo - 检查版本号是否需要更新
        echo - 验证 PyPI 凭据
        echo.
        pause
        exit /b 1
    )
    set PYPI_URL=https://test.pypi.org/project/questions-mcp-server/
    set INSTALL_COMMAND=pip install --index-url https://test.pypi.org/simple/ questions-mcp-server==%VERSION%
)

echo.
echo [OK] 上传成功！
echo.

REM 6. 等待并验证
echo [步骤 6/6] 等待 PyPI 索引更新并验证...
echo.

echo 等待 20 秒，让 PyPI 索引更新...
timeout /t 20 /nobreak >nul

echo.
echo 正在验证版本 %VERSION% 是否可安装...
echo.

REM 创建临时虚拟环境进行测试
set TEMP_VENV=.verify_venv

if exist %TEMP_VENV% (
    rmdir /s /q %TEMP_VENV%
)

echo 创建临时虚拟环境...
python -m venv %TEMP_VENV%

echo 尝试安装 questions-mcp-server %VERSION%...
call %TEMP_VENV%\Scripts\activate.bat

%INSTALL_COMMAND% >nul 2>&1
if errorlevel 1 (
    echo.
    echo [警告] 无法安装版本 %VERSION%
    echo.
    echo PyPI 索引可能还没有完全更新，请稍后再试。
    echo.
    echo 你可以手动验证:
    echo   %INSTALL_COMMAND%
    echo.
    echo PyPI 页面:
    echo   %PYPI_URL%
    echo.
) else (
    REM 检查安装的版本
    pip show questions-mcp-server | findstr "Version:"
    if errorlevel 1 (
        echo [警告] 已安装但无法获取版本信息
    ) else (
        echo.
        echo [OK] 验证成功！版本 %VERSION% 已可用
        echo.
    )
)

REM 清理临时环境
call deactivate 2>nul
rmdir /s /q %TEMP_VENV%

echo.
echo ========================================
echo 发布完成！
echo ========================================
echo.
echo 版本: %VERSION%
echo PyPI 页面: %PYPI_URL%
echo.
echo 用户可以通过以下命令安装:
if "%UPLOAD_TARGET%"=="1" (
    echo   pip install questions-mcp-server
    echo   或
    echo   uv pip install questions-mcp-server
) else (
    echo   pip install --index-url https://test.pypi.org/simple/ questions-mcp-server
)
echo.
echo 或使用 uvx 直接运行:
if "%UPLOAD_TARGET%"=="1" (
    echo   uvx questions-mcp-server
) else (
    echo   uvx --index-url https://test.pypi.org/simple/ questions-mcp-server
)
echo.

pause
