Moko Consulting

Open-source software for Joomla, Gitea, and web platforms. Home of MokoSuite, MokoGitea, and MokoCLI.

Tennessee
releases/joomla-release-process.-

Joomla Release Process

How to build, package, and publish Joomla extension releases.

Steps

1. Prepare the Release

  • Ensure all work is merged to main
  • Update version in all manifest XML files (package + sub-extensions)
  • Finalize CHANGELOG.md — move [Unreleased] entries to the new version section
  • Commit: chore: prepare release v1.1.0

2. Build the Package

make build

This runs:

  1. PHP lint check on all source files
  2. PHP CodeSniffer (Joomla standard)
  3. PHPStan static analysis
  4. Packages all sub-extensions into a single ZIP

Output: dist/pkg_mokosuitebackup-01.01.00.zip

3. Create the Release

Tag the commit and create a Gitea release:

git tag v1.1.0
git push origin v1.1.0

If auto-release.yml CI workflow is configured, this automatically:

  • Builds the package
  • Creates a Gitea release with the tag
  • Uploads the ZIP as a release asset

For manual releases:

  1. Go to the repo on Gitea → Releases → New Release
  2. Tag: v1.1.0
  3. Title: pkg_mokosuitebackup v01.01.00 (matches Joomla naming)
  4. Upload dist/pkg_mokosuitebackup-01.01.00.zip
  5. Paste CHANGELOG entries as release notes

4. Update Server

MokoGitea automatically generates the Joomla update server XML from release assets for repos with platform: joomla in their manifest. No manual updates.xml maintenance needed.

Installed Joomla sites check for updates via System > Update > Extensions and will see the new version.

Naming Conventions

Artifact Format
Package ZIP pkg_{name}-{XX.YY.ZZ}.zip
Component ZIP com_{name}-{XX.YY.ZZ}.zip (if released standalone)
Git tag v{X.Y.Z}
Release title pkg_{name} v{XX.YY.ZZ}

Checklist

  • Version bumped in all manifests
  • CHANGELOG.md updated
  • make build passes cleanly
  • SQL update script exists for schema changes
  • Language strings added for new UI text
  • README updated if needed
  • Tag created and pushed
  • Release created with ZIP attached
  • Update server serving new version (verify with curl)