The wiki is something running on our server, not part of the server environment itself, so `wiki-pages` belongs in `services` by the org taxonomy. Transferred on the forge, and the workspace folder and the remote followed. Gitea's redirect keeps the old `infra/wiki-pages` paths resolving, so the deployed checkout and existing links still work. The clone list, the wiki file paths in the table and the folder tree in the README follow. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
104 lines
4.5 KiB
Markdown
104 lines
4.5 KiB
Markdown
# devarea
|
|
|
|
Workspace management repo for TTG: use it to clone the whole workspace in
|
|
its category-folder structure, and to verify that the clone list is in sync
|
|
with the Gitea server (`git.teletypegames.org`).
|
|
|
|
## Quick start
|
|
|
|
On a fresh machine:
|
|
|
|
```sh
|
|
mkdir TTG && cd TTG
|
|
git clone ssh://git@git.teletypegames.org:2222/tools/devarea
|
|
cd devarea
|
|
make setup # install tea + clone all repos + check
|
|
```
|
|
|
|
Repos are cloned into the parent directory of the devarea checkout (the
|
|
workspace root). To use a different target: `make clone ROOT=/path/to/workspace`.
|
|
|
|
## Make targets
|
|
|
|
| Target | What it does |
|
|
|---|---|
|
|
| `make help` | List available targets (default) |
|
|
| `make tea` | Install tea (Gitea CLI) via Homebrew if missing, and verify the login |
|
|
| `make clone` | Clone all repos based on `scripts/repos.list`; existing ones are skipped |
|
|
| `make check` | Compare the clone list against the server (`tea repo list --output json`) |
|
|
| `make setup` | All three in one: tea + clone + check |
|
|
|
|
## Scripts
|
|
|
|
All scripts live under `scripts/` and can also be run standalone:
|
|
|
|
- **`install-tea.sh`** — installs tea and verifies the login. Without a
|
|
login it prints the setup command (`tea login add --name ttg --url
|
|
https://git.teletypegames.org`).
|
|
- **`clone-repos.sh [target-dir]`** — clones every line of `repos.list`
|
|
into the given structure. Idempotent: existing clones are skipped.
|
|
- **`check-repos.sh`** — checks in both directions: repos that exist on
|
|
the server but are missing from the list (**MISSING**), and repos listed
|
|
as Gitea repos but absent from the server (**STALE**). Exits with 1 on
|
|
any hit, so it is CI-friendly. It pages through the server list: Gitea
|
|
caps a page at 50 items whatever `--limit` asks for, and before this was
|
|
fixed (2026-08-18, at 51 repos) the check quietly compared against the
|
|
first 50 and reported a real repo as STALE.
|
|
|
|
## Data files
|
|
|
|
- **`scripts/repos.list`** — the repos to clone, one per line in
|
|
`<workspace-relative path>|<clone URL>` form. New repo on the server →
|
|
add it here (`make check` will complain if it is missing). Non-Gitea
|
|
repos (GitHub) may also appear; the check skips those.
|
|
- **`scripts/repos.ignore`** — repos that exist on the server but are
|
|
intentionally not cloned (`<owner>/<name>`); the check does not report
|
|
these as missing.
|
|
|
|
## Workspace structure
|
|
|
|
Every folder is a Gitea org, one to one — that is the rule since 2026-08-16, and
|
|
it is why a repo's path in `repos.list` is simply `<org>/<name>`:
|
|
|
|
```
|
|
TTG/
|
|
├── devarea/ # this repo — has to sit here, clone-repos.sh clones into its parent
|
|
├── bbs/ # BBS servers and showcases
|
|
├── build/ # CI toolchains and builder images (*-tools)
|
|
├── demos/ # one per engine: shows a platform, not a product
|
|
├── engines/ # own engines and libraries other repos depend on
|
|
├── games/ # catalog products
|
|
├── infra/ # the server environment itself (nginx, backups)
|
|
├── services/ # what runs on our server (public site, wiki, bots)
|
|
├── stores/ # store engines and the stores built on them
|
|
├── tools/ # what one person installs and runs for themselves
|
|
├── media/ # reference images and documents — not git repos
|
|
└── memory/ # working agreements the assistants read (not a git repo)
|
|
```
|
|
|
|
Two exceptions to the one-to-one rule: `devarea` itself, which stays at the
|
|
workspace root because `clone-repos.sh` clones into its parent directory, and
|
|
`media/` + `memory/`, which are not repos at all. `repos.ignore` lists the
|
|
server-side repos that are deliberately not cloned.
|
|
|
|
The org taxonomy — what each org is for, and why a repo belongs to one rather
|
|
than another — is in [REPO_REFACT.md](REPO_REFACT.md).
|
|
|
|
## Estate documentation
|
|
|
|
These describe the estate as a whole, which is why they live here rather than in
|
|
any single repo:
|
|
|
|
- **[WIKI_CONNECTION.md](WIKI_CONNECTION.md)** — which repo is documented by
|
|
which wiki page, and which Gitea org each repo belongs to.
|
|
- **[REPO_REFACT.md](REPO_REFACT.md)** — the Gitea org structure: what each org
|
|
is for and what it contains.
|
|
- **[ECOSYSTEM_PLAN.md](ECOSYSTEM_PLAN.md)** — what we have per org towards a
|
|
complete game development lifecycle, and what is still missing.
|
|
- **[MORE_STORES.md](MORE_STORES.md)** — which further host platforms could get
|
|
a store like the Batocera one, measured against what the catalog actually
|
|
ships.
|
|
|
|
The `ttg-ops` plugin in `ttg-marketplace` reads these rather than carrying its
|
|
own copy of the rules.
|