e668d507f84c3eeea617da71d3bde51ab633d99d
Gitea collects workflows from the FIRST of WORKFLOW_DIRS that exists in the
pushed commit and ignores the rest (modules/actions/workflows.go,
listWorkflowsInDirs breaks on the first hit), so creating .hanzo/workflows
switches .github/workflows off wholesale — no run, no queued job, no error.
Every file therefore moves or dies in this one commit; nothing is left to look
like a fallback it could not be.
MIGRATED, unchanged apart from the label form and the notes below:
ci.yml (the Layer-2 deploy + E2E orchestrator), build-service.yml (the Layer-1
reusable), service-released.yml and update-image.yml (the two repository_dispatch
auto-bump shapes). Their runner label was already right — zoo-build-linux-amd64
is what the fleet advertises — and is now written in the list form the rest of
the fleet uses.
FIXED — service-released.yml HAS NEVER PARSED. Its `gh pr create --body`
markdown table sat at column 0 inside a block scalar indented to column 10, so
the scalar terminated at the table and the `|` was read as a second block
indicator:
yaml.scanner.ScannerError: while scanning a block scalar
expected a comment or a line break, but found 'f' (line 132, col 3)
That is why every single run of it is a failure. The table is now indented into
the scalar, which YAML strips back off, so the shell and the rendered PR body
are byte-identical to what was intended and the file loads.
DELETED — renovate.yml, and renovate.json with it. A `*/15 * * * *` cron, so 96
runs a day against the shared amd64 pool, for an inherited dependency bot we do
not use; it was measured at 83 runs in the last 24 hours, more than any real
pipeline on this forge. Its config file goes too rather than sit behind a bot
that is not there.
The reusable's PATH is part of its contract, so moving it is a caller-visible
change: services/actions.ResolveUses enforces the WORKFLOW_DIRS allowlist on
`uses:` paths, which means .github/workflows would have stopped resolving at the
narrowing anyway. Searched across the zooai org by both spellings — zoolabs/ and
zooai/ — and nothing outside this repo referenced it; the only hits were the
file itself and a comment in ci.yml. Callers now use
zooai/universe/.hanzo/workflows/build-service.yml@main.
build-push's matrix no longer carries the runner label. It still carries `arch`,
which is part of the published image tag (…-amd64), but which label the fleet
advertises is a fleet fact rather than a tag fact, and behind
${{ matrix.runner }} the one thing worth grepping for could not be grepped.
Concurrency groups added where they were missing: one in-flight bump per
service, never cancelled between `git push` and `gh pr create`, and one build
per calling service so two services do not serialise behind each other.
Co-authored-by: Hanzo Dev <[email protected]>
Zoo Universe
Infrastructure orchestration for Zoo Labs Foundation.
Architecture
zoo.ngo — Marketing site (Vite SPA)
zoo.exchange — DEX (Vite + Tamagui)
zoo.network — Zoo Network validators
zoo.wallet — Browser extension + mobile + web wallet
docs.zoo.ngo — Documentation (fumadocs)
zips.zoo.ngo — Zoo Improvement Proposals
Local Development
docker compose up # All services
docker compose up ngo # Just the website
Production (DOKS)
Three clusters:
do-sfo3-zoo-k8s— mainnetdo-sfo3-zoo-test-k8s— testnetdo-sfo3-zoo-dev-k8s— devnet
Deploy:
./deploy.sh mainnet
./deploy.sh testnet
./deploy.sh devnet
Repos
| Repo | Package | Purpose |
|---|---|---|
| zoo/ngo | @zooai/ngo-web | Marketing site |
| zoo/exchange | @zooai/exchange | DEX frontend |
| zoo/wallet | @zooai/wallet | Wallet (ext + mobile + web) |
| zoo/ui | @zooai/ui + @zooai/gui | Design system |
| zoo/node | — | Rust blockchain node |
| zoo/docs | @zoo/docs | Documentation |
| zoo/ZIPs | — | Improvement Proposals |
| zoo/papers | — | Research papers (47) |
| zoo/formal | — | Formal proofs (20) |
Description
Declared state for the zoo fleet: one values file per service, one ApplicationSet
1.2 MiB
Languages
TypeScript
70.1%
Shell
21.5%
Makefile
8.4%