# Joomla Update Server [![MokoStandards](https://img.shields.io/badge/MokoStandards-04.04.00-blue)](https://github.com/mokoconsulting-tech/MokoStandards) This document explains how `update.xml` is automatically managed for this Joomla extension following the [Joomla Update Server specification](https://docs.joomla.org/Deploying_an_Update_Server). ## How It Works Joomla checks for extension updates by fetching an XML file from the URL defined in the `` tag in the extension's XML manifest. MokoStandards generates this file automatically. ### Automatic Generation | Event | Workflow | `` | `` | |-------|----------|---------|-------------| | Merge to `main` | `auto-release.yml` | `stable` | `XX.YY.ZZ` | | Push to `dev/**` | `deploy-dev.yml` | `development` | `development` | | Push to `rc/**` | `deploy-dev.yml` | `rc` | `XX.YY.ZZ-rc` | ### Generated XML Structure ```xml Extension Name Extension Name update com_extensionname component 01.02.03 site system stable https://github.com/.../releases/tag/v01.02.03 https://github.com/.../releases/download/v01.02.03/com_ext-01.02.03.zip 8.1 Moko Consulting https://mokoconsulting.tech ``` ### Metadata Source All metadata is extracted from the extension's XML manifest (`src/*.xml`) at build time: | XML Element | Source | Notes | |-------------|--------|-------| | `` | `` in manifest | Extension display name | | `` | `` in manifest | Must match installed extension identifier | | `` | `type` attribute on `` | `component`, `module`, `plugin`, `library`, `package`, `template` | | `` | `client` attribute on `` | `site` or `administrator` — **required for plugins and modules** | | `` | `group` attribute on `` | Plugin group (e.g., `system`, `content`) — **required for plugins** | | `` | `` in manifest | Falls back to Joomla 4.3+ / 5.x if not specified | | `` | `` in manifest | Included only if present | ### Extension Manifest Setup Your XML manifest must include an `` tag pointing to the `update.xml` on the `main` branch: ```xml My Extension com_myextension https://raw.githubusercontent.com/mokoconsulting-tech/MokoCassiopeia/main/update.xml ``` ### Branch Lifecycle ``` dev/XX.YY.ZZ → rc/XX.YY.ZZ → main → version/XX.YY (development) (rc) (stable) (frozen snapshot) ``` 1. **Development** (`dev/**`): `update.xml` with `development`, download points to branch archive 2. **Release Candidate** (`rc/**`): `update.xml` with `rc`, version set to `XX.YY.ZZ-rc` 3. **Stable Release** (merge to `main`): `update.xml` with `stable`, download points to GitHub Release asset 4. **Frozen Snapshot** (`version/XX.YY`): immutable, never force-pushed ### Health Checks The `repo_health.yml` workflow verifies on every commit: - `update.xml` exists in the repository root - XML manifest exists with `` tag - ``, ``, ``, `` tags present - Extension `type` attribute is valid - Language `.ini` files exist - `index.html` directory listing protection in `src/`, `src/admin/`, `src/site/` --- *Managed by [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards). See [docs/workflows/update-server.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/workflows/update-server.md) for the full specification.*