From 451b25ffb26a7a06f796f60aa6c9839f94f6d9cf Mon Sep 17 00:00:00 2001 From: RaidMax Date: Sat, 29 Jun 2024 16:54:06 -0500 Subject: [PATCH] simplify build script for local builds --- .gitignore | 1 + Application/Application.csproj | 4 ++ .../BuildScripts/DownloadTranslations.ps1 | 12 ---- Application/BuildScripts/PostBuild.bat | 17 ----- Application/BuildScripts/PostPublish.bat | 67 ------------------- Application/BuildScripts/PreBuild.bat | 6 -- Application/BuildScripts/PreBuild.ps1 | 59 ++++++++++++++++ Application/BuildScripts/PreBuild.sh | 63 +++++++++++++++++ DeploymentFiles/PostPublish.ps1 | 14 ---- IW4MAdmin.sln | 1 - 10 files changed, 127 insertions(+), 117 deletions(-) delete mode 100644 Application/BuildScripts/DownloadTranslations.ps1 delete mode 100644 Application/BuildScripts/PostBuild.bat delete mode 100644 Application/BuildScripts/PostPublish.bat delete mode 100644 Application/BuildScripts/PreBuild.bat create mode 100644 Application/BuildScripts/PreBuild.ps1 create mode 100644 Application/BuildScripts/PreBuild.sh delete mode 100644 DeploymentFiles/PostPublish.ps1 diff --git a/.gitignore b/.gitignore index 62c99e06..3c177de0 100644 --- a/.gitignore +++ b/.gitignore @@ -247,3 +247,4 @@ launchSettings.json *.db /Data/IW4MAdmin_Migration.db-shm /Data/IW4MAdmin_Migration.db-wal +bundle/ \ No newline at end of file diff --git a/Application/Application.csproj b/Application/Application.csproj index 2204fdcf..e9fea994 100644 --- a/Application/Application.csproj +++ b/Application/Application.csproj @@ -73,4 +73,8 @@ + + + + diff --git a/Application/BuildScripts/DownloadTranslations.ps1 b/Application/BuildScripts/DownloadTranslations.ps1 deleted file mode 100644 index 7286ca4b..00000000 --- a/Application/BuildScripts/DownloadTranslations.ps1 +++ /dev/null @@ -1,12 +0,0 @@ -param ( - [string]$OutputDir = $(throw "-OutputDir is required.") -) - -$localizations = @("en-US", "ru-RU", "es-EC", "pt-BR", "de-DE") -foreach($localization in $localizations) -{ - $url = "http://api.raidmax.org:5000/localization/{0}" -f $localization - $filePath = "{0}Localization\IW4MAdmin.{1}.json" -f $OutputDir, $localization - $response = Invoke-WebRequest $url -UseBasicParsing - Out-File -FilePath $filePath -InputObject $response.Content -Encoding utf8 -} diff --git a/Application/BuildScripts/PostBuild.bat b/Application/BuildScripts/PostBuild.bat deleted file mode 100644 index c57f8264..00000000 --- a/Application/BuildScripts/PostBuild.bat +++ /dev/null @@ -1,17 +0,0 @@ -set SolutionDir=%1 -set ProjectDir=%2 -set TargetDir=%3 -set OutDir=%4 -set Version=%5 - -echo Copying dependency configs -copy "%SolutionDir%WebfrontCore\%OutDir%*.deps.json" "%TargetDir%" -copy "%SolutionDir%SharedLibraryCore\%OutDir%*.deps.json" "%TargetDir%" - -if not exist "%TargetDir%Plugins" ( - echo "Making plugin dir" - md "%TargetDir%Plugins" -) - -xcopy /y "%SolutionDir%Build\Plugins" "%TargetDir%Plugins\" -del "%TargetDir%Plugins\SQLite*" diff --git a/Application/BuildScripts/PostPublish.bat b/Application/BuildScripts/PostPublish.bat deleted file mode 100644 index 53c22068..00000000 --- a/Application/BuildScripts/PostPublish.bat +++ /dev/null @@ -1,67 +0,0 @@ -set PublishDir=%1 -set SourceDir=%2 -SET COPYCMD=/Y - -echo deleting extra runtime files -if exist "%PublishDir%\runtimes\linux-arm" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\linux-arm' -if exist "%PublishDir%\runtimes\linux-arm64" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\linux-arm64' -if exist "%PublishDir%\runtimes\linux-armel" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\linux-armel' -if exist "%PublishDir%\runtimes\osx" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\osx' -if exist "%PublishDir%\runtimes\osx-x64" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\osx-x64' -if exist "%PublishDir%\runtimes\win-arm" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\win-arm' -if exist "%PublishDir%\runtimes\win-arm64" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\win-arm64' -if exist "%PublishDir%\runtimes\alpine-x64" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\alpine-x64' -if exist "%PublishDir%\runtimes\linux-musl-x64" powershell Remove-Item -Force -Recurse '%PublishDir%\runtimes\linux-musl-x64' - -echo deleting misc files -if exist "%PublishDir%\web.config" del "%PublishDir%\web.config" -if exist "%PublishDir%\libman.json" del "%PublishDir%\libman.json" -del "%PublishDir%\*.exe" -del "%PublishDir%\*.pdb" - -echo setting up default folders -if not exist "%PublishDir%\Configuration" md "%PublishDir%\Configuration" -move "%PublishDir%\DefaultSettings.json" "%PublishDir%\Configuration\" -if not exist "%PublishDir%\Lib\" md "%PublishDir%\Lib\" -del "%PublishDir%\Microsoft.CodeAnalysis*.dll" /F /Q -move "%PublishDir%\*.dll" "%PublishDir%\Lib\" -move "%PublishDir%\*.json" "%PublishDir%\Lib\" -move "%PublishDir%\runtimes" "%PublishDir%\Lib\runtimes" -move "%PublishDir%\ru" "%PublishDir%\Lib\ru" -move "%PublishDir%\de" "%PublishDir%\Lib\de" -move "%PublishDir%\pt" "%PublishDir%\Lib\pt" -move "%PublishDir%\es" "%PublishDir%\Lib\es" -rmdir /Q /S "%PublishDir%\cs" -rmdir /Q /S "%PublishDir%\fr" -rmdir /Q /S "%PublishDir%\it" -rmdir /Q /S "%PublishDir%\ja" -rmdir /Q /S "%PublishDir%\ko" -rmdir /Q /S "%PublishDir%\pl" -rmdir /Q /S "%PublishDir%\pt-BR" -rmdir /Q /S "%PublishDir%\tr" -rmdir /Q /S "%PublishDir%\zh-Hans" -rmdir /Q /S "%PublishDir%\zh-Hant" -if exist "%PublishDir%\refs" move "%PublishDir%\refs" "%PublishDir%\Lib\refs" - -echo making start scripts -@(echo @echo off && echo @title IW4MAdmin && echo set DOTNET_CLI_TELEMETRY_OPTOUT=1 && echo dotnet Lib\IW4MAdmin.dll && echo pause) > "%PublishDir%\StartIW4MAdmin.cmd" -@(echo #!/bin/bash&& echo export DOTNET_CLI_TELEMETRY_OPTOUT=1&& echo dotnet Lib/IW4MAdmin.dll) > "%PublishDir%\StartIW4MAdmin.sh" - -echo copying update scripts -copy "%SourceDir%\DeploymentFiles\UpdateIW4MAdmin.ps1" "%PublishDir%\UpdateIW4MAdmin.ps1" -copy "%SourceDir%\DeploymentFiles\UpdateIW4MAdmin.sh" "%PublishDir%\UpdateIW4MAdmin.sh" - -echo moving front-end library dependencies -if not exist "%PublishDir%\wwwroot\font" mkdir "%PublishDir%\wwwroot\font" -move "WebfrontCore\wwwroot\lib\open-iconic\font\fonts\*.*" "%PublishDir%\wwwroot\font\" -if exist "%PublishDir%\wwwroot\lib" rd /s /q "%PublishDir%\wwwroot\lib" -if not exist "%PublishDir%\wwwroot\css" mkdir "%PublishDir%\wwwroot\css" -move "WebfrontCore\wwwroot\css\global.min.css" "%PublishDir%\wwwroot\css\global.min.css" -if not exist "%PublishDir%\wwwroot\js" mkdir "%PublishDir%\wwwroot\js" -move "%SourceDir%\WebfrontCore\wwwroot\js\global.min.js" "%PublishDir%\wwwroot\js\global.min.js" -if not exist "%PublishDir%\wwwroot\images" mkdir "%PublishDir%\wwwroot\images" -xcopy "%SourceDir%\WebfrontCore\wwwroot\images" "%PublishDir%\wwwroot\images" /E /H /C /I - - -echo setting permissions... -cacls "%PublishDir%" /t /e /p Everyone:F diff --git a/Application/BuildScripts/PreBuild.bat b/Application/BuildScripts/PreBuild.bat deleted file mode 100644 index 876350c2..00000000 --- a/Application/BuildScripts/PreBuild.bat +++ /dev/null @@ -1,6 +0,0 @@ -set SolutionDir=%1 -set ProjectDir=%2 -set TargetDir=%3 - -echo D | xcopy "%SolutionDir%Plugins\ScriptPlugins\*.js" "%TargetDir%Plugins" /y -powershell -File "%ProjectDir%BuildScripts\DownloadTranslations.ps1" %TargetDir% \ No newline at end of file diff --git a/Application/BuildScripts/PreBuild.ps1 b/Application/BuildScripts/PreBuild.ps1 new file mode 100644 index 00000000..300f97e5 --- /dev/null +++ b/Application/BuildScripts/PreBuild.ps1 @@ -0,0 +1,59 @@ +param ( [string]$SolutionDir, [string]$OutputDir ) + +if (-not (Test-Path "$SolutionDir/WebfrontCore/wwwroot/font")) { + Write-Output "restoring web dependencies" + dotnet tool install Microsoft.Web.LibraryManager.Cli --global + Set-Location "$SolutionDir/WebfrontCore" + libman restore + Set-Location $SolutionDir + Copy-Item -Recurse -Force -Path "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/fonts" "$SolutionDir/WebfrontCore/wwwroot/font" +} + +if (-not (Test-Path "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss")) { + Write-Output "load external resources" + New-Item -ItemType Directory -Force -Path "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css" + Invoke-WebRequest -Uri "https://raw.githubusercontent.com/iconic/open-iconic/master/font/css/open-iconic-bootstrap.scss" -OutFile "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss" + (Get-Content "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss") -replace '../fonts/', '/font/' | Set-Content "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss" +} + +Write-Output "compiling scss files" + +dotnet tool install Excubo.WebCompiler --global +webcompiler -r "$SolutionDir/WebfrontCore/wwwroot/css/src" -o WebfrontCore/wwwroot/css/ -m disable -z disable +webcompiler "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss" -o "$SolutionDir/WebfrontCore/wwwroot/css/" -m disable -z disable + +if (-not (Test-Path "$SolutionDir/bundle/dotnet-bundle.dll")) { + New-Item -ItemType Directory -Force -Path "$SolutionDir/bundle" + Write-Output "getting dotnet bundle" + Invoke-WebRequest -Uri "https://raidmax.org/IW4MAdmin/res/dotnet-bundle.zip" -OutFile "$SolutionDir/bundle/dotnet-bundle.zip" + Write-Output "unzipping download" + Expand-Archive -Path "$SolutionDir/bundle/dotnet-bundle.zip" -DestinationPath "$SolutionDir/bundle" -Force +} + +Write-Output "executing dotnet-bundle" +Set-Location "$SolutionDir/bundle" +dotnet "dotnet-bundle.dll" clean "$SolutionDir/WebfrontCore/bundleconfig.json" +dotnet "dotnet-bundle.dll" "$SolutionDir/WebfrontCore/bundleconfig.json" +Set-Location $SolutionDir + +New-Item -ItemType Directory -Force -Path "$SolutionDir/BUILD/Plugins" +Write-Output "building plugins" +Set-Location "$SolutionDir/Plugins" +Get-ChildItem -Recurse -Filter *.csproj | ForEach-Object { dotnet publish $_.FullName -o "$SolutionDir/BUILD/Plugins" --no-restore } +Set-Location $SolutionDir + +if (-not (Test-Path "$OutputDir/Localization")) { + Write-Output "downloading translations" + New-Item -ItemType Directory -Force -Path "$OutputDir/Localization" + $localizations = @("en-US", "ru-RU", "es-EC", "pt-BR", "de-DE") + foreach ($localization in $localizations) { + $url = "https://master.iw4.zip/localization/$localization" + $filePath = "$OutputDir/Localization/IW4MAdmin.$localization.json" + Invoke-WebRequest -Uri $url -OutFile $filePath -UseBasicParsing + } +} + +Write-Output "copying plugins to build dir" +New-Item -ItemType Directory -Force -Path "$OutputDir/Plugins" +Copy-Item -Recurse -Force -Path "$SolutionDir/BUILD/Plugins/*.dll" -Destination "$OutputDir/Plugins/" +Copy-Item -Recurse -Force -Path "$SolutionDir/Plugins/ScriptPlugins/*.js" -Destination "$OutputDir/Plugins/" diff --git a/Application/BuildScripts/PreBuild.sh b/Application/BuildScripts/PreBuild.sh new file mode 100644 index 00000000..18765093 --- /dev/null +++ b/Application/BuildScripts/PreBuild.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +SolutionDir="$1" +OutputDir="$2" +export PATH="$PATH:~/.dotnet/tools" + +if [ ! -d "$SolutionDir/WebfrontCore/wwwroot/lib/font" ]; then + echo restoring web dependencies + dotnet tool install Microsoft.Web.LibraryManager.Cli --global + cd "$SolutionDir/WebfrontCore" || exit + libman restore + cd "$SolutionDir" || exit + cp -r "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/fonts" "$SolutionDir/WebfrontCore/wwwroot/font" +fi + +if [ ! -f "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss" ]; then + echo load external resources + mkdir -p "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css" + curl -o "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss" https://raw.githubusercontent.com/iconic/open-iconic/master/font/css/open-iconic-bootstrap.scss + sed -i 's#../fonts/#/font/#g' "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss" +fi + +echo compiling scss files + +dotnet tool install Excubo.WebCompiler --global +webcompiler -r "$SolutionDir/WebfrontCore/wwwroot/css/src" -o "$SolutionDir/WebfrontCore/wwwroot/css/" -m disable -z disable +webcompiler "$SolutionDir/WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss" -o "$SolutionDir/WebfrontCore/wwwroot/css/" -m disable -z disable + +if [ ! -f "$SolutionDir/bundle/dotnet-bundle.dll" ]; then + mkdir -p "$SolutionDir/bundle" + echo getting dotnet bundle + curl -o "$SolutionDir/bundle/dotnet-bundle.zip" https://raidmax.org/IW4MAdmin/res/dotnet-bundle.zip + echo unzipping download + unzip "$SolutionDir/bundle/dotnet-bundle.zip" -d "$SolutionDir/bundle" +fi +echo executing dotnet-bundle +cd "$SolutionDir/bundle" || exit +dotnet dotnet-bundle.dll clean "$SolutionDir/WebfrontCore/bundleconfig.json" +dotnet dotnet-bundle.dll "$SolutionDir/WebfrontCore/bundleconfig.json" +cd "$SolutionDir" || exit + +mkdir -p "$SolutionDir/BUILD/Plugins" +echo building plugins +cd "$SolutionDir/Plugins" || exit +find . -name "*.csproj" -print0 | xargs -0 -I {} dotnet publish {} -o "$SolutionDir/BUILD/Plugins" --no-restore +cd "$SolutionDir" || exit + +if [ ! -d "$OutputDir/Localization" ]; then + echo downloading translations + mkdir -p "$OutputDir/Localization" + localizations=("en-US" "ru-RU" "es-EC" "pt-BR" "de-DE") + for localization in "${localizations[@]}" + do + url="https://master.iw4.zip/localization/$localization" + filePath="$OutputDir/Localization/IW4MAdmin.$localization.json" + curl -s "$url" -o "$filePath" + done +fi + +echo copying plugins to buld dir +mkdir -p "$OutputDir/Plugins" +cp -r "$SolutionDir/BUILD/Plugins/*.dll" "$OutputDir/Plugins/" +cp -r "$SolutionDir/Plugins/ScriptPlugins/*.js" "$OutputDir/Plugins/" diff --git a/DeploymentFiles/PostPublish.ps1 b/DeploymentFiles/PostPublish.ps1 deleted file mode 100644 index 2ffa4f65..00000000 --- a/DeploymentFiles/PostPublish.ps1 +++ /dev/null @@ -1,14 +0,0 @@ -param ( - [string]$PublishDir = $(throw "-PublishDir is required.") -) - -md -Force ("{0}\Localization" -f $PublishDir) - -$localizations = @("en-US", "ru-RU", "es-EC", "pt-BR", "de-DE") -foreach($localization in $localizations) -{ - $url = "http://api.raidmax.org:5000/localization/{0}" -f $localization - $filePath = "{0}\Localization\IW4MAdmin.{1}.json" -f $PublishDir, $localization - $response = Invoke-WebRequest $url -UseBasicParsing - Out-File -FilePath $filePath -InputObject $response.Content -Encoding utf8 -} diff --git a/IW4MAdmin.sln b/IW4MAdmin.sln index cdeaf1c0..bf0f6aeb 100644 --- a/IW4MAdmin.sln +++ b/IW4MAdmin.sln @@ -6,7 +6,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{26E8 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8C8F3945-0AEF-4949-A1F7-B18E952E50BC}" ProjectSection(SolutionItems) = preProject - DeploymentFiles\PostPublish.ps1 = DeploymentFiles\PostPublish.ps1 README.md = README.md version.txt = version.txt DeploymentFiles\UpdateIW4MAdmin.ps1 = DeploymentFiles\UpdateIW4MAdmin.ps1