WIP: feat(games): add Satisfactory (did not boot yet) #21

Closed
gbr-bot wants to merge 1 commits from draft/satisfactory into main
pull from: draft/satisfactory
Member

Drafted by the GBR AI builder. Review before merging: check the settings, ports and descriptions against the game's documentation.

  • Game: Satisfactory — robtme/satisfactory-server (Docker)
  • Image: robtme/satisfactory-server
  • Model rounds: 3

Checked for real

  • image robtme/satisfactory-server exists
  • Steam app 1690800 is "Satisfactory Dedicated Server"
  • first boot of robtme/satisfactory-server: exited by itself with code 8 after 24s

Still open (the builder could not fix these)

  • booting your template, the server still wrote its own files outside the server volume, in /config/gamefiles, /config/gamefiles/Engine/Config, /config/gamefiles/Engine/Saved/Config/LinuxServer, /config/gamefiles/FactoryGame/.sentry-native/f8cf851d-b562-45fb-5fa3-92cc4b73ce09.run, /config/gamefiles/FactoryGame/Saved/Config/CrashReportClient/UECC-Linux-762F15C7EE5A481EB04AF7361D9D8378, /config/gamefiles/FactoryGame/Saved/Config/LinuxServer, /config/gamefiles/FactoryGame/Saved/Logs, /config/logs, /config/logs/steam, so your startup command or settings did not move them. Check the exact launch option name and syntax this server documents for its save/data folder (a wrong option is usually ignored silently) and point it at /server

Notes from research: Runs as non-root (set PUID/PGID to your host UID/GID, e.g. 1000). 8–16 GB RAM recommended (16 GB for 4+ players or large saves). Experimental/beta branch: set STEAMBETA=true. Mod support available (see repo wiki). No PC↔console crossplay – console players cannot join dedicated servers. Epic and Steam PC players can both join. Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs). Auto-updates on container start unless SKIPUPDATE=true. Optional SSL via Certbot to avoid self-signed cert prompts.

Sources

Drafted by the GBR AI builder. **Review before merging**: check the settings, ports and descriptions against the game's documentation. - Game: **Satisfactory** — robtme/satisfactory-server (Docker) - Image: `robtme/satisfactory-server` - Model rounds: 3 **Checked for real** - image robtme/satisfactory-server exists - Steam app 1690800 is "Satisfactory Dedicated Server" - first boot of robtme/satisfactory-server: exited by itself with code 8 after 24s **Still open** (the builder could not fix these) - booting your template, the server still wrote its own files outside the server volume, in /config/gamefiles, /config/gamefiles/Engine/Config, /config/gamefiles/Engine/Saved/Config/LinuxServer, /config/gamefiles/FactoryGame/.sentry-native/f8cf851d-b562-45fb-5fa3-92cc4b73ce09.run, /config/gamefiles/FactoryGame/Saved/Config/CrashReportClient/UECC-Linux-762F15C7EE5A481EB04AF7361D9D8378, /config/gamefiles/FactoryGame/Saved/Config/LinuxServer, /config/gamefiles/FactoryGame/Saved/Logs, /config/logs, /config/logs/steam, so your startup command or settings did not move them. Check the exact launch option name and syntax this server documents for its save/data folder (a wrong option is usually ignored silently) and point it at /server **Notes from research:** Runs as non-root (set PUID/PGID to your host UID/GID, e.g. 1000). 8–16 GB RAM recommended (16 GB for 4+ players or large saves). Experimental/beta branch: set STEAMBETA=true. Mod support available (see repo wiki). No PC↔console crossplay – console players cannot join dedicated servers. Epic and Steam PC players can both join. Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs). Auto-updates on container start unless SKIPUPDATE=true. Optional SSL via Certbot to avoid self-signed cert prompts. **Sources** - https://hub.docker.com/r/wolveix/satisfactory-server - https://satisfactory.wiki.gg/wiki/Dedicated_servers - https://steamdb.info/app/1690800/info/
gbr-bot added 1 commit 2026-10-26 02:55:26 +00:00
feat(games): draft Satisfactory
Validate game templates / validate (push) Successful in 20s
Validate game templates / boot-test (push) Successful in 3m18s
Validate game templates / publish (push) Skipped
c2c3c4990b
Drafted and boot-tested by the GBR builder (job 37cfcfc4-bc1e-4897-9f9f-6c20671a9320).
git_ai_bot left a comment
Member

🤖 AI Code Review

1. Blocking issues

a) rm -rf /config in the startup command is a data-destruction hazard and doesn't work.

defaultStartupCommand: rm -rf /config && ln -s /server /config && /init.sh
  • If /config is a bind-mounted volume (which the PR's own research notes say it should be: "Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs)"), rm -rf /config will delete all save data, game files, and logs on every restart. This is the worst kind of bug: silent, destructive, and user-visible only after the first restart.
  • The PR description itself confirms this approach failed: the server still wrote to /config/gamefiles/... paths. The && chain means if rm -rf fails (e.g., permission denied on a read-only overlay), the symlink and /init.sh are never executed.
  • The correct approach is to use the image's documented mechanism to redirect data. For robtme/satisfactory-server, check whether it supports a DATADIR, CONFIG_DIR, or similar environment variable, or whether the game binary accepts a -SaveDir / -SavedDir launch parameter. Set that in defaultConfig or as an env var, and mount the volume at the path the game actually reads. Remove the rm -rf / ln -s hack entirely.

b) The PR is explicitly WIP and the server does not boot.

The title says "did not boot yet", the description says the container "exited by itself with code 8 after 24s", and the "Still open" section acknowledges the builder couldn't fix the issue. Merging a game entry that cannot start a server will break CI and produce a non-functional entry in the catalog. This should stay in draft / WIP status until a clean boot is verified.

c) Potential image ↔ config mismatch.

The defaultDockerImage is robtme/satisfactory-server, but the primary research source links to wolveix/satisfactory-server. These are independent projects with different entrypoints, env-var names, and directory layouts. The env-var set in defaultConfig (AUTOSAVENUM, DISABLESEASONALEVENTS, LOG, MAXOBJECTS, MAXTICKRATE, MULTIHOME, SERVERSTREAMING, VMOVERRIDE, etc.) closely matches the wolveix image's documented variables. If robtme/satisfactory-server doesn't read those variables, they will be silently ignored and the server will run with defaults.

Please verify each variable name against the robtme/satisfactory-server README or source, or switch the image to wolveix/satisfactory-server if that's what the config was written for.

2. Non-blocking suggestions

  • PUID/PGID: The research notes say the image requires PUID/PGID to be set to the host UID/GID for non-root operation, but neither appears in defaultConfig. If the platform injects these automatically, add a comment noting that. If not, the server will likely hit permission errors on the data directory.

  • STEAMBETAID example value: The description says "e.g. 'experimental'", but Satisfactory's Steam beta branches typically use a numeric branch ID (e.g. 3233312253535353198) or a specific branch token, not the word "experimental." A misleading example will send users down a dead end. Check the actual branch ID on SteamDB or the Steam community.

  • TIMEOUT semantics: The description says "Timeout in seconds for player connections before they are dropped." In most Satisfactory server images this is the connection timeout (how long to wait for a player to finish connecting), not an idle-kick timeout. The current wording is close but could be tightened to avoid confusion with an idle timeout.

  • requiredDiskMb: 40960 (40 GB): This looks tight. The Satisfactory dedicated server + SteamCMD downloads + save data can easily exceed 40 GB, especially with mods or large saves. Consider 60–80 GB or adding a note that this is a minimum.

  • Consider adding PUID/PGID and STEAMBETA-related fields to configSchema if they are valid env vars for the chosen image, so users can configure them through the UI.

3. Tests

  • test.yaml has an empty config and secrets, with settleSec: 120. Since the server currently exits with code 8 after ~24 s, the boot-test will fail regardless of settle time. No amount of waiting fixes a server that crashes on startup.
  • Once the image/config are corrected, add a boot-test that asserts the server process is still alive after settle (not just that the container hasn't exited), and ideally that port 7777/udp is actually accepting packets.
  • If the platform supports it, add a test that verifies the data directory (/server or wherever saves land) actually contains the expected game files after the first save cycle.

4. Overall assessment

Do not merge. The PR is self-described WIP, the server does not boot, the startup command contains a rm -rf against a path that may be a user data volume, and the config variables may target the wrong Docker image. Fix the image/config pairing, replace the destructive startup hack with the image's documented data-directory mechanism, verify a clean boot, and then re-submit.


Automated review by AI Git Bot

## 🤖 AI Code Review ## 1. Blocking issues **a) `rm -rf /config` in the startup command is a data-destruction hazard and doesn't work.** ```yaml defaultStartupCommand: rm -rf /config && ln -s /server /config && /init.sh ``` - If `/config` is a bind-mounted volume (which the PR's own research notes say it should be: *"Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs)"*), `rm -rf /config` will **delete all save data, game files, and logs** on every restart. This is the worst kind of bug: silent, destructive, and user-visible only after the first restart. - The PR description itself confirms this approach failed: the server still wrote to `/config/gamefiles/...` paths. The `&&` chain means if `rm -rf` fails (e.g., permission denied on a read-only overlay), the symlink and `/init.sh` are never executed. - The correct approach is to use the image's documented mechanism to redirect data. For `robtme/satisfactory-server`, check whether it supports a `DATADIR`, `CONFIG_DIR`, or similar environment variable, or whether the game binary accepts a `-SaveDir` / `-SavedDir` launch parameter. Set that in `defaultConfig` or as an env var, and mount the volume at the path the game actually reads. Remove the `rm -rf` / `ln -s` hack entirely. **b) The PR is explicitly WIP and the server does not boot.** The title says *"did not boot yet"*, the description says the container *"exited by itself with code 8 after 24s"*, and the "Still open" section acknowledges the builder couldn't fix the issue. Merging a game entry that cannot start a server will break CI and produce a non-functional entry in the catalog. This should stay in draft / WIP status until a clean boot is verified. **c) Potential image ↔ config mismatch.** The `defaultDockerImage` is `robtme/satisfactory-server`, but the primary research source links to `wolveix/satisfactory-server`. These are independent projects with different entrypoints, env-var names, and directory layouts. The env-var set in `defaultConfig` (AUTOSAVENUM, DISABLESEASONALEVENTS, LOG, MAXOBJECTS, MAXTICKRATE, MULTIHOME, SERVERSTREAMING, VMOVERRIDE, etc.) closely matches the `wolveix` image's documented variables. If `robtme/satisfactory-server` doesn't read those variables, they will be silently ignored and the server will run with defaults. Please verify each variable name against the `robtme/satisfactory-server` README or source, or switch the image to `wolveix/satisfactory-server` if that's what the config was written for. ## 2. Non-blocking suggestions - **PUID/PGID**: The research notes say the image requires `PUID`/`PGID` to be set to the host UID/GID for non-root operation, but neither appears in `defaultConfig`. If the platform injects these automatically, add a comment noting that. If not, the server will likely hit permission errors on the data directory. - **`STEAMBETAID` example value**: The description says *"e.g. 'experimental'"*, but Satisfactory's Steam beta branches typically use a numeric branch ID (e.g. `3233312253535353198`) or a specific branch token, not the word "experimental." A misleading example will send users down a dead end. Check the actual branch ID on SteamDB or the Steam community. - **`TIMEOUT` semantics**: The description says *"Timeout in seconds for player connections before they are dropped."* In most Satisfactory server images this is the *connection timeout* (how long to wait for a player to finish connecting), not an idle-kick timeout. The current wording is close but could be tightened to avoid confusion with an idle timeout. - **`requiredDiskMb: 40960` (40 GB)**: This looks tight. The Satisfactory dedicated server + SteamCMD downloads + save data can easily exceed 40 GB, especially with mods or large saves. Consider 60–80 GB or adding a note that this is a minimum. - **Consider adding `PUID`/`PGID` and `STEAMBETA`-related fields to `configSchema`** if they are valid env vars for the chosen image, so users can configure them through the UI. ## 3. Tests - `test.yaml` has an empty `config` and `secrets`, with `settleSec: 120`. Since the server currently exits with code 8 after ~24 s, the boot-test will fail regardless of settle time. No amount of waiting fixes a server that crashes on startup. - Once the image/config are corrected, add a boot-test that asserts the server process is still alive after settle (not just that the container hasn't exited), and ideally that port 7777/udp is actually accepting packets. - If the platform supports it, add a test that verifies the data directory (`/server` or wherever saves land) actually contains the expected game files after the first save cycle. ## 4. Overall assessment **Do not merge.** The PR is self-described WIP, the server does not boot, the startup command contains a `rm -rf` against a path that may be a user data volume, and the config variables may target the wrong Docker image. Fix the image/config pairing, replace the destructive startup hack with the image's documented data-directory mechanism, verify a clean boot, and then re-submit. --- *Automated review by AI Git Bot*
gbr-bot closed this pull request 2026-10-26 03:52:39 +00:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
This pull request is marked as a work in progress.
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gbreed-public/gbr-games#21