diff --git a/.forgejo/workflows/derive.yml b/.forgejo/workflows/derive.yml index 1f1b419..c13353b 100644 --- a/.forgejo/workflows/derive.yml +++ b/.forgejo/workflows/derive.yml @@ -35,11 +35,33 @@ jobs: dota2) APPID=570; LOGIN="$STEAM_USER"; STEAM_HOME="$STEAM_HOME_AUTH" ;; *) echo "unknown game '$GAME' (expected cs2 or dota2)"; exit 1 ;; esac - STEAM_APPS="$STEAM_HOME/.steam/SteamApps" - { echo "APPID=$APPID"; echo "STEAM_APPS=$STEAM_APPS"; } >> "$GITHUB_ENV" - env HOME="$STEAM_HOME" steamcmd +login "$LOGIN" +app_update "$APPID" +quit + STEAM_APPS=""; SEEN=""; BUILD="" + for cand in "$STEAM_HOME/Steam/steamapps" "$STEAM_HOME/.steam/steam/steamapps" \ + "$STEAM_HOME/.steam/SteamApps"; do + m="$cand/appmanifest_$APPID.acf" + [ -f "$m" ] || continue + # The same tree reached twice through a symlink is ONE tree, not a disagreement. + key=$(stat -Lc '%d:%i' "$m") + case " $SEEN " in *" $key "*) continue ;; esac + SEEN="$SEEN $key" + b=$(grep -oP '"buildid"[[:space:]]+"\K[0-9]+' "$m") + echo " candidate $cand -> buildid $b" + if [ -z "$STEAM_APPS" ]; then + STEAM_APPS="$cand"; BUILD="$b" + elif [ "$b" != "$BUILD" ]; then + echo "::error::two Steam app trees under $STEAM_HOME disagree — $STEAM_APPS says" \ + "$BUILD, $cand says $b. One is stale; deriving from it would publish gamedata for" \ + "a build nothing is running. Remove the stale tree or symlink it to the live one." + exit 1 + fi + done + [ -n "$STEAM_APPS" ] || { + echo "::error::no appmanifest_$APPID.acf under $STEAM_HOME — did the update run?"; exit 1; } + echo "using $STEAM_APPS (buildid $BUILD)" + { echo "APPID=$APPID"; echo "STEAM_APPS=$STEAM_APPS"; } >> "$GITHUB_ENV" + - name: Resolve the game paths + the new buildid run: | MANIFEST="$STEAM_APPS/appmanifest_$APPID.acf"