mirror of
https://github.com/black-ant/Ant-Browser.git
synced 2026-07-14 18:48:55 +08:00
channel: master version: 1.0.0 source-ref: master published-at-utc: 2026-03-13T15:19:28Z
249 lines
6.2 KiB
Batchfile
249 lines
6.2 KiB
Batchfile
@echo off
|
||
chcp 65001 >nul
|
||
setlocal enabledelayedexpansion
|
||
|
||
REM 切换到项目根目录(脚本所在目录的上一级)
|
||
cd /d "%~dp0.."
|
||
|
||
echo ========================================
|
||
echo Ant Browser - 发布打包脚本
|
||
echo ========================================
|
||
echo.
|
||
echo 当前工作目录: %CD%
|
||
echo.
|
||
|
||
REM ======== [1/6] 检测 NSIS ========
|
||
echo [1/6] 检测 NSIS 安装...
|
||
echo 支持环境变量:MAKENSIS_PATH / NSIS_PATH / NSIS_HOME
|
||
echo.
|
||
|
||
set "MAKENSIS="
|
||
|
||
REM 优先级 1:MAKENSIS_PATH 直接指向 makensis.exe
|
||
if defined MAKENSIS_PATH (
|
||
if exist "!MAKENSIS_PATH!" (
|
||
set "MAKENSIS=!MAKENSIS_PATH!"
|
||
goto :nsis_found
|
||
)
|
||
)
|
||
|
||
REM 优先级 2:NSIS_PATH 可以是 makensis.exe 或 NSIS 目录
|
||
if defined NSIS_PATH (
|
||
if exist "!NSIS_PATH!\makensis.exe" (
|
||
set "MAKENSIS=!NSIS_PATH!\makensis.exe"
|
||
goto :nsis_found
|
||
)
|
||
if exist "!NSIS_PATH!" (
|
||
set "MAKENSIS=!NSIS_PATH!"
|
||
goto :nsis_found
|
||
)
|
||
)
|
||
|
||
REM 优先级 3:NSIS_HOME 为 NSIS 安装根目录
|
||
if defined NSIS_HOME (
|
||
if exist "!NSIS_HOME!\makensis.exe" (
|
||
set "MAKENSIS=!NSIS_HOME!\makensis.exe"
|
||
goto :nsis_found
|
||
)
|
||
)
|
||
|
||
REM 优先级 4:系统 PATH
|
||
for /f "delims=" %%i in ('where makensis.exe 2^>nul') do (
|
||
set "MAKENSIS=%%i"
|
||
goto :nsis_found
|
||
)
|
||
|
||
REM 优先级 5:常见安装目录
|
||
if exist "C:\Program Files (x86)\NSIS\makensis.exe" (
|
||
set "MAKENSIS=C:\Program Files (x86)\NSIS\makensis.exe"
|
||
goto :nsis_found
|
||
)
|
||
if exist "C:\Program Files\NSIS\makensis.exe" (
|
||
set "MAKENSIS=C:\Program Files\NSIS\makensis.exe"
|
||
goto :nsis_found
|
||
)
|
||
|
||
echo ✗ 未找到 NSIS(makensis.exe)
|
||
echo.
|
||
echo 请安装 NSIS 后,通过以下任一方式配置(PowerShell):
|
||
echo setx MAKENSIS_PATH "D:\tools\NSIS\makensis.exe"
|
||
echo setx NSIS_PATH "D:\tools\NSIS"
|
||
echo setx NSIS_HOME "D:\tools\NSIS"
|
||
echo.
|
||
echo 或下载安装:https://nsis.sourceforge.io/Download
|
||
echo.
|
||
pause
|
||
exit /b 1
|
||
|
||
:nsis_found
|
||
echo ✓ NSIS 已就绪: !MAKENSIS!
|
||
echo.
|
||
|
||
REM ======== [2/6] 读取版本号 ========
|
||
echo [2/6] 读取版本号...
|
||
|
||
set "VERSION="
|
||
for /f "usebackq delims=" %%v in (`powershell -NoProfile -Command "(Get-Content wails.json | ConvertFrom-Json).info.productVersion"`) do (
|
||
set "VERSION=%%v"
|
||
)
|
||
|
||
if "!VERSION!"=="" (
|
||
echo ✗ 无法从 wails.json 读取版本号
|
||
pause
|
||
exit /b 1
|
||
)
|
||
echo ✓ 版本号: !VERSION!
|
||
echo.
|
||
|
||
REM ======== [3/6] Wails 构建 ========
|
||
echo [3/6] 执行 Wails 构建...
|
||
|
||
set GOPROXY=https://goproxy.cn,direct
|
||
wails build
|
||
if %errorlevel% neq 0 (
|
||
echo ✗ Wails 构建失败
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
if not exist "build\bin\ant-chrome.exe" (
|
||
echo ✗ 构建产物不存在: build\bin\ant-chrome.exe
|
||
pause
|
||
exit /b 1
|
||
)
|
||
echo ✓ 构建成功: build\bin\ant-chrome.exe
|
||
echo.
|
||
|
||
REM ======== [4/6] 组装 staging 目录 ========
|
||
echo [4/6] 组装 staging 目录...
|
||
|
||
set "STAGING=publish\staging"
|
||
set "RELEASE_CONFIG=publish\config.init.yaml"
|
||
|
||
if exist "!STAGING!" rmdir /S /Q "!STAGING!"
|
||
mkdir "!STAGING!"
|
||
|
||
copy /Y "build\bin\ant-chrome.exe" "!STAGING!\ant-chrome.exe" >nul
|
||
if errorlevel 1 (
|
||
echo ✗ 复制 ant-chrome.exe 失败
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
if not exist "!STAGING!\ant-chrome.exe" (
|
||
echo ✗ staging 中缺少 ant-chrome.exe
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
echo ✓ 复制 ant-chrome.exe
|
||
|
||
if not exist "!RELEASE_CONFIG!" (
|
||
echo ✗ 未找到发布配置模板: !RELEASE_CONFIG!
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
copy /Y "!RELEASE_CONFIG!" "!STAGING!\config.yaml" >nul
|
||
if errorlevel 1 (
|
||
echo ✗ 复制发布配置模板失败: !RELEASE_CONFIG!
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
if not exist "!STAGING!\config.yaml" (
|
||
echo ✗ staging 中缺少 config.yaml(来源: !RELEASE_CONFIG!)
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
echo ✓ 复制发布配置模板 !RELEASE_CONFIG! -> config.yaml
|
||
|
||
if not exist "bin" (
|
||
echo ✗ bin\ 目录不存在,缺少代理运行时文件
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
if not exist "bin\xray.exe" (
|
||
echo ✗ 缺少运行时文件: bin\xray.exe
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
if not exist "bin\sing-box.exe" (
|
||
echo ✗ 缺少运行时文件: bin\sing-box.exe
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
xcopy /E /I /Y bin "!STAGING!\bin" >nul
|
||
if not exist "!STAGING!\bin\xray.exe" (
|
||
echo ✗ 复制后仍缺少 !STAGING!\bin\xray.exe
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
if not exist "!STAGING!\bin\sing-box.exe" (
|
||
echo ✗ 复制后仍缺少 !STAGING!\bin\sing-box.exe
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
echo ✓ 复制 bin\(xray.exe, sing-box.exe)
|
||
|
||
if not exist "chrome" (
|
||
echo ✗ chrome\ 目录不存在,Chrome 内核为必需文件
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
xcopy /E /I /Y chrome "!STAGING!\chrome" >nul
|
||
echo ✓ 复制 chrome\
|
||
|
||
mkdir "!STAGING!\data"
|
||
echo ✓ 创建空 data 目录(不打包 app.db,首次启动自动初始化)
|
||
|
||
echo.
|
||
echo ✓ staging 目录组装完成
|
||
echo.
|
||
|
||
REM ======== [5/6] NSIS 打包 ========
|
||
echo [5/6] 调用 NSIS 打包...
|
||
|
||
if not exist "publish\output" mkdir "publish\output"
|
||
|
||
REM 确保 installer.nsi 是 UTF-8 with BOM(NSIS Unicode True 要求)
|
||
powershell -NoProfile -Command "$f=(Resolve-Path 'publish\installer.nsi').Path; $c=[System.IO.File]::ReadAllText($f,[System.Text.Encoding]::UTF8); [System.IO.File]::WriteAllText($f,$c,[System.Text.UTF8Encoding]::new($true))" >nul
|
||
|
||
for /f "usebackq delims=" %%p in (`powershell -NoProfile -Command "(Resolve-Path '!STAGING!').Path"`) do (
|
||
set "STAGING_ABS=%%p"
|
||
)
|
||
|
||
"!MAKENSIS!" /DVERSION=!VERSION! "/DSTAGINGDIR=!STAGING_ABS!" publish\installer.nsi
|
||
if %errorlevel% neq 0 (
|
||
echo ✗ NSIS 打包失败
|
||
rmdir /S /Q "!STAGING!"
|
||
pause
|
||
exit /b 1
|
||
)
|
||
echo ✓ 安装包生成成功
|
||
echo.
|
||
|
||
REM ======== [6/6] 清理 staging ========
|
||
echo [6/6] 清理临时文件...
|
||
rmdir /S /Q "!STAGING!"
|
||
echo ✓ staging 目录已清理
|
||
echo.
|
||
|
||
echo ========================================
|
||
echo ✓ 发布完成!
|
||
echo ========================================
|
||
echo.
|
||
echo 安装包位置: publish\output\AntBrowser-Setup-!VERSION!.exe
|
||
echo.
|
||
echo 提示:用户安装后可将旧的 data\ 目录粘贴到安装目录覆盖初始数据
|
||
echo.
|
||
pause
|