WIP: feat(home): build a pull request's version to help test it #59
No reviewers
Labels
No labels
area/build
area/install
area/saves
area/ui
area/updates
good first issue
gpu/amd
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
platform/linux
platform/steam-deck
platform/windows
priority
critical
priority
high
priority
low
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/LongshotLauncher!59
Loading…
Reference in a new issue
No description provided.
Delete branch "gab9281/LongshotLauncher:feat/pr-builds"
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?
Why
To try a Longshot pull request today, a tester has to check it out and build it from source, so most of the hardware we need never runs a change before it is merged. This adds Build another version > A pull request to the launcher, to help the team get a better-quality port by testing features before they are merged: a tester picks a pull request by number or title, filtered to testing wanted by default (drafts are never listed), and the launcher installs the builder CI made of it.
Requirements and source
pr-<number>-<8 hex>pre-releases signed with the pull request key. Until it is merged and the key is made (RELEASING.md there, "The pull request key"), this picker lists pull requests but installs none, and says why.What changed
App/Views/ChannelPickerView.axaml,ChannelPickerViewModel): a Pull request choice beside the channels.332,#332) or words of the title or the author, either as typed or as letters in order within one word (rendr targts).WIP:or[WIP]title, as Longshot's CI reads it) are never listed, since CI builds none.platform/windowson Linux;platform/linuxorplatform/steam-deckon Windows). A search that finds only those says so.pull-requests.json(PR 353); without that file, the list is oldest first.Core/PullRequests.cs: the open pull requests from the public API (read twice when an answer may come next time, as the release list is), the fuzzy match, and the newest build of each: the build of the pull request's head when there is one, else the one published last.Versions: theprtrack, thepr-<number>-<8 hex>tags, and "PR #222 · 1a2b3c4d" as the shown name.UpdatePolicy: a pull request build's only update is a newer build of the same pull request; no channel's version updates to or from one.ReleasesandReleaseTrust:pr-tags are verified with the pull request keys only, never the release key, and vice versa.ReleaseKeys.PullRequestBuiltInis empty until a maintainer adds the key.LONGSHOT_LAUNCHER_PR_TRUSTadds one key for a test key.HomeView.axaml,HomeViewModel,LauncherService):prand has a Read button.scripts/release.py'sdownload(to=)streams a large file, and leaves nothing behind when it fails. The file is kept identical to Longshot's, which PR 353 changes.docs/releases.md, "Pull request builds", identical to Longshot's copy in PR 353.tests/launcher_core/PullRequestChecks.cs: tags, drafts, update policy, key separation, list and one parsing (an error page is none), newest builds (the head's first), and match order.tests/test_launcher_core.py: theprentries in the track vectors.Testing
Tested (Linux, .NET SDK 10.0.114, at
f5a070e):dotnet build LongshotLauncher.slnx --configuration Release -p:RestoreLockedMode=true, as CI runs it: 0 warnings, 0 errors.python -I tests/test_launcher_core.py --strict --longshot <Longshot main>: passes, withPullRequestChecksamong the core's checks.python -I tests/test_release.py: 28 tests, OK.scripts/translations.py: no faults./code-review highof the whole pull request: its 10 findings are fixed in1abc2db.1abc2dbon Linux: the picker opens, lists, filters and searches, and the dialog stays inside the window (Screenshots).This repository's CI skips Compile and test on a pull request, so on this PR it checks only the title; the runs above are local.
Not tested:
Needs other testers: once a pull request build is published, one install from the picker on Linux and on Windows.
Screenshots
The launcher at
1abc2dbon Linux (KDE, 125% scale), against git.magicbean.dev's open pull requests. No pull request 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 (the default): only the pull requests a maintainer labelled.
Testing wanted off: every open pull request that is not a draft. The dialog stays inside the window, and its choices scroll.
A search:
vk.Risk and rollback
🤖 Generated with Claude Code
- ChannelPickerView.axaml declared xmlns:c twice (Avalonia AVLN1001: not valid XAML). - PullRequests.Match: letters in order are looked for within one word of the title or the author, from its first letter ("rendr" is "render"); across the whole title "hud" matched "their ... amateurwizrd", which the core's check caught. Co-Authored-By: Claude Opus 5.5 <[email protected]>b4025c1: the first compile found two faults, both fixed. ChannelPickerView.axaml declaredxmlns:ctwice, which is not valid XAML. The core's check caught the search's letters-in-order match running across the whole title and author, sohudmatched an unrelated pull request; it now matches within one word, from its first letter. Locally the Release build has 0 warnings, and test_launcher_core.py --strict and test_release.py pass. This repository's CI skips the compile on pull requests.f81cd5f,4ae4e76, from trying the picker: the search and the list sit in a box of their own; a draft (Forgejo's mark, or a WIP: or [WIP] title) is never listed, and Testing wanted stays on by default, showing every other open pull request when it is off; the choice now reads "Help the team get a better-quality port by testing features before they are merged"; and the dialog is at most 560 px tall, so Cancel and Build no longer go past the window's bottom (the choices scroll). Release build 0 warnings; test_launcher_core.py --strict and test_release.py pass.1abc2dbfixes a/code-review highof the whole pull request (10 findings). The update check now checks the launcher's own update first and asks about installed pull requests all at once; an error page about one is skipped rather than failing the check; a pull request whose builds were deleted is offered no update; and a pull request's newest build is its head's. The picker never builds a pull request the search or filter hides, picks nothing without a pull request key, says so when the builds can't be read, and works out its rows once per change. PullRequests also retries a transient failure, and release.py's download(to=) leaves no partial file. Release build: 0 warnings. test_launcher_core.py --strict and test_release.py pass, and CI passed on1abc2db(the title only: this repository's CI skips compiling on pull requests).Still incomplete, and kept in draft. The description now opens with what is missing: Longshot PR 353 and the pull request key, an end-to-end install, Windows, real screenshots, the translations, and separate saves.
Real screenshots of the picker at
1abc2db(Linux, KDE) replace the mock in the description: the new choice, Testing wanted on (the default), off (every pull request that isn't a draft), and a search. Still a draft: see the incomplete list at the top.- A pull request labelled for the other system only is not listed: platform/windows on Linux, platform/linux or platform/steam-deck on Windows (PullRequest.For); one with neither label, or both, is. A search that finds only those says so ("Only pull requests for Windows match: #12."). - The order: those the fewest people other than their author have commented on or reviewed first, then the oldest (PullRequests.Order), from Longshot's pull-requests.json (PullRequests.CountsAsync: its pull request 353's counts); without that file, the oldest first. A pull request's Created is read from the list. - docs/releases.md: the same as Longshot's copy. Co-Authored-By: Claude Opus 5.5 <[email protected]>f5a070e: a pull request labelled for the other system only is no longer listed (platform/windows on Linux; platform/linux or platform/steam-deck on Windows), and a search that finds only those says so. The order now puts first the pull requests the fewest people other than their author have looked at, then the oldest, from Longshot's pull-requests.json (PR 353's counts); without that file, oldest first. Release build 0 warnings; the core checks, with new ones for the platform rule, the counts file and the order, pass; CI passed. Still a draft.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.