Files
GitCodeStatic/scripts/build-all.bat
2025-12-31 16:33:01 +08:00

218 lines
6.3 KiB
Batchfile

@echo off
setlocal enabledelayedexpansion
REM GitCodeStatic Windows 全平台构建脚本
REM 使用 PowerShell 的交叉编译功能构建所有平台的包
set "VERSION=%1"
set "OUTPUT_DIR=%2"
if "%VERSION%"=="" set "VERSION=latest"
if "%OUTPUT_DIR%"=="" set "OUTPUT_DIR=dist"
echo 开始全平台构建 GitCodeStatic v%VERSION%...
REM 设置变量
set "PROJECT_ROOT=%~dp0\.."
set "OUTPUT_PATH=%PROJECT_ROOT%\%OUTPUT_DIR%"
REM 清理输出目录
if exist "%OUTPUT_PATH%" (
echo 清理旧的输出目录...
rmdir /s /q "%OUTPUT_PATH%"
)
mkdir "%OUTPUT_PATH%"
REM 平台列表
set PLATFORMS=windows/amd64 linux/amd64 darwin/amd64 linux/arm64 darwin/arm64
cd /d "%PROJECT_ROOT%"
for %%P in (%PLATFORMS%) do (
echo.
echo 构建 %%P...
REM 解析平台字符串
for /f "tokens=1,2 delims=/" %%A in ("%%P") do (
set "GOOS=%%A"
set "GOARCH=%%B"
)
REM 设置输出文件名
set "BINARY_NAME=gitcodestatic"
if "!GOOS!"=="windows" set "BINARY_NAME=gitcodestatic.exe"
REM 设置包名
set "PACKAGE_NAME=gitcodestatic-!GOOS!-!GOARCH!-!VERSION!"
set "PACKAGE_PATH=!OUTPUT_PATH!\!PACKAGE_NAME!"
mkdir "!PACKAGE_PATH!"
REM 设置构建环境
set "GOOS=!GOOS!"
set "GOARCH=!GOARCH!"
set "CGO_ENABLED=1"
REM ARM64 和交叉编译时禁用 CGO
if "!GOARCH!"=="arm64" set "CGO_ENABLED=0"
if not "!GOOS!"=="windows" set "CGO_ENABLED=0"
echo 构建二进制文件...
go build -ldflags "-s -w -X main.Version=!VERSION!" -o "!PACKAGE_PATH!\!BINARY_NAME!" cmd\server\main.go
if !errorlevel! neq 0 (
echo 构建 %%P 失败!
continue
)
echo 复制文件...
REM 复制通用文件
xcopy /E /I /Y web "!PACKAGE_PATH!\web\" > nul
xcopy /E /I /Y configs "!PACKAGE_PATH!\configs\" > nul
copy /Y README.md "!PACKAGE_PATH!\" > nul
copy /Y QUICKSTART.md "!PACKAGE_PATH!\" > nul
REM 根据平台创建特定的启动脚本
if "!GOOS!"=="windows" (
REM Windows 启动脚本
(
echo @echo off
echo echo Starting GitCodeStatic Server...
echo echo.
echo echo Web UI: http://localhost:8080
echo echo API Docs: http://localhost:8080/swagger/
echo echo.
echo gitcodestatic.exe
echo pause
) > "!PACKAGE_PATH!\start.bat"
REM Windows 配置说明
(
echo GitCodeStatic Windows 版本
echo.
echo ## 使用方法
echo 1. 双击 start.bat 启动服务器
echo 2. 打开浏览器访问 http://localhost:8080
echo 3. 查看 API 文档: http://localhost:8080/swagger/
echo.
echo ## 配置文件
echo - configs/config.yaml: 主配置文件
echo.
echo ## 停止服务
echo - 在命令窗口中按 Ctrl+C 停止服务器
) > "!PACKAGE_PATH!\使用说明.txt"
) else (
REM Unix 启动脚本
(
echo #!/bin/bash
echo echo "Starting GitCodeStatic Server..."
echo echo ""
echo echo "Web UI: http://localhost:8080"
echo echo "API Docs: http://localhost:8080/swagger/"
echo echo ""
echo echo "Press Ctrl+C to stop the server"
echo echo ""
echo.
echo chmod +x "./gitcodestatic"
echo ./gitcodestatic
) > "!PACKAGE_PATH!\start.sh"
REM Unix 说明文件
(
echo # GitCodeStatic !GOOS! 版本
echo.
echo ## 快速启动
echo ```bash
echo ./start.sh
echo # 或
echo ./gitcodestatic
echo ```
echo.
echo ## 配置文件
echo - configs/config.yaml: 主配置文件
echo.
echo ## 访问地址
echo - Web UI: http://localhost:8080
echo - API 文档: http://localhost:8080/swagger/
echo.
echo ## 停止服务
echo 按 Ctrl+C 停止服务器
) > "!PACKAGE_PATH!\README_!GOOS!.md"
)
echo 创建压缩包...
cd /d "!OUTPUT_PATH!"
if "!GOOS!"=="windows" (
REM Windows 使用内置压缩
powershell -command "Compress-Archive -Path '!PACKAGE_NAME!' -DestinationPath '!PACKAGE_NAME!.zip' -Force" 2>nul
if !errorlevel! equ 0 (
echo ✓ 已创建 !PACKAGE_NAME!.zip
) else (
echo ⚠ 创建压缩包失败
)
) else (
REM Unix 平台压缩包(如果有 tar 命令)
where tar >nul 2>nul
if !errorlevel! equ 0 (
tar -czf "!PACKAGE_NAME!.tar.gz" "!PACKAGE_NAME!"
if !errorlevel! equ 0 (
echo ✓ 已创建 !PACKAGE_NAME!.tar.gz
) else (
echo ⚠ 创建 tar.gz 失败
)
) else (
powershell -command "Compress-Archive -Path '!PACKAGE_NAME!' -DestinationPath '!PACKAGE_NAME!.zip' -Force" 2>nul
if !errorlevel! equ 0 (
echo ✓ 已创建 !PACKAGE_NAME!.zip
) else (
echo ⚠ 创建压缩包失败
)
)
)
cd /d "%PROJECT_ROOT%"
)
echo.
echo ===================================
echo 全平台构建完成!
echo ===================================
echo 输出目录: %OUTPUT_PATH%
echo.
echo 构建的平台:
cd /d "%OUTPUT_PATH%"
REM 显示构建结果
for %%P in (%PLATFORMS%) do (
for /f "tokens=1,2 delims=/" %%A in ("%%P") do (
set "GOOS=%%A"
set "GOARCH=%%B"
set "PACKAGE_NAME=gitcodestatic-!GOOS!-!GOARCH!-!VERSION!"
if "!GOOS!"=="windows" (
set "ARCHIVE=!PACKAGE_NAME!.zip"
) else (
set "ARCHIVE=!PACKAGE_NAME!.tar.gz"
if not exist "!ARCHIVE!" set "ARCHIVE=!PACKAGE_NAME!.zip"
)
if exist "!ARCHIVE!" (
for %%F in ("!ARCHIVE!") do echo!GOOS!/!GOARCH! - !ARCHIVE! ^(%%~zF 字节^)
) else (
echo!GOOS!/!GOARCH! - 构建失败
)
)
)
echo.
REM 统计文件
set /a COUNT=0
for %%F in (*.zip *.tar.gz) do set /a COUNT+=1
echo 总文件数: !COUNT!
pause