# Joomla Development Workflows and Scripts This document describes the Joomla-aware development workflows and scripts available in this repository. ## Table of Contents - [Overview](#overview) - [Requirements](#requirements) - [Scripts](#scripts) - [GitHub Actions Workflows](#github-actions-workflows) - [Testing](#testing) - [Code Quality](#code-quality) - [Deployment](#deployment) ## Overview This repository includes comprehensive Joomla development workflows and scripts for: 1. **Extension Packaging** - Create distributable ZIP packages 2. **Joomla Testing** - Automated testing with multiple Joomla versions 3. **Code Quality** - PHPStan, PHP_CodeSniffer, and compatibility checks 4. **Deployment** - Staging and production deployment workflows ## Requirements ### Local Development - PHP 8.0 or higher - Composer (for PHPStan and PHP_CodeSniffer) - Node.js 18+ (for some workflows) - MySQL/MariaDB (for Joomla testing) ### CI/CD (GitHub Actions) All requirements are automatically installed in CI/CD pipelines. ## Scripts ### Extension Packaging Package the Joomla template as a distributable ZIP file: ```bash make package ``` This creates a ZIP file in the `dist` directory with all necessary template files, excluding development files. ## GitHub Actions Workflows ### 1. PHP Code Quality (`php_quality.yml`) Runs on every push and pull request to main branches. **Jobs:** - **PHP_CodeSniffer** - Checks code style and standards - **PHPStan** - Static analysis at level 5 - **PHP Compatibility** - Ensures PHP 8.0+ compatibility **Matrix Testing:** - PHP versions: 8.0, 8.1, 8.2, 8.3 **Trigger:** ```bash # Automatically runs on push/PR git push origin dev/3.5.0 ``` ### 2. Joomla Testing (`joomla_testing.yml`) Tests template with multiple Joomla and PHP versions. **Jobs:** - **Joomla Setup** - Installs Joomla CMS - **Template Installation** - Installs template into Joomla - **Validation** - Validates template functionality - **Codeception** - Runs test framework **Matrix Testing:** - PHP versions: 8.0, 8.1, 8.2, 8.3 - Joomla versions: 4.4 (LTS), 5.0, 5.1 - MySQL version: 8.0 **Example:** ```bash # Automatically runs on push to main branches git push origin main ``` ### 3. Deploy to Staging (`deploy_staging.yml`) Manual deployment to staging/development environments. **Parameters:** - `environment`: Target environment (staging, development, preview) - `version`: Version to deploy (optional, defaults to latest) **Usage:** 1. Go to Actions → Deploy to Staging 2. Click "Run workflow" 3. Select environment and version 4. Click "Run workflow" **Required Secrets:** For staging deployment, configure these repository secrets: - `STAGING_HOST` - SFTP server hostname - `STAGING_USER` - SFTP username - `STAGING_KEY` - SSH private key (recommended) or use `STAGING_PASSWORD` - `STAGING_PATH` - Remote path for deployment - `STAGING_PORT` - SSH port (optional, default: 22) ## Testing ### Codeception Framework The repository is configured with Codeception for acceptance and unit testing. #### Running Tests Locally 1. Install Codeception: ```bash composer global require "codeception/codeception" --with-all-dependencies ``` 2. Run tests: ```bash # Run all tests codecept run # Run acceptance tests only codecept run acceptance # Run unit tests only codecept run unit # Run with verbose output codecept run --debug ``` #### Test Structure ``` tests/ ├── _data/ # Test data and fixtures ├── _output/ # Test reports and screenshots ├── _support/ # Helper classes ├── acceptance/ # Acceptance tests │ └── TemplateInstallationCest.php ├── unit/ # Unit tests │ └── TemplateConfigurationTest.php ├── acceptance.suite.yml └── unit.suite.yml ``` #### Writing Tests **Unit Test Example:** ```php assertTrue(true); } } ``` **Acceptance Test Example:** ```php amOnPage('/'); $I->see('Welcome'); } } ``` ## Code Quality ### PHPStan Static analysis configuration in `phpstan.neon`: ```bash # Run PHPStan locally phpstan analyse --configuration=phpstan.neon ``` **Configuration:** - Analysis level: 5 - Target paths: `src/` - PHP version: 8.0+ ### PHP_CodeSniffer Coding standards configuration in `phpcs.xml`: ```bash # Check code style phpcs --standard=phpcs.xml # Fix auto-fixable issues phpcbf --standard=phpcs.xml ``` **Standards:** - PSR-12 as base - PHP 8.0+ compatibility checks - Joomla coding conventions (when available) ### Running Quality Checks Locally 1. Install tools: ```bash composer global require "squizlabs/php_codesniffer:^3.0" --with-all-dependencies composer global require "phpstan/phpstan:^1.0" --with-all-dependencies composer global require "phpcompatibility/php-compatibility:^9.0" --with-all-dependencies ``` 2. Configure PHPCompatibility: ```bash phpcs --config-set installed_paths ~/.composer/vendor/phpcompatibility/php-compatibility ``` 3. Run checks: ```bash # PHP syntax check make validate-required # CodeSniffer phpcs --standard=phpcs.xml src/ # PHPStan phpstan analyse --configuration=phpstan.neon # PHP Compatibility phpcs --standard=PHPCompatibility --runtime-set testVersion 8.0- src/ ``` ## Deployment ### Manual Deployment Use the package script to create a distribution: ```bash # Create package make package # Upload to server scp dist/moko-cassiopeia-3.5.0-template.zip user@server:/path/to/joomla/ ``` ### Automated Deployment Use the GitHub Actions workflow: 1. **Staging Deployment:** - Go to Actions → Deploy to Staging - Select "staging" environment - Click "Run workflow" 2. **Development Testing:** - Select "development" environment - Useful for quick testing without affecting staging 3. **Preview Deployment:** - Select "preview" environment - For showcasing features before staging ### Post-Deployment Steps After deployment to Joomla: 1. Log in to Joomla administrator 2. Go to System → Extensions → Discover 3. Click "Discover" to find the template 4. Click "Install" to complete installation 5. Go to System → Site Templates 6. Configure template settings 7. Set as default template if desired ## CI/CD Pipeline Details ### Build Process 1. **Validation** - All scripts validate before packaging 2. **Packaging** - Create ZIP with proper structure 3. **Testing** - Run on multiple PHP/Joomla versions 4. **Quality** - PHPStan and PHPCS analysis 5. **Deployment** - SFTP upload to target environment ### Matrix Testing Strategy - **PHP Versions:** 8.0, 8.1, 8.2, 8.3 - **Joomla Versions:** 4.4 LTS, 5.0, 5.1 - **Exclusions:** PHP 8.3 not tested with Joomla 4.4 (incompatible) ## Troubleshooting ### Common Issues **Issue: PHP_CodeSniffer not found** ```bash composer global require "squizlabs/php_codesniffer:^3.0" export PATH="$PATH:$HOME/.composer/vendor/bin" ``` **Issue: PHPStan errors** ```bash # Increase analysis memory php -d memory_limit=1G $(which phpstan) analyse ``` **Issue: Joomla installation fails in CI** - Check MySQL service is running - Verify database credentials - Ensure PHP extensions are installed **Issue: SFTP deployment fails** - Verify SSH key is correctly formatted - Check firewall allows port 22 - Ensure STAGING_PATH exists on server ## Contributing When adding new workflows or scripts: 1. Follow existing script structure 2. Add proper error handling 3. Include usage documentation 4. Test with multiple PHP versions 5. Update this documentation ## Support For issues or questions: - Open an issue on GitHub - Check existing workflow runs for examples - Review test output in Actions tab ## License All scripts and workflows are licensed under GPL-3.0-or-later, same as the main project. --- ## Metadata * Document: docs/JOOMLA_DEVELOPMENT.md * Repository: [https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx](https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx) * Path: /docs/JOOMLA_DEVELOPMENT.md * Owner: Moko Consulting * Version: 03.06.03 * Status: Active * Effective Date: 2026-01-30 * Classification: Public Open Source Documentation ## Revision History | Date | Change Summary | Author | | ---------- | ----------------------------------------------------- | --------------- | | 2026-01-30 | Updated metadata to MokoStandards format | GitHub Copilot | | 2025-01-04 | Initial Joomla development guide created | GitHub Copilot |