commit 17b9f7d2c88628f75d0008dc33c1a25a1e15f254 Author: Zsolt Tasnadi Date: Sat Aug 1 17:20:12 2026 +0200 initial commit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fad4595 --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +# TTG devarea — workspace-kezelő targetek +# +# A workspace gyökere alapból a devarea szülőkönyvtára; felülírható: +# make clone ROOT=/path/to/workspace + +SHELL := /bin/bash +SCRIPTS := scripts +ROOT ?= $(abspath ..) + +.DEFAULT_GOAL := help + +.PHONY: help tea clone check setup + +help: ## Elérhető targetek listája + @echo "TTG devarea — használat: make " + @echo + @grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | \ + awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-8s\033[0m %s\n", $$1, $$2}' + +tea: ## tea (Gitea CLI) telepítése és login ellenőrzése + @$(SCRIPTS)/install-tea.sh + +clone: ## Összes repo klónozása a workspace-be (ROOT-tal felülírható) + @$(SCRIPTS)/clone-repos.sh $(ROOT) + +check: ## Klón lista összevetése a Gitea szerverrel + @$(SCRIPTS)/check-repos.sh + +setup: tea clone check ## Teljes setup: tea + klónozás + ellenőrzés diff --git a/WIKI_CONNECTION.md b/WIKI_CONNECTION.md new file mode 100644 index 0000000..beea079 --- /dev/null +++ b/WIKI_CONNECTION.md @@ -0,0 +1,60 @@ +# Wiki Connections + +Azok a mappák (repók) ebben a workspace-ben, amelyekhez **már létezik** wiki oldal a `wiki-pages` mirrorban. A wiki **Grav CMS**-en fut, a tartalom sémája: `wiki-pages/pages/<út>/default.md`. A wiki bázis URL: `https://wiki.teletypegames.org/` (az oldalak belső linkjei alapján `/en/` előtag nélkül). + +A workspace 2026-08-01-én kategória-mappákba lett rendezve: `demos/`, `games/`, `media/`, `tools/`, `tools_bbs/`, `tools_build/`, `tools_libs/`, `archive/`; a `teletypegames`, a `wiki-pages` és a `devarea` a gyökérben van. A táblázat első oszlopa a workspace-relatív út. + +Ez a fájl a `devarea` repóban (`tools/devarea`) él. A repó `scripts/` mappájában vannak a workspace-kezelő scriptek (`clone-repos.sh` — a teljes workspace klónozása ebben a struktúrában a `repos.list` alapján; `check-repos.sh` — a lista összevetése a Gitea szerverrel; `install-tea.sh` — tea CLI telepítés), amelyeket a gyökérben lévő `Makefile` köt össze (`make help`). A táblázat útvonalai a workspace gyökeréhez (a `devarea` szülőmappájához) képest értendők. + +| Mappa | Title | Wiki fájl | URL | +|---|---|---|---| +| `demos/bevy-demo` | Bevy | `wiki-pages/pages/development/bevy/default.md` | https://wiki.teletypegames.org/development/bevy | +| `demos/c64-demo` | Teletype Games C64 Demo | `wiki-pages/pages/projects/c64-demo/default.md` | https://wiki.teletypegames.org/projects/c64-demo | +| `demos/inkwell-demo` | inkwell | `wiki-pages/pages/development/ebitengine/inkwell/default.md` | https://wiki.teletypegames.org/development/ebitengine/inkwell | +| `demos/phaser-demo` | Phaser | `wiki-pages/pages/development/phaser/default.md` | https://wiki.teletypegames.org/development/phaser | +| `games/blessingofra` | Blessing of Ra | `wiki-pages/pages/projects/blessingofra/default.md` | https://wiki.teletypegames.org/projects/blessingofra | +| `games/impostor` | Definitely Not an Impostor | `wiki-pages/pages/projects/impostor/default.md` | https://wiki.teletypegames.org/projects/impostor | +| `games/rabbitc64` | Rabbit Scooter — C64 | `wiki-pages/pages/projects/rabbitc64/default.md` | https://wiki.teletypegames.org/projects/rabbitc64 | +| `games/rabbitroller` | Rabbit Roller | `wiki-pages/pages/projects/rabbitroller/default.md` | https://wiki.teletypegames.org/projects/rabbitroller | +| `games/realworld` | Real World | `wiki-pages/pages/projects/realworld/default.md` | https://wiki.teletypegames.org/projects/realworld | +| `media/nokiapunk` | Nokia-Punk | `wiki-pages/pages/projects/neumatronic-universe/universe/nokia-punk/default.md` | https://wiki.teletypegames.org/projects/neumatronic-universe/universe/nokia-punk | +| `teletypegames` | Public site | `wiki-pages/pages/infrastructure/public-site/default.md` | https://wiki.teletypegames.org/infrastructure/public-site | +| `tools/backup-scripts` | Backup scripts | `wiki-pages/pages/infrastructure/backup/default.md` | https://wiki.teletypegames.org/infrastructure/backup | +| `tools/statusbot` | Discord Thread Scheduler | `wiki-pages/pages/others/statusbot/default.md` | https://wiki.teletypegames.org/others/statusbot | +| `tools/updater` | Discord Updater Bot | `wiki-pages/pages/others/updater/default.md` | https://wiki.teletypegames.org/others/updater | +| `tools_bbs/bbs-server` | BBS Server | `wiki-pages/pages/infrastructure/bbs/default.md` | https://wiki.teletypegames.org/infrastructure/bbs | +| `tools_bbs/impostor-bbs` | BBS (Game 1.5) | `wiki-pages/pages/projects/neumatronic-universe/arcs/norman-arc/games/015-bbs/default.md` | https://wiki.teletypegames.org/projects/neumatronic-universe/arcs/norman-arc/games/015-bbs | +| `tools_bbs/sermo-bbs` | Sermo OS Showcase | `wiki-pages/pages/projects/neumatronic-universe/scratchpad/sermo-os/default.md` | https://wiki.teletypegames.org/projects/neumatronic-universe/scratchpad/sermo-os | +| `tools_build/bevy-tools` | Bevy | `wiki-pages/pages/development/bevy/default.md` | https://wiki.teletypegames.org/development/bevy | +| `tools_build/c64-tools` | Commodore 64 | `wiki-pages/pages/development/c64/default.md` | https://wiki.teletypegames.org/development/c64 | +| `tools_build/ebitengine-tools` | Ebitengine | `wiki-pages/pages/development/ebitengine/default.md` | https://wiki.teletypegames.org/development/ebitengine | +| `tools_build/godot-tools` | Godot | `wiki-pages/pages/development/godot/default.md` | https://wiki.teletypegames.org/development/godot | +| `tools_build/love-tools` | Löve | `wiki-pages/pages/development/love/default.md` | https://wiki.teletypegames.org/development/love | +| `tools_build/phaser-tools` | Phaser | `wiki-pages/pages/development/phaser/default.md` | https://wiki.teletypegames.org/development/phaser | +| `tools_build/tic80-tools` | TIC-80 | `wiki-pages/pages/development/tic80/default.md` | https://wiki.teletypegames.org/development/tic80 | +| `tools_build/tic80pro-dockerfile` | TIC-80 | `wiki-pages/pages/development/tic80/default.md` | https://wiki.teletypegames.org/development/tic80 | +| `tools_libs/inkwell` | inkwell | `wiki-pages/pages/development/ebitengine/inkwell/default.md` | https://wiki.teletypegames.org/development/ebitengine/inkwell | +| `tools_libs/rubbs` | rubbs | `wiki-pages/pages/others/rubbs/default.md` | https://wiki.teletypegames.org/others/rubbs | +| `wiki-pages` | Wiki Site | `wiki-pages/pages/infrastructure/wiki-site/default.md` | https://wiki.teletypegames.org/infrastructure/wiki-site | + +## Megjegyzések + +- **Struktúraváltás**: a korábbi Wiki.js mirror (`wiki-pages/wiki/<út>.md`) helyett a wiki most Grav CMS-en fut, `wiki-pages/pages/<út>/default.md` sémával. Az oldal wiki-útvonala a frontmatter `wikipath` mezőjében is szerepel. +- **pncdsl → inkwell átnevezés**: a korábbi `pncdsl` repó `inkwell` néven él tovább (`tools_libs/inkwell`), a `pncdsl-demo` pedig `inkwell-demo` néven (`demos/inkwell-demo`). A wiki oldal is átköltözött: `development/ebitengine/pncdsl` → `development/ebitengine/inkwell` (mindkét repót ugyanaz az oldal dokumentálja: framework-bemutató + companion demo). +- A `games/realworld` repóhoz a `projects/realworld` oldal(fa) a fejlesztői/projekt doksi (login-védett, aloldalak: catalog, entities, story); emellett létezik a NU lore-oldala is: `projects/neumatronic-universe/arcs/norman-arc/games/02-realworld`. +- A `*-tools` repók korábbi külön `pipeline.md` + `makefile.md` oldalai **beolvadtak** az engine-átfogó oldalakba (`development/ebitengine`, `development/love`, `development/tic80`): egy oldalon van az engine-bemutató, a Makefile-doksi és a CI pipeline. +- A `tic80pro-dockerfile` repónak nincs többé önálló `builder-image` oldala; a TIC-80 Pro builder image (`git.teletype.hu/internal/tic80pro`) a TIC-80 oldal pipeline/export szekciójában van dokumentálva. +- Az `impostor` repóhoz a fejlesztői doksi a `projects/impostor` oldal(fa) (adatlap: git repo, Redmine, Woodpecker + alávetett howto/design oldalak); emellett létezik a Neumatronic Universe **lore-oldala** is: `projects/neumatronic-universe/arcs/norman-arc/games/01-definitely-not-an-impostor`. +- Az `impostor-bbs` esetében a wiki oldal továbbra is a NU lore-oldal (Game 1.5), nem klasszikus repó-dokumentáció. +- A `sermo-bbs` repóhoz (rubbs-alapú SERMO-DOS telnet szimulátor) a kapcsolódó oldal a Sermo OS Showcase design-/lore-doksi (a testvéroldala a `scratchpad/sermo-os2`), nem klasszikus repó-dokumentáció. +- A `media/nokiapunk` mappa a Nokia-Punk oldalhoz tartozó valós referenciafotókat tartalmazza (Apple II, ThinkPad, Nokia Communicator stb.); az oldal ezekre az eszközökre hivatkozik. +- A `teletypegames` repo monorepo (`apps/api`: Rails 8 Catalog API + ActiveAdmin, `apps/frontend`: Vue 3 SPA), amelyet az `infrastructure/public-site` oldal ír le. +- A `blog-writer` repó korábbi oldala (`others/blog-writer`) **megszűnt** — jelenleg nincs hozzá wiki oldal. +- A `c64-demo`, `rabbitc64`, `rabbitroller` és `blessingofra` repók projekt oldalai 2026-07-28-án készültek (adatlap + ismertető + irányítás + build, az `impostor`/`realworld` oldalak formátumában). A projekt oldalak login-védettek, és a sidebar Projects szekciójában is szerepelnek (`config/sitenav.yaml`). +- A `c64-tools` repót a `development/c64` oldal dokumentálja (ACME + VICE toolchain, közös Makefile, CI pipeline) — az engine-oldalak mintájára; az oldal a három C64 projektre is linkel. +- A `rabbitc64` a `rabbitroller` C64 portja; mindkettőnek saját projekt oldala van, kereszthivatkozásokkal. +- A `wiki-pages` repó (maga a wiki: Grav + fetcher + BBS front-end) önmagát az `infrastructure/wiki-site` oldalon dokumentálja. +- A `bevy-tools` / `bevy-demo` és a `phaser-tools` / `phaser-demo` repókat (2026-07-31) az engine-átfogó `development/bevy`, ill. `development/phaser` oldalak dokumentálják — a demók külön projekt oldal nélkül, az inkwell/inkwell-demo mintájára. Mindkét oldal szerepel a sidebar Development szekciójában (`config/sitenav.yaml`). +- Az `demos/ebitengine-demo` határeset: a `development/bevy` és `development/phaser` oldalak hivatkoznak rá ("the same demo"), és a `development/ebitengine` oldal példaprojektje is (`ebitenginedemo`), de az oldalnak nincs a bevy/phaser oldalakéhoz hasonló, a demót bemutató reference-project szekciója. +- A `games/nyuller` repó 2026-08-01-én lett leklónozva a Giteáról (`games/nyuller`); wiki oldala nincs. +- **Wiki oldal nélküli mappák** (nem szerepelnek a táblázatban): `devarea`; `archive/mranderson`; `demos/c64-demo-cpp`, `demos/escoria-demo-game-main`, `demos/love-demo`, `demos/new-game-wireframe`, `demos/trickster-tiles`; `games/bombexpert`, `games/nyuller`, `games/pong`; `media/impostor-info`; `tools/blog-writer`, `tools/nginx-conf`, `tools/redmine-tree`, `tools/social-updater`, `tools/tic80-draw-image`, `tools/ttg-marketplace`; `tools_libs/gorpg`. diff --git a/scripts/check-repos.sh b/scripts/check-repos.sh new file mode 100755 index 0000000..a2e419c --- /dev/null +++ b/scripts/check-repos.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# +# Összeveti a scripts/repos.list klón listát a Gitea szerver tartalmával +# (tea repo list --output json). +# +# - HIÁNYZIK: a szerveren létezik, de nincs a klón listában és a +# repos.ignore-ban sem +# - FELESLEG: a listában Gitea repóként szerepel, de a szerveren nincs +# +# Kilépési kód: 0, ha minden stimmel; 1, ha bármelyik listában van találat. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +LIST="$SCRIPT_DIR/repos.list" +IGNORE="$SCRIPT_DIR/repos.ignore" +GITEA_HOST="git.teletypegames.org" + +command -v tea >/dev/null 2>&1 || { + echo "HIBA: nincs tea CLI. Futtasd: make tea" >&2 + exit 1 +} + +# Szerveren lévő repók: owner/name +server=$(tea repo list --output json --limit 1000 | jq -r '.[] | .owner + "/" + .name' | sort) + +# A klón listában szereplő Gitea repók: owner/name a clone URL-ből +listed=$(sed -nE "s#^[^|#]+\|ssh://git@${GITEA_HOST}:[0-9]+/(.+)\$#\1#p" "$LIST" | sed 's/\.git$//' | sort) + +# Szándékosan kihagyott repók +ignored=$(sed -e 's/#.*//' -e '/^[[:space:]]*$/d' "$IGNORE" 2>/dev/null | sort || true) + +missing=$(comm -23 <(echo "$server") <(sort -u <(echo "$listed") <(echo "$ignored"))) +stale=$(comm -13 <(echo "$server") <(echo "$listed")) + +status=0 + +if [ -n "$missing" ]; then + echo "HIÁNYZIK a klón listából (a szerveren létezik):" + echo "$missing" | sed 's/^/ - /' + status=1 +fi + +if [ -n "$stale" ]; then + echo "FELESLEG a klón listában (a szerveren nincs):" + echo "$stale" | sed 's/^/ - /' + status=1 +fi + +if [ "$status" -eq 0 ]; then + echo "OK: a klón lista lefedi a szerver mind a(z) $(echo "$server" | wc -l | tr -d ' ') repóját ($(echo "$ignored" | grep -c . || true) szándékosan kihagyva)." +fi + +exit "$status" diff --git a/scripts/clone-repos.sh b/scripts/clone-repos.sh new file mode 100755 index 0000000..fcd96f4 --- /dev/null +++ b/scripts/clone-repos.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# +# A TTG workspace repóinak leklónozása a kategória-mappás struktúrába +# a scripts/repos.list alapján. +# +# Használat: +# ./clone-repos.sh [cél-mappa] +# +# Cél-mappa nélkül a devarea checkout szülőkönyvtárába (a workspace +# gyökerébe) klónoz. A már létező mappákat kihagyja, így ismételten +# futtatható. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +ROOT="${1:-$(cd "$SCRIPT_DIR/../.." && pwd)}" +LIST="$SCRIPT_DIR/repos.list" + +cloned=0 +skipped=0 +failed=0 + +while IFS='|' read -r path url; do + # kommentek és üres sorok + [[ -z "$path" || "$path" == \#* ]] && continue + + target="$ROOT/$path" + + if [ -e "$target/.git" ]; then + echo "skip $path (már létezik)" + skipped=$((skipped + 1)) + continue + fi + + mkdir -p "$(dirname "$target")" + if git clone "$url" "$target"; then + cloned=$((cloned + 1)) + else + echo "HIBA $path ($url)" >&2 + failed=$((failed + 1)) + fi +done < "$LIST" + +echo +echo "Kész: $cloned klónozva, $skipped kihagyva, $failed hiba." +[ "$failed" -eq 0 ] diff --git a/scripts/install-tea.sh b/scripts/install-tea.sh new file mode 100755 index 0000000..95cd12b --- /dev/null +++ b/scripts/install-tea.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# +# A tea (Gitea CLI) telepítése, ha még nincs fent, és a login ellenőrzése. + +set -euo pipefail + +GITEA_URL="https://git.teletypegames.org" + +if command -v tea >/dev/null 2>&1; then + echo "tea már telepítve: $(command -v tea) ($(tea --version | head -1))" +else + if ! command -v brew >/dev/null 2>&1; then + echo "HIBA: nincs se tea, se Homebrew. Telepítsd kézzel:" >&2 + echo " https://gitea.com/gitea/tea/releases" >&2 + exit 1 + fi + echo "tea telepítése Homebrew-val..." + brew install tea +fi + +# Login ellenőrzés: enélkül a tea repo list nem működik. +if tea login list --output json 2>/dev/null | grep -q '"name"'; then + echo "tea login OK:" + tea login list +else + echo + echo "Még nincs tea login beállítva. Hozz létre egyet:" + echo " tea login add --name ttg --url $GITEA_URL" + echo "(token generálás: $GITEA_URL/user/settings/applications)" + exit 1 +fi diff --git a/scripts/repos.ignore b/scripts/repos.ignore new file mode 100644 index 0000000..ca83151 --- /dev/null +++ b/scripts/repos.ignore @@ -0,0 +1,4 @@ +# Szerveren létező repók, amelyeket szándékosan NEM klónozunk. +# Formátum: /, soronként egy. A check-repos.sh ezeket nem +# jelzi hiányzóként. +mr.zero/nas-website diff --git a/scripts/repos.list b/scripts/repos.list new file mode 100644 index 0000000..32d4ccb --- /dev/null +++ b/scripts/repos.list @@ -0,0 +1,59 @@ +# A TTG workspace repói: | +# A clone-repos.sh és a check-repos.sh közös adatfájlja. +# +# Nem klónozható (ezért nincs a listában): +# - demos/new-game-wireframe — lokális repo, nincs remote-ja +# - demos/escoria-demo-game-main — sima letöltött mappa, nem git repo +# - media/, archive egyéb tartalma — nem git repók +# Szándékosan kihagyott szerver-repók: lásd repos.ignore + +devarea|ssh://git@git.teletypegames.org:2222/tools/devarea +teletypegames|git@github.com:rastasi/teletypegames.git +wiki-pages|ssh://git@git.teletypegames.org:2222/internal/wiki-pages + +archive/mranderson|ssh://git@git.teletypegames.org:2222/games/mranderson + +demos/bevy-demo|ssh://git@git.teletypegames.org:2222/games/bevy-demo +demos/c64-demo|ssh://git@git.teletypegames.org:2222/games/c64-demo +demos/c64-demo-cpp|ssh://git@git.teletypegames.org:2222/games/c64-demo-cpp +demos/ebitengine-demo|ssh://git@git.teletypegames.org:2222/games/ebitengine-demo +demos/inkwell-demo|ssh://git@git.teletypegames.org:2222/games/inkwell-demo +demos/love-demo|ssh://git@git.teletypegames.org:2222/games/love-demo +demos/phaser-demo|ssh://git@git.teletypegames.org:2222/games/phaser-demo +demos/trickster-tiles|ssh://git@git.teletypegames.org:2222/games/trickster-tiles + +games/blessingofra|ssh://git@git.teletypegames.org:2222/games/blessingofra +games/bombexpert|ssh://git@git.teletypegames.org:2222/games/bombexpert +games/impostor|ssh://git@git.teletypegames.org:2222/games/impostor +games/nyuller|ssh://git@git.teletypegames.org:2222/games/nyuller +games/pong|ssh://git@git.teletypegames.org:2222/games/pong +games/rabbitc64|ssh://git@git.teletypegames.org:2222/games/rabbitc64 +games/rabbitroller|ssh://git@git.teletypegames.org:2222/games/rabbitroller +games/realworld|ssh://git@git.teletypegames.org:2222/games/realworld + +tools/backup-scripts|ssh://git@git.teletypegames.org:2222/internal/backup-scripts +tools/blog-writer|ssh://git@git.teletypegames.org:2222/tools/blog-writer +tools/nginx-conf|ssh://git@git.teletypegames.org:2222/internal/nginx-conf +tools/redmine-tree|ssh://git@git.teletypegames.org:2222/tools/redmine-tree +tools/social-updater|ssh://git@git.teletypegames.org:2222/tools/social-updater +tools/statusbot|ssh://git@git.teletypegames.org:2222/tools/statusbot +tools/tic80-draw-image|https://github.com/cxong/tic80-draw-image.git +tools/ttg-marketplace|ssh://git@git.teletypegames.org:2222/internal/ttg-marketplace +tools/updater|ssh://git@git.teletypegames.org:2222/tools/updater + +tools_bbs/bbs-server|ssh://git@git.teletypegames.org:2222/tools/bbs-server +tools_bbs/impostor-bbs|ssh://git@git.teletypegames.org:2222/games/impostor-bbs +tools_bbs/sermo-bbs|ssh://git@git.teletypegames.org:2222/internal/sermo-bbs + +tools_build/bevy-tools|ssh://git@git.teletypegames.org:2222/tools/bevy-tools +tools_build/c64-tools|ssh://git@git.teletypegames.org:2222/tools/c64-tools +tools_build/ebitengine-tools|ssh://git@git.teletypegames.org:2222/tools/ebitengine-tools +tools_build/godot-tools|ssh://git@git.teletypegames.org:2222/tools/godot-tools +tools_build/love-tools|ssh://git@git.teletypegames.org:2222/tools/love-tools +tools_build/phaser-tools|ssh://git@git.teletypegames.org:2222/tools/phaser-tools +tools_build/tic80-tools|ssh://git@git.teletypegames.org:2222/tools/tic80-tools +tools_build/tic80pro-dockerfile|git@github.com:rastasi/tic80pro-dockerfile.git + +tools_libs/gorpg|ssh://git@git.teletypegames.org:2222/games/gorpg +tools_libs/inkwell|ssh://git@git.teletypegames.org:2222/games/inkwell +tools_libs/rubbs|ssh://git@git.teletypegames.org:2222/tools/rubbs