zworld-em/Plugins/sentry-unreal/Scripts/upload-debug-symbols-win.bat
2025-05-11 22:07:21 +08:00

168 lines
5.1 KiB
Batchfile

@echo off
setlocal enabledelayedexpansion
set TargetPlatform=%1
set TargetName=%2
set TargetType=%3
set TargetConfig=%4
set ProjectPath=%5
set PluginPath=%6
set ProjectBinariesPath=%ProjectPath:"=%\Binaries\%TargetPlatform%
set PluginBinariesPath=%PluginPath:"=%\Source\ThirdParty\%TargetPlatform%
set ConfigPath=%ProjectPath:"=%\Config
echo Sentry: Start debug symbols upload
if "%TargetType%"=="Editor" (
echo Sentry: Automatic symbols upload is not required for Editor target. Skipping...
exit /B 0
)
if "%TargetPlatform%"=="Win64" (
set CliExec=%PluginPath:"=%\Source\ThirdParty\CLI\sentry-cli-Windows-x86_64.exe
) else if "%TargetPlatform%"=="Linux" (
set CliExec=%PluginPath:"=%\Source\ThirdParty\CLI\sentry-cli-Windows-x86_64.exe
) else if "%TargetPlatform%"=="LinuxArm64" (
set CliExec=%PluginPath:"=%\Source\ThirdParty\CLI\sentry-cli-Windows-x86_64.exe
) else if "%TargetPlatform%"=="Android" (
echo Warning: Sentry: Debug symbols upload for Android is handled by Sentry's gradle plugin if enabled
exit /B 0
) else (
echo Warning: Sentry: Unexpected platform %TargetPlatform%. Skipping...
exit /B 0
)
call :ParseIniFile "%ConfigPath%\DefaultEngine.ini" /Script/Sentry.SentrySettings UploadSymbolsAutomatically UploadSymbols
if /i "%SENTRY_UPLOAD_SYMBOLS_AUTOMATICALLY%" NEQ "" (
set UploadSymbols=%SENTRY_UPLOAD_SYMBOLS_AUTOMATICALLY%
echo Sentry: Automatic symbols upload settings were overridden via environment variable SENTRY_UPLOAD_SYMBOLS_AUTOMATICALLY with value '%SENTRY_UPLOAD_SYMBOLS_AUTOMATICALLY%'
)
if /i "%UploadSymbols%" NEQ "True" (
echo Sentry: Automatic symbols upload is disabled. Skipping...
exit /B 0
)
call :ParseIniFile "%ConfigPath%\DefaultEngine.ini" /Script/Sentry.SentrySettings IncludeSources IncludeSourceFiles
set CliArgs=
if /i "%IncludeSourceFiles%"=="True" (
set "CliArgs=--include-sources"
)
set CliLogLevel=
call :ParseIniFile "%ConfigPath%\DefaultEngine.ini" /Script/Sentry.SentrySettings DiagnosticLevel CliLogLevel
if "%CliLogLevel%"=="" (
set "CliLogLevel=info"
)
call :ParseIniFile "%ConfigPath%\DefaultEngine.ini" /Script/Sentry.SentrySettings EnableBuildPlatforms EnabledPlatforms
if not "%EnabledPlatforms%"=="" (
set PlatformToCheck=
if "%TargetPlatform%"=="Win64" (
set "PlatformToCheck=bEnableWindows=False"
) else (
set "PlatformToCheck=bEnable%TargetPlatform%=False"
)
call :FindString EnabledPlatforms PlatformToCheck IsPlatformDisabled
if "!IsPlatformDisabled!"=="true" (
echo "Sentry: Automatic symbols upload is disabled for build platform %TargetPlatform%. Skipping..."
exit /B 0
)
)
call :ParseIniFile "%ConfigPath%\DefaultEngine.ini" /Script/Sentry.SentrySettings EnableBuildTargets EnabledTargets
if not "%EnabledTargets%"=="" (
set TargetToCheck="bEnable%TargetType%=False"
call :FindString EnabledTargets TargetToCheck IsTargetDisabled
if "!IsTargetDisabled!"=="true" (
echo "Sentry: Automatic symbols upload is disabled for build target type %TargetType%. Skipping..."
exit /B 0
)
)
call :ParseIniFile "%ConfigPath%\DefaultEngine.ini" /Script/Sentry.SentrySettings EnableBuildConfigurations EnabledConfigurations
if not "%EnabledConfigurations%"=="" (
set ConfigToCheck="bEnable%TargetConfig%=False"
call :FindString EnabledConfigurations ConfigToCheck IsConfigDisabled
if "!IsConfigDisabled!"=="true" (
echo "Sentry: Automatic symbols upload is disabled for build configuration %TargetConfig%. Skipping..."
exit /B 0
)
)
set PropertiesFile=%ProjectPath:"=%\sentry.properties
if not exist "%PropertiesFile%" (
echo Warning: Sentry: Properties file is missing: '%PropertiesFile%'
exit /B 0
)
if not exist "%CliExec%" (
echo Warning: Sentry: Sentry CLI is not configured in plugin settings. Skipping...
exit /B 0
)
echo Sentry: Upload started using PropertiesFile '%PropertiesFile%'
set "SENTRY_PROPERTIES=%PropertiesFile%"
echo %ProjectBinariesPath%
echo %PluginBinariesPath%
call "%CliExec%" upload-dif %CliArgs% --log-level %CliLogLevel% "%ProjectBinariesPath%" "%PluginBinariesPath%"
echo Sentry: Upload finished
endlocal
exit /B 0
:FindString <sourceStr> <findStr> <result>
setlocal
for /f "delims=" %%A in ('echo %%%1%%') do set str1=%%A
for /f "delims=" %%A in ('echo %%%2%%') do set str2=%%A
echo.%str1%|findstr /C:"%str2%" >nul 2>&1
endlocal
if not errorlevel 1 (
set %~3=true
) else (
set %~3=false
)
goto :eof
:ParseIniFile <filename> <section> <key> <result>
set %~4=
setlocal
set insection=
for /f "usebackq eol=; tokens=*" %%a in ("%~1") do (
set line=%%a
if defined insection (
for /f "tokens=1,* delims==" %%b in ("!line!") do (
if /i "%%b"=="%3" (
endlocal
set %~4=%%c
set insection=
goto :eof
)
)
)
if "!line:~0,1!"=="[" (
for /f "delims=[]" %%b in ("!line!") do (
if /i "%%b"=="%2" (
set insection=1
) else (
endlocal
if defined insection (
set insection=
goto :eof
)
)
)
)
)
endlocal
set insection=
goto :eof