diff --git a/.github/workflows/games.yml b/.github/workflows/games.yml index 61e222d..1d45096 100644 --- a/.github/workflows/games.yml +++ b/.github/workflows/games.yml @@ -24,6 +24,7 @@ jobs: - source - valheim - thebattleforwesnoth + - rust steps: - uses: actions/checkout@v4 diff --git a/games/rust/Dockerfile b/games/rust/Dockerfile new file mode 100644 index 0000000..25b1c11 --- /dev/null +++ b/games/rust/Dockerfile @@ -0,0 +1,23 @@ +FROM --platform=$TARGETOS/$TARGETARCH debian:bookworm-slim + +ENV DEBIAN_FRONTEND=noninteractive + +RUN dpkg --add-architecture i386 \ + && apt update \ + && apt upgrade -y \ + && apt install -y lib32gcc-s1 lib32stdc++6 unzip curl iproute2 tzdata libgdiplus libsdl2-2.0-0:i386 tini \ + && useradd -d /home/container -m container + + +# To-Do add and download new golang wrapper here + +USER container +ENV USER=container HOME=/home/container +WORKDIR /home/container + +STOPSIGNAL SIGINT + +COPY --chown=container:container ./entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/usr/bin/tini", "-g", "--"] +CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/games/rust/entrypoint.sh b/games/rust/entrypoint.sh new file mode 100644 index 0000000..f2752cc --- /dev/null +++ b/games/rust/entrypoint.sh @@ -0,0 +1,48 @@ +#!/bin/bash +cd /home/container + +# Make internal Docker IP address available to processes. +export INTERNAL_IP=`ip route get 1 | awk '{print $(NF-2);exit}'` + +## if auto_update is not set or to 1 update +if [ -z ${AUTO_UPDATE} ] || [ "${AUTO_UPDATE}" == "1" ]; then + # Allow for the staging branch to also update itself + ./steamcmd/steamcmd.sh +force_install_dir /home/container +login anonymous +app_update 258550 $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) +quit +else + echo -e "Not updating game server as auto update was set to 0. Starting Server" +fi + +# Replace Startup Variables +MODIFIED_STARTUP=`eval echo $(echo ${STARTUP} | sed -e 's/{{/${/g' -e 's/}}/}/g')` +echo ":/home/container$ ${MODIFIED_STARTUP}" + +if [[ "${FRAMEWORK}" == "carbon" ]]; then + # Carbon: https://github.com/CarbonCommunity/Carbon.Core + echo "Updating Carbon..." + curl -sSL "https://github.com/CarbonCommunity/Carbon.Core/releases/download/production_build/Carbon.Linux.Release.tar.gz" | tar zx + echo "Done updating Carbon!" + + export DOORSTOP_ENABLED=1 + export DOORSTOP_TARGET_ASSEMBLY="$(pwd)/carbon/managed/Carbon.Preloader.dll" + MODIFIED_STARTUP="LD_PRELOAD=$(pwd)/libdoorstop.so ${MODIFIED_STARTUP}" +elif [[ "${FRAMEWORK}" == "oxide-staging" ]]; then + echo "updating oxide-staging" + curl -sSL -o oxide-staging.zip "https://downloads.oxidemod.com/artifacts/Oxide.Rust/staging/Oxide.Rust-linux.zip" + unzip -o -q oxide-staging.zip + rm oxide-staging.zip + echo "Done updating oxide Staging" +elif [[ "$OXIDE" == "1" ]] || [[ "${FRAMEWORK}" == "oxide" ]]; then + # Oxide: https://github.com/OxideMod/Oxide.Rust + echo "Updating uMod..." + curl -sSL "https://github.com/OxideMod/Oxide.Rust/releases/latest/download/Oxide.Rust-linux.zip" > umod.zip + unzip -o -q umod.zip + rm umod.zip + echo "Done updating uMod!" +# else Vanilla, do nothing +fi + +# Fix for Rust not starting +export LD_LIBRARY_PATH=$(pwd)/RustDedicated_Data/Plugins/x86_64:$(pwd) + +# Run the Server +wrapper "${MODIFIED_STARTUP}"