Idea: install a pull request's build from the Longshot Launcher, to help test it #337
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot#337
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 anyone who wants to help test a pull request install its build from the Longshot Launcher: Build another version > A pull request, pick the PR by number or title, and the launcher installs that PR's builder and builds the game with it, next to their other versions. Today a tester has to check out the PR and build it from source (
forge.py pr checkout, docs/development.md), which only developers can do, so most of the hardware we need runs on (AMD, Steam Deck, 4–8 GB cards, Windows) never sees a PR before it is merged.Where it stands
pr-<n>-<8 hex>, signed with a separate pull request key (never the release key). It also publishespull-requests.json(releasepull-requests): how many people other than the author have commented on or reviewed each open PR.How it works
332,#332) or words of the title or author, as typed or as letters in order within one word (rendr targts).platform/windowson Linux;platform/linuxorplatform/steam-deckon Windows).pr-build with the pull request keys only, and a channel's build with the release key only.What must stay true
tools.lock.V2
Mocks, not built: none of this is in #353 or LongshotLauncher PR 59. The screens are from a throwaway prototype of the launcher (Linux, a test home with placeholder builds; the pull requests and their CI states are the real ones of 2026-11-14).
Saves of its own per PR build. Each PR build plays with its own user folder (
--user, on both systems),longshot-pull-requests/<n>beside the shared one. The first time it starts, the sharedsavefolder is copied there; after that the build never touches the player's saves. A newer push keeps them; they go with its last build. (V1: the saves are shared and the picker asks to export them first.)How did it go?, after the game closes. Like the crash window: when a PR build's game exits normally (a crash is the crash window's), the launcher comes to the front and asks. The launcher has no sign-in, so it posts nothing itself: it copies the report and opens the PR for the tester to paste it under their own name. Also on the build's row.
PR merged or closed: delete? Once its PR is merged or closed, a PR build gets no more pushes, so its row asks PR merged, delete this build? (or PR closed, …) with a Delete button. It opens the usual confirmation, which says its own saves go with it; nothing is deleted without that click, and the build stays until then. Read and How did it go? sit on the same line, so the row's actions fit (in V1 Read runs off the row). The screen is the prototype's, where that button was still Move to nightly:
The pull requests on a page of their own, with ‹ Channels to go back, and the keyboard kept inside every dialog: Tab goes round the dialog's controls only (today it walks into the home behind it, so Enter can press Play unseen), and a page change puts the focus on the new page's first control.
Say where CI is with the newest push rather than Not built yet: Waiting to be built, Building now, Ready in a few minutes (built, waiting for the next publish), Its build failed, from
pr-build.yml's runs in the public actions API. Below, a real one:The tester's hardware first, marked your hardware: PRs labelled for their GPU makers (
gpu/amd,gpu/nvidia,gpu/intel,gpu/igpu) orplatform/steam-deckon a Deck (found by its board,board_vendor= Valve), then the rest in their order. (No open, non-draft PR has this PC's labels today, so no screen.)Sign only the PRs a maintainer let through. CI keeps building every non-draft PR, but
pr-publish.ymlsigns and publishes only those withtesting wanted, or whose author is in a repository variablePR_TRUSTED_AUTHORS(the job's token cannot ask Forgejo who may push). A build whose PR loses the label is deleted. The review of #353 ranked an unreviewed PR getting a signed build its top risk.Tell the PR you're testing it (opt-in): the tester signs in with their git.magicbean.dev account from the launcher, and a short comment goes on the PR from their account, which counts them among the people who looked. Needs an OAuth app registered on git.magicbean.dev (an admin's to make), so it has no mock.
Screenshots (V1)
The launcher from LongshotLauncher PR 59 on Linux (KDE, 125%), against git.magicbean.dev's open PRs. No PR build is published yet and this launcher has no pull request key, so every row says Not built yet and none can be picked.
Build another version, the new choice:
Testing wanted on (the default):
Testing wanted off: every open PR that is not a draft. The dialog stays inside the window and its choices scroll:
A search,
vk:The first mock, for the home with a PR build installed (not built yet; its labels, states and commits are made up):
Anything else
Related: #44 (local problem reports), the test requests (docs/test-requests.md), docs/releases.md.
Two additions:
longshot_vk.dllas the run's artifacts. That is step 1 here; what's left is where the launcher downloads them from and how it trusts them.332,#332) or words of the title or author (hud light,dlss), fuzzy. The launcher reads the open PRs once (GET /repos/MagicBeanDev/Longshot/pulls?state=open, no sign-in needed) and matches locally. A Testing wanted filter is on by default, and each PR has a Read button that opens it on git.magicbean.dev. A PR the launcher can't install stays in the list, greyed out, with the reason (no label yet, still building).Yes, definitely something we should add!
For the ci : tester wanted only or non-draft pr ?
Both halves are open:
testing wantedby default, with a Read button on each. It requires 353.A concrete case for this idea: co-op (#355) needs many testers before it can be reviewed, and today they have to build it from source. The discussion on how to get it to them is in #463 .
One question for #353 that follows from it: it builds pull requests that are not drafts, and 355 is a draft that will stay one for a while. Could a draft be opted in, for example with a label a maintainer adds, so that long-running work can use the same route?