Files
devarea/README.md
T
mr.zeroandClaude Opus 5 30e9a5a6e2 Close the desktop store item, and fix a check that had started lying
MORE_STORES item 2 is done: stores/warp-engine-desktop-store and
stores/ttg-desktop-store. The write-up records what the implementation changed
about the plan — chiefly that the `html` asset is not a downloadable archive but a
hosted directory, so a browser title becomes a menu entry that opens its page
rather than an offline install.

Separately: `check-repos.sh` reported `infra/wiki-pages` as STALE while the repo
was plainly there. Gitea caps a page at 50 items whatever `--limit` says, so
`tea repo list --limit 1000` had been quietly returning the first 50 — invisible
until today, when the estate reached 51 repos. The check now pages through, and
fails loudly if the server returns nothing at all rather than declaring the whole
workspace stale.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 10:00:41 +02:00

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, wiki-pages)
├── services/ # what runs on our server (public site, 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.