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

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

Why

Players download the wrong file: the README names a launcher file that doesn't exist (…-windows-x64.exe), and Longshot's release pages list only the builder files, which players should never download. This puts big launcher download links on top of the README and of every release page, through permanent links that always point at the newest launcher.

What changed

  • README, Install and play: a big Download Longshot Launcher block on top (Windows, Linux, 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 it, and "Download the launcher, not the builder". The Windows step names the real files (…-windows-x64-setup.exe, and the portable zip); Latest development build links the nightly launcher; Download added to the top links; longshot.magicbean.dev/download added to "only download Longshot from".
  • release: scripts/release.py publish puts a header above git-cliff's notes (page_header, release_page). A launcher release starts with big links to its own three files. A Longshot release starts with "🎮 To play, get the Longshot Launcher": big links to the newest launcher of the same channel (rc → /download/launcher/rc, nightly → nightly, stable → stable), then "Don't download the files below". The format is the one hand-written on v1.0.0-rc.1 and 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: the headers; a new Download links section with the permanent links) and RELEASING.md (what CI writes, and checking the link after a release).
  • scripts/release.py, tests/test_release.py, docs/releases.md and RELEASING.md stay byte-identical with LongshotLauncher's (its PR: MagicBeanDev/LongshotLauncher#15).

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

Flags and settings

None.

Measurements

No speed or picture change: the measurement is the game-free checks, main and this PR interleaved, two runs each.

main: 39647e1a (2026-11-13)
this PR: download-links @ 921b6d55
Hardware: CachyOS (Linux 7.3), 24 threads
Scene: none (no game)
Method: LONGSHOT_VULKAN_HEADERS=/usr/include python -I -B tests/run_all.py, run main, PR, main, PR; python -I tests/test_release.py alone on each
How to reproduce: the commands above in a checkout of each commit

main @ 39647e1a this PR @ 921b6d55
run_all.py, run 1 500 passed, 2 failed, 36 skipped 500 passed, 2 failed, 36 skipped
run_all.py, run 2 500 passed, 2 failed, 36 skipped 500 passed, 2 failed, 36 skipped
test_release.py 24 tests OK 27 tests OK
the 2 failures, the same on main and here: tests/test_bake_portability.py, tests/test_builder_log_read_only.py

Testing

Tested: the game-free checks above; the headers rendered by git.magicbean.dev's own Markdown renderer (POST /api/v1/markdown, screenshots below); the README section rendered the same way; every magicbean.dev link the README and the headers use, 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 links on the live longshot.magicbean.dev, which aren't deployed yet.

Needs other testers: None

Screenshots

The README's Install and play (rendered by git.magicbean.dev):

README, Install and play

Latest development build:

README, Latest development build

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

Longshot release page

A launcher release page (a nightly, sample notes):

Launcher release page

Risk and rollback

The longshot.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://longshot.magicbean.dev/download, then this. Until then the README's buttons and the next release pages would 404. A release's page is written once, at publish: a page written with a broken link stays so, but the links are permanent, so they work once the site is up. If longshot.magicbean.dev is down, the README still links the releases page. Reverting the commit restores the old README and plain notes.

Reviewer notes

Start with page_header in scripts/release.py and its tests. The launcher's own release links point at the release's files on git.magicbean.dev directly (that version, forever); only Longshot's pages and the READMEs use the moving magicbean.dev links. Left out on purpose: the builders' "get the launcher" links in code (builder/py/longshot_builder/__init__.py, Updater.cs, setup.c) still point at the launcher's releases page; they could move to magicbean.dev/download in a follow-up.

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 download the wrong file: the README names a launcher file that doesn't exist (`…-windows-x64.exe`), and Longshot's release pages list only the builder files, which players should never download. This puts big launcher download links on top of the README and of every release page, through permanent links that always point at the newest launcher. ## What changed - README, *Install and play*: a big **Download Longshot Launcher** block on top (Windows, Linux, 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 it, and "Download the launcher, not the builder". The Windows step names the real files (`…-windows-x64-setup.exe`, and the portable zip); *Latest development build* links the nightly launcher; *Download* added to the top links; longshot.magicbean.dev/download added to "only download Longshot from". - release: `scripts/release.py` `publish` puts a header above git-cliff's notes (`page_header`, `release_page`). A **launcher** release starts with big links to its own three files. A **Longshot** release starts with "🎮 To play, get the Longshot Launcher": big links to the newest launcher of the **same channel** (rc → `/download/launcher/rc`, nightly → nightly, stable → stable), then "Don't download the files below". The format is the one hand-written on v1.0.0-rc.1 and 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*: the headers; a new *Download links* section with the permanent links) and `RELEASING.md` (what CI writes, and checking the link after a release). - `scripts/release.py`, `tests/test_release.py`, `docs/releases.md` and `RELEASING.md` stay byte-identical with LongshotLauncher's (its PR: MagicBeanDev/LongshotLauncher#15). The permanent links are served by longshot.magicbean.dev: the Longshot website (website/ in MagicBeanDev/Longshot)#7. ## Flags and settings None. ## Measurements No speed or picture change: the measurement is the game-free checks, main and this PR interleaved, two runs each. main: 39647e1a (2026-11-13) this PR: download-links @ 921b6d55 Hardware: CachyOS (Linux 7.3), 24 threads Scene: none (no game) Method: `LONGSHOT_VULKAN_HEADERS=/usr/include python -I -B tests/run_all.py`, run main, PR, main, PR; `python -I tests/test_release.py` alone on each How to reproduce: the commands above in a checkout of each commit | | main @ 39647e1a | this PR @ 921b6d55 | |---|---|---| | run_all.py, run 1 | 500 passed, 2 failed, 36 skipped | 500 passed, 2 failed, 36 skipped | | run_all.py, run 2 | 500 passed, 2 failed, 36 skipped | 500 passed, 2 failed, 36 skipped | | test_release.py | 24 tests OK | 27 tests OK | ``` the 2 failures, the same on main and here: tests/test_bake_portability.py, tests/test_builder_log_read_only.py ``` ## Testing **Tested:** the game-free checks above; the headers rendered by git.magicbean.dev's own Markdown renderer (`POST /api/v1/markdown`, screenshots below); the README section rendered the same way; every magicbean.dev link the README and the headers use, 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 links on the live longshot.magicbean.dev, which aren't deployed yet. **Needs other testers:** None ## Screenshots The README's *Install and play* (rendered by git.magicbean.dev): ![README, Install and play](https://git.magicbean.dev/HumanBean/Longshot/raw/branch/pr-assets-download-links/readme-longshot.png) *Latest development build*: ![README, Latest development build](https://git.magicbean.dev/HumanBean/Longshot/raw/branch/pr-assets-download-links/readme-longshot-nightly.png) A Longshot release page as `release.py` writes it (v3.0.0-rc.1, sample notes): ![Longshot release page](https://git.magicbean.dev/HumanBean/Longshot/raw/branch/pr-assets-download-links/release-longshot.png) A launcher release page (a nightly, sample notes): ![Launcher release page](https://git.magicbean.dev/HumanBean/Longshot/raw/branch/pr-assets-download-links/release-launcher.png) ## Risk and rollback **The longshot.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://longshot.magicbean.dev/download`, then this. Until then the README's buttons and the next release pages would 404. A release's page is written once, at publish: a page written with a broken link stays so, but the links are permanent, so they work once the site is up. If longshot.magicbean.dev is down, the README still links the releases page. Reverting the commit restores the old README and plain notes. ## Reviewer notes Start with `page_header` in `scripts/release.py` and its tests. The launcher's own release links point at the release's files on git.magicbean.dev directly (that version, forever); only Longshot's pages and the READMEs use the moving magicbean.dev links. Left out on purpose: the builders' "get the launcher" links in code (`builder/py/longshot_builder/__init__.py`, `Updater.cs`, `setup.c`) still point at the launcher's releases page; they could move to magicbean.dev/download in a follow-up. ## 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 launcher download links in the README and on every release page, through magicbean.dev's permanent links
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 4s
Third-party parts / As their notes say (pull_request) Successful in 5s
PR description / Description follows the template (pull_request_target) Successful in 3s
07b2cde659
HumanBean changed title from WIP: feat(release): big launcher download links in the README and on every release page, through magicbean.dev's permanent links to feat(release): big launcher download links in the README and on every release page, through magicbean.dev's permanent links 2026-11-13 07:10:41 +00:00
fix(release): the download links are on longshot.magicbean.dev
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 4s
Third-party parts / As their notes say (pull_request) Successful in 5s
PR description / Description follows the template (pull_request_target) Successful in 3s
921b6d55a6
HumanBean deleted branch download-links 2026-11-13 07:27:31 +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/Longshot!148
No description provided.