Template
abe2c102fd55047afe3967ab56d640b8acb39566
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Has been skipped
Generic: Project CI / Lint & Validate (pull_request) Has been skipped
Universal: PR Check / Validate PR (pull_request) Has been skipped
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: PR Check / Secret Scan (pull_request) Successful in 8s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Successful in 3s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Universal: Workflow Sync Trigger / Sync workflows to live repos (pull_request) Successful in 1m3s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Adds the automation identities to the branch-protection rule definitions so release automation can operate on protected branches: - all rules: push_whitelist_actions_user=true + moko-deploy in push whitelist - dev, rc: enable force-push for the bots so dev can be reset to main via a single `git push --force origin main:dev` (delete+recreate cannot work on a protected branch) - main keeps force-push disabled moko-deploy needs org-team write access to take effect (mcp-mokogitea-api#30). Unblocks the dev-sync + version-persist fixes (Template-Generic#53). Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i
Template-Joomla
Unified scaffolding templates for all Joomla extension types — component, template, module, plugin, package, and library.
Structure
.mokogitea/workflows/ ← CI/CD workflow suite (lint, validate, release)
samples/
manifest/ ← Reference manifest XML for each extension type
component_sample.xml
template_sample.xml
module_sample.xml
plugin_sample.xml
package_sample.xml
library_sample.xml
script/ ← Reference install/update script (script.php) templates
script_component.php
script_module.php
script_plugin.php
script_package.php
source/ ← Your extension source lives here (CI scans this dir)
Usage
- Create a new repo from this template (or clone manually).
- Build your extension under
source/. - Copy the matching manifest from
samples/manifest/tosource/, rename it, and replace the placeholder name, namespace, and version. - If your extension needs install/update logic, copy the matching
samples/script/file and replace the{REPONAME}/{PACKAGENAME}placeholders. - Push — the workflows validate the manifest, source, SQL, language keys, and build.
Samples
samples/ holds read-only reference material — do not build against it directly.
manifest/— a well-formed<extension>manifest for each of the six Joomla extension types, showing the expected structure, namespace declaration, media/SQL wiring, and update-server hookup.script/— the standardscript.phpinstall/uninstall/update handler pattern shared across Moko extension repos. Copy, then replace{REPONAME}(UPPERCASE) and{PACKAGENAME}(e.g.com_myextension).
CI/CD
.mokogitea/workflows/ci-joomla.yml validates every push and PR against source/:
| Check | What it verifies |
|---|---|
| Manifest | Well-formed XML, required elements, version |
| SQL | #__ prefixes, IF [NOT] EXISTS, ENGINE=InnoDB, utf8mb4, install/uninstall pairing, version-named update files |
| Language keys | Keys used in code are defined; orphan (unused) keys flagged |
| PHP CodeSniffer | Joomla coding standard (falls back to PSR-12) |
| Security | No direct superglobals, raw SQL in setQuery(), eval(), or missing _JEXEC guard |
| updates.xml | Well-formed, required <update> children, <targetplatform> |
| Assets | joomla.asset.json is valid and its URIs exist |
| MVC naming | View/Controller/Model/Table classes follow suffix conventions |
| Router | Components ship a Router implementing the router interface |
| ACL | access.xml action keys are defined in language files |
| Webservices | Webservices plugins register API routes |
| ZIP dry-run | Every file/folder the manifest references actually exists |
| JS/CSS | Syntax + balanced braces (ESLint/Stylelint if configured) |
Standards
This repo follows MokoStandards. Documentation lives in the Template-Joomla Wiki.
License
GPL-3.0-or-later — Moko Consulting