feat: generate Joomla changelog XML for update server <changelogurl> #343

Open
opened 2026-05-31 15:09:04 +00:00 by jmiller · 1 comment
Owner

Problem

The <changelogurl> in updates.xml points to raw CHANGELOG.md:

https://git.mokoconsulting.tech/Org/Repo/raw/branch/main/CHANGELOG.md

Joomla's update UI cannot render markdown. It expects a specific XML format:

<changelogs>
  <changelog>
    <element>pkg_mokowaas</element>
    <type>package</type>
    <version>02.29.04</version>
    <security>
      <item>Fixed XSS in admin panel</item>
    </security>
    <fix>
      <item>Resolved database timeout on large queries</item>
    </fix>
    <addition>
      <item>Added dark mode support</item>
    </addition>
    <change>
      <item>Updated minimum PHP to 8.2</item>
    </change>
    <note>
      <item>See release notes for migration guide</item>
    </note>
  </changelog>
</changelogs>

Proposal

  1. Generate changelog.xml from CHANGELOG.md during the release workflow
  2. Parse Keep-a-Changelog format sections (Added, Changed, Fixed, Security, etc.) into Joomla XML categories
  3. Host the generated XML alongside updates.xml in the repo
  4. Update <changelogurl> to point to the XML file instead of raw markdown

Mapping

CHANGELOG.md Section Joomla XML Element
Added <addition>
Changed <change>
Fixed <fix>
Security <security>
Removed <change>
Deprecated <note>

Implementation Options

A) CLI tool in moko-platform that generates changelog.xml from CHANGELOG.md
B) Workflow step in update-server.yml that generates it during release
C) MokoGitea API endpoint that dynamically converts CHANGELOG.md to XML

Related

## Problem The `<changelogurl>` in updates.xml points to raw CHANGELOG.md: ``` https://git.mokoconsulting.tech/Org/Repo/raw/branch/main/CHANGELOG.md ``` Joomla's update UI cannot render markdown. It expects a specific XML format: ```xml <changelogs> <changelog> <element>pkg_mokowaas</element> <type>package</type> <version>02.29.04</version> <security> <item>Fixed XSS in admin panel</item> </security> <fix> <item>Resolved database timeout on large queries</item> </fix> <addition> <item>Added dark mode support</item> </addition> <change> <item>Updated minimum PHP to 8.2</item> </change> <note> <item>See release notes for migration guide</item> </note> </changelog> </changelogs> ``` ## Proposal 1. Generate `changelog.xml` from CHANGELOG.md during the release workflow 2. Parse Keep-a-Changelog format sections (Added, Changed, Fixed, Security, etc.) into Joomla XML categories 3. Host the generated XML alongside updates.xml in the repo 4. Update `<changelogurl>` to point to the XML file instead of raw markdown ## Mapping | CHANGELOG.md Section | Joomla XML Element | |---------------------|--------------------| | Added | `<addition>` | | Changed | `<change>` | | Fixed | `<fix>` | | Security | `<security>` | | Removed | `<change>` | | Deprecated | `<note>` | ## Implementation Options A) CLI tool in moko-platform that generates changelog.xml from CHANGELOG.md B) Workflow step in update-server.yml that generates it during release C) MokoGitea API endpoint that dynamically converts CHANGELOG.md to XML ## Related - Licensing system update stream integration - moko-platform `cli/updates_xml_build.php` generates `<changelogurl>` - Joomla update XML spec: https://docs.joomla.org/Deploying_an_Update_Server
Author
Owner

Testing Plan — Changelog XML

API

  • GET /{owner}/{repo}/changelog.xml → 200, valid XML
  • XML has root element
  • Each release → with element, type, version
  • Release with "### Fixed" section → elements
  • Release with "### Added" section → elements
  • Release with "### Security" section → elements
  • Release with "### Changed" →
  • Release with no markdown sections → entire note as
  • Draft releases excluded
  • Element and type from extension metadata config
  • updates.xml points to /changelog.xml

GUI

  • Changelog XML URL shown in update feed URLs section
  • Copy button works

🤖 Generated with Claude Code

## Testing Plan — Changelog XML ### API - [ ] GET /{owner}/{repo}/changelog.xml → 200, valid XML - [ ] XML has <changelogs> root element - [ ] Each release → <changelog> with element, type, version - [ ] Release with "### Fixed" section → <fix><item> elements - [ ] Release with "### Added" section → <addition><item> elements - [ ] Release with "### Security" section → <security><item> elements - [ ] Release with "### Changed" → <change><item> - [ ] Release with no markdown sections → entire note as <note><item> - [ ] Draft releases excluded - [ ] Element and type from extension metadata config - [ ] updates.xml <changelogurl> points to /changelog.xml ### GUI - [ ] Changelog XML URL shown in update feed URLs section - [ ] Copy button works 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jmiller added the pending: testing label 2026-06-01 10:13:49 +00:00
jmiller reopened this issue 2026-06-02 11:21:40 +00:00
Sign in to join this conversation.
No labels pending: testing
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoGitea#343