worshop work

This commit is contained in:
Frank Harris 2026-06-08 16:09:54 -05:00
parent 0d44c65ea5
commit 3829a4a83d
92 changed files with 487 additions and 110 deletions

View file

@ -1,5 +1,7 @@
# GSP Steam Workshop and Server Content Design
Workspace reference: [`GSP-WORKSPACE.md`](../../../GSP-WORKSPACE.md)
## Scope
This document is an investigation and design report only. It does not implement code.
@ -43,8 +45,8 @@ What exists:
- Workshop IDs are validated as numeric strings.
- A `server_content_workshop` table is created/migrated by helper code.
- A remote manifest is written under the game server home.
- Bundled generic Linux and Cygwin/Windows scripts are copied to the agent and executed.
- The current scripts can call SteamCMD with `+workshop_download_item`.
- Panel-owned Linux and Cygwin/Windows templates are used to generate per-job scripts under the server home.
- The generated job script creates a temporary SteamCMD runscript and calls SteamCMD with `+runscript`.
- Basic install, update, update selected, update all, and remove selected actions exist.
- Actions are logged through the panel logger and the script writes a text log under `gsp_server_content`.
@ -74,18 +76,20 @@ The current user flow is:
3. Panel inserts or updates rows in `server_content_workshop`.
4. Panel writes a manifest to:
- `{GAME_HOME}/gsp_server_content/workshop_manifest.json`
5. Panel copies a bundled script to:
- `{GAME_HOME}/gsp_server_content/scripts/workshop/generic_steam_workshop_linux.sh`
- or `{GAME_HOME}/gsp_server_content/scripts/workshop/generic_steam_workshop_windows_cygwin.sh`
5. Panel writes a generated job script to:
- `{GAME_HOME}/gsp_server_content/jobs/workshop/workshop_job_<timestamp>_<random>.sh`
6. Panel executes:
- `bash <script_path> <manifest_path>`
7. The script uses SteamCMD:
- `+force_install_dir <server_root>`
- `+login anonymous`
- `+workshop_download_item <workshop_app_id> <workshop_id> validate`
8. The script copies downloaded files to a target folder, defaulting to:
7. The script writes a temporary SteamCMD runscript:
- `@ShutdownOnFailedCommand 0`
- `@NoPromptForPassword 1`
- `force_install_dir <server_root>`
- `login anonymous`
- `workshop_download_item <workshop_app_id> <workshop_id> validate`
8. The script runs SteamCMD with `+runscript <scriptfile>`.
9. The script copies downloaded files to a target folder, defaulting to:
- `{SERVER_ROOT}/@{WORKSHOP_ID}`
9. Panel updates DB row state to `installed`, `failed`, or `removed`.
10. Panel updates DB row state to `installed`, `failed`, or `removed`.
This is useful as a proof of concept, but it is not yet a commercial Workshop/mod system.
@ -121,7 +125,7 @@ The current helper also writes agent-side files under the server home:
- `gsp_server_content/workshop_install.log`
- `gsp_server_content/workshop_install_windows.log`
- `gsp_server_content/workshop/removed/*`
- `gsp_server_content/scripts/workshop/*`
- `gsp_server_content/jobs/workshop/workshop_job_*.sh`
Current DB weaknesses:
@ -1393,4 +1397,3 @@ The professional path is:
- Generate startup parameters from structured enabled/load-ordered rows.
- Treat LGSL/GameQ and game query systems as unrelated to content installation.
- Keep customers away from raw commands, helper scripts, and managed control files.