Adds gbrgames export and a CI step that posts every template to the control panel after validation on main (X-GBR-Event: games_published). A failed publish fails the run, so stale templates in the panel never go unnoticed.
Merge only after Gbreed/gbr-control-panel feat/games-git-sync is deployed. The current panel ignores this event with a 202, which curl treats as success.
Needs the org secret PANEL_WEBHOOK_SECRET, which node-agent CI already uses.
Adds `gbrgames export` and a CI step that posts every template to the control panel after validation on `main` (`X-GBR-Event: games_published`). A failed publish fails the run, so stale templates in the panel never go unnoticed.
**Merge only after Gbreed/gbr-control-panel `feat/games-git-sync` is deployed.** The current panel ignores this event with a 202, which curl treats as success.
Needs the org secret `PANEL_WEBHOOK_SECRET`, which node-agent CI already uses.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adds `gbrgames export`, which builds the games_published payload from
every game.yaml, and a CI step that posts it to the panel webhook after
validation on main. Unlike the node-agent notify, a failed publish fails
the run so stale templates in the panel never go unnoticed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only games whose folder changed are boot-tested (against the previous
main commit, or against main on branches; manual runs pick games). Each
one is deployed by the node-agent's real deploy code on a dedicated
game-test runner, in a network that can reach the internet but not the
LAN. Publishing to the panel runs only if they all booted.
- boottest-payload builds the DEPLOY_SERVER message the panel would send
- readyPattern/failPatterns in game.yaml; readyExample in test.yaml is
checked against the pattern during validation
- secrets in test.yaml come from CI; a game missing one is skipped
- Minecraft gets a ready pattern; Dragonwilds needs DRAGONWILDS_OWNER_ID
- RUNNER.md + scripts/runner: runner, isolated network, systemd unit
Also fixes newline values ("\n" separators/footers) that yaml.v3 wrote
as "" on import, which would have broken ARK and Dragonwilds config
files once synced, and adds a round-trip test for the importer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With MEMORY=4G and requiredMemoryMb 4096, Java's heap plus overhead
exceeded the container limit and the server was killed on start; the
boot test failed every time. With 3G it is ready in about 18s at 4 GB.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The payload builder filled anything matching the validator's broad
credential pattern that wasn't a non-empty string, so RCON_PORT,
ENABLE_RCON and ARK's RCONEnabled/RCONPort became 'boot-123456' in the
first runner run. Only fill keys named like passwords (or x-generate),
and only when missing or an empty string. Adds a test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ARK's image is built around user gameserver (uid 25000) and locks
/home/gameserver to it, so under the node's default 1000:1000 the
startup script got "Permission denied" and the server restart-looped,
on real nodes as well as in boot tests. Set containerUser 25000:25000
(needs node-agent and panel support for containerUser).
The startup command read ${RCON_PORT}, but the node passes the RCONPort
setting as RCONPORT, so custom RCON ports were ignored for 27020.
Boot-tested in the Linux agent image: up 30 minutes with no restart.
The test now waits 10 minutes, covering the first ~13 GB download.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The workflow introduces a robust boot-testing mechanism with isolated Docker networks and proper secret handling, enhancing deployment reliability.
Changes include adding containerUser support for games requiring specific UID/GID, and updating validation logic to check regex patterns and readyExamples.
The addition of readyPattern and failPatterns fields in game schemas enables more precise server readiness and failure detection during boot tests.
>_Automated AI Review_
Here's some quick feedback on your PR:
- The workflow introduces a robust boot-testing mechanism with isolated Docker networks and proper secret handling, enhancing deployment reliability.
- Changes include adding `containerUser` support for games requiring specific UID/GID, and updating validation logic to check regex patterns and readyExamples.
- The addition of `readyPattern` and `failPatterns` fields in game schemas enables more precise server readiness and failure detection during boot tests.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Adds
gbrgames exportand a CI step that posts every template to the control panel after validation onmain(X-GBR-Event: games_published). A failed publish fails the run, so stale templates in the panel never go unnoticed.Merge only after Gbreed/gbr-control-panel
feat/games-git-syncis deployed. The current panel ignores this event with a 202, which curl treats as success.Needs the org secret
PANEL_WEBHOOK_SECRET, which node-agent CI already uses.🤖 Generated with Claude Code
Only games whose folder changed are boot-tested (against the previous main commit, or against main on branches; manual runs pick games). Each one is deployed by the node-agent's real deploy code on a dedicated game-test runner, in a network that can reach the internet but not the LAN. Publishing to the panel runs only if they all booted. - boottest-payload builds the DEPLOY_SERVER message the panel would send - readyPattern/failPatterns in game.yaml; readyExample in test.yaml is checked against the pattern during validation - secrets in test.yaml come from CI; a game missing one is skipped - Minecraft gets a ready pattern; Dragonwilds needs DRAGONWILDS_OWNER_ID - RUNNER.md + scripts/runner: runner, isolated network, systemd unit Also fixes newline values ("\n" separators/footers) that yaml.v3 wrote as "" on import, which would have broken ARK and Dragonwilds config files once synced, and adds a round-trip test for the importer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>ARK's image is built around user gameserver (uid 25000) and locks /home/gameserver to it, so under the node's default 1000:1000 the startup script got "Permission denied" and the server restart-looped, on real nodes as well as in boot tests. Set containerUser 25000:25000 (needs node-agent and panel support for containerUser). The startup command read ${RCON_PORT}, but the node passes the RCONPort setting as RCONPORT, so custom RCON ports were ignored for 27020. Boot-tested in the Linux agent image: up 30 minutes with no restart. The test now waits 10 minutes, covering the first ~13 GB download. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Here's some quick feedback on your PR:
containerUsersupport for games requiring specific UID/GID, and updating validation logic to check regex patterns and readyExamples.readyPatternandfailPatternsfields in game schemas enables more precise server readiness and failure detection during boot tests.