Idea: opt-in hardware tests on self-hosted Forgejo runners #43
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
needs measurements
question
testing wanted
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot#43
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?
The idea
Let an approved test run on a volunteer's Steam Deck, AMD or Intel GPU, or smaller NVIDIA card without waiting for someone to perform every step by hand. Dr.Crow suggested the hardware queue; the proposal is now for self-hosted Forgejo runners, not GitHub Actions. Route by GPU, driver, OS and memory, and keep the existing test-request queue as the human-controlled fallback.
A job would build one approved commit using that machine's own dump, run a bounded scripted scene without a window, and return the exact commit, hardware, driver and reviewed observations. Nothing made from the game would be transferred between machines. A game-free GPU fixture would be a safer first workload: no dump, save or game build to protect.
What already exists, and what does not follow from it: the open release migration moves ordinary checks and releases to Forgejo Actions. Its runner guide asks for
ubuntu-latest,ubuntu-24.04andwindows-2022; these are workflow requirements, not a hardware inventory. The launcher has Actions enabled and a checks job waiting forubuntu-latest. Neither establishes a working AMD, Intel or Deck lane. The runner inventory is not public, and Longshot's current contribution guide still says to run the checks locally. This proposal is an additional opt-in hardware service, not a claim that the release runners already provide it.The security conditions from the earlier discussion still apply:
nx2/,scripts/,tests/, workflows and dependencies, not only the proposed game fix. The build is untrusted code too.Runner placement is a separate boundary. Forgejo's security guide says runners can be selected from the instance, organization or repository, and host-mode runners have no real isolation. Trusted PR authors can supply workflow changes. A hardware label or a dispatch-only file therefore does not stop another eligible workflow selecting that runner. Start with an owner's fork or dedicated private-control repository, used only for trusted workflows; do not register a personal PC at the shared organization or upstream repository merely because the intended workflow is gated. Any later upstream service needs a demonstrated allocation boundary. Release/signing jobs must not share a potentially compromised PR-test environment.
Anything else
A small first step: an owner-controlled consumer of the existing test queue, then one game-free Forgejo pilot on my fork and PC. I can offer Linux on an RTX 4090 and Intel UHD 770. Only after its confinement and publication path have been reviewed would I propose a dump-using pilot. Dedicated devices come before daily-use PCs; SteamOS, Windows, GPU access and persistence through updates need their own proof. There is no Deck build-time promise here.
Reuse other work rather than add parallel infrastructure: the sanitizer proposal is game-free, while the live/restart A/B proposal could supply a reviewed workload if it lands. Neither is a hardware-runner security gate. Extra cloud CI capacity is a different question; the old GitHub minutes and queue measurements do not establish a Forgejo bottleneck.
Questions for the maintainers:
Moved from NotRexed/Hookshot#2797.
Discussion carried over from NotRexed/Hookshot#2797
Every comment that was readable on the original thread when it was copied on 2026-11-12, in order, unchanged except that issue and pull request numbers are written as links to the old repository and names carry no @. Comments by an account that has since been closed there could no longer be read and are missing; where a reply quotes them, the quote remains.
mooki000, 2026-11-12 14:10 UTC (comment, original):
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:
mooki000, 2026-11-12 14:46 UTC (comment, original):
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 (NotRexed/Hookshot#2793's description), 20.5 min on an i7-13700F on Windows (the latest cycle on NotRexed/Hookshot#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
Joey-Magnus, 2026-11-12 14:51 UTC (comment, original):
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.