MkDocs site for agntcy/dir, published at https://agntcy.github.io/dir/ with a version selector (latest release by default, older releases in the dropdown).
| Path | Purpose |
|---|---|
content/ |
Published Markdown |
mkdocs/ |
MkDocs config, uv project, theme overrides |
Taskfile.yml |
Build, serve, lint, and local mike preview tasks |
Lint checks run on published nav content (content/index.md, content/community.md, and content/dir/), not orphan pages under content/.
task docs:run # live preview while editing (no version dropdown)
task docs:build # static site → .build/site
task docs:ci # build + lint (same as PR CI)
task docs:test # lint only
task docs:mike:deploy-local # versioned preview on local gh-pages (no push)
task docs:mike:serve # serve local gh-pages (after deploy-local)From docs/:
task run
task -t Taskfile.yml ciAll build, lint, and deploy logic lives in Taskfile.yml. The GitHub Actions workflows are thin: they provision tools (uv, task, lychee) and call task entries. Dependencies come from mkdocs/pyproject.toml / mkdocs/uv.lock via task → uv sync.
.github/workflows/reusable-docs.yml— reusable pipeline (workflow_call) with amodeinput (ci/deploy-dev/deploy-release); holds the shared setup + task calls..github/workflows/docs-ci.yaml— on pull requests, calls the reusable pipeline withmode: ci..github/workflows/docs-deploy.yml— on push tomain,v*.*.*tags, releases, and manual dispatch; resolves the mode/version from the event and calls the reusable pipeline.
| Trigger | Mode | Task(s) invoked | Effect |
|---|---|---|---|
Pull request (touching docs/** or the workflows) |
ci |
task docs:ci |
Build + lint (codespell, pymarkdown, lychee). No deploy. |
Push to main |
deploy-dev |
task docs:ci + docs:deploy:dev + docs:deploy:root-files |
Build + lint, then mike deploy --push dev (the dev version). Never touches latest. |
Release published / v*.*.* tag / manual dispatch |
deploy-release |
task docs:deploy:release VERSION=<v> + docs:deploy:root-files |
mike deploy --push --update-aliases <version> latest then mike set-default latest, so https://agntcy.github.io/dir/ opens the latest release. |
Deploys use mike to push each version into a subdirectory of the gh-pages branch (the version ledger). dev is published as its own version (push to main) and latest is an alias of the newest release. With alias_type: copy plus canonical_version: latest, the latest alias is a full standalone copy of the release version, so both /dev/ and /latest/ serve content in place (HTTP 200, no redirect). Older versions stay in the dropdown; prune with mike delete when retiring doc releases. The docs:deploy:* tasks push to the remote, so they refuse to run outside CI unless ALLOW_DOCS_PUSH=1 is set; root-file publishing reads its token from the GH_TOKEN environment variable (REPO_SLUG selects the repo).
One-time migration: an earlier setup used
alias_type: redirectand publisheddevas an alias of amainversion, so/dev/and/latest/bounced via HTTP redirect. After this change, runmike delete --push mainonce (CI orALLOW_DOCS_PUSH=1) to drop the stalemainversion, then let the nextmainpush (dev) and release (latest) redeploy so thelatestalias is recreated as an in-place copy.
GitHub Pages serves directly from the gh-pages branch (Settings → Pages → Build and deployment → Deploy from a branch → gh-pages).
# Optional: fetch existing versions from origin
git fetch origin gh-pages
task docs:mike:deploy-local # deploys the current docs to local gh-pages as `dev` (no push)
task docs:mike:serve # http://127.0.0.1:8000/ with the version dropdown