ci: boot-test changed games before publishing
Validate game templates / validate (push) Successful in 9m32s
Validate game templates / publish (push) Canceled after 0s
Validate game templates / boot-test (push) Canceled after 5m15s

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>
This commit is contained in:
gregandClaude Opus 5.5 committed 2026-10-24 17:49:19 -04:00
1 parent 5fb7736be2
commit e9ff989246
21 files changed
+585 -18

No files matched your search

@@ -282,7 +282,7 @@ configFormatOptions:
footer: null
header: '[ServerSettings]'
quoteStrings: false
separator: ""
separator: "\n"
trueValue: "True"
unquotedKeys: []
uppercaseKeys: false
+4 -1
View File
@@ -239,7 +239,7 @@ configFormatOptions:
footer: ""
header: ""
quoteStrings: false
separator: ""
separator: "\n"
trueValue: "true"
unquotedKeys: []
uppercaseKeys: false
@@ -376,6 +376,9 @@ agnosticCommandConfig:
restPasswordKey: null
restPortKey: null
restUser: null
readyPattern: 'Done \([0-9.]+s\)! For help'
failPatterns:
- You need to agree to the EULA
backupPaths:
- world
- world_nether
+1
View File
@@ -2,4 +2,5 @@
# Values CI uses to boot-test this game. Never put real credentials here: map them under 'secrets'.
config:
EULA: true
readyExample: '[21:37:42 INFO]: Done (16.390s)! For help, type "help"'
timeoutSec: 900
@@ -88,11 +88,11 @@ configFileFormat: STANDARD
configFormatOptions:
assignment: =
falseValue: "False"
footer: ""
footer: "\n"
header: |
[/Script/Dominion.DedicatedServerSettings]
quoteStrings: false
separator: ""
separator: "\n"
trueValue: "True"
uppercaseKeys: false
agnosticCommandConfig:
@@ -1,3 +1,7 @@
# yaml-language-server: $schema=../../schema/test.schema.json
# Values CI uses to boot-test this game. Never put real credentials here: map them under 'secrets'.
# The server refuses to start without a real Player ID, so this test is skipped until the
# DRAGONWILDS_OWNER_ID Actions secret exists.
secrets:
OwnerId: DRAGONWILDS_OWNER_ID
timeoutSec: 2400
+1 -1
View File
@@ -155,7 +155,7 @@ configFormatOptions:
footer: ""
header: ""
quoteStrings: false
separator: ""
separator: "\n"
trueValue: "true"
unquotedKeys: []
uppercaseKeys: false