diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml
index e9ba9634..f0e05c03 100644
--- a/.gitea/workflows/ci.yml
+++ b/.gitea/workflows/ci.yml
@@ -1,10 +1,10 @@
# Runs the whole proof on the Gitea runner: gate, the editor suite and the three example games.
#
-# The suite runs on `game-maker-wsl`, the runner in the WSL2 distro game-maker-ci on
+# The suite runs on `feuerwerk-wsl`, the runner in the WSL2 distro feuerwerk-ci on
# melektaus-atx (#283). Its label picks the image built from tools/ci/Dockerfile. The GPU
-# (/dev/dxg and the Windows driver libraries), /dev/shm and GAME_MAKER_BROWSER=wsl come from that
+# (/dev/dxg and the Windows driver libraries), /dev/shm and FEUERWERK_BROWSER=wsl come from that
# runner's own config.yaml, not from here – without them chromium falls back to software WebGL and
-# the harness stops. The gate needs no GPU and runs on `game-maker-ci`, the runner on stein2 with
+# the harness stops. The gate needs no GPU and runs on `feuerwerk-ci`, the runner on stein2 with
# the same image. Pointing the suite at that label too moves the browser runs back to stein2.
#
# Two jobs without `needs:`, so they start together. The gate does not stand in front of the
@@ -14,7 +14,7 @@
# On two runners the gate's vitest no longer shares cores with the suite's chromium, which
# measures text widths and frame counts. GM_TEST_WORKERS still caps vitest at two workers, for the
# day both jobs share one runner again.
-name: game-maker
+name: feuerwerk
on:
push:
@@ -22,7 +22,7 @@ on:
jobs:
gate:
- runs-on: game-maker-ci
+ runs-on: feuerwerk-ci
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
@@ -46,7 +46,7 @@ jobs:
php tests/php/videos.test.php
suite:
- runs-on: game-maker-wsl
+ runs-on: feuerwerk-wsl
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
diff --git a/README.md b/README.md
index cafc7c38..1007a9df 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Feuerwerk
-[](https://git.nockal.com/meleki/game-maker/actions?workflow=ci.yml)
+[](https://git.nockal.com/meleki/feuerwerk/actions?workflow=ci.yml)
A browser-based tool "one step before a game engine": create **assets** (scenes, cameras,
sprites), place them into scenes, tweak their properties in an inspector and press **Play** –
@@ -10,7 +10,7 @@ all in one program, all drawn inside a single WebGL canvas.
Live: · Widget playground:
-**The documentation is the wiki:** – every concept,
+**The documentation is the wiki:** – every concept,
node, tab and shortcut, plus the architecture and the development workflow. This file is the short
way in.
@@ -57,43 +57,43 @@ node tools/seed-actor.mjs && node tools/smoke-actor.mjs
Every push runs all of it on the Gitea runners – the gate as one job, build and suite as another
beside it – so locally take the gate plus the step your change touches and leave the full run to
CI. Details, the GPU requirement and the detached runner are in
-[Development](https://git.nockal.com/meleki/game-maker/wiki/Development).
+[Development](https://git.nockal.com/meleki/feuerwerk/wiki/Development).
## Documentation
| Page | What it covers |
|---|---|
-| [Concepts](https://git.nockal.com/meleki/game-maker/wiki/Concepts) | Assets, scene objects, overrides, play mode, the camera, the console |
-| [Accounts](https://git.nockal.com/meleki/game-maker/wiki/Accounts) | Signing in and out, the accounts, who a project belongs to, what the check tools need |
-| [Scenes](https://git.nockal.com/meleki/game-maker/wiki/Scenes) | The edited scene, the start scene, and switching scenes from a graph |
-| [Scene editing](https://git.nockal.com/meleki/game-maker/wiki/Scene-editing) | Placing, z-order, hierarchy, the editor offset |
-| [Behaviors](https://git.nockal.com/meleki/game-maker/wiki/Behaviors) | Node graphs: variables, the node set, structs and lists, loops, nesting, editing |
-| [Structs](https://git.nockal.com/meleki/game-maker/wiki/Structs) | Struct assets: a named shape that struct variables, fields and `Pack`/`Expand` follow |
-| [Colliders](https://git.nockal.com/meleki/game-maker/wiki/Colliders) | Shapes (box, circle, capsule, polygon), collision events, blocking movement, one-way colliders and raycasts |
-| [Physics](https://git.nockal.com/meleki/game-maker/wiki/Physics) | Rigidbodies, the collider material, gravity, the fixed step, joints |
-| [Textures](https://git.nockal.com/meleki/game-maker/wiki/Textures) | Images, frames, nine-slice, the filter, upload limits |
-| [Vector art](https://git.nockal.com/meleki/game-maker/wiki/Vector-Art) | Pictures drawn from shapes: the pen, curves, gradients and texture fills, combining shapes |
-| [Pixel art](https://git.nockal.com/meleki/game-maker/wiki/Pixel-Art) | Pictures painted pixel by pixel: the palette, the tools, layers and frames |
-| [Fonts](https://git.nockal.com/meleki/game-maker/wiki/Fonts) | Font assets, the picker, what a text falls back to |
-| [Sounds](https://git.nockal.com/meleki/game-maker/wiki/Sounds) | Sound assets and clips, `Play sound`, buses and the Master routing, sound FX |
-| [Instruments](https://git.nockal.com/meleki/game-maker/wiki/Instruments) | Instruments as node graphs, Chips and presets, the keys of the Instrument tab, `Play note` |
-| [Patterns](https://git.nockal.com/meleki/game-maker/wiki/Patterns) | Patterns and the piano roll, playing one in a loop or from a game |
-| [Songs](https://git.nockal.com/meleki/game-maker/wiki/Songs) | Songs, their tracks and items, routing, recording, playing one from a game |
-| [Animations](https://git.nockal.com/meleki/game-maker/wiki/Animations) | Animation assets and the Animation tab |
-| [Curves](https://git.nockal.com/meleki/game-maker/wiki/Curves) | Easings drawn by hand, the Curve tab, using one on a key or a `Lerp` |
-| [Shaders](https://git.nockal.com/meleki/game-maker/wiki/Shaders) | Shader graphs that sprites, texts, particle fields and cameras wear, their node set, passes, shader functions |
-| [Particles](https://git.nockal.com/meleki/game-maker/wiki/Particles) | Particle graphs: a particle as a function of its age |
-| [State machines](https://git.nockal.com/meleki/game-maker/wiki/State-machines) | The asset, named transitions, `State branch`, `Set state` and `State transition` |
-| [Containers](https://git.nockal.com/meleki/game-maker/wiki/Containers) | Templates, instances, screens |
-| [Tiles](https://git.nockal.com/meleki/game-maker/wiki/Tiles) | The tile asset, plain tiles and the two autotile kinds, the pictures as animation steps, the Tile tab |
-| [Tilemaps](https://git.nockal.com/meleki/game-maker/wiki/Tilemaps) | The tilemap asset, painting in the scene view, layers, what it looks like in the game |
-| [Plugins](https://git.nockal.com/meleki/game-maker/wiki/Plugins) | Extending the editor: the plugin file, how it is loaded, switching one on and off, API v1 |
-| [Keyboard](https://git.nockal.com/meleki/game-maker/wiki/Keyboard) | Every shortcut |
-| [Architecture](https://git.nockal.com/meleki/game-maker/wiki/Architecture) | Stack, source layout, the rules that keep it organised |
-| [Development](https://git.nockal.com/meleki/game-maker/wiki/Development) | Commands, the e2e suite, the example games, CI |
-| [API](https://git.nockal.com/meleki/game-maker/wiki/API) | The PHP JSON API and the project document |
+| [Concepts](https://git.nockal.com/meleki/feuerwerk/wiki/Concepts) | Assets, scene objects, overrides, play mode, the camera, the console |
+| [Accounts](https://git.nockal.com/meleki/feuerwerk/wiki/Accounts) | Signing in and out, the accounts, who a project belongs to, what the check tools need |
+| [Scenes](https://git.nockal.com/meleki/feuerwerk/wiki/Scenes) | The edited scene, the start scene, and switching scenes from a graph |
+| [Scene editing](https://git.nockal.com/meleki/feuerwerk/wiki/Scene-editing) | Placing, z-order, hierarchy, the editor offset |
+| [Behaviors](https://git.nockal.com/meleki/feuerwerk/wiki/Behaviors) | Node graphs: variables, the node set, structs and lists, loops, nesting, editing |
+| [Structs](https://git.nockal.com/meleki/feuerwerk/wiki/Structs) | Struct assets: a named shape that struct variables, fields and `Pack`/`Expand` follow |
+| [Colliders](https://git.nockal.com/meleki/feuerwerk/wiki/Colliders) | Shapes (box, circle, capsule, polygon), collision events, blocking movement, one-way colliders and raycasts |
+| [Physics](https://git.nockal.com/meleki/feuerwerk/wiki/Physics) | Rigidbodies, the collider material, gravity, the fixed step, joints |
+| [Textures](https://git.nockal.com/meleki/feuerwerk/wiki/Textures) | Images, frames, nine-slice, the filter, upload limits |
+| [Vector art](https://git.nockal.com/meleki/feuerwerk/wiki/Vector-Art) | Pictures drawn from shapes: the pen, curves, gradients and texture fills, combining shapes |
+| [Pixel art](https://git.nockal.com/meleki/feuerwerk/wiki/Pixel-Art) | Pictures painted pixel by pixel: the palette, the tools, layers and frames |
+| [Fonts](https://git.nockal.com/meleki/feuerwerk/wiki/Fonts) | Font assets, the picker, what a text falls back to |
+| [Sounds](https://git.nockal.com/meleki/feuerwerk/wiki/Sounds) | Sound assets and clips, `Play sound`, buses and the Master routing, sound FX |
+| [Instruments](https://git.nockal.com/meleki/feuerwerk/wiki/Instruments) | Instruments as node graphs, Chips and presets, the keys of the Instrument tab, `Play note` |
+| [Patterns](https://git.nockal.com/meleki/feuerwerk/wiki/Patterns) | Patterns and the piano roll, playing one in a loop or from a game |
+| [Songs](https://git.nockal.com/meleki/feuerwerk/wiki/Songs) | Songs, their tracks and items, routing, recording, playing one from a game |
+| [Animations](https://git.nockal.com/meleki/feuerwerk/wiki/Animations) | Animation assets and the Animation tab |
+| [Curves](https://git.nockal.com/meleki/feuerwerk/wiki/Curves) | Easings drawn by hand, the Curve tab, using one on a key or a `Lerp` |
+| [Shaders](https://git.nockal.com/meleki/feuerwerk/wiki/Shaders) | Shader graphs that sprites, texts, particle fields and cameras wear, their node set, passes, shader functions |
+| [Particles](https://git.nockal.com/meleki/feuerwerk/wiki/Particles) | Particle graphs: a particle as a function of its age |
+| [State machines](https://git.nockal.com/meleki/feuerwerk/wiki/State-machines) | The asset, named transitions, `State branch`, `Set state` and `State transition` |
+| [Containers](https://git.nockal.com/meleki/feuerwerk/wiki/Containers) | Templates, instances, screens |
+| [Tiles](https://git.nockal.com/meleki/feuerwerk/wiki/Tiles) | The tile asset, plain tiles and the two autotile kinds, the pictures as animation steps, the Tile tab |
+| [Tilemaps](https://git.nockal.com/meleki/feuerwerk/wiki/Tilemaps) | The tilemap asset, painting in the scene view, layers, what it looks like in the game |
+| [Plugins](https://git.nockal.com/meleki/feuerwerk/wiki/Plugins) | Extending the editor: the plugin file, how it is loaded, switching one on and off, API v1 |
+| [Keyboard](https://git.nockal.com/meleki/feuerwerk/wiki/Keyboard) | Every shortcut |
+| [Architecture](https://git.nockal.com/meleki/feuerwerk/wiki/Architecture) | Stack, source layout, the rules that keep it organised |
+| [Development](https://git.nockal.com/meleki/feuerwerk/wiki/Development) | Commands, the e2e suite, the example games, CI |
+| [API](https://git.nockal.com/meleki/feuerwerk/wiki/API) | The PHP JSON API and the project document |
## Ideas, gaps and bugs
-They live in the issue tracker: . What is not
-there yet is listed on the wiki's [Home](https://git.nockal.com/meleki/game-maker/wiki) page.
+They live in the issue tracker: . What is not
+there yet is listed on the wiki's [Home](https://git.nockal.com/meleki/feuerwerk/wiki) page.
diff --git a/api/index.php b/api/index.php
index 21fba1b1..9e6e8b28 100644
--- a/api/index.php
+++ b/api/index.php
@@ -67,7 +67,7 @@ declare(strict_types=1);
* POST ?r=videos&name=x.mov[&convert=0] raw video bytes → {file,name,status,…}
* POST ?r=videos/{file}/convert → {file,name,status,…} | 403 | 404
* DELETE ?r=videos/{file} → 204 | 403 | 404 | 409
- * (an upload is converted by the worker in `game-maker-video` (#402):
+ * (an upload is converted by the worker in `feuerwerk-video` (#402):
* `status` is queued, converting with `progress`, failed with `error`,
* or ready with width, height, duration, fps, audio and `poster`;
* with `convert=0` it is only kept, `unconverted`, until it is asked
diff --git a/api/lib/VideoQueue.php b/api/lib/VideoQueue.php
index 366226d7..cd020a68 100644
--- a/api/lib/VideoQueue.php
+++ b/api/lib/VideoQueue.php
@@ -5,7 +5,7 @@ declare(strict_types=1);
* The videos waiting to be converted (#402): `data/videos/queue/{folder}-{hash}.json` says what
* became of an upload, and its `source` where the upload lies – kept as it came beside the MP4,
* `{folder}/{hash}.source.{ext}`, for downloading it. The API adds to it, the worker in the
- * container `game-maker-video` takes from it, one at a time, oldest first.
+ * container `feuerwerk-video` takes from it, one at a time, oldest first.
*
* A job is `queued`, `converting` (with `progress` from 0 to 1) or `failed` (with `error`). A done
* one is no job any more: its MP4 lies in the account's folder and the job is gone. A failed one
diff --git a/api/lib/VideoWorker.php b/api/lib/VideoWorker.php
index 70d2b0c2..ec11ed89 100644
--- a/api/lib/VideoWorker.php
+++ b/api/lib/VideoWorker.php
@@ -3,7 +3,7 @@ declare(strict_types=1);
/**
* Converts what waits in the VideoQueue, one video at a time (#402). Runs in the container
- * `game-maker-video` through `tools/video-worker.php`, and in CI beside the PHP server.
+ * `feuerwerk-video` through `tools/video-worker.php`, and in CI beside the PHP server.
*
* Each job goes: probe the upload, convert it into a temp file beside its target, read the result
* back for its details, cut a poster, then move all three into place and drop the job. Whatever
diff --git a/e2e.sh b/e2e.sh
index 4463dc75..5dd4d8ea 100755
--- a/e2e.sh
+++ b/e2e.sh
@@ -10,7 +10,7 @@
set -u
-UNIT=game-maker-e2e
+UNIT=feuerwerk-e2e
DIR=$(dirname "$(readlink -f "$0")")
LOGDIR=$DIR/logs
diff --git a/tests/php/videos.test.php b/tests/php/videos.test.php
index 12b896be..2e7a688a 100644
--- a/tests/php/videos.test.php
+++ b/tests/php/videos.test.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
/**
* Videos (#402): the conversion rules, the store and its queue, and the worker with the real
* ffmpeg. Plain PHP like files.test.php; CI runs it with `php tests/php/videos.test.php`. It needs
- * ffmpeg and ffprobe on the PATH, which the CI image and the container `game-maker-video` have.
+ * ffmpeg and ffprobe on the PATH, which the CI image and the container `feuerwerk-video` have.
*/
require __DIR__ . '/../../api/lib/AtomicFile.php';
diff --git a/tools/ci/Dockerfile b/tools/ci/Dockerfile
index 41e60545..e9d57586 100644
--- a/tools/ci/Dockerfile
+++ b/tools/ci/Dockerfile
@@ -1,7 +1,7 @@
-# The image behind the Gitea Actions label `game-maker-ci`. It is built on the host and kept
+# The image behind the Gitea Actions label `feuerwerk-ci`. It is built on the host and kept
# local (the runner has `force_pull: false`), so a change here needs a rebuild:
#
-# DOCKER_BUILDKIT=0 docker build --network git_default -t game-maker-ci:latest tools/ci
+# DOCKER_BUILDKIT=0 docker build --network git_default -t feuerwerk-ci:latest tools/ci
#
# Both flags are needed on stein2: DNS is dead in Docker's default bridge network, and Buildkit
# cannot join a named network.
@@ -10,11 +10,11 @@ FROM node:22-bookworm
# chromium + the Vulkan drivers: the e2e harness starts chromium with --use-angle=vulkan and has
# no software fallback. The render device itself comes from the runner's container.options;
# without it chromium falls back to llvmpipe and gets WebGL 1.0 only.
-# xvfb serves the other GPU path, GAME_MAKER_BROWSER=wsl (tools/lib/browser.mjs): under WSL2 the
+# xvfb serves the other GPU path, FEUERWERK_BROWSER=wsl (tools/lib/browser.mjs): under WSL2 the
# GPU is /dev/dxg behind Mesa's d3d12 driver, which headless chromium cannot reach, an X11 one can.
# php-cli serves api/index.php, which every tool loads and saves its project through.
# ffmpeg converts uploaded videos (#402), through tools/video-worker.php like the container
-# game-maker-video on stein2 does.
+# feuerwerk-video on stein2 does.
# The fonts are the host's set on purpose: the checks measure text widths to find click points,
# so a different set moves them.
RUN apt-get update && apt-get install -y --no-install-recommends \
diff --git a/tools/ci/serve.sh b/tools/ci/serve.sh
index 40163adb..20714f7a 100644
--- a/tools/ci/serve.sh
+++ b/tools/ci/serve.sh
@@ -1,11 +1,11 @@
#!/bin/bash
# Sourced, not run: it leaves the PHP server in the caller's background and exports
-# GAME_MAKER_BASE_URL, which every tool reads.
+# FEUERWERK_BASE_URL, which every tool reads.
#
# The build wires its assets absolutely under /feuerwerk/dist/, so the checkout has to be
# served under that path segment – hence the symlink into /srv rather than `-t .`.
-export GAME_MAKER_BASE_URL=http://127.0.0.1:8080/feuerwerk/
+export FEUERWERK_BASE_URL=http://127.0.0.1:8080/feuerwerk/
feuerwerk_serve() {
local root
@@ -30,27 +30,27 @@ feuerwerk_serve() {
# A server from an earlier step of the same job is fine to keep. Asked of the one route that
# answers without a session, so "is it up" does not depend on being signed in.
- if curl -sf "${GAME_MAKER_BASE_URL}api/index.php?r=auth/session" >/dev/null 2>&1; then
- echo "server already up at $GAME_MAKER_BASE_URL"
+ if curl -sf "${FEUERWERK_BASE_URL}api/index.php?r=auth/session" >/dev/null 2>&1; then
+ echo "server already up at $FEUERWERK_BASE_URL"
return 0
fi
mkdir -p /srv && ln -sfn "$root" /srv/feuerwerk
# Uploaded videos are converted by the worker (#402); on stein2 that is the container
- # game-maker-video, here a process beside the server.
+ # feuerwerk-video, here a process beside the server.
php "$root/tools/video-worker.php" "$root/data" >/tmp/video-worker.log 2>&1 &
# Without workers the single-threaded dev server stalls: the editor fetches project and
# textures in parallel. The router serves videos with Range requests, see there.
PHP_CLI_SERVER_WORKERS=8 php -S 0.0.0.0:8080 -t /srv "$root/tools/ci/router.php" >/tmp/php-server.log 2>&1 &
for _ in $(seq 60); do
- curl -sf "${GAME_MAKER_BASE_URL}api/index.php?r=auth/session" >/dev/null 2>&1 && break
+ curl -sf "${FEUERWERK_BASE_URL}api/index.php?r=auth/session" >/dev/null 2>&1 && break
sleep 0.5
done
- if ! curl -sf "${GAME_MAKER_BASE_URL}api/index.php?r=auth/session" >/dev/null 2>&1; then
+ if ! curl -sf "${FEUERWERK_BASE_URL}api/index.php?r=auth/session" >/dev/null 2>&1; then
echo "the server never came up" >&2
tail -20 /tmp/php-server.log >&2
return 1
fi
- echo "serving $root at $GAME_MAKER_BASE_URL"
+ echo "serving $root at $FEUERWERK_BASE_URL"
}
diff --git a/tools/e2e/66-video.mjs b/tools/e2e/66-video.mjs
index eb77ac09..a3e86f44 100644
--- a/tools/e2e/66-video.mjs
+++ b/tools/e2e/66-video.mjs
@@ -5,7 +5,7 @@ import { sampleZoom } from './lib/zoomTransition.mjs';
/**
* Videos (#402). A WebM goes up and the worker turns it into an MP4 (in CI beside the PHP server,
- * on stein2 in the container game-maker-video). "+ → Video" offers it with what it is; Use makes
+ * on stein2 in the container feuerwerk-video). "+ → Video" offers it with what it is; Use makes
* the asset and opens its tab, which shows the picture. A drag in the clip strip spans a clip, one
* undo step. A sprite wearing the clip plays only that stretch, over and over, without sound in the
* editor; Play starts it over from the clip's start and lets it be heard, Esc makes it quiet again.
diff --git a/tools/lib/auth.mjs b/tools/lib/auth.mjs
index f428dab3..c14cf4f6 100644
--- a/tools/lib/auth.mjs
+++ b/tools/lib/auth.mjs
@@ -2,7 +2,7 @@
* Signing the check tools in. Since #177 every API route but `auth/*` needs a session, so every
* seed, smoke and e2e run logs in first – as `e2e`, the account that owns the four test projects.
*
- * The password is never in the repo: it comes from `GAME_MAKER_E2E_PASSWORD` or from
+ * The password is never in the repo: it comes from `FEUERWERK_E2E_PASSWORD` or from
* `data/e2e-password.txt`, which is git-ignored and written once per server (CI writes its own).
*/
import { readFile } from 'node:fs/promises';
@@ -23,26 +23,26 @@ const cookies = new Map();
/** The password of the `e2e` account; the step that drives the sign-in screen types it in. */
export async function e2ePassword() {
- const fromEnv = process.env.GAME_MAKER_E2E_PASSWORD;
+ const fromEnv = process.env.FEUERWERK_E2E_PASSWORD;
if (fromEnv) return fromEnv;
try {
return (await readFile(PASSWORD_FILE, 'utf8')).trim();
} catch {
throw new Error(
- `no password for the "${E2E_USER}" account: set GAME_MAKER_E2E_PASSWORD or put it in ${PASSWORD_FILE}`,
+ `no password for the "${E2E_USER}" account: set FEUERWERK_E2E_PASSWORD or put it in ${PASSWORD_FILE}`,
);
}
}
-/** The password of `e2e-admin`, from `GAME_MAKER_E2E_ADMIN_PASSWORD` or `data/e2e-admin-password.txt`. */
+/** The password of `e2e-admin`, from `FEUERWERK_E2E_ADMIN_PASSWORD` or `data/e2e-admin-password.txt`. */
export async function e2eAdminPassword() {
- const fromEnv = process.env.GAME_MAKER_E2E_ADMIN_PASSWORD;
+ const fromEnv = process.env.FEUERWERK_E2E_ADMIN_PASSWORD;
if (fromEnv) return fromEnv;
try {
return (await readFile(ADMIN_PASSWORD_FILE, 'utf8')).trim();
} catch {
throw new Error(
- `no password for the "${E2E_ADMIN}" account: set GAME_MAKER_E2E_ADMIN_PASSWORD or put it in ${ADMIN_PASSWORD_FILE}`,
+ `no password for the "${E2E_ADMIN}" account: set FEUERWERK_E2E_ADMIN_PASSWORD or put it in ${ADMIN_PASSWORD_FILE}`,
);
}
}
diff --git a/tools/lib/browser.mjs b/tools/lib/browser.mjs
index 96c71c4a..43dcd050 100644
--- a/tools/lib/browser.mjs
+++ b/tools/lib/browser.mjs
@@ -30,7 +30,7 @@ const HEADLESS = [
];
/**
- * GAME_MAKER_BROWSER=wsl, for a runner inside WSL2 (#283). There the GPU is /dev/dxg behind Mesa's
+ * FEUERWERK_BROWSER=wsl, for a runner inside WSL2 (#283). There the GPU is /dev/dxg behind Mesa's
* d3d12 driver: no DRM render node, no Vulkan. Headless chromium finds no surface and gets no WebGL,
* an X11 chromium on ANGLE/GL does. So this mode brings its own invisible X server.
*
@@ -49,7 +49,7 @@ const WSL = [
/** Starts chromium with the CDP port open; `proc.stderr` carries its last words. */
export async function launchBrowser({ port, width, height }) {
- const wsl = process.env.GAME_MAKER_BROWSER === 'wsl';
+ const wsl = process.env.FEUERWERK_BROWSER === 'wsl';
const display = wsl ? await startXvfb({ width, height }) : null;
const proc = spawn(
'chromium',
diff --git a/tools/lib/projects.mjs b/tools/lib/projects.mjs
index 595b7994..1904d2c9 100644
--- a/tools/lib/projects.mjs
+++ b/tools/lib/projects.mjs
@@ -26,13 +26,13 @@ export const DEFAULT_BASE_URL = 'https://nockal.com/feuerwerk/';
/**
* Reads `[projectId] [baseUrl]` from argv, falling back to `defaultId` and to
- * `GAME_MAKER_BASE_URL` – which is how CI points every tool at its own server without
+ * `FEUERWERK_BASE_URL` – which is how CI points every tool at its own server without
* repeating the project ids in shell scripts. Targeting the playground aborts: no tool may
* overwrite or mutate it.
*/
export function cliArgs(script, defaultId) {
const projectId = process.argv[2] ?? defaultId;
- const baseUrl = process.argv[3] ?? process.env.GAME_MAKER_BASE_URL ?? DEFAULT_BASE_URL;
+ const baseUrl = process.argv[3] ?? process.env.FEUERWERK_BASE_URL ?? DEFAULT_BASE_URL;
if (projectId === PROJECTS.playground) {
console.error(`refusing to run ${script} against the playground project (${PROJECTS.playground}).`);
process.exit(2);
diff --git a/tools/video-worker.php b/tools/video-worker.php
index 1a4f1316..e6953f95 100644
--- a/tools/video-worker.php
+++ b/tools/video-worker.php
@@ -7,7 +7,7 @@ declare(strict_types=1);
* php tools/video-worker.php [datadir] keeps watching the queue
* php tools/video-worker.php [datadir] --once converts what waits now, then stops
*
- * On stein2 it runs in the container `game-maker-video` (tools/video/), in CI beside the PHP
+ * On stein2 it runs in the container `feuerwerk-video` (tools/video/), in CI beside the PHP
* server (tools/ci/serve.sh). Both need ffmpeg and ffprobe on the PATH.
*/
diff --git a/tools/video/Dockerfile b/tools/video/Dockerfile
index 41626af2..8d95dd1b 100644
--- a/tools/video/Dockerfile
+++ b/tools/video/Dockerfile
@@ -1,11 +1,11 @@
-# The image of the container `game-maker-video` (#402): PHP and ffmpeg, nothing else. The worker
+# The image of the container `feuerwerk-video` (#402): PHP and ffmpeg, nothing else. The worker
# itself is not baked in: compose.yml mounts the checkout, so a change to tools/video-worker.php or
# api/lib/Video*.php needs a restart, not a rebuild.
#
# The same Debian as the CI image (tools/ci/Dockerfile), so CI converts with the same ffmpeg.
# Built on stein2 like that one, for the same reasons (dead DNS in the default bridge network):
#
-# DOCKER_BUILDKIT=0 docker build --network git_default -t game-maker-video:latest tools/video
+# DOCKER_BUILDKIT=0 docker build --network git_default -t feuerwerk-video:latest tools/video
FROM debian:12-slim
RUN apt-get update && apt-get install -y --no-install-recommends php-cli php-mbstring ffmpeg \
diff --git a/tools/video/compose.yml b/tools/video/compose.yml
index af8d8cc1..aff28a3a 100644
--- a/tools/video/compose.yml
+++ b/tools/video/compose.yml
@@ -4,18 +4,18 @@
#
# It works on the checkout itself (the folder nginx serves), as www-data like the PHP container, so
# the files it writes belong to the same user. It needs no network.
-name: game-maker-video
+name: feuerwerk-video
services:
- game-maker-video:
- container_name: game-maker-video
- image: game-maker-video:latest
+ feuerwerk-video:
+ container_name: feuerwerk-video
+ image: feuerwerk-video:latest
restart: unless-stopped
network_mode: none
user: '33:33'
- working_dir: /srv/game-maker
+ working_dir: /srv/feuerwerk
volumes:
- - ../..:/srv/game-maker
- command: ['php', 'tools/video-worker.php', '/srv/game-maker/data']
+ - ../..:/srv/feuerwerk
+ command: ['php', 'tools/video-worker.php', '/srv/feuerwerk/data']
# A 1080p conversion takes all four cores otherwise, and the web stack shares them.
cpus: 3