test(harness): add containerized x86 dev/test harness#95
Merged
Conversation
Run the four managers, the gateway, nginx and the built UI on x86 in containers, with a synthetic go2rtc camera and a pymavlink heartbeat stub standing in for the flight controller — so UI and manager changes can be exercised with no hardware and no reflash.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
test/: a containerized way to run the ARK-OS userspace stack and web UI on an x86 dev machine — no camera, no flight controller, no reflash.Problem
Verifying UI or manager changes meant cutting a release tag, rebuilding the ark_jetson_kernel image, and reflashing — a slow loop for what is mostly userspace work. Nothing let the deb/UI run off-device, and the stack assumes real hardware (camera, FC serial, Jetson/Pi GPIO).
Solution
One app container runs the four FastAPI managers, the Express gateway, nginx and the built Vue UI on shared localhost (mirroring the device), alongside a go2rtc sidecar whose camera is a synthetic ffmpeg test pattern. A pymavlink heartbeat stub stands in for the flight controller so the Autopilot page connects, and small
systemctl/journalctlshims let the Services page work without systemd.bash test/run.sh upbuilds and starts everything (no Compose or buildx required); the UI is served at http://localhost:8080. The Connections page (nmcli) is the one degraded surface — documented in the README along with how to swap the FC stub for PX4 SITL. A root.dockerignorekeeps the build context lean.