zeekayandHanzo Dev e668d507f8 ci: one CI path — .hanzo/workflows
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]>
2026-07-30 17:23:27 -07:00
2026-07-26 10:16:32 -07:00
2026-06-10 18:23:14 -07:00
2026-02-14 05:27:03 -08:00
2026-03-26 22:45:36 -07:00
2026-06-28 20:58:45 -07:00
2026-03-26 22:45:36 -07:00

universe

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 — mainnet
  • do-sfo3-zoo-test-k8s — testnet
  • do-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)
S
Description
Declared state for the zoo fleet: one values file per service, one ApplicationSet
Readme
1.2 MiB
Languages
TypeScript 70.1%
Shell 21.5%
Makefile 8.4%