tar.gz is still built and uploaded as release asset for manual download,
but only ZIP appears in updates.xml with matching SHA-256.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PR-based sync fails with branch protection requiring reviews.
Direct API update bypasses protection for bot commits.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed conditional on CURRENT_BRANCH — workflow may be on version/XX
after archiving. Deletes stale PR branch before creating fresh one.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Covers naming conventions, directory structure, privacy rules,
workflow profile, update server priority, deployment methods,
and differences from standard Joomla repos.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- docs/workflows/update-server.md: added Update Server Priority section
explaining why Gitea must be priority 1 (source of truth, self-hosted,
GitHub mirrors may lag)
- templates: updated CLAUDE.md and copilot-instructions templates for
Joomla extensions with the priority rule
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
automation/enforce_tags.sh ensures all repos have the 5 standard
release channel tags (development, alpha, beta, release-candidate,
stable) and removes non-standard tags. Runs as part of the monthly
bulk sync and can be called standalone.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Creates chore/update-xml-<version> branch, updates file, creates PR,
auto-merges, cleans up branch. Replaces direct API file push.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Plugins like MokoWaaS have display name "System - MokoWaaS" but
element should be "mokowaas" (from mokowaas.xml filename).
Falls back to repo name for generic filenames like templateDetails.xml.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- release_tag=stable instead of v${MAJOR}
- download URLs use /stable/ path
- Element fallback uses repo name not display name
- Updated channel-to-workflow docs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Auto-release and update-server now write the copyright + VERSION
comment header when generating/rebuilding updates.xml.
Updated updates.xml.template scaffold to match.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previously dev branches were excluded from auto-bump. Now all
stability branches (dev, alpha, beta, rc) bump patch automatically.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add Multi-Channel updates.xml Architecture section to README.md
- Document auto-release.yml.template and update-server.yml.template
- Update joomla/index.md with current template inventory
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pull-from-dev.yml.template:
- Downloads files from dev server via rsync/SSH into repo src/
- Configurable via DEV_SSH_HOST, DEV_SSH_USERNAME, DEV_PULL_PATH vars
- Auth via DEV_SSH_KEY secret
- Dry-run mode, branch selection, diff preview
export-mysql.yml.template:
- Exports MySQL database from dev or demo server
- Supports both Joomla and Dolibarr environments
- Sanitizes PII: passwords (bcrypt), emails, sessions, API keys, tokens
- Preserves admin/moko emails, strips everything else
- Dolibarr-specific: clears api_key, pass_crypted, ldap_pass, oauth secrets
- Saves as artifact (30d retention) or commits to sql/exports/
- Configurable per environment (dev/demo) via org or repo variables
Required variables (org or repo):
- DEV_SSH_HOST, DEV_SSH_PORT, DEV_SSH_USERNAME
- DEV_MYSQL_DATABASE, DEV_MYSQL_USER
- Secrets: DEV_SSH_KEY, DEV_MYSQL_PASSWORD
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Protected files (like updates.xml) were being overwritten because
the stale-token check ran AFTER the canOverwrite gate. Now protected
files continue (skip) immediately, even with --force.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Set protected=true, remove template reference. updates.xml is managed
by the release workflow, not bulk sync — sync was replacing it with
a stub template containing {{EXTENSION_NAME}} placeholders.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Added platform distribution table (stable=dual, pre-release=Gitea only)
- Updated all example URLs from GitHub to Gitea
- Stable gets dual <downloadurl> (Gitea + GitHub)
- RC/Beta/Alpha/Dev get single <downloadurl> (Gitea only)
- Updated targetplatform to [56].*
- Updated Dolibarr update.txt URL to Gitea
- Removed sha256/client fields from examples (not used)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
branch-freeze, repository-cleanup, manage-repo-templates converted
from gh CLI flags to curl/jq equivalents.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Standardizes the Joomla update server filename to `updates.xml` (plural)
across all .tf definitions, workflow templates, and automation scripts.
The singular `update.xml` was inconsistent with the Joomla convention
and the updates.xml.template already in use.
Files fixed: 16 (definitions, templates, automation scripts)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace git push to main with Gitea contents API (bypasses branch protection)
- Add authenticated push URL step after checkout
- Matches MokoCassiopeia release.yml pattern
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When releasing from a non-main branch, updates.xml is cherry-picked
to main so the Joomla update server always serves current data.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>