Skip to content

Add build verification and isolated Minecraft puppet CI - #617

Draft
TeamDman wants to merge 17 commits into
1.19.2from
ci/1.19.2-container-puppet
Draft

TeamDman wants to merge 17 commits into
1.19.2from
ci/1.19.2-container-puppet

Conversation

@TeamDman

@TeamDman TeamDman commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

The 1.19.2 branch lacked a reproducible build check, and a future Discord help worker needs to run the actual modded client without exposing the Windows host to each session. This PR adds Linux and Windows verification with the canonical sfm-propagate-changes CLI, uploads the built mod, and runs the existing title and GameTest puppets inside an isolated Linux container with Xvfb and Mesa software graphics. Feature-branch pushes and PR merge checkouts both run; the busy 1.19.2 checkout is untouched.

The container is prepared with network access, then starts fresh clients offline. The smoke worker uses UID 10001, no capabilities or privilege escalation, seccomp, a read-only root, no host mounts, GPU or engine socket, and CPU, memory, PID and wall-time limits. It requires the raw game completion marker, the item-transfer GameTest pass, and exactly three title plus eight orbit PNGs. Failed runs retain bounded diagnostics, and stale evidence cannot satisfy a retry. The same smoke script now supports local Podman; its empty bounded tmpfs mounts avoid Podman's default copy-up of multi-gigabyte image build caches.

The frozen Vox Java artifact exposed a late-credit race. Its repair is published in Facet PR #2 and pinned here by exact commit and JAR hash; all other dependency declarations remain unchanged. Three asynchronous test assertions now wait for the event they actually observe. A bounded Linux JUnit watchdog writes thread stacks to the existing always-uploaded diagnostics; its six snapshots identified a production Explorer deadlock. The loader now claims one terminal result under its handle lock and completes callbacks after releasing it, so session cancellation cannot invert the locks. Failed release-review surface futures are evicted on lookup as well as by completion callback, so a retry cannot reuse an already-failed result. The canonical test command and 15-minute CI limit are unchanged.

Validation:

  • Hosted Linux and Docker passed at source d7e22e73e: 2,075 Java tests passed, one Windows-only skip, six existing opt-in prerequisite aborts, verified mod JAR, and both offline game puppets with 11 decoded PNGs. The cold prepared-image build took 19m12s and the two client launches together took 3m42s.
  • Hosted Windows passed at the same source: 2,076 Java tests and package verification, with zero failures and the same six opt-in aborts. The new Vox JAR bytes match Linux; full mod archives differ in text line endings, manifest timestamp and compiler debug offsets.
  • Local rootless Podman 6.0.2 on WSL passed at image source 01b239124: default-container DNS and HTTPS worked, while --network none blocked DNS and direct-IP egress. Xvfb/Mesa reported llvmpipe OpenGL 4.5. The offline worker logged move_1_stack_direct passed!, produced 3 title and 8 orbit PNGs, exited 0 without OOM, and left no container or anonymous volume. The settled title and final orbit images were visually inspected.
  • At 73ead2d0a, the PR Linux and PR Windows workflows fully passed. Later Linux diagnostics exposed the Explorer lock cycle and a Windows PR run exposed the failed-surface cache race. The six new lock regressions all fail against the original loader and pass with the fix. In local rootless Podman, the focused loader suite passed 19/19, review-surface suite 6/6, and the full canonical suite passed 2,081 tests with zero failures, one skip and six existing optional-prerequisite aborts (2,088 found). The Podman wrapper lifecycle tests, 11 evidence-verifier regressions, JUnit watchdog lifecycle test, actionlint, and git diff --check also pass. At final head 5dbbaeae9, both Linux PR and Linux push workflows fully passed: 2,081 Java tests, verified mod JAR, graphics isolation, and both offline game puppets with 11 PNGs. Both Windows PR and Windows push workflows fully passed: 2,082 Java tests and package verification. All hosted suites had zero test failures; the six optional-prerequisite aborts remain expected.

Discord and Kubernetes wiring remain future integration work. A help bot should use a separate controller and token, bounded inputs and outputs, prebuilt trusted images, and a readiness check before selecting an orbit frame; the first frame can catch incomplete geometry. The anonymous workspace has no disk quota, and arbitrary executable uploads would need a stronger sandbox. No game process ran directly on the Windows host and neither draft PR was merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant