Skip to content

Research: Kodi repository artifact format and kodi-addon-checker usage #13

Closed

Description

@JMAN730

Part of #12

Question

What exactly must the release bundle contain for Kodi to consume it, and how is kodi-addon-checker run in CI?

Pin down, against Team Kodi's own docs/repos (kodi.wiki, xbmc/kodi-addon-checker, existing repo-generator actions):

  • The addons.xml schema a repository datadir expects, and the .md5 convention (of the xml, per-zip, or both).
  • Zip layout: folder-at-root requirement, <addon.id>-<version>.zip naming, where icon.png/fanart.jpg and per-addon addon.xml copies must sit in the datadir for artwork to resolve.
  • Whether the three-channel layout needs anything channel-specific beyond separate directories.
  • kodi-addon-checker invocation: branch flags (nexus/omega/piers), running against a repo of many addons, output formats usable as a CI job summary, known false positives on legacy addons.
  • Prior art worth stealing: existing GitHub Actions for Kodi repo generation.

Deliverable: a markdown summary committed under docs/research/, linked from this issue.

Activity

  1. self-assigned this
    on Jul 6, 2026
  2. JMAN730 commented on Jul 6, 2026

    @JMAN730
    OwnerAuthor

    Resolved. Full findings: docs/research/kodi-repo-artifact-format.md (verified against Kodi master source, kodi.wiki, and xbmc/addon-check v0.0.36).

    Key answers:

    • addons.xml = root <addons> wrapping each addon's addon.xml copied verbatim; parsed by CAddonMgr::AddonsFromRepoXML. May be served gzipped.
    • addons.xml.md5 is a change marker, not verified by default; Kodi reads only the first token, so a bare lowercase hex hash is safest. Give every <dir> a checksum or repo-wide caching is disabled.
    • Per-zip hashes: only via <hashes> in the repository addon's <dir> (sidecar <zip>.md5/.sha256 files); there is no hash element in addons.xml. Omit <hashes> → no per-zip files needed.
    • Zip: URL is constructed as datadir/<id>/<id>-<version>.zip, byte-exact/case-sensitive; zip must contain exactly one root folder with a parseable addon.xml — any stray root entry breaks install.
    • Pre-install art resolves only from <assets> paths relative to datadir/<id>/ (no icon.png filename fallback in modern Kodi) — every shipped addon.xml needs an <assets> block, and icon.png/fanart.jpg must be copied into the datadir per addon.
    • Channels: nothing special beyond one <dir> per channel; minversion/maxversion are inclusive and compared to the xbmc.addon API version. The flat dir-less form is an error since v20.
    • kodi-addon-checker: pip install kodi-addon-checker; --branch required (…nexus omega piers); pointing it at a folder with no top-level addon.xml checks every subfolder (repo mode); exit 1 on PROBLEMs, 0 on warnings; console/log reporters only (no JSON); needs network. No [COLOR]-in-name check — the noise is artwork sizes, blacklisted strings/filetypes, and folder/id mismatch (--allow-folder-id-mismatch exists).
    • Prior art: no maintained, licensed, reusable Action for datadir repo generation exists; ecosystem norm (jurialmunkey, CastagnaIT, drinfernoo) is a small stdlib-only in-repo generator script — confirms rolling our own shared by local + CI, and installing the checker via pip rather than the stale official Action.
  3. JMAN730 commented on Jul 6, 2026

    @JMAN730
    OwnerAuthor

    Closing — research complete, findings linked above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions