fix: Improve Windows build scripts to properly execute electron-builder

- build-client.bat: Use node_modules\.bin\electron-builder.cmd directly
- build-all.ps1: Use direct path to electron-builder instead of npm run
- setup-backend.bat: Add UTF-8 support and use python -m pip

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
egg
2025-12-16 20:40:52 +08:00
parent 7d4fc69071
commit c19b4e8292
3 changed files with 605 additions and 567 deletions

View File

@@ -1,237 +1,238 @@
@echo off
REM Meeting Assistant Backend - Windows 一鍵設置與啟動腳本
REM 自動安裝依賴、設置環境並啟動後端服務
setlocal enabledelayedexpansion
REM 顏色設定 (Windows 10+)
set "GREEN=[92m"
set "YELLOW=[93m"
set "RED=[91m"
set "BLUE=[94m"
set "CYAN=[96m"
set "NC=[0m"
REM 專案路徑
set "SCRIPT_DIR=%~dp0"
set "PROJECT_DIR=%SCRIPT_DIR%.."
set "BACKEND_DIR=%PROJECT_DIR%\backend"
set "SIDECAR_DIR=%PROJECT_DIR%\sidecar"
REM 預設配置
set "DEFAULT_PORT=8000"
set "DEFAULT_HOST=0.0.0.0"
REM 解析參數
set "COMMAND=start"
set "PORT=%DEFAULT_PORT%"
set "HOST=%DEFAULT_HOST%"
set "NO_SIDECAR=false"
:parse_args
if "%~1"=="" goto :main
if /i "%~1"=="setup" (set "COMMAND=setup" & shift & goto :parse_args)
if /i "%~1"=="start" (set "COMMAND=start" & shift & goto :parse_args)
if /i "%~1"=="stop" (set "COMMAND=stop" & shift & goto :parse_args)
if /i "%~1"=="help" (set "COMMAND=help" & shift & goto :parse_args)
if /i "%~1"=="--port" (set "PORT=%~2" & shift & shift & goto :parse_args)
if /i "%~1"=="--host" (set "HOST=%~2" & shift & shift & goto :parse_args)
if /i "%~1"=="--no-sidecar" (set "NO_SIDECAR=true" & shift & goto :parse_args)
echo %RED%[ERROR]%NC% 未知參數: %~1
goto :show_help
:main
if "%COMMAND%"=="help" goto :show_help
if "%COMMAND%"=="setup" goto :do_setup
if "%COMMAND%"=="start" goto :do_start
if "%COMMAND%"=="stop" goto :do_stop
goto :show_help
:show_banner
echo.
echo %CYAN%==========================================
echo Meeting Assistant Backend Setup
echo Windows 一鍵設置與啟動腳本
echo ==========================================%NC%
echo.
goto :eof
:check_python
echo %BLUE%[STEP]%NC% 檢查 Python 環境...
REM 嘗試找到 Python
where python >nul 2>&1
if %errorlevel% equ 0 (
for /f "tokens=*" %%i in ('python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"') do set "PY_VERSION=%%i"
for /f "tokens=*" %%i in ('python -c "import sys; print(sys.version_info.major)"') do set "PY_MAJOR=%%i"
for /f "tokens=*" %%i in ('python -c "import sys; print(sys.version_info.minor)"') do set "PY_MINOR=%%i"
if !PY_MAJOR! geq 3 if !PY_MINOR! geq 10 (
set "PYTHON_CMD=python"
echo %GREEN%[OK]%NC% Python !PY_VERSION!
goto :eof
)
)
echo %RED%[ERROR]%NC% 需要 Python 3.10 或更高版本
echo %BLUE%[INFO]%NC% 請安裝 Python: https://www.python.org/downloads/
exit /b 1
:setup_backend_venv
echo %BLUE%[STEP]%NC% 設置後端虛擬環境...
cd /d "%BACKEND_DIR%"
if not exist "venv" (
echo %BLUE%[INFO]%NC% 創建虛擬環境...
%PYTHON_CMD% -m venv venv
echo %GREEN%[OK]%NC% 虛擬環境已創建
) else (
echo %BLUE%[INFO]%NC% 虛擬環境已存在
)
echo %BLUE%[INFO]%NC% 安裝後端依賴...
call venv\Scripts\activate.bat
pip install --upgrade pip -q
pip install -r requirements.txt -q
echo %GREEN%[OK]%NC% 後端依賴安裝完成
goto :eof
:setup_sidecar_venv
echo %BLUE%[STEP]%NC% 設置 Sidecar 虛擬環境...
cd /d "%SIDECAR_DIR%"
if not exist "venv" (
echo %BLUE%[INFO]%NC% 創建 Sidecar 虛擬環境...
%PYTHON_CMD% -m venv venv
echo %GREEN%[OK]%NC% Sidecar 虛擬環境已創建
) else (
echo %BLUE%[INFO]%NC% Sidecar 虛擬環境已存在
)
echo %BLUE%[INFO]%NC% 安裝 Sidecar 依賴 (這可能需要幾分鐘)...
call venv\Scripts\activate.bat
pip install --upgrade pip -q
pip install -r requirements.txt -q
echo %GREEN%[OK]%NC% Sidecar 依賴安裝完成
goto :eof
:setup_env_file
echo %BLUE%[STEP]%NC% 檢查環境變數配置...
cd /d "%BACKEND_DIR%"
if not exist ".env" (
if exist ".env.example" (
copy .env.example .env >nul
echo %YELLOW%[WARN]%NC% 已從 .env.example 創建 .env 檔案
echo %YELLOW%[WARN]%NC% 請編輯 %BACKEND_DIR%\.env 設置資料庫和 API 密鑰
) else (
echo %RED%[ERROR]%NC% 找不到 .env.example 檔案
exit /b 1
)
) else (
echo %GREEN%[OK]%NC% 環境變數檔案已存在
)
goto :eof
:start_backend
echo %BLUE%[STEP]%NC% 啟動後端服務...
cd /d "%BACKEND_DIR%"
REM 載入環境變數
if exist ".env" (
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
set "%%a=%%b"
)
)
REM 使用 .env 中的配置或預設值
if defined BACKEND_HOST set "HOST=%BACKEND_HOST%"
if defined BACKEND_PORT set "PORT=%BACKEND_PORT%"
REM 啟動虛擬環境
call venv\Scripts\activate.bat
echo.
echo %GREEN%[OK]%NC% 後端服務準備就緒!
echo.
echo %CYAN%==========================================
echo 服務資訊
echo ==========================================%NC%
echo.
echo API 地址: http://localhost:%PORT%
echo API 文件: http://localhost:%PORT%/docs
echo 健康檢查: http://localhost:%PORT%/api/health
echo.
echo 按 Ctrl+C 停止服務
echo.
uvicorn app.main:app --host %HOST% --port %PORT% --reload
goto :eof
:do_setup
call :show_banner
call :check_python
if errorlevel 1 exit /b 1
call :setup_backend_venv
if "%NO_SIDECAR%"=="false" call :setup_sidecar_venv
call :setup_env_file
echo.
echo %GREEN%[OK]%NC% 環境設置完成!
echo.
echo %BLUE%[INFO]%NC% 啟動服務: %~nx0 start
goto :eof
:do_start
call :show_banner
call :check_python
if errorlevel 1 exit /b 1
call :setup_backend_venv
call :setup_env_file
call :start_backend
goto :eof
:do_stop
echo %BLUE%[STEP]%NC% 停止後端服務...
REM 查找並終止 uvicorn 程序
for /f "tokens=2" %%i in ('tasklist /fi "imagename eq python.exe" /fo list ^| findstr "PID:"') do (
wmic process where "processid=%%i" get commandline 2>nul | findstr /i "uvicorn" >nul
if not errorlevel 1 (
taskkill /pid %%i /f >nul 2>&1
echo %GREEN%[OK]%NC% 已停止 PID: %%i
)
)
echo %GREEN%[OK]%NC% 後端服務已停止
goto :eof
:show_help
echo.
echo Meeting Assistant Backend - Windows 一鍵設置與啟動腳本
echo.
echo 用法: %~nx0 [命令] [選項]
echo.
echo 命令:
echo setup 僅設置環境 (安裝依賴)
echo start 設置並啟動後端服務 (預設)
echo stop 停止後端服務
echo help 顯示此幫助訊息
echo.
echo 選項:
echo --port PORT 服務端口 (預設: %DEFAULT_PORT%)
echo --host HOST 綁定地址 (預設: %DEFAULT_HOST%)
echo --no-sidecar 不安裝 Sidecar 依賴
echo.
echo 範例:
echo %~nx0 start 設置並啟動服務
echo %~nx0 start --port 8080 使用自訂端口
echo %~nx0 setup 僅安裝依賴
echo.
goto :eof
:end
endlocal
@echo off
chcp 65001 >nul
REM Meeting Assistant Backend - Windows 一鍵設置與啟動腳本
REM 自動安裝依賴、設置環境並啟動後端服務
setlocal enabledelayedexpansion
REM 顏色設定 (Windows 10+)
set "GREEN=[92m"
set "YELLOW=[93m"
set "RED=[91m"
set "BLUE=[94m"
set "CYAN=[96m"
set "NC=[0m"
REM 專案路徑
set "SCRIPT_DIR=%~dp0"
set "PROJECT_DIR=%SCRIPT_DIR%.."
set "BACKEND_DIR=%PROJECT_DIR%\backend"
set "SIDECAR_DIR=%PROJECT_DIR%\sidecar"
REM 預設配置
set "DEFAULT_PORT=8000"
set "DEFAULT_HOST=0.0.0.0"
REM 解析參數
set "COMMAND=start"
set "PORT=%DEFAULT_PORT%"
set "HOST=%DEFAULT_HOST%"
set "NO_SIDECAR=false"
:parse_args
if "%~1"=="" goto :main
if /i "%~1"=="setup" (set "COMMAND=setup" & shift & goto :parse_args)
if /i "%~1"=="start" (set "COMMAND=start" & shift & goto :parse_args)
if /i "%~1"=="stop" (set "COMMAND=stop" & shift & goto :parse_args)
if /i "%~1"=="help" (set "COMMAND=help" & shift & goto :parse_args)
if /i "%~1"=="--port" (set "PORT=%~2" & shift & shift & goto :parse_args)
if /i "%~1"=="--host" (set "HOST=%~2" & shift & shift & goto :parse_args)
if /i "%~1"=="--no-sidecar" (set "NO_SIDECAR=true" & shift & goto :parse_args)
echo %RED%[ERROR]%NC% 未知參數: %~1
goto :show_help
:main
if "%COMMAND%"=="help" goto :show_help
if "%COMMAND%"=="setup" goto :do_setup
if "%COMMAND%"=="start" goto :do_start
if "%COMMAND%"=="stop" goto :do_stop
goto :show_help
:show_banner
echo.
echo %CYAN%==========================================
echo Meeting Assistant Backend Setup
echo Windows 一鍵設置與啟動腳本
echo ==========================================%NC%
echo.
goto :eof
:check_python
echo %BLUE%[STEP]%NC% 檢查 Python 環境...
REM 嘗試找到 Python
where python >nul 2>&1
if %errorlevel% equ 0 (
for /f "tokens=*" %%i in ('python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"') do set "PY_VERSION=%%i"
for /f "tokens=*" %%i in ('python -c "import sys; print(sys.version_info.major)"') do set "PY_MAJOR=%%i"
for /f "tokens=*" %%i in ('python -c "import sys; print(sys.version_info.minor)"') do set "PY_MINOR=%%i"
if !PY_MAJOR! geq 3 if !PY_MINOR! geq 10 (
set "PYTHON_CMD=python"
echo %GREEN%[OK]%NC% Python !PY_VERSION!
goto :eof
)
)
echo %RED%[ERROR]%NC% 需要 Python 3.10 或更高版本
echo %BLUE%[INFO]%NC% 請安裝 Python: https://www.python.org/downloads/
exit /b 1
:setup_backend_venv
echo %BLUE%[STEP]%NC% 設置後端虛擬環境...
cd /d "%BACKEND_DIR%"
if not exist "venv" (
echo %BLUE%[INFO]%NC% 創建虛擬環境...
%PYTHON_CMD% -m venv venv
echo %GREEN%[OK]%NC% 虛擬環境已創建
) else (
echo %BLUE%[INFO]%NC% 虛擬環境已存在
)
echo %BLUE%[INFO]%NC% 安裝後端依賴...
call venv\Scripts\activate.bat
python -m pip install --upgrade pip -q
python -m pip install -r requirements.txt -q
echo %GREEN%[OK]%NC% 後端依賴安裝完成
goto :eof
:setup_sidecar_venv
echo %BLUE%[STEP]%NC% 設置 Sidecar 虛擬環境...
cd /d "%SIDECAR_DIR%"
if not exist "venv" (
echo %BLUE%[INFO]%NC% 創建 Sidecar 虛擬環境...
%PYTHON_CMD% -m venv venv
echo %GREEN%[OK]%NC% Sidecar 虛擬環境已創建
) else (
echo %BLUE%[INFO]%NC% Sidecar 虛擬環境已存在
)
echo %BLUE%[INFO]%NC% 安裝 Sidecar 依賴 (這可能需要幾分鐘)...
call venv\Scripts\activate.bat
python -m pip install --upgrade pip -q
python -m pip install -r requirements.txt -q
echo %GREEN%[OK]%NC% Sidecar 依賴安裝完成
goto :eof
:setup_env_file
echo %BLUE%[STEP]%NC% 檢查環境變數配置...
cd /d "%BACKEND_DIR%"
if not exist ".env" (
if exist ".env.example" (
copy .env.example .env >nul
echo %YELLOW%[WARN]%NC% 已從 .env.example 創建 .env 檔案
echo %YELLOW%[WARN]%NC% 請編輯 %BACKEND_DIR%\.env 設置資料庫和 API 密鑰
) else (
echo %RED%[ERROR]%NC% 找不到 .env.example 檔案
exit /b 1
)
) else (
echo %GREEN%[OK]%NC% 環境變數檔案已存在
)
goto :eof
:start_backend
echo %BLUE%[STEP]%NC% 啟動後端服務...
cd /d "%BACKEND_DIR%"
REM 載入環境變數
if exist ".env" (
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
set "%%a=%%b"
)
)
REM 使用 .env 中的配置或預設值
if defined BACKEND_HOST set "HOST=%BACKEND_HOST%"
if defined BACKEND_PORT set "PORT=%BACKEND_PORT%"
REM 啟動虛擬環境
call venv\Scripts\activate.bat
echo.
echo %GREEN%[OK]%NC% 後端服務準備就緒!
echo.
echo %CYAN%==========================================
echo 服務資訊
echo ==========================================%NC%
echo.
echo API 地址: http://localhost:%PORT%
echo API 文件: http://localhost:%PORT%/docs
echo 健康檢查: http://localhost:%PORT%/api/health
echo.
echo 按 Ctrl+C 停止服務
echo.
uvicorn app.main:app --host %HOST% --port %PORT% --reload
goto :eof
:do_setup
call :show_banner
call :check_python
if errorlevel 1 exit /b 1
call :setup_backend_venv
if "%NO_SIDECAR%"=="false" call :setup_sidecar_venv
call :setup_env_file
echo.
echo %GREEN%[OK]%NC% 環境設置完成!
echo.
echo %BLUE%[INFO]%NC% 啟動服務: %~nx0 start
goto :eof
:do_start
call :show_banner
call :check_python
if errorlevel 1 exit /b 1
call :setup_backend_venv
call :setup_env_file
call :start_backend
goto :eof
:do_stop
echo %BLUE%[STEP]%NC% 停止後端服務...
REM 查找並終止 uvicorn 程序
for /f "tokens=2" %%i in ('tasklist /fi "imagename eq python.exe" /fo list ^| findstr "PID:"') do (
wmic process where "processid=%%i" get commandline 2>nul | findstr /i "uvicorn" >nul
if not errorlevel 1 (
taskkill /pid %%i /f >nul 2>&1
echo %GREEN%[OK]%NC% 已停止 PID: %%i
)
)
echo %GREEN%[OK]%NC% 後端服務已停止
goto :eof
:show_help
echo.
echo Meeting Assistant Backend - Windows 一鍵設置與啟動腳本
echo.
echo 用法: %~nx0 [命令] [選項]
echo.
echo 命令:
echo setup 設置環境 (安裝依賴)
echo start 設置並啟動後端服務 (預設)
echo stop 停止後端服務
echo help 顯示此幫助訊息
echo.
echo 選項:
echo --port PORT 服務端口 (預設: %DEFAULT_PORT%)
echo --host HOST 綁定地址 (預設: %DEFAULT_HOST%)
echo --no-sidecar 不安裝 Sidecar 依賴
echo.
echo 範例:
echo %~nx0 start 設置並啟動服務
echo %~nx0 start --port 8080 使用自訂端口
echo %~nx0 setup 僅安裝依賴
echo.
goto :eof
:end
endlocal