diff --git a/.gitignore b/.gitignore index d42e621e..3e4b5a55 100644 --- a/.gitignore +++ b/.gitignore @@ -336,4 +336,7 @@ ASALocalRun/ launchSettings.json tmp/ -index.js \ No newline at end of file +index.js + +# post build config +postbuild.config.xml \ No newline at end of file diff --git a/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj b/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj index c01cba6b..5bec592a 100644 --- a/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj +++ b/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj @@ -19,6 +19,7 @@ + all @@ -40,7 +41,7 @@ ..\..\bridge\runtime\Bootstrapper.dll - - + + \ No newline at end of file diff --git a/ReallifeGamemode.Server/Scripts/moveItems.ps1 b/ReallifeGamemode.Server/Scripts/moveItems.ps1 deleted file mode 100644 index 78f828b2..00000000 --- a/ReallifeGamemode.Server/Scripts/moveItems.ps1 +++ /dev/null @@ -1,38 +0,0 @@ -# Verschiebt die Dateien aus dem Output-Verzeichnis in den resources Ordner - -param ( - [string]$outDir, - [string]$outFile -) - -$rootPath = "$PSScriptRoot\.." - -$outputPath = "$rootPath\$outDir" - -$bridgePath = "$rootPath\..\..\bridge\" - -$resourcePath = "$bridgePath\resources\reallife-gamemode" -$runtimePath = "$bridgePath\runtime" - -# Pruefen, ob Output-Pfad existiert -if(!(Test-Path $outputPath)) -{ - $absoluteOutputPath = Resolve-Path $outputPath - Write-Host "Output Folder ($absoluteOutputPath) does not exist." - Exit 0 -} - -# Pruefen, ob resources-Pfad existiert -# Wenn NEIN => erstellen -if(!(Test-Path $resourcePath)) -{ - Write-Host "Creating 'reallife-gamemode' resources directory" - New-Item -ItemType Directory -Path $resourcePath | Out-Null -} - -# Gamemode und Meta-Datei verschieben -Copy-Item "$outputPath\$outFile" "$resourcePath\" -Force -Copy-Item "$outputPath\meta.xml" "$resourcePath\" -Force - -# Abhaengige DLLs in runtime Ordner verschieben -Copy-Item "$outputPath\*.dll" "$runtimePath\" -Exclude "ReallifeGamemode.Server.dll" \ No newline at end of file diff --git a/ReallifeGamemode.sln b/ReallifeGamemode.sln index 8c3f7e5e..7dc75b14 100644 --- a/ReallifeGamemode.sln +++ b/ReallifeGamemode.sln @@ -13,6 +13,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .gitignore = .gitignore .gitlab-ci.yml = .gitlab-ci.yml readme.md = readme.md + postbuild.ps1 = postbuild.ps1 + postbuild.config.xml = postbuild.config.xml EndProjectSection EndProject Global diff --git a/postbuild.ps1 b/postbuild.ps1 new file mode 100644 index 00000000..cca2e937 --- /dev/null +++ b/postbuild.ps1 @@ -0,0 +1,183 @@ +# +# @author Codename +# @copyright (c) 2008 - 2019 Life of German +# @warning Start this script only once, after building server dll +# @description This powershell script copies necessary files to (local/remote) server dir for windows developers +# + +# set parameters +param ( + [string]$buildDirectory, + [string]$buildFilename +) + +# set constant path +Set-Variable configPath -option Constant -value "$PSScriptRoot\postbuild.config.xml" +Set-Variable serverProjectPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Server" +Set-Variable clientProjectPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Client" +Set-Variable sourceAssetsPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Client\assets" +Set-Variable sourceIndexJsPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Client\index.js" +Set-Variable sourceDlcPacksPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Client\dlcpacks" + +# set constant dirs +Set-Variable runtimeDir -option Constant -value "bridge\runtime" +Set-Variable resourcesDir -option Constant -value "bridge\resources" +Set-Variable gamemodeDir -option Constant -value "reallife-gamemode" +Set-Variable assetsDir -option Constant -value "client_packages\assets" +Set-Variable indexJsDir -option Constant -value "client_packages" +Set-Variable dlcPacksDir -option Constant -value "source_dlcpacks" +Set-Variable fullBuildDir -option Constant -value "$serverProjectPath\$buildDirectory" + +# create default config file if not exist +if (![System.IO.File]::Exists($configPath)) { + # resolve default server path (default: .\..) + $defaultServerPath = (Resolve-Path -Path "$PSScriptRoot\..") + if (!$defaultServerPath) { + Write-Error "resolving local server path failed" + exit 1 + } + + $defaultXmlContent = " + + + true + $defaultServerPath + + + true + true + + + false + false + false + + + + + false + 127.0.0.1 + 21 + USERNAME + PASSWORD + . + + + false + false + + + false + false + false + + + +" + + # create default content + New-Item $configPath + Set-Content $configPath $defaultXmlContent +} + +# load existing xml config file +[xml]$xmlConfig = Get-Content -Path $configPath +if (!$xmlConfig) { + throw "opening XML config file failed" +} + +# first compile typescript files if enabled in config file +if (($xmlConfig.config.local.update.client.indexJs -eq "true" -and $xmlConfig.config.local.enabled -eq "true") -or + ($xmlConfig.config.remote.update.client.indexJs -eq "true" -and $xmlConfig.config.remote.enabled -eq "true")) { + $path = $PSScriptRoot + Set-Location -Path $clientProjectPath + npx webpack --config webpack.config.build.js + Set-Location -Path $path +} + +# update local files if enabled in config file +if ($xmlConfig.config.local.enabled -eq "true") { + # get local server path from xml config file + Set-Variable serverPath -option Constant -value $xmlConfig.config.local.rageMpServerPath + if (!$serverPath) { + Write-Error "empty local rage mp server path in config file" + exit 1 + } + + # check if local server path exists + if (!(Test-Path $serverPath)) { + Write-Error "local rage mp server path ($serverPath) not found. Have you moved your local rage mp directory?" + exit 1 + } + + # check if local resources path exists + Set-Variable resourcesPath -option Constant -value "$serverPath\$resourcesDir" + if (!(Test-Path $resourcesPath)) { + Write-Error "local resources path ($resourcesPath) not found. Please set up C# Bridge locally first, + see https://wiki.gtanet.work/index.php?title=Setting_up_the_Bridge_on_Linux/Windows" + exit 1 + } + + # create local gamemode dir if not exist + Set-Variable gamemodePath -option Constant -value "$resourcesPath\$gamemodeDir" + if (!(Test-Path $gamemodePath)) { + New-Item -ItemType Directory -Force -Path $gamemodePath + } + + # copy compiled gamemode to local gamemode path + Copy-Item "$fullBuildDir\$buildFilename" $gamemodePath -Force + + # copy meta.xml to local gamemode path if 'local.update.server.metaXml' is set to 'true' in config file + if ($xmlConfig.config.local.update.server.metaXml -eq "true") { + Copy-Item "$fullBuildDir\meta.xml" $gamemodePath -Force + } + + # copy dependencies to local runtime path if 'local.update.server.allDependencies' is set to 'true' in config file + if ($xmlConfig.config.local.update.server.allDependencies -eq "true") { + # check if local runtime path exists + Set-Variable runtimePath -option Constant -value "$serverPath\$runtimeDir" + if (!(Test-Path $runtimePath)) { + Write-Error "local runtime path ($runtimePath) not found. Please set up C# Bridge locally first, + see https://wiki.gtanet.work/index.php?title=Setting_up_the_Bridge_on_Linux/Windows" + exit 1 + } + Copy-Item "$fullBuildDir\*.dll" $runtimePath -Exclude "*$buildFilename*" -Force + } + + # copy assets to local client packages path if 'local.update.client.assets' is set to 'true' in config file + if ($xmlConfig.config.local.update.client.assets -eq "true") { + # create local assets path if not exist + Set-Variable assetsPath -option Constant -value "$serverPath\$assetsDir" + if (!(Test-Path $assetsPath)) { + New-Item -ItemType Directory -Force -Path $assetsPath + } + robocopy $sourceAssetsPath $assetsPath /MIR + } + + # copy index.js to local client packages path if 'local.update.client.indexJs' is set to 'true' in config file + if ($xmlConfig.config.local.update.client.indexJs -eq "true") { + # create local client packages if not exist + Set-Variable indexJsPath -option Constant -value "$serverPath\$indexJsDir" + if (!(Test-Path $indexJsPath)) { + New-Item -ItemType Directory -Force -Path $indexJsPath + } + Copy-Item $sourceIndexJsPath $indexJsPath -Force + } + + # copy dlc packs to local dlc packs path if 'local.update.client.dlcPacks' is set to 'true' in config file + if ($xmlConfig.config.local.update.client.dlcPacks -eq "true") { + # create local dlc packs path if not exist + Set-Variable dlcPacksPath -option Constant -value "$serverPath\$dlcPacksDir" + if (!(Test-Path $dlcPacksPath)) { + New-Item -ItemType Directory -Force -Path $dlcPacksPath + } + robocopy $sourceDlcPacksPath $dlcPacksPath /MIR + } +} + +# update remote files if enabled in config file +if ($xmlConfig.config.remote.enabled -eq "true") { + # TODO: connect to remote ftp server and update files +} + +exit 0 \ No newline at end of file