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>
novoyuuparosk-auto-wiki
CI/CD pipelines that auto-apply commits to https://wiki.novoyuuparosk.org from upstream content repos.
Pipelines
| Path | Source repo | Purpose | Status |
|---|---|---|---|
pipelines/songs/ |
mikkeli/ncmr-songs |
Song lyric pages | in development (v1, no executable code yet) |
Per-pipeline READMEs cover everything specific to that pipeline (source schema, renderer, runtime, decisions). This root README covers only what's cross-cutting.
Architecture
Hybrid layout. The Gitea Actions trigger has to live in the source repo (Gitea only fires workflows from .gitea/workflows/ of the pushed-to repo); the real logic lives here. Source-repo workflows are thin stubs that call reusable workflows defined here.
<source-repo>/
.gitea/workflows/<name>.yml <- thin stub, calls into this repo
novoyuuparosk-auto-wiki/ <- this repo
.gitea/workflows/<pipeline>.yml <- reusable workflows (the actual logic)
pipelines/<pipeline>/ <- per-pipeline code, schema, templates
lib/ <- shared modules (MediaWiki client, etc.)
Wiki
- Base URL: https://wiki.novoyuuparosk.org
- MediaWiki API: https://wiki.novoyuuparosk.org/api.php (confirmed)
Bot identity
MediaWiki BotPassword issued for user Dubrowski, bot name giteaAutomaton.
Login as Dubrowski@giteaAutomaton with password d8jua48t65jgjp3dfcqhfg7257tri6ui.
(Legacy form: username Dubrowski, password giteaAutomaton@d8jua48t65jgjp3dfcqhfg7257tri6ui.)
Plaintext here is acceptable for the current phase (private repo, home-Pi LAN-only Gitea). Rotate before any of those preconditions change. Note that git log retains this string forever, so rotation requires a wiki-side BotPassword regeneration regardless of what happens to this file.
Runner infrastructure
One act_runner instance serves all pipelines. Runs on a Pi 5 (Raspberry Pi OS Bookworm, aarch64) inside the same docker-compose stack that hosts the Gitea instance. Job execution is via the host Docker socket — runner is a container, jobs spawn as sibling containers.
act_runner build: linux-arm64, from the gitea/act_runner Docker image.
Gitea Actions setup (cross-cutting)
Secrets and variables are scoped to user mikkeli (no orgs on this instance), inherited by all repos under that account.
Secrets:
WIKI_BOT_USER=Dubrowski@giteaAutomatonWIKI_BOT_PASSWORD= the value from Bot identity aboveFAPAT= Full-Access PAT undermikkeli, used by source-repo shim workflows to clone this repo at workflow time
Variables:
WIKI_BASE_URL=https://wiki.novoyuuparosk.orgWIKI_API_URL=https://wiki.novoyuuparosk.org/api.php
Branch naming
- This repo:
automation/<pipeline-name>for pipeline-development branches (e.g.,automation/songs). - Source repos: each pipeline's README defines the source-side branch convention (e.g.,
autowiki/<song-slug>inncmr-songs).
Decisions log (cross-cutting)
| Decision | Value | Date |
|---|---|---|
| Architecture | Hybrid: stub in source repo, logic in this repo via reusable workflows | 2026-06-09 |
| Workflow pattern | Gitea reusable workflows (workflow_call); requires Gitea ≥ 1.20 — confirmed 1.25+ |
2026-06-09 |
| Runner execution | Docker, added as a service to the existing Gitea docker-compose | 2026-06-09 |
| Secret/runner scope | User-level on mikkeli (no orgs on this instance) |
2026-06-09 |
| MediaWiki API path | api.php (classic action API) |
2026-06-09 |
| Branch naming (this repo) | automation/<pipeline> for pipeline-development branches |
2026-06-09 |
Per-pipeline decisions live in each pipeline's README.
Setup checklist (cross-cutting)
Via the Gitea web UI logged in as mikkeli:
- [v] User-scoped secrets and variables set per Gitea Actions setup above
- [v]
WIKI_BOT_USER - [v]
WIKI_BOT_PASSWORD - [v]
FAPAT(Full-Access PAT — value not stored in this README; saved directly into the Gitea secret. Regenerate if lost.) - [v]
WIKI_BASE_URL - [v]
WIKI_API_URL
- [v]
With Pi access:
- Add
act_runnerservice to the existing Gitea docker-compose - Generate a runner registration token at
/-/admin/actions/runners(or/user/settings/actions/runnersif user-scoped runners are exposed), bake into the compose env,docker compose up -d act_runner, confirm "online" in the Gitea UI
Per-pipeline setup lives in each pipeline's README. Start with pipelines/songs/.