Idea: hardware test runners, so an approved PR test runs on a Steam Deck, AMD, Intel or 8 GB card without waiting for a person #2797
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot#2797
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Status (2026-11-12): research is in this comment; what the Discord discussion added (a security review's five conditions, the label trigger, five further ideas, next steps) is in this one. Nothing is registered anywhere; the first step is a pilot on a fork.
The idea
Suggested by Dr.Crow in Discord this morning, written down here so it is not lost: register testers' machines as self-hosted GitHub Actions runners, each labelled with its hardware (
steam-deck,amd-rdna4,intel-arc,nvidia-8gb,linux, ...), and let a workflow send a pull request's test to the hardware it needs. Today that step is a person or their agent picking a card from the test-request queue (#2734,docs/test-requests.md); a runner would do the same steps on a machine whose owner has opted in, whenever that machine is on.What a hardware job would do is what a tester does now: check out the approved head, build it on that machine with that machine's own dump, run a scripted windowless scene (the control bridge and
scripts/run-vkalready drive this), and report hardware, driver, the commit, numbers and log lines on the pull request.Why it would help: testing on other hardware is the slowest step (the reason #2734 exists). The queue made it visible; runners would take the waiting out for the machines that are always on.
What stands in the way, and what would answer it:
pull_request; onlyworkflow_dispatch(or a label) by a maintainer for one exact commit, which is the gate #2746 already set for test requests (testing wanted); just-in-time runners that take one job and are removed; the runner in its own OS user or container with no credentials and a read-only token; results posted by a separate job that never runs the pull request's code. The sandboxing hckrman101 mentioned for agents is the same problem.CONTRIBUTING.mdalready allows in a comment: numbers,hookshot_log.txtlines, screenshots. These jobs would be opt-in test jobs, not checks a merge waits for.A small first step that risks nothing upstream: one workflow file with
workflow_dispatchonly (inputs: the pull request, the commit, the hardware label, the scene), tried on a fork with one Linux desktop as the runner, to learn what the sandbox needs and how long a job takes. I can do that on my fork with my RTX 4090 / Intel UHD 770 PC and report here before anything is proposed for this repository.Anything else
Research findings (primary sources read 2026-11-12): this is feasible, but I recommend starting with an owner-controlled local consumer of the existing test-request queue, not registering home PCs upstream yet.
The important corrections to my initial sketch:
testing wantedlabel must not authorize every later push (current client).The least-exposed design separates the networked controller/publisher from the build and game: fresh restricted account/environment, private home and disposable saves, read-only dump, no network in the PR-code process, bounded resources, and a trusted fixed-format result filter. A separate GitHub-hosted job can comment without ever executing the PR's code. GPU-driver faults/escapes and false results remain possible; read-only access does not prevent reading and leaking a dump.
No raw logs or directory artifacts. Public Actions logs are readable by other GitHub users; upload only small, validated observations. Normal log excerpts and reviewed screenshots are allowed by our rules, but a malicious PR can change what they contain (project rule, log access).
Steam Deck is a separate proof, not a promised supported runner. Windows 11 is on GitHub's supported list; Arch/SteamOS are not. A home-folder installation avoids modifying SteamOS's read-only image, but dependencies/service persistence still need testing across updates. Each tester must build locally from their own dump; the guide's “about 40 minutes” is not a Deck benchmark (supported systems, Valve guidance, build guide).
Useful precedents: Dolphin's current build controller rejects untrusted automatic requests and accepts a trusted developer's rebuild request. Mesa uses Marge/manual farm testing, but its Docker-farm warning says in its own words that this lets "anyone on the internet run code on your device". Neither proves a volunteer's personal files are safe. ANGLE demonstrates permissioned routing by GPU and driver.
Extra hosted capacity is not an observed problem now. In 60 recent runs (13:04–13:42 UTC), 125 executed jobs from completed runs queued a median 3 seconds, maximum 73 seconds. Nine completed PR-head cohorts took 4.47–6.00 minutes wall time; summed job-minutes are a different measure. Example: source checks. This is a short sample, not a monthly usage audit.
GitHub's standard public-repository runners are free and unlimited in minutes. CircleCI offers 400,000 Linux OSS credits/month on Free, but its GPU classes require Scale and are NVIDIA. Neither cloud can hold a dump or supply the missing AMD/Intel/Deck coverage.
Suggested stages: local queue consumer first; then one confined just-in-time experiment on my own fork and PC, with results posted only to a test pull request there; upstream only after that proof and an explicit policy decision. I have a two-job workflow draft and the confinement/publication acceptance criteria to offer. Nothing has been installed, registered or run for this research.
Two decisions for maintainers:
What the Discord discussion added (
#dev-workand its thread, 2026-11-12), written down here so the issue stays the record. Corrections welcome from anyone I have summarised.A security review, from _trash.panda ("AppSec take: good idea"), who welcomed a pilot on a fork and offered to review its workflow. Before anything is registered on this repository:
pull_request, so a pull request cannot edit the workflow that runs it.nx2/,scripts/,tests/, workflows), since that runs on the tester's machine.From Dr.Crow, who made the original suggestion:
run-ci-on-hardware, optional and never blocking a merge, "to give folks a better idea of the impact of the PR on performance across the different sets of hardware".NitnekLeBorgne: in favour; "the major work will be about security".
Joe Staff asked what would run on a runner, given how long the game takes to build. The same steps a tester does by hand: build the approved commit from that machine's own dump, run a scripted scene without a window for a minute or three, report. A complete source build measured today: 14 min 55 s on an i9-13900K on Linux (#2793's description), 20.5 min on an i7-13700F on Windows (the latest cycle on #2595). So a cold job is roughly 20 to 40 minutes; rebuilding only what a pull request changed is much shorter, and that depends on how much of a previous build a runner may keep (see idea 1).
Ideas added in the thread
Where this stands
Thanks for writing the Discord discussion up, mooki. That covers the AppSec side. Two additions so the issue stays the full record:
Your idea 3, the exact label, is now a PR: #2807.
hardware: <name>label startsmain's copy of the workflow for the head commit at label time.It's inert until someone registers a runner, and a game-free test keeps those rules in place.
One correction to my own conditions, prompted by your research comment: a runner registered on this repository isn't protected by dispatch, labels or approvals. A PR can add its own
pull_requestworkflow that asks for the runner's labels and runs straight on it, past the gate and the sandbox. So:Your thread ideas, from the AppSec side:
Still happy to review the fork pilot's workflow. Tag me when it's up.