Add a public API wiki at /wiki
CI / lint (push) Canceled after 0s
CI / typecheck (push) Canceled after 0s
CI / unit-tests (push) Canceled after 0s
CI / integration-tests (push) Canceled after 0s
CI / container-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s

Builds docs/ into a static site via mkdocs + mkdocs-material in its own
Docker build stage (docs-builder), so mkdocs itself never ends up in the
runtime image -- only the rendered HTML does, mounted at /wiki alongside
the existing /docs OpenAPI schema (unconditionally, unlike /docs, since
this is curated content meant to be public regardless of
AURORA_API_DOCS_ENABLED).

docs/aurora-core-spec.md (the internal build spec, referenced by "section
N" comments throughout the codebase) is excluded from the built site
entirely via exclude_docs, not just left out of the nav -- it was never
meant for public consumption.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
NixReaper
2026-09-06 06:04:59 -05:00
co-authored by Claude Sonnet 5
parent 4403305da6
commit 56a03f9cfe
7 changed files with 113 additions and 1 deletions
+2
View File
@@ -21,3 +21,5 @@ Thumbs.db
.idea/ .idea/
.vscode/ .vscode/
media_cache/ media_cache/
site/
/wiki/
+11
View File
@@ -94,6 +94,17 @@ app.mount(
name="media", name="media",
) )
# Public API documentation (mkdocs, built from docs/ -- see
# docker/api.Dockerfile's docs-builder stage and mkdocs.yml). Unlike /docs
# (the auto-generated OpenAPI schema, gated by AURORA_API_DOCS_ENABLED
# since it can reveal more raw internal detail), this is curated,
# intentionally public content -- always mounted regardless of that flag.
# The directory only exists in the built Docker image; ensure it's present
# so a local dev server that hasn't run `mkdocs build` doesn't crash on
# startup, same reasoning as MEDIA_ROOT above.
Path("wiki").mkdir(parents=True, exist_ok=True)
app.mount("/wiki", StaticFiles(directory="wiki", html=True), name="wiki")
@app.middleware("http") @app.middleware("http")
async def request_context_middleware( async def request_context_middleware(
+10
View File
@@ -23,6 +23,15 @@ COPY app ./app
# import string against the CWD regardless. # import string against the CWD regardless.
RUN pip install --no-cache-dir -e . RUN pip install --no-cache-dir -e .
# Builds the /wiki static site (mkdocs) in its own stage so mkdocs and its
# dependencies never end up in the runtime image -- only the rendered HTML
# does, copied in below.
FROM base AS docs-builder
RUN pip install --no-cache-dir mkdocs mkdocs-material
COPY mkdocs.yml ./
COPY docs ./docs
RUN mkdocs build --strict -d /wiki_site
FROM base AS runtime FROM base AS runtime
RUN useradd --create-home --uid 1000 aurora RUN useradd --create-home --uid 1000 aurora
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
@@ -30,6 +39,7 @@ COPY --from=builder /usr/local/bin /usr/local/bin
COPY app ./app COPY app ./app
COPY migrations ./migrations COPY migrations ./migrations
COPY alembic.ini ./alembic.ini COPY alembic.ini ./alembic.ini
COPY --from=docs-builder /wiki_site ./wiki
# Owned by aurora *before* the volume mount happens — see worker.Dockerfile # Owned by aurora *before* the volume mount happens — see worker.Dockerfile
# for why (a fresh named volume otherwise defaults to root-owned, which the # for why (a fresh named volume otherwise defaults to root-owned, which the
# non-root `aurora` user below can't write into). # non-root `aurora` user below can't write into).
+2 -1
View File
@@ -2,7 +2,8 @@
Base path: `/api/v1`. Interactive OpenAPI docs are available at `/docs` in Base path: `/api/v1`. Interactive OpenAPI docs are available at `/docs` in
any environment where `AURORA_API_DOCS_ENABLED=true` (default; set to any environment where `AURORA_API_DOCS_ENABLED=true` (default; set to
`false` to hide docs in production — section 32). `false` to hide docs in production — section 32). This same document is
also published as a browsable page at `/wiki/api/` (see `mkdocs.yml`).
All responses are JSON, built from Pydantic response schemas All responses are JSON, built from Pydantic response schemas
(`app/schemas/`), never from serialized ORM objects (section 18). Errors use (`app/schemas/`), never from serialized ORM objects (section 18). Errors use
+33
View File
@@ -0,0 +1,33 @@
# Aurora Core
Aurora Core is the metadata backend behind [AMDBS](https://www.amdbs.net) — a
TMDb/IMDb-style canonical data layer for movies, TV, people, and everything
that connects them.
This wiki documents the public, read-only HTTP API. If you're building
against Aurora Core, start with the [API Reference](api.md).
## Base URL
```
https://api.amdbs.net/api/v1
```
All responses are JSON. Every entity has a stable, type-prefixed id (e.g.
`aur_movie_01m1q7p1c...`) — always use the id a response gave you rather
than constructing one yourself.
## Interactive docs
A live, explorable OpenAPI schema (Swagger UI) is available at
[`/docs`](/docs) alongside this wiki, when enabled in the current
environment.
## Where to go next
- **[API Reference](api.md)** — every endpoint, grouped by resource, with
query parameters and real example responses.
- **[Architecture](architecture.md)** — how Aurora Core is put together:
ingestion pipeline, caching, provider abstraction.
- **[Database](database.md)** — the schema itself, table by table.
- **[Entity relationships](erd.md)** — the same schema as a diagram.
+51
View File
@@ -0,0 +1,51 @@
site_name: Aurora Core
site_description: API documentation for Aurora Core, the metadata backend behind AMDBS.
site_url: https://api.amdbs.net/wiki/
docs_dir: docs
site_dir: site
# The build spec is an internal planning document (build-phase instructions
# referenced by "section N" comments throughout app/), not documentation
# for API consumers -- excluded from the public wiki entirely rather than
# just left out of the nav (exclude_docs stops it from being copied into
# the built site at all, so it isn't reachable at a guessed URL either).
exclude_docs: |
aurora-core-spec.md
nav:
- Home: index.md
- API Reference: api.md
- Architecture: architecture.md
- Database: database.md
- Entity relationships: erd.md
theme:
name: material
palette:
- media: "(prefers-color-scheme: light)"
scheme: default
primary: indigo
toggle:
icon: material/weather-night
name: Switch to dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
primary: indigo
toggle:
icon: material/weather-sunny
name: Switch to light mode
features:
- navigation.instant
- navigation.tracking
- navigation.top
- toc.follow
- content.code.copy
- search.suggest
markdown_extensions:
- tables
- fenced_code
- toc:
permalink: true
- pymdownx.highlight
- pymdownx.superfences
+4
View File
@@ -41,6 +41,10 @@ dev = [
load = [ load = [
"locust>=2.31.0", "locust>=2.31.0",
] ]
docs = [
"mkdocs>=1.6.0",
"mkdocs-material>=9.5.0",
]
[build-system] [build-system]
requires = ["setuptools>=68"] requires = ["setuptools>=68"]