From ee70e6248d14f7638420406c4bcc486dc3a059e9 Mon Sep 17 00:00:00 2001 From: Frank Harris Date: Tue, 9 Jun 2026 10:14:08 -0500 Subject: [PATCH] fix 126 --- ...generated_steamcmd_job.bak.20260609-101329 | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 Panel/modules/addonsmanager/scripts/workshop/panel_generated_steamcmd_job.bak.20260609-101329 diff --git a/Panel/modules/addonsmanager/scripts/workshop/panel_generated_steamcmd_job.bak.20260609-101329 b/Panel/modules/addonsmanager/scripts/workshop/panel_generated_steamcmd_job.bak.20260609-101329 new file mode 100755 index 00000000..3a746e08 --- /dev/null +++ b/Panel/modules/addonsmanager/scripts/workshop/panel_generated_steamcmd_job.bak.20260609-101329 @@ -0,0 +1,119 @@ +#!/usr/bin/env bash +set -u +MANIFEST="${1:-}" +if [ -z "$MANIFEST" ] || [ ! -f "$MANIFEST" ]; then + echo "ERROR: Workshop manifest missing: $MANIFEST" + exit 2 +fi +MANIFEST_DIR="$(dirname "$MANIFEST")" +LOG="$MANIFEST_DIR/workshop_install.log" +touch "$LOG" +log() { + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG" +} +json_value() { + local key="$1" + perl -0777 -ne ' + my $k = shift @ARGV; + if (/"\Q$k\E"\s*:\s*"([^"]*)"/s) { + my $v = $1; + $v =~ s/\\\//\//g; + print $v; + exit; + } + if (/"\Q$k\E"\s*:\s*([0-9]+)/s) { + print $1; + exit; + } + ' "$key" "$MANIFEST" +} +json_items() { + perl -0777 -ne ' + if (/"items"\s*:\s*\[(.*?)\]/s) { + my $x = $1; + while ($x =~ /"([0-9]{3,20})"/g) { print "$1\n"; } + while ($x =~ /(?/dev/null 2>&1; then command -v "$c"; return 0; fi + if [ -f "$c" ]; then echo "$c"; return 0; fi + done + return 1 +} +log "GSP Workshop job starting. action=$ACTION appid=$APPID server_path=$SERVER_PATH" +if [ "$ACTION" = "remove" ]; then + for id in $ITEMS; do + log "Removing Workshop item files for $id if present." + rm -rf "$SERVER_PATH/@$id" "$SERVER_PATH/workshop/@$id" "$SERVER_PATH/steamapps/workshop/content/$APPID/$id" + done + log "Remove job complete." + exit 0 +fi +STEAMCMD="$(find_steamcmd)" || { + log "ERROR: steamcmd was not found. Install SteamCMD on the agent host or set STEAMCMD_PATH." + exit 127 +} +RUNSCRIPT="$MANIFEST_DIR/steamcmd_workshop_$$.txt" +{ + echo "@ShutdownOnFailedCommand 0" + echo "@NoPromptForPassword 1" + echo "login anonymous" + echo "force_install_dir $SERVER_PATH" + for id in $ITEMS; do + echo "workshop_download_item $APPID $id validate" + done + echo "quit" +} > "$RUNSCRIPT" +log "Using SteamCMD: $STEAMCMD" +log "Running SteamCMD runscript: $RUNSCRIPT" +"$STEAMCMD" +runscript "$RUNSCRIPT" 2>&1 | tee -a "$LOG" +rc=${PIPESTATUS[0]} +if [ "$rc" -ne 0 ]; then + log "ERROR: SteamCMD failed with exit $rc" + exit "$rc" +fi +for id in $ITEMS; do + SRC="$SERVER_PATH/steamapps/workshop/content/$APPID/$id" + DST="$SERVER_PATH/@$id" + if [ ! -d "$SRC" ]; then + log "ERROR: downloaded Workshop source not found: $SRC" + exit 5 + fi + log "Installing Workshop item $id to $DST" + rm -rf "$DST" + cp -a "$SRC" "$DST" + if [ -d "$DST/keys" ]; then + mkdir -p "$SERVER_PATH/keys" + find "$DST/keys" -type f -iname '*.bikey' -exec cp -f {} "$SERVER_PATH/keys/" \; + fi +done +log "Workshop job complete." +exit 0