203 lines
8.2 KiB
YAML
203 lines
8.2 KiB
YAML
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
|
|
|
name: Publish release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
workflow_call:
|
|
|
|
env:
|
|
ARTIFACTS_DIR: 2049ef39-42a2-46d2-b513-ee6d2e3a7b15
|
|
TOOLS_DIR: c1c0ee3b-b22f-451f-b330-8f6337a38fd7
|
|
RELEASES: |
|
|
windows:Barotrauma/bin/ReleaseWindows/net6.0/win-x64/publish
|
|
linux:Barotrauma/bin/ReleaseLinux/net6.0/linux-x64/publish
|
|
mac:Barotrauma/bin/ReleaseMac/net6.0/osx-x64/publish
|
|
ARCHIVE_BASE_NAME: luacsforbarotrauma
|
|
# XXX: these file names are subject to shell expansion.
|
|
# Be careful when using special characters.
|
|
PUBLICIZED_ASSEMBLIES: |
|
|
Barotrauma.dll
|
|
DedicatedServer.dll
|
|
ARCHIVE_FILES_SERVER: |
|
|
DedicatedServer.deps.json
|
|
DedicatedServer.dll
|
|
DedicatedServer.pdb
|
|
ARCHIVE_FILES_CLIENT: |
|
|
Barotrauma.deps.json
|
|
Barotrauma.dll
|
|
Barotrauma.pdb
|
|
DedicatedServer.deps.json
|
|
DedicatedServer.dll
|
|
DedicatedServer.pdb
|
|
ARCHIVE_FILES_SHARED: |
|
|
0Harmony.dll
|
|
Sigil.dll
|
|
MoonSharp.Interpreter.dll
|
|
MoonSharp.VsCodeDebugger.dll
|
|
MonoMod.Common.dll
|
|
Mono.Cecil.dll
|
|
Mono.Cecil.Mdb.dll
|
|
Mono.Cecil.Pdb.dll
|
|
Mono.Cecil.Rocks.dll
|
|
Microsoft.CodeAnalysis.CSharp.Scripting.dll
|
|
Microsoft.CodeAnalysis.CSharp.dll
|
|
Microsoft.CodeAnalysis.dll
|
|
Microsoft.CodeAnalysis.Scripting.dll
|
|
System.Collections.Immutable.dll
|
|
System.Reflection.Metadata.dll
|
|
System.Runtime.CompilerServices.Unsafe.dll
|
|
mscordaccore_amd64_amd64_*
|
|
Lua
|
|
Publicized
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout branch
|
|
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup .NET
|
|
uses: actions/setup-dotnet@607fce577a46308457984d59e4954e075820f10a # v3.0.3
|
|
with:
|
|
dotnet-version: |
|
|
6.0.x
|
|
|
|
- name: "Build: WindowsServer"
|
|
run: dotnet publish Barotrauma/BarotraumaServer/WindowsServer.csproj -c Release -clp:"ErrorsOnly;Summary" --self-contained -r win-x64 \/p:Platform="x64"
|
|
- name: "Build: WindowsClient"
|
|
run: dotnet publish Barotrauma/BarotraumaClient/WindowsClient.csproj -c Release -clp:"ErrorsOnly;Summary" --self-contained -r win-x64 \/p:Platform="x64"
|
|
|
|
- name: "Build: LinuxServer"
|
|
run: dotnet publish Barotrauma/BarotraumaServer/LinuxServer.csproj -c Release -clp:"ErrorsOnly;Summary" --self-contained -r linux-x64 \/p:Platform="x64"
|
|
- name: "Build: LinuxClient"
|
|
run: dotnet publish Barotrauma/BarotraumaClient/LinuxClient.csproj -c Release -clp:"ErrorsOnly;Summary" --self-contained -r linux-x64 \/p:Platform="x64"
|
|
|
|
- name: "Build: MacServer"
|
|
run: dotnet publish Barotrauma/BarotraumaServer/MacServer.csproj -c Release -clp:"ErrorsOnly;Summary" --self-contained -r osx-x64 \/p:Platform="x64"
|
|
- name: "Build: MacClient"
|
|
run: dotnet publish Barotrauma/BarotraumaClient/MacClient.csproj -c Release -clp:"ErrorsOnly;Summary" --self-contained -r osx-x64 \/p:Platform="x64"
|
|
|
|
- name: Publicize assemblies
|
|
run: |
|
|
set -e
|
|
shopt -s globstar nullglob
|
|
shopt -u dotglob
|
|
|
|
# This converts a newline-separated (LF) list into a Bash array
|
|
# NOTE: this doesn't discard the trailing LF that GitHub actions
|
|
# append (which results in an extra entry in the array).
|
|
lines_to_array() {
|
|
IFS=$'\n' readarray -td $'\n' "$1" <<< "${!1}"
|
|
}
|
|
|
|
lines_to_array RELEASES
|
|
|
|
tools_dir="$(realpath -m "$TOOLS_DIR")"
|
|
mkdir -p "$tools_dir"
|
|
|
|
dotnet tool install --tool-path "$tools_dir/asmpub" BepInEx.AssemblyPublicizer.Cli --version 0.4.1
|
|
|
|
for i in "${!RELEASES[@]}"; do
|
|
[[ -z "${RELEASES[i]}" ]] && continue
|
|
(
|
|
IFS=':' read platform publish_dir _rest <<< "${RELEASES[i]}"
|
|
cd "$publish_dir"
|
|
echo "Publicizing assemblies for $platform build"
|
|
mkdir Publicized
|
|
# XXX: assembly-publicizer supports processing assemblies in
|
|
# parallel, but it aborts the entire process if it encounters
|
|
# an invalid .NET assembly.
|
|
parallel "$tools_dir/asmpub/assembly-publicizer" \
|
|
{} -f --strip -o Publicized \
|
|
::: ${PUBLICIZED_ASSEMBLIES[@]}
|
|
)
|
|
done
|
|
|
|
- name: Create archives
|
|
run: |
|
|
set -e
|
|
shopt -s globstar nullglob
|
|
shopt -u dotglob
|
|
|
|
# This converts a newline-separated (LF) list into a Bash array
|
|
# NOTE: this doesn't discard the trailing LF that GitHub actions
|
|
# append (which results in an extra entry in the array).
|
|
lines_to_array() {
|
|
IFS=$'\n' readarray -td $'\n' "$1" <<< "${!1}"
|
|
}
|
|
|
|
lines_to_array ARCHIVE_FILES_SHARED
|
|
lines_to_array ARCHIVE_FILES_CLIENT
|
|
lines_to_array ARCHIVE_FILES_SERVER
|
|
lines_to_array RELEASES
|
|
|
|
artifacts_dir="$(realpath -m "$ARTIFACTS_DIR")"
|
|
mkdir -p "$artifacts_dir"
|
|
|
|
for i in "${!RELEASES[@]}"; do
|
|
[[ -z "${RELEASES[i]}" ]] && continue
|
|
(
|
|
IFS=':' read platform publish_dir _rest <<< "${RELEASES[i]}"
|
|
cd "$publish_dir"
|
|
echo "Creating build_${platform}.zip"
|
|
zip -qr "${artifacts_dir}/${ARCHIVE_BASE_NAME}_build_${platform}.zip" *
|
|
echo "Creating patch_${platform}_client.zip"
|
|
zip -qr "${artifacts_dir}/${ARCHIVE_BASE_NAME}_patch_${platform}_client.zip" \
|
|
${ARCHIVE_FILES_SHARED[@]} \
|
|
${ARCHIVE_FILES_CLIENT[@]}
|
|
echo "Creating patch_${platform}_server.zip"
|
|
zip -qr "${artifacts_dir}/${ARCHIVE_BASE_NAME}_patch_${platform}_server.zip" \
|
|
${ARCHIVE_FILES_SHARED[@]} \
|
|
${ARCHIVE_FILES_SERVER[@]}
|
|
)
|
|
done
|
|
|
|
for i in "${!RELEASES[@]}"; do
|
|
[[ -z "${RELEASES[i]}" ]] && continue
|
|
(
|
|
IFS=':' read platform publish_dir _rest <<< "${RELEASES[i]}"
|
|
cd "$publish_dir"
|
|
echo "Creating build_${platform}.tar.gz"
|
|
tar -czf "${artifacts_dir}/${ARCHIVE_BASE_NAME}_build_${platform}.tar.gz" \
|
|
--owner=0 --group=0 \
|
|
*
|
|
echo "Creating patch_${platform}_client.tar.gz"
|
|
tar -czf "${artifacts_dir}/${ARCHIVE_BASE_NAME}_patch_${platform}_client.tar.gz" \
|
|
--owner=0 --group=0 \
|
|
${ARCHIVE_FILES_SHARED[@]} \
|
|
${ARCHIVE_FILES_CLIENT[@]}
|
|
echo "Creating patch_${platform}_server.tar.gz"
|
|
tar -czf "${artifacts_dir}/${ARCHIVE_BASE_NAME}_patch_${platform}_server.tar.gz" \
|
|
--owner=0 --group=0 \
|
|
${ARCHIVE_FILES_SHARED[@]} \
|
|
${ARCHIVE_FILES_SERVER[@]}
|
|
)
|
|
done
|
|
|
|
- name: Publish release
|
|
uses: notpeelz/action-gh-create-release@a3caaff31cdf1022430c5a95689330ed83de62f2 # v1.0.2
|
|
with:
|
|
token: ${{ github.token }}
|
|
tag: latest
|
|
strategy: replace
|
|
title: "Automatic build"
|
|
body: "Automatic build"
|
|
files: |
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_build_windows.zip
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_patch_windows_client.zip
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_patch_windows_server.zip
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_build_linux.zip
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_build_linux.tar.gz
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_patch_linux_client.zip
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_patch_linux_client.tar.gz
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_patch_linux_server.zip
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_patch_linux_server.tar.gz
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_build_mac.zip
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_patch_mac_client.zip
|
|
${{ env.ARTIFACTS_DIR }}/${{ env.ARCHIVE_BASE_NAME }}_patch_mac_server.zip
|