Publish your docs to the hub
How a subsystem repo gets its documentation onto the League Robotics hub.
This page is the complete contract for publishing a subsystem’s documentation to the League Robotics hub. If you are an AI agent working in a subsystem repo, everything you need is here — no other page required.
How the hub works
- You author docs in your own repo, under
docs/wiki/. Your repo is the source of truth. - The hub (
League-Robotics.github.io) keeps a registry,subsystems.yml, of which repos to publish. - On each build, the hub pulls every registered repo’s
docs/wiki/, renders the docs, and publishes them athttps://league-robotics.github.io/subsystems/<name>/. - The hub never writes to your repo, and you never push content to the hub. You only send a lightweight “I changed” ping that triggers a rebuild.
your repo (docs/wiki/) --- ping ("docs-updated") ---> hub pulls + renders + publishes
^ source of truth league-robotics.github.io
What your repo needs
docs/wiki/
_subsystem.yml # subsystem metadata (title, blurb)
index.md # the map: links key docs + lists open tasks (see "Keep your wiki useful")
overview.md # one or more docs; each *.md becomes one page
...
.github/workflows/
notify-docs-hub.yml # pings the hub when docs/wiki/ changes
AGENTS.md # repo-root note so the next agent knows the wiki publishes here
docs/wiki/_subsystem.yml
name: my-subsystem # stable key; match your registry entry
title: My Subsystem # display name on the hub
blurb: One sentence describing this subsystem.
order: 100 # optional — lower sorts earlier on the home page
Each docs/wiki/*.md
Every doc is normal Markdown with a front-matter header. Files whose names start with
_ are ignored (that’s how _subsystem.yml stays out of the doc list).
---
title: Deploying ROS 2 with Ansible
blurb: How to provision a ROS 2 fleet across Pi / VM / Docker hosts.
order: 10 # optional — sort order within the subsystem
slug: deploy-ros # optional — stable URL id; defaults to the filename
updated: 2026-06-13 # optional — source date; shown in the page footer
tags: [ros, ansible] # optional
---
Body markdown… (your real documentation)
| Field | Required | Meaning |
|---|---|---|
title |
yes | Heading and link text on the hub. |
blurb |
yes | One-line summary shown in the doc list. |
order |
no | Sort position within the subsystem (default 100). |
slug |
no | Stable id → /subsystems/<name>/<slug>/ (default: filename). |
updated |
no | Source date (YYYY-MM-DD); surfaced in the page footer. date also works. |
tags |
no | Free-form list, carried through to the page. |
Every rendered page already shows when the hub last generated it in the footer; updated
adds the date you last touched the source.
.github/workflows/notify-docs-hub.yml
Copy this verbatim (no edits needed — it figures out your repo name automatically):
name: Notify docs hub
on:
push:
branches: [main]
paths: ["docs/wiki/**"]
workflow_dispatch:
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Get app token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: $
private-key: $
owner: League-Robotics
repositories: League-Robotics.github.io
- name: Ping the hub to rebuild
env:
HUB_TOKEN: $
run: |
curl -sSf -X POST \
-H "Authorization: Bearer $HUB_TOKEN" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/League-Robotics/League-Robotics.github.io/dispatches \
-d '{"event_type":"docs-updated","client_payload":{"repo":"$"}}'
If your default branch isn’t
main, changebranches: [main]accordingly.
AGENTS.md (leave yourself a map)
Once the wiki is set up, drop an AGENTS.md at the root of your repo. Its job is to
tell the next agent — who may arrive months later with no context — what docs/wiki/ is,
that this repo’s docs are published to the hub, and where the authoritative instructions
live (this page). Copy this and replace <name>:
# AGENTS.md — this repo publishes docs to the League Robotics hub
Documentation for this repo lives under `docs/wiki/`. Those files are the **source of
truth**; the League Robotics docs hub *pulls* them and publishes them at
<https://league-robotics.github.io/subsystems/<name>/>. The hub never writes back here —
edit docs in this repo only.
## What to do
When you learn something a future agent will need, write it into `docs/wiki/`:
- Each `docs/wiki/*.md` is one published page and needs `title:` and `blurb:` front
matter. Files starting with `_` are not published.
- `docs/wiki/_subsystem.yml` holds this subsystem's `name` / `title` / `blurb`.
- Keep `docs/wiki/index.md` as the map: link the key docs and list open tasks / things to
remember, so the next agent finds them fast.
- Add an `updated:` date to a doc's front matter when you change it.
- Changes under `docs/wiki/**` auto-ping the hub to rebuild (see
`.github/workflows/notify-docs-hub.yml`).
## How to understand what to do
The complete contract — file formats, the notify workflow, how to register — is the
authoritative spec at **<https://league-robotics.github.io/publishing/>**. Start there.
Keep your wiki useful for the next agent
The wiki isn’t just public docs — it’s the durable memory for agents working in this repo. Two habits keep it that way:
- Index your knowledge base. As soon as you have more than a handful of docs — design
notes, decisions, open tasks, gotchas a future agent must not forget — add a top-level
docs/wiki/index.mdwithorder: 0that links the important pages and lists the outstanding work. It sorts first, so it’s the obvious entry point. How you organize it doesn’t matter; that it’s discoverable does. - Date your pages. Make it clear when each page was written or published. The hub
stamps every rendered page with the date it was generated (in the footer). To also show
when you last revised the source, set
updated:(ordate:) in the doc’s front matter — see the field table above.
Authentication (one org-wide GitHub App)
Both the hub (pulling repos) and your repo (pinging the hub) authenticate with a single League Robotics Docs GitHub App installed across the org. Each workflow mints a short-lived, least-privilege token at run time — there are no long-lived personal tokens.
An org admin sets this up once (see the hub README). After that, the org-level
vars.DOCS_HUB_APP_ID and secrets.DOCS_HUB_APP_PRIVATE_KEY referenced above are already
available to your repo — you don’t create any secrets yourself.
Get registered
Open a pull request against the hub adding your repo to
subsystems.yml:
subsystems:
- name: my-subsystem
repo: League-Robotics/my-repo
branch: main
docs_path: docs/wiki # optional, this is the default
Once merged, your docs appear at https://league-robotics.github.io/subsystems/my-subsystem/
on the next build (your ping triggers one automatically).
Troubleshooting
- My docs aren’t showing up. Confirm your repo is in
subsystems.yml, thebranchmatches, anddocs/wiki/_subsystem.ymlexists. A subsystem with nodocs/wiki/is skipped (the hub build logs a warning but still deploys everyone else). - A page is missing. Check that the file ends in
.md, doesn’t start with_, and has valid front matter withtitle/blurb. - The hub didn’t rebuild after I pushed. The notify workflow only fires on changes under
docs/wiki/**. Run it manually from the Actions tab (workflow_dispatch), or an admin can re-run the hub’s build manually.