- Add Pa11y CI config template (templates/configs/pa11yci.json) - Replace all github.com/mokoconsulting-tech with git.mokoconsulting.tech/MokoConsulting - Update .moko-standards governance file Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
377 lines
8.6 KiB
Markdown
377 lines
8.6 KiB
Markdown
# 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
|
|
<?php
|
|
namespace Tests\Unit;
|
|
|
|
use Codeception\Test\Unit;
|
|
|
|
class MyTemplateTest extends Unit
|
|
{
|
|
public function testSomething()
|
|
{
|
|
$this->assertTrue(true);
|
|
}
|
|
}
|
|
```
|
|
|
|
**Acceptance Test Example:**
|
|
```php
|
|
<?php
|
|
namespace Tests\Acceptance;
|
|
|
|
use Tests\Support\AcceptanceTester;
|
|
|
|
class MyAcceptanceCest
|
|
{
|
|
public function testPageLoad(AcceptanceTester $I)
|
|
{
|
|
$I->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/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
|
* 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 |
|