Fix #276
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish | |
on: | |
push: | |
paths: | |
- '.github/workflows/publish.yml' | |
- 'src/Bannerlord.LauncherEx/**.*' | |
- 'src/Bannerlord.BLSE/**.*' | |
- 'src/Bannerlord.BLSE.Shared/**.*' | |
- 'src/Bannerlord.BLSE.Loaders.Standalone/**.*' | |
- 'src/Bannerlord.BLSE.Loaders.Launcher/**.*' | |
- 'src/Bannerlord.BLSE.Loaders.LauncherEx/**.*' | |
workflow_dispatch: | |
env: | |
# Disable the .NET logo in the console output. | |
DOTNET_NOLOGO: true | |
# Disable the .NET first time experience to skip caching NuGet packages and speed up the build. | |
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true | |
# Disable sending .NET CLI telemetry to Microsoft. | |
DOTNET_CLI_TELEMETRY_OPTOUT: true | |
jobs: | |
get-changelog: | |
name: Get Changelog | |
runs-on: ubuntu-latest | |
outputs: | |
mod_version: ${{ steps.changelog.outputs.mod_version }} | |
mod_description: ${{ steps.changelog.outputs.mod_description }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install and Run ChangelogParser | |
id: changelog | |
run: | | |
dotnet tool install -g Bannerlord.ChangelogParser | |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) | |
echo "mod_version=$(bannerlord_changelog_parser latestversion -f "$PWD/changelog.txt")" >> $GITHUB_OUTPUT | |
echo "mod_description<<$EOF" >> $GITHUB_OUTPUT | |
echo "$(bannerlord_changelog_parser fulldescription -f "$PWD/changelog.txt")" >> $GITHUB_OUTPUT | |
echo "$EOF" >> $GITHUB_OUTPUT | |
shell: bash | |
build: | |
name: Build ${{matrix.project}} (${{matrix.configuration}}) | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
project: [ 'Bannerlord.BLSE.Loaders.Standalone', 'Bannerlord.BLSE.Loaders.Launcher', 'Bannerlord.BLSE.Loaders.LauncherEx', 'Bannerlord.BLSE.Shared' ] | |
configuration: [ 'Win64_Shipping_Client', 'Gaming.Desktop.x64_Shipping_Client' ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: butr/actions-common-setup@v2 | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
- name: ${{matrix.project}} (${{matrix.configuration}}) | |
run: | | |
mkdir bannerlord; | |
dotnet build src/${{matrix.project}}/${{matrix.project}}.csproj --configuration Release -p:GameConfiguration="${{matrix.configuration}}" -p:GameFolder="$PWD/bannerlord" -p:BuildShared="false" /nowarn:MSB4011; | |
env: | |
BANNERLORD_BUTR_COMPATIBILITY_SCORE_URL: ${{ secrets.BANNERLORD_BUTR_COMPATIBILITY_SCORE_URL }} | |
shell: pwsh | |
- name: Add Dedicated GPU Hint | |
run: | | |
echo "Downloading ILAsm"; | |
Invoke-WebRequest https://globalcdn.nuget.org/packages/runtime.linux-x64.microsoft.netcore.ilasm.8.0.0.nupkg -OutFile ilasm.nupkg; | |
Invoke-WebRequest https://globalcdn.nuget.org/packages/runtime.linux-x64.microsoft.netcore.ildasm.8.0.0.nupkg -OutFile ildasm.nupkg; | |
echo "Extracting ILAsm"; | |
Expand-Archive ilasm.nupkg -d tools/ilasm; | |
Expand-Archive ildasm.nupkg -d tools/ildasm; | |
echo "chmod ILAsm"; | |
chmod +x tools/ilasm/runtimes/linux-x64/native/ilasm; | |
chmod +x tools/ildasm/runtimes/linux-x64/native/ildasm; | |
# So what is happening here? | |
# We're not able to export global variables from C# | |
# But ILAsm is able to do it | |
# So we compile our .exe files from C# | |
# Then we decompile them with ILDasm | |
# Then we compile them back to .exe with ILAsm and with the .il file for exporting the global variable | |
# Then we set the icon back because ILAsm doesn't support setting the icon | |
$workingDir = "$PWD"; | |
mkdir tmp; | |
$fileNames = Get-ChildItem -Path "bannerlord/" -Recurse -Include *.exe; | |
foreach ($f in $fileNames) { | |
cd $workingDir/tmp; | |
echo $f.FullName; | |
$runtime = ""; | |
If ($f.FullName.Contains("Win64_Shipping_Client")) { | |
$runtime = "Win64_Shipping_Client"; | |
} | |
If ($f.FullName.Contains("Gaming.Desktop.x64_Shipping_Client")) { | |
$runtime = "Gaming.Desktop.x64_Shipping_Client"; | |
} | |
$fileDirname = $f.DirectoryName; | |
$dirname = [System.IO.Path]::GetFileNameWithoutExtension($f.FullName); | |
New-Item -ItemType Directory -Path $dirname/$runtime -Force | |
cd $dirname/$runtime; | |
# Decompile to IL Code | |
#& "$workingDir/tools/ildasm/runtimes/win-x64/native/ildasm.exe" "$f" /OUT=Code.il | |
& "$workingDir/tools/ildasm/runtimes/linux-x64/native/ildasm" "$f" /OUT=Code.il | |
Copy-Item -Path $workingDir/build/ForceDedicatedGraphicCard.il -Destination ForceDedicatedGraphicCard.il; | |
# Recompile to .exe | |
#& "$workingDir/tools/ilasm/runtimes/win-x64/native/ilasm.exe" -QUIET -NOLOGO -OPTIMIZE -EXE /X64 -OUTPUT="$dirname.exe" Code.il ForceDedicatedGraphicCard.il | |
& "$workingDir/tools/ilasm/runtimes/linux-x64/native/ilasm" -QUIET -NOLOGO -OPTIMIZE -EXE /X64 -OUTPUT="$dirname.exe" Code.il ForceDedicatedGraphicCard.il | |
# Set Icon | |
cd $workingDir/build/set-icon; | |
node index.js "$workingDir/tmp/$dirname/$runtime/$dirname.exe" "$workingDir/resources/BLSE_SMALL.ico"; | |
Copy-Item -Path "$workingDir/tmp/$dirname/$runtime/$dirname.exe" -Destination "$fileDirname/$dirname.exe" -force | |
} | |
cd $workingDir; | |
rmdir tmp -Recurse -Force; | |
shell: pwsh | |
- name: Upload Bannerlord folder | |
uses: actions/upload-artifact@v4 | |
with: | |
name: bannerlord-${{matrix.project}}-${{matrix.configuration}} | |
path: ./bannerlord/ | |
########################### | |
# NEXUSMODS # | |
########################### | |
publish-on-nexusmods: | |
if: github.ref == 'refs/heads/master' | |
needs: [get-changelog, build] | |
uses: BUTR/workflows/.github/workflows/release-nexusmods.yml@master | |
with: | |
nexusmods_game_id: mountandblade2bannerlord | |
nexusmods_mod_id: 1 | |
mod_filename: 'Bannerlord Software Extender (BLSE)' | |
mod_version: ${{ needs.get-changelog.outputs.mod_version }} | |
mod_description: ${{ needs.build.outputs.mod_description }} | |
artifact_name: bannerlord | |
secrets: | |
NEXUSMODS_APIKEY: ${{ secrets.ARAGAS_NEXUSMODS_API_KEY }} | |
NEXUSMODS_COOKIES: ${{ secrets.ARAGAS_NEXUSMODS_COOKIE_SID_DEVELOP }} | |
########################### | |
# GITHUB # | |
########################### | |
publish-on-github: | |
if: github.ref == 'refs/heads/master' | |
needs: [get-changelog, build] | |
uses: BUTR/workflows/.github/workflows/release-github.yml@master | |
with: | |
mod_id: Bannerlord.BLSE | |
mod_version: ${{ needs.get-changelog.outputs.mod_version }} | |
mod_description: ${{ needs.build.outputs.mod_description }} | |
artifact_name: bannerlord | |
########################### | |
# STEAM # | |
########################### | |
publish-on-steam: | |
if: false && github.ref == 'refs/heads/master' | |
needs: [get-changelog, build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download Module artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: bannerlord | |
path: ./artifact | |
- uses: game-ci/steam-deploy@v3 | |
with: | |
username: ${{ secrets.STEAM_USERNAME }} | |
password: ${{ secrets.STEAM_PASSWORD }} | |
configVdf: ${{ secrets.STEAM_CONFIG_VDF }} | |
ssfnFileName: ${{ secrets.STEAM_SSFN_FILE_NAME }} | |
ssfnFileContents: ${{ secrets.STEAM_SSFN_FILE_CONTENTS }} | |
appId: ${{ secrets.STEAM_APPID }} | |
buildDescription: ${{ needs.get-changelog.outputs.mod_version }} | |
rootPath: build | |
depot1Path: ./artifact | |
releaseBranch: prerelease |