-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.bat
More file actions
183 lines (151 loc) · 5.43 KB
/
Copy pathbuild.bat
File metadata and controls
183 lines (151 loc) · 5.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion
title LMP Build System
echo.
echo ╔══════════════════════════════════════════════╗
echo ║ LMP Build System ║
echo ╚══════════════════════════════════════════════╝
echo.
set MODE=%1
set PAUSE=1
:: Если передан второй параметр nopause — не ставим паузу в конце
if /i "%2"=="nopause" set PAUSE=0
if /i "%MODE%"=="" set MODE=debug
:: Получение версии из Git только для информационного вывода в консоль.
:: Основное версионирование контролируется через Directory.Build.targets.
where git >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
set COMMIT_COUNT=0
set GIT_HASH=local
) else (
for /f %%i in ('git rev-list --count HEAD 2^>nul') do set COMMIT_COUNT=%%i
for /f %%i in ('git rev-parse --short=7 HEAD 2^>nul') do set GIT_HASH=%%i
if "!COMMIT_COUNT!"=="" set COMMIT_COUNT=0
if "!GIT_HASH!"=="" set GIT_HASH=local
)
:: Динамическое чтение мажорной и минорной версий из Directory.Build.props
set "VERSION_MAJOR="
set "VERSION_MINOR="
set "VERSION_PREFIX="
if exist Directory.Build.props (
for /f "tokens=2 delims=>< " %%a in ('type Directory.Build.props ^| find "VersionMajor"') do set "VERSION_MAJOR=%%a"
for /f "tokens=2 delims=>< " %%a in ('type Directory.Build.props ^| find "VersionMinor"') do set "VERSION_MINOR=%%a"
for /f "tokens=2 delims=>< " %%a in ('type Directory.Build.props ^| find "VersionPrefix"') do set "VERSION_PREFIX=%%a"
)
:: Очистка возможных пробелов в значениях
if defined VERSION_MAJOR set "VERSION_MAJOR=!VERSION_MAJOR: =!"
if defined VERSION_MINOR set "VERSION_MINOR=!VERSION_MINOR: =!"
if defined VERSION_PREFIX set "VERSION_PREFIX=!VERSION_PREFIX: =!"
:: Формируем базовый префикс версии
set "VER_PREF="
if defined VERSION_MAJOR (
if defined VERSION_MINOR (
set "VER_PREF=!VERSION_MAJOR!.!VERSION_MINOR!"
)
)
if "!VER_PREF!"=="" (
if defined VERSION_PREFIX (
set "VER_PREF=!VERSION_PREFIX!"
) else (
set "VER_PREF=0.0"
)
)
:: Формируем строки версии в соответствии с Directory.Build.targets
set VERSION=!VER_PREF!.!COMMIT_COUNT!
set FULL_VERSION=!VER_PREF!.!COMMIT_COUNT!+!GIT_HASH!
echo Mode: %MODE%
echo Version: v!VERSION!
echo Full Version: v!FULL_VERSION!
echo.
if /i "%MODE%"=="clean" goto :CLEAN
if /i "%MODE%"=="debug" goto :DEBUG
if /i "%MODE%"=="optimized" goto :OPTIMIZED
if /i "%MODE%"=="release" goto :RELEASE
if /i "%MODE%"=="publish" goto :PUBLISH
if /i "%MODE%"=="restore" goto :RESTORE
echo Unknown mode "%MODE%".
echo Available: debug ^| optimized ^| release ^| publish ^| restore ^| clean
goto :END
:RESTORE
echo Performing full restore of the solution...
dotnet restore LMP.sln --force --force-evaluate
goto :SUCCESS
:DEBUG
echo Building Debug (Full Solution)...
dotnet build LMP.sln -c Debug
goto :CHECK
:OPTIMIZED
echo Building Optimized Debug (Full Solution)...
dotnet build LMP.sln -c Debug ^
-p:Optimize=true ^
-p:DebugType=embedded
goto :CHECK
:RELEASE
echo Checking for dead events...
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0Tools\find-dead-events.ps1"
:: exit-код = кол-во мёртвых событий; не прерываем билд, только предупреждаем
if %ERRORLEVEL% NEQ 0 (
echo.
echo [WARNING] Dead events detected. Consider fixing before release.
echo.
)
echo Building Release (Full Solution)...
dotnet build LMP.sln -c Release ^
-p:DebugType=None ^
-p:DebugSymbols=false
goto :CHECK
:PUBLISH
echo Publishing self-contained Release...
if exist "publish" rmdir /s /q "publish"
dotnet publish LMP.csproj -c Release -r win-x64 --self-contained true ^
-p:PublishSingleFile=true ^
-p:PublishReadyToRun=true ^
-p:PublishTrimmed=true ^
-p:TrimMode=partial ^
-p:IncludeNativeLibrariesForSelfExtract=true ^
-p:EnableCompressionInSingleFile=true ^
-p:DebugType=None ^
-p:DebugSymbols=false ^
-o "./publish"
if %ERRORLEVEL% NEQ 0 (
echo ✗ dotnet publish failed!
goto :FAIL
)
:: Удаляем мусор
del /q "publish\*.xml" 2>nul
del /q "publish\*.pdb" 2>nul
del /q "publish\*.config" 2>nul
echo ✓ Publish completed: ./publish
goto :END
:CLEAN
echo Cleaning all project folders recursively...
:: Очистка папки публикации и архивов в корне
if exist "publish" rmdir /s /q "publish"
del /q "*.7z" 2>nul
:: Рекурсивный поиск и безопасное удаление всех папок bin и obj на всех уровнях вложенности.
:: Пакет packages.lock.json умышленно игнорируется, так как он зафиксирован в Git.
echo Finding and removing all nested bin and obj folders...
for /d /r . %%d in (bin,obj) do (
if exist "%%d" (
echo Deleting: %%d
rmdir /s /q "%%d"
)
)
echo ✓ Clean complete!
goto :END
:CHECK
if %ERRORLEVEL% NEQ 0 goto :FAIL
:SUCCESS
echo.
echo ✓ Build successful
goto :END
:FAIL
echo.
echo ✗ Build failed!
exit /b 1
:END
if %PAUSE%==1 (
echo.
pause
)