Update plan after confirming replays work
This commit is contained in:
+66
-2
@@ -803,7 +803,8 @@ the BL score, and confirm the improvement display and the ArcViewer replay.
|
|||||||
|
|
||||||
### Phase 6: Ongoing sync
|
### Phase 6: Ongoing sync
|
||||||
|
|
||||||
**Built 2026-11-09, not deployed yet.** `node scripts/archive/cli.ts sync
|
**Built 2026-11-09; deployed on incineroar the same day (daily timer at
|
||||||
|
17:00, first run clean; see phase 7).** `node scripts/archive/cli.ts sync
|
||||||
[--ratings] [--no-ss-replays]` (this repo `d182fd8`), packaged as the
|
[--ratings] [--no-ss-replays]` (this repo `d182fd8`), packaged as the
|
||||||
flake's `plebleader-archive`. Tested against the local archive: the token
|
flake's `plebleader-archive`. Tested against the local archive: the token
|
||||||
refresh rotated the chain (now valid until about 2026-11-23), and with the
|
refresh rotated the chain (now valid until about 2026-11-23), and with the
|
||||||
@@ -871,7 +872,34 @@ the local zip.
|
|||||||
|
|
||||||
### Phase 7: NixOS deployment on incineroar
|
### Phase 7: NixOS deployment on incineroar
|
||||||
|
|
||||||
**Built 2026-11-09, not switched yet.** Phase 6 added a second commit on the
|
**Done 2026-11-09: merged into nix-pleb `main` (fast-forward to `3b3eb47`),
|
||||||
|
switched on incineroar, first sync clean, and BL `.bsor` replays play in
|
||||||
|
ArcViewer.** Issues hit after the switch:
|
||||||
|
|
||||||
|
- **Missing `/run/secrets/plebleader.env`.** The file was encrypted only to
|
||||||
|
litten's age key (the repo `.sops.yaml` rule lists only litten), so
|
||||||
|
incineroar's host key couldn't decrypt it. Fixed by adding incineroar's host
|
||||||
|
key and `age1kuxd…` with `sops rotate --add-age`. Any new incineroar sops
|
||||||
|
file needs the same three recipients as `sops.yaml`.
|
||||||
|
- **First sync (13:48):** the token refreshed, with the chain valid to
|
||||||
|
2026-11-23 (each daily refresh moves that forward), 0 new scores, and the
|
||||||
|
importer loaded 3565 scores and 2552 songs in 11 s. The token now lives only
|
||||||
|
in `/var/lib/plebleader/auth/`.
|
||||||
|
- **Website "TypeError: Cannot read properties of undefined (reading
|
||||||
|
'id')".** `utils/format.js` takes the first host label as the leaderboard
|
||||||
|
context when the host has more than 2 labels, so the context became
|
||||||
|
`incineroar` and the navbar's context lookup found nothing. The phase 4 dev
|
||||||
|
check missed it because a numeric last label (`127.0.0.1`) raises that limit
|
||||||
|
to 4. Website fix `e5f6279a`: non-BeatLeader hosts always use `general`.
|
||||||
|
- **ArcViewer "Download failed! HTTP/1.1 403 Forbidden"** for
|
||||||
|
`/cdn/replays/…bsor`, and `/cdn/maps/…` redirected to BeatSaver even for
|
||||||
|
archived zips. Caddy had been running since 2026-11-07. The switch added it
|
||||||
|
to group `plebleader` but only reloaded it, so the process still had just
|
||||||
|
`caddy` (`grep Groups /proc/<pid>/status`). Fixed with
|
||||||
|
`doas systemctl restart caddy`. Any later change to Caddy's groups needs a
|
||||||
|
restart too.
|
||||||
|
|
||||||
|
Phase 6 added a second commit on the
|
||||||
branch: the `plebleader.env` sops secret, `plebleader-sync` (sync, then the
|
branch: the `plebleader.env` sops secret, `plebleader-sync` (sync, then the
|
||||||
importer) and its timer, and lock bumps for `plebsaber-stream` (`d182fd8`)
|
importer) and its timer, and lock bumps for `plebsaber-stream` (`d182fd8`)
|
||||||
and `plebleader-server` (`dd94772`). The `plebsaber-stream` bump also
|
and `plebleader-server` (`dd94772`). The `plebsaber-stream` bump also
|
||||||
@@ -944,6 +972,42 @@ To deploy (the user does this):
|
|||||||
`nix build .#nixosConfigurations.incineroar.config.system.build.toplevel --no-link`.
|
`nix build .#nixosConfigurations.incineroar.config.system.build.toplevel --no-link`.
|
||||||
The user does the switch.
|
The user does the switch.
|
||||||
|
|
||||||
|
### Phase 8: Self-hosted BeatLeader web replay viewer
|
||||||
|
|
||||||
|
Upstream, the score row's replay icon opens BeatLeader's web viewer
|
||||||
|
(`BL_REPLAYS_URL`, replay.beatleader.com), and turning on ArcViewer in the
|
||||||
|
score settings adds a separate `altReplay` icon (`Song/Icons.svelte`,
|
||||||
|
`webPlayerLink(…, 'arcviewer', …)`). Phase 4 pointed `BL_REPLAYS_URL` at
|
||||||
|
`/watch/`, so both icons open ArcViewer now. The user wants the upstream
|
||||||
|
behaviour back: the replay icon opens the BeatLeader viewer, and ArcViewer
|
||||||
|
stays a separate icon.
|
||||||
|
|
||||||
|
Source: `~/src/BeatLeader/BeatSaber-Web-Replays` (webpack 5, npm). Steps:
|
||||||
|
|
||||||
|
1. Fork it to gitea `pleb/BeatSaber-Web-Replays` with a `pleb/main` branch,
|
||||||
|
and change as little as possible.
|
||||||
|
2. Resolve `getApiUrl()` (`src/utils.js`, `src/open-replay-decoder.js`) to
|
||||||
|
`/cors/blapi` on non-BeatLeader hosts, the same rule as the website's
|
||||||
|
`IS_MIRROR`. Check how it fetches the replay file and the score (`link=`,
|
||||||
|
`scoreId=`) against the mirror's `/cdn/replays/` and `/cors/blapi/score/{id}`.
|
||||||
|
3. Maps: `zip-loader.js` tries `cdn.songs.beatleader.xyz`, then
|
||||||
|
`/cors/beat-saver2/api/maps/…` (a Netlify proxy), then `r2cdn`/`cdn.beatsaver.com`.
|
||||||
|
Try `/cdn/maps/<hash>.zip` first, which already falls back to r2cdn in Caddy.
|
||||||
|
Either proxy `/cors/beat-saver2/` to `api.beatsaver.com` in Caddy or skip it.
|
||||||
|
4. Drop or stub analytics (googletagmanager), and check its other runtime
|
||||||
|
fetches (fonts, `cdn.jsdelivr.net`). Discord and Patreon are plain links.
|
||||||
|
5. Add a flake with `buildNpmPackage` that outputs the built static files
|
||||||
|
(`index.html`, `assets`, `build`, `vendor`, as in its `predeploy` script),
|
||||||
|
and add it as a nix-pleb input.
|
||||||
|
6. Caddy: serve it at `/replay/` on the plebleader vhost.
|
||||||
|
7. Website: in mirror mode set `BL_REPLAYS_URL` to `/replay/` instead of
|
||||||
|
`/watch/`. Leave the explicit ArcViewer links (`altReplay`, `ReplayButton`
|
||||||
|
with `webPlayer == 'arcviewer'`) on `/watch/`.
|
||||||
|
|
||||||
|
**Check:** on `/u/pleb` the replay icon plays a score in the BeatLeader
|
||||||
|
viewer from local files, and with ArcViewer turned on in settings, the second
|
||||||
|
icon plays it in ArcViewer.
|
||||||
|
|
||||||
## Risks and fallbacks
|
## Risks and fallbacks
|
||||||
|
|
||||||
- **The server doesn't build or run on Linux, or EF/SQLite can't translate
|
- **The server doesn't build or run on Linux, or EF/SQLite can't translate
|
||||||
|
|||||||
Reference in New Issue
Block a user