hn-readcard-go/一键打包.bat
2026-08-12 13:40:06 +08:00

147 lines
4.5 KiB
Batchfile

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "PROJECT_DIR=%~dp0"
set "BUILD_VERSION=1.0.1"
set "MIN_GO_MAJOR=1"
set "MIN_GO_MINOR=22"
set "VENDOR_DLL=%PROJECT_DIR%..\card-read-service\package\DWCardReaderDLL\CardReaderDLL.dll"
title readcard-go package
echo ========================================
echo Checking readcard-go packaging environment...
echo Version: %BUILD_VERSION%
echo ========================================
echo.
where.exe powershell.exe >nul 2>&1
if errorlevel 1 (
echo [ERROR] Windows PowerShell was not found.
echo Install or enable Windows PowerShell and try again.
goto :environment_check_failed
)
echo [OK] PowerShell
where.exe go.exe >nul 2>&1
if errorlevel 1 (
echo [ERROR] Go was not found in PATH.
echo Install Go %MIN_GO_MAJOR%.%MIN_GO_MINOR% or later from https://go.dev/dl/
echo After installation, reopen this window and run the package script again.
goto :environment_check_failed
)
set "GO_VERSION="
for /f "delims=" %%V in ('go env GOVERSION 2^>nul') do set "GO_VERSION=%%V"
if not defined GO_VERSION (
echo [ERROR] The Go installation could not report its version.
echo Reinstall Go and ensure its bin directory is included in PATH.
goto :environment_check_failed
)
set "GO_SEMVER=!GO_VERSION:go=!"
set "GO_MAJOR="
set "GO_MINOR="
for /f "tokens=1,2 delims=." %%A in ("!GO_SEMVER!") do (
set "GO_MAJOR=%%A"
set "GO_MINOR=%%B"
)
if not defined GO_MAJOR goto :invalid_go_version
if not defined GO_MINOR goto :invalid_go_version
set /a "GO_MAJOR_NUMBER=GO_MAJOR" >nul 2>&1
if errorlevel 1 goto :invalid_go_version
set /a "GO_MINOR_NUMBER=GO_MINOR" >nul 2>&1
if errorlevel 1 goto :invalid_go_version
if !GO_MAJOR_NUMBER! LSS %MIN_GO_MAJOR% goto :unsupported_go_version
if !GO_MAJOR_NUMBER! EQU %MIN_GO_MAJOR% if !GO_MINOR_NUMBER! LSS %MIN_GO_MINOR% goto :unsupported_go_version
echo [OK] Go: !GO_VERSION!
set "HAS_WINDOWS_386="
for /f "delims=" %%T in ('go tool dist list 2^>nul') do (
if "%%T"=="windows/386" set "HAS_WINDOWS_386=1"
)
if not defined HAS_WINDOWS_386 (
echo [ERROR] The installed Go toolchain does not support windows/386.
echo Install an official Go distribution and try again.
goto :environment_check_failed
)
echo [OK] Go target: windows/386
if not exist "%PROJECT_DIR%build.ps1" (
echo [ERROR] Missing build script: %PROJECT_DIR%build.ps1
goto :environment_check_failed
)
echo [OK] Build script
if not exist "%PROJECT_DIR%config.json" (
echo [ERROR] Missing configuration file: %PROJECT_DIR%config.json
goto :environment_check_failed
)
echo [OK] Configuration file
if not exist "%PROJECT_DIR%readcard-go.exe.manifest" (
echo [ERROR] Missing Windows application manifest: %PROJECT_DIR%readcard-go.exe.manifest
goto :environment_check_failed
)
echo [OK] Windows application manifest
if not exist "%PROJECT_DIR%rsrc_windows_386.syso" (
echo [ERROR] Missing embedded Windows resource: %PROJECT_DIR%rsrc_windows_386.syso
goto :environment_check_failed
)
echo [OK] Embedded Windows resource
if not exist "%VENDOR_DLL%" (
echo [ERROR] Vendor DLL was not found:
echo %VENDOR_DLL%
echo Restore card-read-service\package\DWCardReaderDLL before packaging.
goto :environment_check_failed
)
echo [OK] Vendor DLL package
if /i "%~1"=="--check" (
echo.
echo Environment check passed.
exit /b 0
)
echo.
echo Environment check passed. Packaging readcard-go, please wait...
echo.
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%PROJECT_DIR%build.ps1" -Version "%BUILD_VERSION%"
set "BUILD_EXIT_CODE=%ERRORLEVEL%"
echo.
if not "%BUILD_EXIT_CODE%"=="0" (
echo ========================================
echo Packaging failed. Exit code: %BUILD_EXIT_CODE%
echo See the error output above for details.
echo ========================================
pause
exit /b %BUILD_EXIT_CODE%
)
echo ========================================
echo Packaging completed successfully.
echo Output directory: %PROJECT_DIR%dist
echo ========================================
start "" "%PROJECT_DIR%dist"
pause
exit /b 0
:invalid_go_version
echo [ERROR] Unable to parse the installed Go version: !GO_VERSION!
echo Install Go %MIN_GO_MAJOR%.%MIN_GO_MINOR% or later from https://go.dev/dl/
goto :environment_check_failed
:unsupported_go_version
echo [ERROR] Go !GO_VERSION! is too old.
echo Install Go %MIN_GO_MAJOR%.%MIN_GO_MINOR% or later from https://go.dev/dl/
goto :environment_check_failed
:environment_check_failed
echo.
echo Packaging stopped because the environment check failed.
pause
exit /b 1