Repository navigation
Wayfinder map: CI/release pipeline for The Red Wizard repo #12
Description
Notes
Goal: a CI/release pipeline for this repo of Kodi addon sources. The live Kodi repository (addons.xml, .md5, zips) is served from https://repo.redwizard.xyz/redwizardrepo/ across three channels: main, 21omega (Kodi 20.9–21.8), 22piers (Kodi 21.9–22.8). The driving contributor has no access to that host — the pipeline ends at a GitHub Release bundle; the site maintainer uploads.
Settled constraints (from the charting grilling):
- Artifacts land on GitHub Releases — no generated branch, no claim on the hosting.
- Release trigger: git tag
v*, withworkflow_dispatchas fallback. CI validation runs on every push/PR. - Validation is two-tier: blocking = XML well-formedness (all files), PO validity,
python -m py_compile, zip build success; advisory (never blocking) =kodi-addon-checkeroutput as job summary. - Scope: only addons whose sources live in this repo (~9 dirs with an
addon.xml;TMDb-Helper-Playershas none and is excluded). The live server hosts ~28 additional third-party addons — those stay the maintainer's business; the bundle ships ready-made<addon>XML entries for splicing. - Versioning: the tag is a bundle version (continuing the
v1.7.xline); each zip is named<addon.id>-<version>.zipfrom its ownaddon.xml.
Live channel observation (2026-07-06): main carries all repo-owned plugins; 21omega/22piers carry only skins incl. skin.carpc-xtouch_me. service.apkredwizard and service.multiinstallmybinaries are in the repo but not live.
Skills each session should consult: /grilling and /domain-modeling for decisions; /prototype for prototype tickets; docs/agents/issue-tracker.md for tracker conventions.
Decisions so far
-
Research: Kodi repository artifact format and kodi-addon-checker usage — addons.xml wraps verbatim addon.xml copies; bare-hash
.md5per dir; zips atdatadir/<id>/<id>-<version>.zipwith a single root folder; pre-install art only via<assets>copied into the datadir; checker via pip with required--branch; roll our own stdlib generator (no reusable Action exists). -
Decide the channel manifest: which addons ship to main / 21omega / 22piers — mirror the live server via
channels.jsonat the repo root (everything → main; skin → 21omega+22piers; the two unpublished services listed with[]); build fails on unmapped addon dirs or dangling manifest entries. -
Prototype: build script — zip addons, generate addons.xml entries and md5s per channel —
tools/build_repo.py(stdlib-only) verified against real sources: single-root zips, verbatim addons.xml + bare-hash .md5, assets copied with subpaths; found pre-existing broken<assets>paths in plugin.audio.mp3streams. -
Prototype: CI validation workflow with blocking and advisory tiers —
.github/workflows/ci.ymllive and green (blocking: XML + py_compile + build dry-run; advisory checker in job summary); noise baseline measured: ~38 problems / ~261 warnings repo-wide; pushing workflows needs theworkflowtoken scope. -
Define the maintainer handoff: release bundle layout and merge step — one zip per channel (
redwizard-repo-<channel>-<tag>.zip) + a stdlibmerge_addons.pythat splices repo-owned entries into the server's addons.xml (third-party untouched) and rewrites the .md5; doc atdocs/RELEASING.mdfor both contributor and maintainer. -
Wire the release workflow: tag push builds the bundle and publishes a GitHub Release — pipeline merged to main (PR CI/release pipeline: two-tier CI, repo bundle builds, release workflow #21) and proven end-to-end by the v1.7.6-rc1 prerelease (3 channel zips + merge_addons.py); merge script verified against the live server index.
-
Fix plugin.audio.mp3streams broken paths —
<icon>repointed toart/icon.png, nonexistent<fanart>dropped, version bumped to 2026.07.06; fixed via PR Fix plugin.audio.mp3streams broken <assets> paths #22, build WARN gone. -
Decide which kodi-addon-checker findings to fix and which checks to promote to blocking — fix all syntax-level defects (settings.xml, 11 skin XMLs, 5 skin POs, empty license, service extensions, lang attrs), drop the obsolete
start="startup", migrate mp3streams' legacy language dir, rescale chainsliveplayer's fanart to 1280×720; skin 1024×600 screenshots, repository<dir minversion/maxversion>, complex-entry-point and.xbtwarnings declared permanently-accepted noise; promote all-XML well-formedness + PO validity to blocking as standalone steps — the checker itself stays advisory forever. -
Apply the agreed checker cleanups across addon sources — all cleanups landed via PR Fix checker defects, promote XML/PO checks to blocking CI; add agent skills #25 (8 addons touched, versions bumped; two genuine data bugs found and fixed in the it_it skin translation); advisory checker now reports only the accepted noise plus PR Fix plugin.audio.mp3streams broken <assets> paths #22's asset paths; mp3streams addon.xml has a known trivial version-line conflict with Fix plugin.audio.mp3streams broken <assets> paths #22, second-to-merge keeps
2026.07.07. -
Promote all-XML well-formedness and PO validity to blocking CI — blocking tier now parses all 159 XML files and all 9 strings.po (polib) per addon dir; accepted advisory noise documented in ci.yml above the advisory job; checker stays advisory; green in CI on PR Fix checker defects, promote XML/PO checks to blocking CI; add agent skills #25.
Status: route complete — all tickets resolved
The destination (a CI/release pipeline ending at a GitHub Release bundle) is reached: build script, two-tier CI, release workflow, maintainer handoff doc, source cleanups, and hardened blocking checks are all in place. Outstanding merges: PR #22 (mp3streams assets) and PR #25 (cleanups + CI promotion) — trivial one-line conflict between them on the mp3streams version line, second-to-merge keeps 2026.07.07.
Fog
Everything below hangs on maintainer buy-in and cannot be specified without them in the conversation. If the maintainer engages, these graduate into a fresh charting session:
- Automating the final upload — SSH/rsync/API to repo.redwizard.xyz, or migrating artifact hosting to GitHub Pages behind the domain.
- Third-party drift detection — should CI warn when the live server's third-party addon versions go stale? Unclear if wanted at all.
- Contribution flow hardening — branch protection, required checks on PRs.
Activity
JMAN730 commentedon Jul 7, 2026
Route complete — closing the map. All ten tickets resolved (#13–#20, #23, #24). The destination is reached and proven: two-tier CI with promoted XML/PO blocking gates shared between
ci.ymlandrelease.yml, tag-triggered release workflow, channel bundles +merge_addons.pymaintainer handoff, and cleaned addon sources — all merged to main via PR #21, #22, and #25, with CI green on the post-merge main.The Fog section stays on record: upload automation, third-party drift detection, and contribution-flow hardening all await maintainer engagement, and per the map they'd return as a fresh effort, not a resumption of this one.
Generated by Claude Code