Files
gbr-games/schema/test.schema.json
T
gregandClaude Opus 5.5 87dfca1285 feat(boot-test): test.yaml unboundPorts for ports opened only when a player connects
The first real run of the port check found that the crossplay Minecraft
server opens no UDP socket at startup: Bedrock goes through Geyser's
NetherNet transport, and 19132/udp is not open after boot. It is listed as
unboundPorts in that game's test.yaml, with the reason, until a Bedrock
client confirms how players reach it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 00:05:37 -04:00

49 lines
2.1 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://www.gitea.gbreed.com/gbreed-public/gbr-games/raw/branch/main/schema/test.schema.json",
"title": "GBR Hosting game boot-test fixture",
"description": "Values CI uses when boot-testing a template. Never put real credentials here: map them to a Gitea Actions secret under 'secrets'.",
"type": "object",
"additionalProperties": false,
"properties": {
"config": {
"description": "Config values for the test server, layered on top of defaultConfig (e.g. EULA: true).",
"type": "object",
"propertyNames": { "pattern": "^[a-zA-Z0-9_.-]+$" }
},
"secrets": {
"description": "Config key -> name of a Gitea Actions secret. If a secret is missing, the boot test is skipped, not failed.",
"type": "object",
"propertyNames": { "pattern": "^[a-zA-Z0-9_.-]+$" },
"additionalProperties": { "type": "string", "pattern": "^[A-Z][A-Z0-9_]*$" }
},
"timeoutSec": {
"description": "How long to wait for the server to become ready, including install.",
"type": "integer",
"minimum": 60,
"maximum": 7200
},
"readyExample": {
"description": "A real console line from a server that is ready. Validation checks the game's readyPattern matches it, so a broken pattern fails in seconds instead of timing out a boot test.",
"type": "string"
},
"settleSec": {
"description": "For games without a readyPattern: how long the server must stay up after starting to pass.",
"type": "integer",
"minimum": 10,
"maximum": 3600
},
"unboundPorts": {
"description": "Published ports the server only opens once a player connects, so the boot test doesn't expect them open. Each one exactly as in defaultPorts, with the reason in a comment.",
"type": "array",
"items": { "type": "string" }
},
"holdSec": {
"description": "How long the server must stay up after its ready line to pass (default 60). Its published ports are checked after it.",
"type": "integer",
"minimum": 0,
"maximum": 3600
}
}
}