# Release Process — MokoCassiopeia This document describes the complete release process for MokoCassiopeia Joomla template, including automated workflows and manual procedures. ## Table of Contents 1. [Overview](#overview) 2. [Release Types](#release-types) 3. [Automated Release Process](#automated-release-process) 4. [Manual Release Process](#manual-release-process) 5. [Update Server Configuration](#update-server-configuration) 6. [Testing Releases](#testing-releases) 7. [Rollback Procedures](#rollback-procedures) 8. [Troubleshooting](#troubleshooting) --- ## Overview MokoCassiopeia uses an automated release system powered by GitHub Actions. The system: - **Builds** installation packages automatically - **Generates** checksums for security verification - **Creates** GitHub Releases with downloadable artifacts - **Updates** the Joomla update server (`updates.xml`) automatically - **Validates** package integrity with SHA-256 hashes ### Key Components 1. **Release Workflow** (`.github/workflows/release.yml`): Builds and publishes releases 2. **Auto-Update SHA** (`.github/workflows/auto-update-sha.yml`): Updates `updates.xml` after release 3. **Build Script** (`scripts/build-release.sh`): Local development builds 4. **Update Server** (`updates.xml`): Joomla update server manifest --- ## Release Types ### Patch Release (Third Digit) **Format**: `XX.XX.XX` → `XX.XX.XX+1` (e.g., `03.08.03` → `03.08.04`) **When to use**: - Bug fixes - Security patches - Documentation updates - Minor CSS/styling tweaks - No breaking changes **Example**: `03.08.03` → `03.08.04` ### Minor Release (Second Digit) **Format**: `XX.XX.00` → `XX.XX+1.00` (e.g., `03.08.03` → `03.09.00`) **When to use**: - New features - New module/component overrides - Significant styling changes - Backward-compatible changes **Example**: `03.08.03` → `03.09.00` ### Major Release (First Digit) **Format**: `XX.00.00` → `XX+1.00.00` (e.g., `03.08.03` → `04.00.00`) **When to use**: - Breaking changes - Major architecture changes - Joomla version upgrades - Complete redesigns **Example**: `03.08.03` → `04.00.00` --- ## Automated Release Process **Recommended for most releases** ### Prerequisites - [ ] All changes merged to `main` branch - [ ] Tests passing - [ ] Documentation updated - [ ] CHANGELOG.md updated - [ ] Local testing completed ### Step 1: Prepare Release Branch ```bash # Create release branch git checkout main git pull git checkout -b release/03.08.04 # Update version in templateDetails.xml # Edit: src/templateDetails.xml # Change: 03.08.03 # To: 03.08.04 # Update CHANGELOG.md # Add new section: ## [03.08.04] - 2026-02-27 ### Added - Feature descriptions ### Fixed - Bug fix descriptions ### Changed - Change descriptions # Commit changes git add src/templateDetails.xml CHANGELOG.md git commit -m "chore: Prepare release 03.08.04" git push origin release/03.08.04 ``` ### Step 2: Create Pull Request 1. Go to GitHub repository 2. Click "Pull requests" → "New pull request" 3. Base: `main`, Compare: `release/03.08.04` 4. Title: `Release 03.08.04` 5. Description: Copy relevant CHANGELOG entries 6. Create pull request 7. Review and merge ### Step 3: Create and Push Tag ```bash # Switch to main and pull changes git checkout main git pull # Create tag git tag 03.08.04 # Push tag (triggers release workflow) git push origin 03.08.04 ``` ### Step 4: Monitor Automated Process 1. **Go to GitHub Actions tab** 2. **Watch "Create Release" workflow**: - Builds package - Generates checksums - Creates GitHub Release - Uploads artifacts 3. **Watch "Auto-Update SHA Hash" workflow**: - Downloads release package - Calculates SHA-256 hash - Updates `updates.xml` - Commits to main branch ### Step 5: Verify Release 1. **Check GitHub Release**: - Go to Releases tab - Verify release `03.08.04` exists - Download ZIP package - Verify checksums match 2. **Check updates.xml**: ```bash git pull cat updates.xml ``` - Verify version is `03.08.04` - Verify download URL is correct - Verify SHA-256 hash is present 3. **Test Joomla Update**: - Install previous version in Joomla - Go to Extensions → Update - Verify update is detected - Perform update - Verify template works correctly --- ## Manual Release Process **Use when automation fails or for local testing** ### Step 1: Prepare Repository ```bash # Update version numbers # Edit: src/templateDetails.xml # Edit: CHANGELOG.md # Commit changes git add src/templateDetails.xml CHANGELOG.md git commit -m "chore: Prepare release 03.08.04" git push ``` ### Step 2: Build Package Locally ```bash # Run build script ./scripts/build-release.sh 03.08.04 # Output will be in build/ directory: # - mokocassiopeia-src-03.08.04.zip # - mokocassiopeia-src-03.08.04.zip.sha256 # - mokocassiopeia-src-03.08.04.zip.md5 ``` ### Step 3: Test Package ```bash # Install in Joomla test environment # Extensions → Manage → Install → Upload Package File # Select: build/mokocassiopeia-src-03.08.04.zip # Test all features: # - Template displays correctly # - Module overrides work # - Alternative layouts selectable # - Dark mode works # - No JavaScript errors ``` ### Step 4: Create GitHub Release 1. **Go to GitHub Releases** 2. **Click "Create a new release"** 3. **Tag**: `03.08.04` (create new tag) 4. **Release title**: `Release 03.08.04` 5. **Description**: Copy from CHANGELOG.md 6. **Upload files**: - `mokocassiopeia-src-03.08.04.zip` - `mokocassiopeia-src-03.08.04.zip.sha256` - `mokocassiopeia-src-03.08.04.zip.md5` 7. **Publish release** ### Step 5: Update updates.xml Manually ```bash # Extract SHA-256 hash cat build/mokocassiopeia-src-03.08.04.zip.sha256 # Example output: a1b2c3d4e5f6... # Edit updates.xml # Update 03.08.04 # Update 2026-02-27 # Update https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/03.08.04/mokocassiopeia-src-03.08.04.zip # Update sha256:a1b2c3d4e5f6... # Commit and push git add updates.xml git commit -m "chore: Update updates.xml for release 03.08.04" git push ``` --- ## Update Server Configuration ### updates.xml Structure ```xml MokoCassiopeia Moko Consulting's site template based on Cassiopeia. mokocassiopeia template site 03.08.04 2026-02-27 Jonathan Miller || Moko Consulting hello@mokoconsulting.tech (C)GNU General Public License Version 3 - 2026 Moko Consulting https://github.com/mokoconsulting-tech/MokoCassiopeia https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/03.08.04/mokocassiopeia-src-03.08.04.zip sha256:a1b2c3d4e5f6... stable Moko Consulting https://www.mokoconsulting.tech ``` ### Hosting Update Server The `updates.xml` file is hosted directly on GitHub: **URL**: `https://raw.githubusercontent.com/mokoconsulting-tech/MokoCassiopeia/main/updates.xml` This URL is configured in `src/templateDetails.xml`: ```xml https://raw.githubusercontent.com/mokoconsulting-tech/MokoCassiopeia/main/updates.xml ``` --- ## Testing Releases ### Pre-Release Testing ```bash # 1. Build package locally ./scripts/build-release.sh # 2. Set up Joomla test environment # - Clean Joomla 5.x installation # - Previous MokoCassiopeia version installed # 3. Test current version features # - All module overrides # - Alternative layouts # - Dark mode toggle # - Responsive behavior # 4. Install new package # Extensions → Manage → Install → Upload Package # 5. Verify upgrade process # - No errors during installation # - Settings preserved # - Custom modifications retained # 6. Test new features # - New functionality works # - Bug fixes applied # - No regressions ``` ### Update Server Testing ```bash # 1. Install previous version in Joomla # 2. Go to: Extensions → Update # 3. Click "Find Updates" # 4. Verify update shows: "MokoCassiopeia 03.08.04" # 5. Click "Update" # 6. Verify successful update # 7. Test template functionality ``` ### Checklist - [ ] Package installs without errors - [ ] Template activates correctly - [ ] All module overrides work - [ ] Alternative layouts selectable - [ ] Dark mode functions - [ ] Responsive on mobile/tablet/desktop - [ ] No JavaScript console errors - [ ] No PHP errors in Joomla logs - [ ] Update server detects new version - [ ] Update process completes successfully --- ## Rollback Procedures ### Rollback Release If a release has critical issues: 1. **Delete GitHub Release**: - Go to Releases - Click release to delete - Click "Delete" - Confirm deletion 2. **Delete Git Tag**: ```bash # Delete local tag git tag -d 03.08.04 # Delete remote tag git push --delete origin 03.08.04 ``` 3. **Revert updates.xml**: ```bash # Revert to previous version git revert git push ``` 4. **Notify Users**: - Create GitHub issue explaining the problem - Pin the issue - Provide rollback instructions for users ### User Rollback Instructions For users who installed the problematic version: 1. **Download previous version** from GitHub Releases 2. **Uninstall current version**: - Extensions → Manage → Manage - Find MokoCassiopeia - Click "Uninstall" 3. **Install previous version**: - Extensions → Manage → Install - Upload previous version ZIP 4. **Verify functionality** --- ## Troubleshooting ### Release Workflow Fails **Problem**: Build fails with "rsync: command not found" **Solution**: The GitHub Actions runner always has rsync installed. If this occurs, check the workflow file syntax. **Problem**: ZIP creation fails **Solution**: Check that `src/` and `src/media/` directories exist and contain files. **Problem**: Version update fails **Solution**: Verify `sed` commands in workflow match actual XML structure. ### Auto-Update SHA Fails **Problem**: Cannot download release package **Solution**: - Verify release was published (not draft) - Check package naming: `mokocassiopeia-src-{version}.zip` - Verify release tag format **Problem**: SHA-256 hash mismatch **Solution**: - Package may have been modified after calculation - Re-run the workflow manually - Verify package integrity **Problem**: Commit fails **Solution**: - Check workflow has write permissions - Verify no branch protection rules blocking bot commits ### Manual Build Issues **Problem**: `./scripts/build-release.sh: Permission denied` **Solution**: ```bash chmod +x scripts/build-release.sh ./scripts/build-release.sh ``` **Problem**: Build directory exists **Solution**: ```bash rm -rf build/ ./scripts/build-release.sh ``` ### Update Server Issues **Problem**: Joomla doesn't detect update **Solution**: 1. Check `updates.xml` is accessible: ```bash curl https://raw.githubusercontent.com/mokoconsulting-tech/MokoCassiopeia/main/updates.xml ``` 2. Verify version number is higher than installed version 3. Clear Joomla cache: System → Clear Cache 4. Check update URL in templateDetails.xml **Problem**: Update fails with "Invalid package" **Solution**: - Verify SHA-256 hash matches - Re-download package and check integrity - Verify package structure is correct --- ## Best Practices ### Version Numbering - **Always increment** version numbers sequentially - **Never reuse** version numbers - **Use consistent** format: `XX.XX.XX` ### Changelog - **Update before** release - **Include all changes** since last version - **Categorize** changes: Added, Changed, Fixed, Removed - **Write clear descriptions** for users ### Testing - **Test locally** before pushing tag - **Test update process** from previous version - **Test on clean** Joomla installation - **Test different** configurations ### Communication - **Announce releases** on GitHub Discussions - **Document breaking changes** clearly - **Provide migration guides** for major changes - **Respond promptly** to issue reports --- ## Quick Reference ### Automated Release Commands ```bash # 1. Create release branch git checkout -b release/03.08.04 # 2. Update version and CHANGELOG # (edit files) # 3. Commit and push git add . git commit -m "chore: Prepare release 03.08.04" git push origin release/03.08.04 # 4. Create and merge PR (via GitHub UI) # 5. Create and push tag git checkout main git pull git tag 03.08.04 git push origin 03.08.04 # 6. Wait for automation to complete ``` ### Manual Release Commands ```bash # Build locally ./scripts/build-release.sh 03.08.04 # Test installation # (manual Joomla testing) # Create release on GitHub # (via GitHub UI) # Update updates.xml # (edit file with SHA-256) git add updates.xml git commit -m "chore: Update updates.xml for 03.08.04" git push ``` --- ## Related Documentation - **Build Scripts**: [scripts/README.md](../scripts/README.md) - **Workflow Guide**: [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md) - **Contributing**: [CONTRIBUTING.md](../CONTRIBUTING.md) - **Changelog**: [CHANGELOG.md](../CHANGELOG.md) --- ## Support - **Issues**: [GitHub Issues](https://github.com/mokoconsulting-tech/MokoCassiopeia/issues) - **Discussions**: [GitHub Discussions](https://github.com/mokoconsulting-tech/MokoCassiopeia/discussions) - **Email**: hello@mokoconsulting.tech --- ## License Copyright (C) 2026 Moko Consulting This documentation is licensed under GPL-3.0-or-later.