WIP: feat(home): build a pull request's version to help test it #59

Draft
gab9281 wants to merge 11 commits from gab9281/LongshotLauncher:feat/pr-builds into main
Member

Warning

This pull request is incomplete. Keep it in draft; don't merge it yet.

  • Never run from the launcher end to end: its parts have run on real files (below), but no one has yet picked a pull request in the launcher's window and played the build.
  • Seen on Linux only: nobody has run it on Windows or on a Steam Deck. The Windows builder's layout (its tools.lock beside LongshotBuilder/tools, its prebuilt third_party DLLs) is handled from its packaging script only.
  • No approval step: unlike the Test Farm, any open pull request out of draft can be built by a tester who names it. A maintainer should say whether that's enough (see Risk).
  • Untranslated: 21 new texts are missing from all 12 language catalogs, so they show in English.
  • Saves are shared: the separate saves the mock showed are not built; a tester is asked to export their saves first.
  • The compile and checks ran locally only: this repository's CI skips Compile and test on a pull request, so CI here checks only the title.

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: a tester names a pull request by its number or link, and the launcher builds it on their PC, beside their other versions.

It builds the way the Test Farm's agents do (Beanstalk): the pull request's source over tools.lock's tools. The earlier version of this PR waited for CI to publish signed pr- pre-releases. That CI was Longshot#353, now closed, and Longshot#283 keeps CircleCI artifacts only, so that design is gone, along with the pull request key it needed.

Requirements and source

  • Source: MagicBeanDev/Longshot issue 337, the idea and the mock.
  • Requires: nothing unmerged. The source comes from git.magicbean.dev's public archive API, and the tools from the newest nightly.

What changed

  • Picker (App/Views/ChannelPickerView.axaml, ChannelPickerViewModel): a Pull request choice beside the channels.
    • A box for its number (332, #332) or its link as copied from the browser, and Find (or Enter). There is no list to browse.
    • It can be picked when it is open, out of draft, and not labelled for the other system only. Otherwise it says which: merged, closed, a draft, or for Linux or Windows only.
    • The row shows "Builds 4c71d0e2 on this PC", or "You have it". Read opens it on git.magicbean.dev.
    • A warning that the code is unreviewed, built and run on this PC, and that saves are shared ("export them first").
  • Core:
    • Core/PullRequests.cs: one pull request from the public API (an error page counts as none), drafts as Longshot's CI reads them, the platform labels, and NumberOf.
    • Core/PullRequestSource.cs (new):
      • Checks the pull request is still open, out of draft and at the picked commit.
      • Installs the newest nightly's tools, through the usual signed path.
      • Downloads archive/<full hash>.tar.gz: about 20 MB, capped at 128 MB, plain files only, nothing outside its folder.
    • Toolchains.InstallPullRequest (new): makes toolchains/pr-<number>-<commit> from both. For what each part keeps, see docs/releases.md, "Pull request builds".
      • The nightly's tools, hard-linked.
      • The pull request's source, written as new files.
      • The nightly's native helpers, copied, never linked.
      • Refused when the pull request's tools.lock differs from the nightly's for this system.
    • ToolsSource: a pr- tag goes through PullRequestSource. The wizard's later steps are unchanged.
    • Versions and UpdatePolicy:
      • The pr track, the pr-<number>-<8 hex> names, and "PR #222 · 1a2b3c4d" as the shown name.
      • A pull request build's only update is a newer push of the same pull request; no channel's version updates to or from one.
  • Home (HomeView.axaml, HomeViewModel, LauncherService):
    • A pull request build's tag is marked pr and has a Read button.
    • Its update line reads "A newer push is out".
    • Its meta line says when the pull request was merged or closed.
    • The update check asks about the installed pull requests all at once, after the launcher's own update. A merged, closed or draft one is offered nothing.
  • Docs: docs/releases.md, "Pull request builds": the flow, the trust, and why it's built on the tester's PC.
  • Tests:
    • tests/launcher_core/PullRequestChecks.cs covers:
      • names, drafts, links and the platform labels;
      • Problem;
      • the archive reader, which refuses links, paths outside its folder and error pages;
      • InstallPullRequest, checking that:
        • the source replaces the nightly's, and a removed file is gone;
        • the helpers are copies;
        • Python is hard links, a link stays a link, and the run bit is kept;
        • the nightly is untouched, and can be deleted afterwards;
        • a different tools.lock is refused and leaves nothing.
    • tests/test_launcher_core.py: the pr entries in the track vectors.

Testing

Tested (Linux, .NET SDK 10.0.114, at HEAD):

  • 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>: 1345 checks pass.
  • python -I tests/test_release.py: OK.
  • scripts/translations.py: no faults.
  • Toolchains.InstallPullRequest on real files: the installed nightly-189-aa95d35f tools and the real archive of Longshot#206's head (962c5aad, 18 MB).
    • It took 0.5 s, and about 46 MB of new disk beside the nightly's 891 MB.
    • A game build with those tools: not run yet.

Not tested:

  • Everything in the incomplete list at the top.

Needs other testers: one pull request built from the picker on Linux and on Windows, then played.

Risk and rollback

  • Unreviewed code runs on the tester's PC, with the tester's rights: the pull request's build scripts and its game.
    • What the Test Farm adds: an approver's @Beanstalk, a signed ticket for that commit, and a sandbox.
    • What the launcher does instead: it trusts the tester's choice after a warning. It fetches only the commit git.magicbean.dev names as the head, by its full hash, over https, and only for an open pull request out of draft.
    • If that isn't enough: the launcher could also require the head to have an approving review, or a Beanstalk approval status. Maintainers, please say.
  • Saves are shared with the player's other versions; the picker asks to export them first. Separate saves, which the mock showed, are not in this PR.
  • Disk: each pull request's tools cost about 50 MB beside the nightly's. If no nightly build remains, the nightly's tools are pruned, and the next pull request downloads them again (about 900 MB).
  • Rollback: reverting the commits removes the picker. Installed pull request builds stay as versions the player can delete.

🤖 Generated with Claude Code

https://claude.ai/code/session_015KgSKp43znbyyPyDajp3Cm

> [!WARNING] > **This pull request is incomplete. Keep it in draft; don't merge it yet.** > > - **Never run from the launcher end to end:** its parts have run on real files (below), but no one has yet picked a pull request in the launcher's window and played the build. > - **Seen on Linux only:** nobody has run it on Windows or on a Steam Deck. The Windows builder's layout (its `tools.lock` beside `LongshotBuilder/tools`, its prebuilt `third_party` DLLs) is handled from its packaging script only. > - **No approval step:** unlike the Test Farm, any open pull request out of draft can be built by a tester who names it. A maintainer should say whether that's enough (see *Risk*). > - **Untranslated:** 21 new texts are missing from all 12 language catalogs, so they show in English. > - **Saves are shared:** the separate saves the mock showed are not built; a tester is asked to export their saves first. > - **The compile and checks ran locally only:** this repository's CI skips *Compile and test* on a pull request, so CI here checks only the title. ## 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: a tester names a pull request by its number or link, and the launcher builds it on their PC, beside their other versions. It builds the way the Test Farm's agents do ([Beanstalk](https://git.magicbean.dev/MagicBeanDev/Beanstalk)): the pull request's source over `tools.lock`'s tools. The earlier version of this PR waited for CI to publish signed `pr-` pre-releases. That CI was [Longshot#353](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/353), now closed, and [Longshot#283](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/283) keeps CircleCI artifacts only, so that design is gone, along with the pull request key it needed. ## Requirements and source - **Source:** [MagicBeanDev/Longshot issue 337](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/337), the idea and the mock. - **Requires:** nothing unmerged. The source comes from git.magicbean.dev's public archive API, and the tools from the newest nightly. ## What changed - **Picker** (`App/Views/ChannelPickerView.axaml`, `ChannelPickerViewModel`): a *Pull request* choice beside the channels. - A box for its number (`332`, `#332`) or its link as copied from the browser, and *Find* (or Enter). There is no list to browse. - It can be picked when it is open, out of draft, and not labelled for the other system only. Otherwise it says which: merged, closed, a draft, or for Linux or Windows only. - The row shows "Builds 4c71d0e2 on this PC", or "You have it". *Read* opens it on git.magicbean.dev. - A warning that the code is unreviewed, built and run on this PC, and that saves are shared ("export them first"). - **Core:** - `Core/PullRequests.cs`: one pull request from the public API (an error page counts as none), drafts as Longshot's CI reads them, the platform labels, and `NumberOf`. - `Core/PullRequestSource.cs` (new): - Checks the pull request is still open, out of draft and at the picked commit. - Installs the newest nightly's tools, through the usual signed path. - Downloads `archive/<full hash>.tar.gz`: about 20 MB, capped at 128 MB, plain files only, nothing outside its folder. - `Toolchains.InstallPullRequest` (new): makes `toolchains/pr-<number>-<commit>` from both. For what each part keeps, see docs/releases.md, "Pull request builds". - The nightly's tools, hard-linked. - The pull request's source, written as new files. - The nightly's native helpers, copied, never linked. - Refused when the pull request's `tools.lock` differs from the nightly's for this system. - `ToolsSource`: a `pr-` tag goes through `PullRequestSource`. The wizard's later steps are unchanged. - `Versions` and `UpdatePolicy`: - The `pr` track, the `pr-<number>-<8 hex>` names, and "PR #222 · 1a2b3c4d" as the shown name. - A pull request build's only update is a newer push of the same pull request; no channel's version updates to or from one. - **Home** (`HomeView.axaml`, `HomeViewModel`, `LauncherService`): - A pull request build's tag is marked `pr` and has a **Read** button. - Its update line reads "A newer push is out". - Its meta line says when the pull request was merged or closed. - The update check asks about the installed pull requests all at once, after the launcher's own update. A merged, closed or draft one is offered nothing. - **Docs:** `docs/releases.md`, "Pull request builds": the flow, the trust, and why it's built on the tester's PC. - **Tests:** - `tests/launcher_core/PullRequestChecks.cs` covers: - names, drafts, links and the platform labels; - `Problem`; - the archive reader, which refuses links, paths outside its folder and error pages; - `InstallPullRequest`, checking that: - the source replaces the nightly's, and a removed file is gone; - the helpers are copies; - Python is hard links, a link stays a link, and the run bit is kept; - the nightly is untouched, and can be deleted afterwards; - a different `tools.lock` is refused and leaves nothing. - `tests/test_launcher_core.py`: the `pr` entries in the track vectors. ## Testing **Tested** (Linux, .NET SDK 10.0.114, at HEAD): - `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>`: 1345 checks pass. - `python -I tests/test_release.py`: OK. - `scripts/translations.py`: no faults. - `Toolchains.InstallPullRequest` on real files: the installed `nightly-189-aa95d35f` tools and the real archive of [Longshot#206](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/206)'s head (962c5aad, 18 MB). - It took 0.5 s, and about 46 MB of new disk beside the nightly's 891 MB. - A game build with those tools: not run yet. **Not tested:** - Everything in the incomplete list at the top. **Needs other testers:** one pull request built from the picker on Linux and on Windows, then played. ## Risk and rollback - **Unreviewed code runs on the tester's PC**, with the tester's rights: the pull request's build scripts and its game. - **What the Test Farm adds:** an approver's `@Beanstalk`, a signed ticket for that commit, and a sandbox. - **What the launcher does instead:** it trusts the tester's choice after a warning. It fetches only the commit git.magicbean.dev names as the head, by its full hash, over https, and only for an open pull request out of draft. - **If that isn't enough:** the launcher could also require the head to have an approving review, or a Beanstalk approval status. Maintainers, please say. - Saves are shared with the player's other versions; the picker asks to export them first. Separate saves, which the mock showed, are not in this PR. - **Disk:** each pull request's tools cost about 50 MB beside the nightly's. If no nightly build remains, the nightly's tools are pruned, and the next pull request downloads them again (about 900 MB). - **Rollback:** reverting the commits removes the picker. Installed pull request builds stay as versions the player can delete. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015KgSKp43znbyyPyDajp3Cm
Build another version > A pull request: the open pull requests of Longshot, found by number or by
words of the title or author (fuzzy), the ones labelled "testing wanted" first, each with its build
and a Read button. A pull request's build is a pre-release pr-<number>-<commit> on no channel,
taken only with a pull request key that never stands in for the release key (none built in yet);
its one update is a newer push of the same pull request. docs/releases.md, "Pull request builds".

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
fix(release): release.download streams a large file with to=, as Longshot's
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
cbbe01bdfc
The same file in both repositories: Longshot's scripts/pr_builds.py downloads workflow artifacts with it (MagicBeanDev/Longshot pull request 353).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
fix(home): the picker compiles, and a word typed short matches within one word
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 2s
b4025c1e8d
- 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]>
Author
Member

b4025c1: the first compile found two faults, both fixed. ChannelPickerView.axaml declared xmlns:c twice, which is not valid XAML. The core's check caught the search's letters-in-order match running across the whole title and author, so hud matched 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.

b4025c1: the first compile found two faults, both fixed. ChannelPickerView.axaml declared `xmlns:c` twice, which is not valid XAML. The core's check caught the search's letters-in-order match running across the whole title and author, so `hud` matched 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.
feat(home): the pull request picker in a box of its own, drafts never listed
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
f81cd5fa15
- The search and the list sit in a box of their own (Border.prbox), set off from the channels above.
- A draft (Forgejo's mark, or a WIP: or [WIP] title, as Longshot's CI reads it: PullRequests.IsDraft) is never listed: CI
  builds none. Testing wanted is still on at first; off, every other open pull request shows. A row with no build says
  "Not built yet": every pull request out of draft gets one.
- The choice's line: help the team get a better-quality port by testing features before they are merged.
- docs/releases.md: the same (identical in Longshot's pull request 353).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
fix(home): the version picker stays inside the window
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 5s
4ae4e76a1c
With the pull request list open the picker grew past the window's 600 px, and Cancel and Build went off its bottom. The
dialog is now at most 560 px: its title stays at the top, Cancel and Build at the bottom, and the choices between them
scroll (the pull request list keeps its own, shorter scroll).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Author
Member

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.

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.
fix(home): the code review's findings on the pull request picker
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 5s
1abc2db50d
- The update check: the launcher's own update is checked before the pull requests, which are asked all at once; one that
  answers what cannot be read (an error page) is skipped, not the end of the check; a pull request whose builds are gone
  (closed, back to draft) is offered no update; and its newest build is its head's when there is one, not merely the one
  published last (a draft a failed run left is published again later).
- The picker: nothing is picked or built without a pull request key; the pick stays among the rows shown, so the query or
  the filter never leaves a hidden one to build; the rows are worked out once per change; and when the builds cannot be
  read, it says so with Try again instead of "Not built yet" everywhere.
- PullRequests reads twice for an answer that may come next time, as Releases does, and with ReleaseManifest's Opt.
- scripts/release.py: download(to=) leaves no part of a file behind when it fails (as Longshot's).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Author
Member

1abc2db fixes a /code-review high of 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 on 1abc2db (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.

1abc2db fixes a `/code-review high` of 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 on 1abc2db (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.
Author
Member

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.

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.
feat(home): the picker hides other systems' pull requests and shows first those fewest people looked at
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
f5a070e17d
- 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]>
Author
Member

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.

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.
Owner

I'm removing the testing wanted thing, so let's just make it accept number or URL

I'm removing the testing wanted thing, so let's just make it accept number or URL
gab9281 force-pushed feat/pr-builds from f5a070e17d
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
to ca8ea443cc
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
2026-11-15 18:35:14 +00:00
Compare
Author
Member

Done in ca8ea44, rebased on main e5c3675: the picker takes a number or a URL now.

  • The box takes 332, #332 or the pull request's link as copied from the browser (https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/332, its files tab, a comment's link). Another repository's or another server's link is refused. Find (or Enter) reads that one pull request and its newest build.
  • The Testing wanted filter and label are gone, along with the list, the search and the order by who has looked.
  • When the pull request can't be picked, the box says why: a draft, closed, merged, for the other system only, or no build yet.
  • tests/test_launcher_core.py passes (1341 checks) and the app builds with 0 warnings. The new box hasn't been run in the window yet, so the old screenshots are out of the description until new ones are taken.

One question for #353: the launcher no longer reads pull-requests.json (who has looked at each pull request). Should that count come out of Longshot#353 too?

Done in ca8ea44, rebased on main e5c3675: the picker takes a number or a URL now. - The box takes `332`, `#332` or the pull request's link as copied from the browser (`https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/332`, its files tab, a comment's link). Another repository's or another server's link is refused. *Find* (or Enter) reads that one pull request and its newest build. - The *Testing wanted* filter and label are gone, along with the list, the search and the order by who has looked. - When the pull request can't be picked, the box says why: a draft, closed, merged, for the other system only, or no build yet. - `tests/test_launcher_core.py` passes (1341 checks) and the app builds with 0 warnings. The new box hasn't been run in the window yet, so the old screenshots are out of the description until new ones are taken. One question for #353: the launcher no longer reads `pull-requests.json` (who has looked at each pull request). Should that count come out of Longshot#353 too?
Author
Member

Longshot#353 is closed: Longshot#283 (CircleCI) builds pull requests now, and main's builder workflows run on release runners only (#728). The description now says this PR still has to move its download, and its trust check, to #283's run artifacts. It stays a draft until then.

Longshot#353 is closed: Longshot#283 (CircleCI) builds pull requests now, and main's builder workflows run on `release` runners only (#728). The description now says this PR still has to move its download, and its trust check, to #283's run artifacts. It stays a draft until then.
docs(releases): no CI publishes pull request builds since Longshot#353 closed
Some checks failed
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Has been cancelled
7b0780b7a7
The Pull request builds section described #353's Forgejo workflows
(pr-build.yml, pr-publish.yml, the counts), which were closed: CircleCI
builds pull requests instead (Longshot#283), as run artifacts. It now
says what the launcher takes (signed pr- pre-releases) and that making
#283's builds installable is still to do. The comments in PullRequests
and ReleaseTrust follow.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_015KgSKp43znbyyPyDajp3Cm
gab9281 force-pushed feat/pr-builds from 7b0780b7a7
Some checks failed
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Has been cancelled
to 38f32b9f8a
Some checks are pending
CI / Conventional Commit title (pull_request) Waiting to run
CI / Compile and test (pull_request) Has been skipped
2026-11-15 19:32:21 +00:00
Compare
Some checks are pending
CI / Conventional Commit title (pull_request) Waiting to run
CI / Compile and test (pull_request) Has been skipped
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'feat/pr-builds:gab9281-feat/pr-builds'
git switch 'gab9281-feat/pr-builds'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/LongshotLauncher!59
No description provided.