Point the wiki at meleki/feuerwerk and the feuerwerk runners (#422)

Stage 3 of the rename moved the repo, the runner labels, the WSL
distro and the video worker to the name Feuerwerk.

- Repo and wiki links now go to git.nockal.com/meleki/feuerwerk.
- Development names the labels feuerwerk-ci and feuerwerk-wsl, the
  distro feuerwerk-ci and the FEUERWERK_* variables.
- Accounts names the passwords FEUERWERK_E2E_PASSWORD and
  FEUERWERK_E2E_ADMIN_PASSWORD.
- Videos names the container feuerwerk-video.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-10-13 13:42:53 +02:00
1 parent b1910090c7
commit 5c1bb29940
6 files changed
+19 -19

No files matched your search

+2 -2
@@ -121,10 +121,10 @@ is `data/sessions/`. Registration (#178) and shared projects (#181) are follow-u
## What the check tools do
Every seed, smoke and e2e run signs in as `e2e` first and sends the same session cookie a browser
would (`tools/lib/auth.mjs`). The password comes from `GAME_MAKER_E2E_PASSWORD` or from
would (`tools/lib/auth.mjs`). The password comes from `FEUERWERK_E2E_PASSWORD` or from
`data/e2e-password.txt`, which is git-ignored — CI writes its own on a fresh checkout and makes
the account with it (`tools/ci/serve.sh`). `e2e-admin` works the same way, with
`GAME_MAKER_E2E_ADMIN_PASSWORD` or `data/e2e-admin-password.txt`.
`FEUERWERK_E2E_ADMIN_PASSWORD` or `data/e2e-admin-password.txt`.
The browser in an e2e run is handed that session as a cookie, so it starts on the editor. The
sign-in screen itself is driven by hand in step 45, the one step that sees it. Step 49 signs the
+8 -8
@@ -20,7 +20,7 @@ php tests/php/snapshots.test.php # the snapshot sto
php tests/php/releases.test.php # the release store (#266), the same way
php tests/php/files.test.php # uploaded files in a folder per account (#344), the same way
php tests/php/videos.test.php # the video store, its queue and the worker (#402), with the
# real ffmpeg: the CI image and game-maker-video have it
# real ffmpeg: the CI image and feuerwerk-video have it
node tools/seed-e2e.mjs && node tools/e2e.mjs # 2065 editor checks, screenshots in /tmp/gm-e2e-*.png
GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step
./e2e.sh start [GM_STEPS] # the same run detached, see below
@@ -34,7 +34,7 @@ node tools/seed-e2e.mjs && node tools/perf-shaders.mjs # what a shader co
**Every tool signs in first.** Since #177 the API answers 401 without a session, so the seeds, the
smokes and the e2e run log in as the `e2e` account (`tools/lib/auth.mjs`) and send the cookie a
browser would; the e2e browser is handed the same session over CDP. The password comes from
`GAME_MAKER_E2E_PASSWORD` or from the git-ignored `data/e2e-password.txt`. A machine that has
`FEUERWERK_E2E_PASSWORD` or from the git-ignored `data/e2e-password.txt`. A machine that has
neither fails with a message saying exactly that — see [Accounts](Accounts).
**A run needs a working GPU.** An idle editor page keeps rendering a picture that never changes, and
@@ -62,13 +62,13 @@ integration*), so locally take only what the change needs: the gate, plus the st
roughly 0.8 of the four cores of this box (60% renderer, 18% GPU process, load ~1.0), but four
minutes of waiting buys nothing the push does not give.
**`./e2e.sh start` runs the suite detached**, in a transient `game-maker-e2e.service`, and returns at
**`./e2e.sh start` runs the suite detached**, in a transient `feuerwerk-e2e.service`, and returns at
once; output goes to `logs/e2e-<date>_<time>.log` (gitignored) and ends in `=== E2E EXIT n ===`.
Backgrounding it from a shell instead is not enough — four runs in a row died mid-suite with no
closing line, because the whole process group is killed when the calling shell exits (`nohup` only
covers SIGHUP, and `/proc/vmstat` confirmed `oom_kill 0`, so it was never memory). The unit outlives
its caller. It takes the same `GM_STEPS` argument, refuses to start a second run over a live one, and
`systemctl stop game-maker-e2e.service` ends it.
`systemctl stop feuerwerk-e2e.service` ends it.
**`./e2e.sh status`** reports the live run (elapsed, PASS/FAIL so far, the check it is on) or, when
nothing is running, the newest log's result plus its FAIL lines. A log without a closing line is
@@ -327,14 +327,14 @@ Every push runs the whole proof on the Gitea runner: `.gitea/workflows/ci.yml` i
`http://127.0.0.1:8080/feuerwerk/` with `php -S` — the build wires its assets absolutely under
`/feuerwerk/dist/`, so the path segment is not optional — and writes the empty project files the
seeders need (`PUT` does not create a project, `POST` hands out a random id). Every tool takes its
server from `GAME_MAKER_BASE_URL`.
server from `FEUERWERK_BASE_URL`.
The jobs run in the image from `tools/ci/Dockerfile`: chromium with the Vulkan drivers and
`xvfb`, `php-cli`, `ffmpeg` for the video worker (#402, `serve.sh` starts it beside the server),
and the host's font packages, because the checks measure text widths to find click points. A
change to the Dockerfile needs the image built again on both runners' hosts. `ci.yml` asks for the label **`game-maker-wsl`** (#283): a runner in a WSL2 distro
change to the Dockerfile needs the image built again on both runners' hosts. `ci.yml` asks for the label **`feuerwerk-wsl`** (#283): a runner in a WSL2 distro
on a Windows machine with an RTX 4070, so this host no longer carries the suite. The runner on
this host is still registered with the label `game-maker-ci` and the same image; pointing both
this host is still registered with the label `feuerwerk-ci` and the same image; pointing both
`runs-on` back at that label moves the runs here again.
The **GPU is not in this repo**. It comes from `container.options` in each runner's own
@@ -343,7 +343,7 @@ The **GPU is not in this repo**. It comes from `container.options` in each runne
- **Here:** `/dev/dri/renderD128` and a 1 GB `/dev/shm`. Measured in the job container:
`ANGLE (Intel, Vulkan 1.3.230, HD Graphics 630)`, WebGL 2.0.
- **Under WSL2:** `/dev/dxg`, the Windows driver libraries from `/usr/lib/wsl` and the same
`/dev/shm`, plus `GAME_MAKER_BROWSER=wsl` from the runner's `envs`. There is no DRM render node
`/dev/shm`, plus `FEUERWERK_BROWSER=wsl` from the runner's `envs`. There is no DRM render node
and no Vulkan there, and a headless chromium gets no WebGL at all. In this mode
`tools/lib/browser.mjs` starts an invisible Xvfb and an X11 chromium on ANGLE/GL, which reaches
the GPU through Mesa's d3d12 driver: `ANGLE (Microsoft Corporation, D3D12 (NVIDIA GeForce RTX
+2 -2
@@ -4,7 +4,7 @@ properties in an inspector and press **Play** — all in one program, all drawn
WebGL canvas. The old address `nockal.com/game-maker/` leads here, and old play links still work.
Live: <https://nockal.com/feuerwerk/> · Widget playground: <https://nockal.com/feuerwerk/?playground>
· Code: <https://git.nockal.com/meleki/game-maker>
· Code: <https://git.nockal.com/meleki/feuerwerk>
## Using the editor
@@ -48,7 +48,7 @@ Live: <https://nockal.com/feuerwerk/> · Widget playground: <https://nockal.com/
## Ideas, gaps and bugs
They live in the issue tracker of the Gitea repo: <https://git.nockal.com/meleki/game-maker/issues>.
They live in the issue tracker of the Gitea repo: <https://git.nockal.com/meleki/feuerwerk/issues>.
The folder `todo-notes/` that held them as files until 2026-09-12 is gone; all 50 notes were moved
into issues #1-#50, closed ones included, each carrying the commits it was filed and finished with.
+4 -4
@@ -81,8 +81,8 @@ the line and an outlined rectangle or ellipse, **Filled shapes** with rectangle
**Contiguous** with fill. The picker has none.
There are no keyboard shortcuts for the tools yet. Selecting, copying and mirroring are
[#198](https://git.nockal.com/meleki/game-maker/issues/198), more tools (symmetry, lasso, dithering,
replacing a colour) are [#200](https://git.nockal.com/meleki/game-maker/issues/200).
[#198](https://git.nockal.com/meleki/feuerwerk/issues/198), more tools (symmetry, lasso, dithering,
replacing a colour) are [#200](https://git.nockal.com/meleki/feuerwerk/issues/200).
## Layers
@@ -143,7 +143,7 @@ Undo swaps names, so it never waits for the server. The format is in the [API](A
## Known limits
- No import of an existing texture yet ([#197](https://git.nockal.com/meleki/game-maker/issues/197))
and no export as PNG ([#199](https://git.nockal.com/meleki/game-maker/issues/199)).
- No import of an existing texture yet ([#197](https://git.nockal.com/meleki/feuerwerk/issues/197))
and no export as PNG ([#199](https://git.nockal.com/meleki/feuerwerk/issues/199)).
- The palette is edited in the Pixel art tab; selecting the palette asset itself shows no colours.
- A cel file stays on the server when nothing names it any more, as an uploaded image does.
+2 -2
@@ -292,12 +292,12 @@ a job for it into `data/videos/queue/` (hidden from the web server), and a worke
the other, oldest first. A failed job leaves the upload where it is, so it can still be downloaded.
A job from before uploads were kept has its bytes hidden in the queue, and they go once it is done:
- On stein2 that is the container **`game-maker-video`**: PHP and ffmpeg on Debian 12, the
- On stein2 that is the container **`feuerwerk-video`**: PHP and ffmpeg on Debian 12, the
checkout mounted, running as `www-data` without a network, on at most 3 of the 4 cores. It is
a compose project of its own beside the web stack:
`docker compose -f tools/video/compose.yml up -d`. The image is built like the CI image (see
the head of `tools/video/Dockerfile`); a change to the worker's PHP needs a restart, not a
rebuild. `docker logs game-maker-video` shows one line per video, with how long it took.
rebuild. `docker logs feuerwerk-video` shows one line per video, with how long it took.
- In CI, `tools/ci/serve.sh` starts the same worker beside the PHP server; the CI image has ffmpeg.
The worker is `tools/video-worker.php` over `api/lib/VideoWorker.php`; the rules (size, frame
+1 -1
@@ -34,4 +34,4 @@
- [Plugins](Plugins)
- [Development](Development)
- [API](API)
- [Issues](https://git.nockal.com/meleki/game-maker/issues)
- [Issues](https://git.nockal.com/meleki/feuerwerk/issues)