feat(release): big download links in the README and on every release page, through magicbean.dev's permanent links #15

Merged
HumanBean merged 2 commits from HumanBean/LongshotLauncher:download-links into main 2026-11-13 07:27:23 +00:00
Owner

Why

Players should find one big "Download" for the launcher, the newest on their channel, instead of a list of files on the releases page; and a release page should start with its own download buttons. This adds both, through permanent links on longshot.magicbean.dev.

What changed

  • README, Download: big Download for Windows / Download for Linux (AppImage) links and the portable zip, through https://longshot.magicbean.dev/download/launcher/<os> (the best channel there is: stable, else rc, else nightly); each channel's links below; the file list as a list, not a table; and "the builder files on Longshot's releases are for the launcher, not for you".
  • release: scripts/release.py publish puts a header above git-cliff's notes (page_header, release_page). A launcher release starts with "⬇️ Download Longshot Launcher": big links to its own setup.exe and AppImage, the portable zip below, and a one-line how-to. A Longshot release starts with "🎮 To play, get the Longshot Launcher", linking the newest launcher of the same channel, and "Don't download the files below". The format is the one hand-written on v1.0.0-rc.1 and Longshot v3.0.0-rc.1.
  • tests: tests/test_release.py, ReleasePage: each header on each channel, for both products, and publish writing it.
  • docs: docs/releases.md (Release notes, and a new Download links section) and RELEASING.md.
  • scripts/release.py, tests/test_release.py, docs/releases.md and RELEASING.md are byte-identical with Longshot's (its PR: MagicBeanDev/Longshot#148).

The permanent links are served by longshot.magicbean.dev: the Longshot website (website/ in MagicBeanDev/Longshot)#7.

Flags and settings

None.

Measurements

No change to the launcher's code: the measurement is the checks, main and this PR interleaved.

main: b6579c30 (2026-11-13)
this PR: download-links @ 5c2b840c
Hardware: CachyOS (Linux 7.3), 24 threads, .NET SDK
Scene: none (no game)
Method: python -I tests/test_release.py and python -I tests/test_launcher_core.py, run main, PR, main, PR
How to reproduce: the commands above in a checkout of each commit

main @ b6579c30 this PR @ 5c2b840c
test_release.py, runs 1 and 2 24 tests OK, 24 OK 27 tests OK, 27 OK
test_launcher_core.py, runs 1 and 2 536 checks passed, 536 536 checks passed, 536
release: Ran 27 tests ... OK; launcher core: 536 checks passed

Testing

Tested: the checks above; the README section and both headers rendered by git.magicbean.dev's Markdown renderer (screenshots below); every magicbean.dev link used, against the Site PR under wrangler dev with the real release list (/download/launcher/{windows,windows-portable,linux} and /rc/* go to v1.0.0-rc.1's files, /nightly/* to the newest nightly's, /stable/* answers 404 "No stable launcher yet" with a button to the rc).

Not tested: a real release run of publish (the fake Forgejo in the release tests covers it; the next nightly will be the first page made this way); the live longshot.magicbean.dev links, not deployed yet.

Needs other testers: None

Screenshots

The README's Download (rendered by git.magicbean.dev):

README, Download

A launcher release page as release.py writes it (a nightly, sample notes):

Launcher release page

A Longshot release page (v3.0.0-rc.1, sample notes):

Longshot release page

Risk and rollback

The README's magicbean.dev links don't work until the Site PR is merged (a merge to the Site's main deploys it). Merge the Longshot website (website/ in MagicBeanDev/Longshot)#7 first, check https://magicbean.dev/download, then this. The launcher's own release pages link their files on git.magicbean.dev directly, so they work either way. Reverting the commit restores the old README and plain notes.

Reviewer notes

Start with page_header in scripts/release.py. Merge together with the Longshot PR so the shared files stay identical.

This repository has no tests/run_all.py: the checklist's run_all box stands for tests/test_release.py and tests/test_launcher_core.py, as in CI.

Issues

None.

Checklist

For everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description).
  • Rebased on current main.
  • python -I -B tests/run_all.py run and passing (any failure that also fails on main is named above).
  • Tested in the game, or what wasn't is named under Testing.
  • Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests).
  • Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported.
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

If applicable

  • Screenshots for a change that shows on screen.
  • A game-free test added for the fix, failing on main and passing here.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Docs updated.
## Why Players should find one big "Download" for the launcher, the newest on their channel, instead of a list of files on the releases page; and a release page should start with its own download buttons. This adds both, through permanent links on longshot.magicbean.dev. ## What changed - README, *Download*: big **Download for Windows** / **Download for Linux (AppImage)** links and the portable zip, through `https://longshot.magicbean.dev/download/launcher/<os>` (the best channel there is: stable, else rc, else nightly); each channel's links below; the file list as a list, not a table; and "the builder files on Longshot's releases are for the launcher, not for you". - release: `scripts/release.py` `publish` puts a header above git-cliff's notes (`page_header`, `release_page`). A **launcher** release starts with "⬇️ Download Longshot Launcher": big links to its own setup.exe and AppImage, the portable zip below, and a one-line how-to. A **Longshot** release starts with "🎮 To play, get the Longshot Launcher", linking the newest launcher of the same channel, and "Don't download the files below". The format is the one hand-written on v1.0.0-rc.1 and Longshot v3.0.0-rc.1. - tests: `tests/test_release.py`, `ReleasePage`: each header on each channel, for both products, and `publish` writing it. - docs: `docs/releases.md` (*Release notes*, and a new *Download links* section) and `RELEASING.md`. - `scripts/release.py`, `tests/test_release.py`, `docs/releases.md` and `RELEASING.md` are byte-identical with Longshot's (its PR: MagicBeanDev/Longshot#148). The permanent links are served by longshot.magicbean.dev: the Longshot website (website/ in MagicBeanDev/Longshot)#7. ## Flags and settings None. ## Measurements No change to the launcher's code: the measurement is the checks, main and this PR interleaved. main: b6579c30 (2026-11-13) this PR: download-links @ 5c2b840c Hardware: CachyOS (Linux 7.3), 24 threads, .NET SDK Scene: none (no game) Method: `python -I tests/test_release.py` and `python -I tests/test_launcher_core.py`, run main, PR, main, PR How to reproduce: the commands above in a checkout of each commit | | main @ b6579c30 | this PR @ 5c2b840c | |---|---|---| | test_release.py, runs 1 and 2 | 24 tests OK, 24 OK | 27 tests OK, 27 OK | | test_launcher_core.py, runs 1 and 2 | 536 checks passed, 536 | 536 checks passed, 536 | ``` release: Ran 27 tests ... OK; launcher core: 536 checks passed ``` ## Testing **Tested:** the checks above; the README section and both headers rendered by git.magicbean.dev's Markdown renderer (screenshots below); every magicbean.dev link used, against the Site PR under `wrangler dev` with the real release list (`/download/launcher/{windows,windows-portable,linux}` and `/rc/*` go to v1.0.0-rc.1's files, `/nightly/*` to the newest nightly's, `/stable/*` answers 404 "No stable launcher yet" with a button to the rc). **Not tested:** a real release run of `publish` (the fake Forgejo in the release tests covers it; the next nightly will be the first page made this way); the live longshot.magicbean.dev links, not deployed yet. **Needs other testers:** None ## Screenshots The README's *Download* (rendered by git.magicbean.dev): ![README, Download](https://git.magicbean.dev/HumanBean/LongshotLauncher/raw/branch/pr-assets-download-links/readme-launcher.png) A launcher release page as `release.py` writes it (a nightly, sample notes): ![Launcher release page](https://git.magicbean.dev/HumanBean/LongshotLauncher/raw/branch/pr-assets-download-links/release-launcher.png) A Longshot release page (v3.0.0-rc.1, sample notes): ![Longshot release page](https://git.magicbean.dev/HumanBean/LongshotLauncher/raw/branch/pr-assets-download-links/release-longshot.png) ## Risk and rollback **The README's magicbean.dev links don't work until the Site PR is merged** (a merge to the Site's main deploys it). Merge the Longshot website (website/ in MagicBeanDev/Longshot)#7 first, check `https://magicbean.dev/download`, then this. The launcher's own release pages link their files on git.magicbean.dev directly, so they work either way. Reverting the commit restores the old README and plain notes. ## Reviewer notes Start with `page_header` in `scripts/release.py`. Merge together with the Longshot PR so the shared files stay identical. This repository has no `tests/run_all.py`: the checklist's run_all box stands for `tests/test_release.py` and `tests/test_launcher_core.py`, as in CI. ## Issues None. ## Checklist ### For everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`). - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` run and passing (any failure that also fails on `main` is named above). - [x] Tested in the game, or what wasn't is named under Testing. - [x] Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests). - [x] Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### If applicable - [x] Screenshots for a change that shows on screen. - [x] A game-free test added for the fix, failing on `main` and passing here. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [x] Docs updated.
feat(release): big download links in the README and on every release page, through magicbean.dev's permanent links
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
79619d1226
HumanBean changed title from WIP: feat(release): big download links in the README and on every release page, through magicbean.dev's permanent links to feat(release): big download links in the README and on every release page, through magicbean.dev's permanent links 2026-11-13 07:10:42 +00:00
fix(release): the download links are on longshot.magicbean.dev
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
5c2b840c4d
HumanBean deleted branch download-links 2026-11-13 07:27:23 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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!15
No description provided.