diff --git a/docs/update-server.md b/docs/update-server.md new file mode 100644 index 0000000..5e5d719 --- /dev/null +++ b/docs/update-server.md @@ -0,0 +1,119 @@ + + +# 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.2 + 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 5.x / 6.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.*