Switch from python:3.12-slim + apt/pip installs to
novoyuuparosk-wiki-runner:latest. Removes the two install steps.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Credentials moved to Gitea user-scope vault — removed from README.
Architecture diagram and songs pipeline deps section updated to reflect
prebuilt novoyuuparosk-wiki-runner:latest image (no runtime dep installs).
Noted workflow stubs in .gitea/workflows/ may be stale.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- `album` no longer required; category format changed to Category:Album:<name>
- New optional `categories` list for additional arbitrary categories
- `wiki.siblings` bill of materials: path+tag required for resolution, label optional
- Post-Pandoc [[TAG]] substitution with four-tier fallback (link+label, link, plain label, plain tag)
- Sibling map built from all published posts in the same run; unresolved siblings degrade gracefully
- SCHEMA.md fully updated; README.md deferred items moved to implemented
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All wiki pipelines share novoyuuparosk-wiki-runner:latest — a
locally-built image with git, pandoc, ca-certificates, and Python
packages pre-installed. Eliminates the apt-get and pip install
steps from every job run. Rebuild manually on the Pi when deps change.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
For songs with an `lrc` field in frontmatter:
- Verifies the file exists and is valid UTF-8 (warns and skips otherwise)
- Uploads to wiki as `File:<title>.lrc` via MediaWiki file API
- Idempotent: skips upload if SHA1 matches existing wiki file
- Appends `[[Media:<title>.lrc|Synced lyrics (.lrc)]]` before the
category tag at the bottom of the wiki page
Songs without `lrc` in frontmatter are unaffected.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
render.py was a misleading name — the script validates, renders,
and writes to MediaWiki (and will soon upload LRC files too).
publish.py better describes the full scope of the entry point.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
If a wiki page exists but was written manually (no Auto-generated
banner), the bot now skips it instead of attempting an overwrite
that triggers MediaWiki CAPTCHA. Clear stderr warning tells user
to delete the page or add the banner to hand ownership to the bot.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Files with no frontmatter or wiki.publish not set should be silently
ignored rather than failing the whole pipeline run.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Timestamps made the idempotency check always false — every run would
rewrite every page. Commit SHA is stable: same source commit produces
identical wikitext, so unchanged pages are correctly skipped.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Gitea blocks vars/secrets prefixed with GITEA_ or GITHUB_.
Also avoids relying on github.server_url which resolves to
github.com rather than the local Gitea instance on this runner.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>