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 -[![game-maker](https://git.nockal.com/meleki/game-maker/actions/workflows/ci.yml/badge.svg?branch=main)](https://git.nockal.com/meleki/game-maker/actions?workflow=ci.yml) +[![feuerwerk](https://git.nockal.com/meleki/feuerwerk/actions/workflows/ci.yml/badge.svg?branch=main)](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