diff --git a/ArchiSteamFarm/overlay/docker/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/docker/ArchiSteamFarm-Service.sh new file mode 100644 index 000000000..307365d65 --- /dev/null +++ b/ArchiSteamFarm/overlay/docker/ArchiSteamFarm-Service.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env sh +set -eu + +CONFIG_PATH="config/ASF.json" + +cd "$(dirname "$(readlink -f "$0")")" + +SCRIPT_DIR="$(pwd)" +SCRIPT_PATH="${SCRIPT_DIR}/${0}" + +BINARY="${SCRIPT_DIR}/ArchiSteamFarm" + +if [ ! -f "$BINARY" ]; then + echo "ERROR: $BINARY could not be found!" + exit 1 +fi + +BINARY_ARGS="" +PATH_NEXT=0 + +PARSE_ARG() { + BINARY_ARGS="$BINARY_ARGS $1" + + case "$1" in + --path) PATH_NEXT=1 ;; + --path=*) + if [ "$PATH_NEXT" -eq 1 ]; then + PATH_NEXT=0 + cd "$1" + else + cd "$(echo "$1" | cut -d '=' -f 2-)" + fi + ;; + *) + if [ "$PATH_NEXT" -eq 1 ]; then + PATH_NEXT=0 + cd "$1" + fi + esac +} + +if [ -n "${ASF_PATH-}" ]; then + cd "$ASF_PATH" +fi + +if [ -n "${ASF_ARGS-}" ]; then + for ARG in $ASF_ARGS; do + if [ -n "$ARG" ]; then + PARSE_ARG "$ARG" + fi + done +fi + +for ARG in "$@"; do + if [ -n "$ARG" ]; then + PARSE_ARG "$ARG" + fi +done + +CONFIG_PATH="$(pwd)/${CONFIG_PATH}" + +# Kill underlying ASF process on shell process exit +trap "trap - TERM && kill -- -$$" INT TERM + +while :; do + if [ -f "$CONFIG_PATH" ] && grep -Eq '"Headless":\s+?true' "$CONFIG_PATH"; then + # We're running ASF in headless mode so we don't need STDIN + "$BINARY" $BINARY_ARGS & # Start ASF in the background, trap will work properly due to non-blocking call + wait $! # This will forward dotnet error code, set -e will abort the script if it's non-zero + else + # We're running ASF in non-headless mode, so we need STDIN to be operative + "$BINARY" $BINARY_ARGS # Start ASF in the foreground, trap sadly won't work until process exit + fi + + chmod +x "$SCRIPT_PATH" # If ASF exited by itself, we need to ensure that our script is still set to +x after auto-update + sleep 1 +done diff --git a/Dockerfile.Service.arm b/Dockerfile.Service.arm index f25b566dd..cfa77029c 100644 --- a/Dockerfile.Service.arm +++ b/Dockerfile.Service.arm @@ -20,10 +20,10 @@ RUN dotnet --info && \ dotnet build ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo && \ dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo && \ dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo && \ - dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o 'out' --nologo /p:ASFVariant=generic /p:UseAppHost=false && \ - cp "ArchiSteamFarm/overlay/generic/ArchiSteamFarm-Service.sh" "out/ArchiSteamFarm-Service.sh" + dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o 'out' -r 'linux-arm' --nologo /p:ASFVariant=linux-arm /p:PublishTrimmed=true && \ + cp "ArchiSteamFarm/overlay/docker/ArchiSteamFarm-Service.sh" "out/ArchiSteamFarm-Service.sh" -FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim-arm32v7 AS runtime +FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1-buster-slim-arm32v7 AS runtime ENV ASPNETCORE_URLS= LABEL maintainer="JustArchi " EXPOSE 1242 diff --git a/Dockerfile.Service.x64 b/Dockerfile.Service.x64 index 61c00fb5f..5a82f3188 100644 --- a/Dockerfile.Service.x64 +++ b/Dockerfile.Service.x64 @@ -20,10 +20,10 @@ RUN dotnet --info && \ dotnet build ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo && \ dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo && \ dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo && \ - dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o 'out' --nologo /p:ASFVariant=generic /p:UseAppHost=false && \ - cp "ArchiSteamFarm/overlay/generic/ArchiSteamFarm-Service.sh" "out/ArchiSteamFarm-Service.sh" + dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o 'out' -r 'linux-x64' --nologo /p:ASFVariant=linux-x64 /p:PublishTrimmed=true && \ + cp "ArchiSteamFarm/overlay/docker/ArchiSteamFarm-Service.sh" "out/ArchiSteamFarm-Service.sh" -FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS runtime +FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1-buster-slim AS runtime ENV ASPNETCORE_URLS= LABEL maintainer="JustArchi " EXPOSE 1242