From e834b8a3ea89ab99ffac57509517746292cd1806 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 20 Jun 2026 21:21:42 -0500 Subject: [PATCH 01/32] feat: deploy-sftp.php supports --env demo and --env live with multi-instance (#184) - Add demo and live to ENV_CONFIG_MAP - Add multi-target deploy via LIVE_TARGETS env var (JSON array of targets) - Add sftp-config.demo.json.example and sftp-config.live.json.example templates - Failed targets logged but don't block remaining deploys --- deploy/deploy-sftp.php | 115 +++++++++++++++++- .../deploy/sftp-config.demo.json.example | 48 ++++++++ .../deploy/sftp-config.live.json.example | 49 ++++++++ 3 files changed, 208 insertions(+), 4 deletions(-) create mode 100644 templates/scripts/deploy/sftp-config.demo.json.example create mode 100644 templates/scripts/deploy/sftp-config.live.json.example diff --git a/deploy/deploy-sftp.php b/deploy/deploy-sftp.php index 48bb5ce..9f0f996 100644 --- a/deploy/deploy-sftp.php +++ b/deploy/deploy-sftp.php @@ -66,8 +66,16 @@ class DeploySftp extends CliFramework */ protected function run(): int { - $repoPath = $this->resolveRepoPath(); - $srcDir = $this->resolveSrcDir($repoPath); + $repoPath = $this->resolveRepoPath(); + $srcDir = $this->resolveSrcDir($repoPath); + $env = strtolower($this->getArgument('--env', '') ?: ''); + + // Multi-target: LIVE_TARGETS env var overrides config file for live deploys + $liveTargets = getenv('LIVE_TARGETS') ?: ''; + if ($liveTargets !== '' && ($env === 'live' || $env === '')) { + return $this->deployMultiTarget($repoPath, $srcDir, $liveTargets); + } + $configPath = $this->resolveConfigPath($repoPath); $this->log("Repository : {$repoPath}"); @@ -130,6 +138,103 @@ class DeploySftp extends CliFramework return $exitCode; } + // ─── Multi-target deploy ──────────────────────────────────────────────── + + /** + * Deploy to multiple live targets from LIVE_TARGETS JSON. + * + * LIVE_TARGETS format (JSON array of objects): + * [ + * {"host": "web1.example.com", "user": "deploy", "remote_path": "/var/www/module/", "ssh_key_file": "~/.ssh/id_rsa"}, + * {"host": "web2.example.com", "user": "deploy", "remote_path": "/var/www/module/", "ssh_key_file": "~/.ssh/id_rsa"} + * ] + * + * @return int POSIX exit code (0 if all targets succeed) + */ + private function deployMultiTarget(string $repoPath, string $srcDir, string $liveTargetsJson): int + { + $targets = json_decode($liveTargetsJson, true); + if (!is_array($targets) || empty($targets)) { + $this->log('ERROR', 'LIVE_TARGETS is not a valid JSON array'); + return self::EXIT_USAGE; + } + + $this->section("Multi-target live deploy ({$this->count($targets)} targets)"); + + $succeeded = 0; + $failed = 0; + + foreach ($targets as $i => $target) { + $host = $target['host'] ?? 'unknown'; + $this->section("Target " . ($i + 1) . ": {$host}"); + + // Merge target config into $this->config for this iteration + $this->config = $target; + + if (!$this->validateConfig()) { + $this->log('ERROR', "Skipping target {$host} — invalid config"); + $failed++; + continue; + } + + $remotePath = rtrim((string) $this->config['remote_path'], '/'); + $ignores = array_merge( + $this->buildIgnorePatterns(), + $this->loadFtpIgnorePatterns($srcDir), + $this->loadFtpIgnorePatterns($repoPath) + ); + + $user = (string) $this->config['user']; + $port = (int) ($this->config['port'] ?? 22); + + if ($this->dryRun) { + $this->log("[DRY RUN] Would deploy to {$user}@{$host}:{$port} → {$remotePath}"); + $succeeded++; + continue; + } + + $sftp = $this->connect($host, $port, $user, $repoPath); + if ($sftp === null) { + $this->log('ERROR', "Failed to connect to {$host}"); + $failed++; + continue; + } + + // Reset counters per target + $this->uploaded = 0; + $this->skipped = 0; + $this->unchanged = 0; + $this->deleted = 0; + + $dirCheck = @$sftp->nlist(dirname($remotePath)); + $baseName = basename($remotePath); + $dirExists = is_array($dirCheck) && in_array($baseName, $dirCheck, true); + if (!$dirExists) { + $sftp->mkdir($remotePath, -1, true); + } + + $exitCode = $this->uploadDirectory($sftp, $srcDir, $remotePath, $srcDir, $ignores); + + $this->log(" {$host}: Uploaded={$this->uploaded} Unchanged={$this->unchanged} Deleted={$this->deleted} Skipped={$this->skipped}"); + + if ($exitCode === 0) { + $succeeded++; + } else { + $failed++; + } + } + + $this->section('Multi-target summary'); + $this->log("Succeeded: {$succeeded}, Failed: {$failed}"); + + return $failed > 0 ? self::EXIT_FAILURE : self::EXIT_SUCCESS; + } + + private function count(array $arr): int + { + return \count($arr); + } + // ─── Private helpers ────────────────────────────────────────────────────── /** @@ -171,8 +276,10 @@ class DeploySftp extends CliFramework /** Map of --env values to their sftp-config filename. */ private const ENV_CONFIG_MAP = [ - 'dev' => 'sftp-config.dev.json', - 'rs' => 'sftp-config.rs.json', + 'dev' => 'sftp-config.dev.json', + 'rs' => 'sftp-config.rs.json', + 'demo' => 'sftp-config.demo.json', + 'live' => 'sftp-config.live.json', ]; /** diff --git a/templates/scripts/deploy/sftp-config.demo.json.example b/templates/scripts/deploy/sftp-config.demo.json.example new file mode 100644 index 0000000..36c57be --- /dev/null +++ b/templates/scripts/deploy/sftp-config.demo.json.example @@ -0,0 +1,48 @@ +{ + "_template": "Copy this file to scripts/sftp-config/sftp-config.demo.json — it is gitignored", + "_env": "demo", + + "type": "sftp", + + "save_before_upload": false, + "upload_on_save": false, + "sync_down_on_open": false, + "sync_skip_deletes": false, + "sync_same_age": true, + "confirm_downloads": false, + "confirm_sync": true, + "confirm_overwrite_newer": true, + + "host": "YOUR_DEMO_HOST", + "user": "YOUR_DEMO_USERNAME", + "ssh_key_file": "jmiller_private.ppk", + "port": "22", + + "remote_path": "/home/YOUR_USER/YOUR_DEMO_DOMAIN/htdocs/custom/YOUR_MODULE/", + + "ignore_regexes": [ + "\\.sublime-(project|workspace|settings)", + "\\.libsass.json/", + "sftp-config(-alt\\d?)?\\.json", + "sftp-settings\\.json", + "/venv/", + "\\.svn/", + "\\.hg/", + "\\.bzr", + "_darcs", + "CVS", + "\\.DS_Store", + "Thumbs\\.db", + "robots\\.txt", + "desktop\\.ini", + "configuration\\.php", + "\\.ffs*", + "\\.git*", + "\\.editorconfig", + "conf\\.php", + "\\.ps1", + "\\.tx" + ], + + "connect_timeout": 30 +} diff --git a/templates/scripts/deploy/sftp-config.live.json.example b/templates/scripts/deploy/sftp-config.live.json.example new file mode 100644 index 0000000..90914e4 --- /dev/null +++ b/templates/scripts/deploy/sftp-config.live.json.example @@ -0,0 +1,49 @@ +{ + "_template": "Copy this file to scripts/sftp-config/sftp-config.live.json — it is gitignored", + "_env": "live", + "_note": "For multi-instance live deploy, use the LIVE_TARGETS env var instead (JSON array of target objects)", + + "type": "sftp", + + "save_before_upload": false, + "upload_on_save": false, + "sync_down_on_open": false, + "sync_skip_deletes": false, + "sync_same_age": true, + "confirm_downloads": false, + "confirm_sync": true, + "confirm_overwrite_newer": true, + + "host": "YOUR_LIVE_HOST", + "user": "YOUR_LIVE_USERNAME", + "ssh_key_file": "~/.ssh/id_rsa", + "port": "22", + + "remote_path": "/home/YOUR_USER/YOUR_LIVE_DOMAIN/htdocs/custom/YOUR_MODULE/", + + "ignore_regexes": [ + "\\.sublime-(project|workspace|settings)", + "\\.libsass.json/", + "sftp-config(-alt\\d?)?\\.json", + "sftp-settings\\.json", + "/venv/", + "\\.svn/", + "\\.hg/", + "\\.bzr", + "_darcs", + "CVS", + "\\.DS_Store", + "Thumbs\\.db", + "robots\\.txt", + "desktop\\.ini", + "configuration\\.php", + "\\.ffs*", + "\\.git*", + "\\.editorconfig", + "conf\\.php", + "\\.ps1", + "\\.tx" + ], + + "connect_timeout": 30 +} -- 2.52.0 From 7d369628f0c0244a10b09d096c6c88e2726c785e Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 02:21:55 +0000 Subject: [PATCH 02/32] chore(version): auto-bump patch 09.32.01-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- README.md | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 36 files changed, 37 insertions(+), 37 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 616511b..349f515 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.32.00 +# VERSION: 09.32.01 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/README.md b/README.md index c0b26cf..f324a51 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.32.00 +VERSION: 09.32.01 BRIEF: Project overview and documentation --> diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 52a4b32..82abf2d 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index 9a2f3f1..e8dbf28 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index faf5269..ddd9ac7 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 97ce0e1..b592074 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 3c3eb1f..23cc5e9 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index 82db6b1..e245dd0 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index 90d3fdc..f26b515 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index 4b69a17..fbdd491 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 4a2b9b4..ea57f31 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 09eeaf5..b85a026 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 555dbf9..071402e 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index ee0228c..0f36449 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index fb63935..70be688 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index edad9f6..adbdb5c 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index bdcc068..6dc5999 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index f9f156b..7fc2691 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index 01a5994..94550b7 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index 7a6b0d3..59ca4d7 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 190e5e5..640978d 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_check.php b/cli/version_check.php index 0c5b4d2..ebd0779 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index 0916fa9..4c25e1a 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index a168d11..25765c2 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index 50caa26..72de919 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index e31243c..1eb6dad 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index b8e22b1..5fa1595 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index bfee124..5a17750 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index 865044e..e57740b 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index a74f168..6ccbf1f 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.32.00 + VERSION: 09.32.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index 2c85edb..ec2d220 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.32.00 +VERSION: 09.32.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index d2dcbcf..271f233 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.32.00 + VERSION: 09.32.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index b11f23f..4e3bae9 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.32.00 +VERSION: 09.32.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 8dbf486..58151b5 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index e982a0d..8d4a990 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 65f66c4..711f116 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.32.00 + * VERSION: 09.32.01 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From e8a3414ff453a0557eba69da9919b43eb5844259 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 02:22:53 +0000 Subject: [PATCH 03/32] chore(release): build 09.33.00 [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 24 ++--------------------- README.md | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 37 files changed, 39 insertions(+), 59 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 349f515..f4805fa 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.32.01 +# VERSION: 09.33.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 3db1ccb..d5e509d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ BRIEF: Release changelog # Changelog ## [Unreleased] +## [09.33.00] --- 2026-06-21 + ## [09.32.00] --- 2026-06-21 ## [09.32.00] --- 2026-06-21 @@ -19,25 +21,3 @@ BRIEF: Release changelog ## [09.31.00] --- 2026-06-21 ## [09.31.00] --- 2026-06-21 - -## [09.30.00] --- 2026-06-21 - -## [09.30.00] --- 2026-06-21 - -### Added -- `security:advisories` command — cross-repo security advisory aggregator (#150) - - Scans org repos for known CVEs via `composer audit` - - Aggregates results into a single report with severity breakdown - - Auto-creates tracking issues for critical/high vulnerabilities (`--create-issues`) - - Checkpoint-based resumability with `--resume` - - Export to JSON/CSV with `--export` - -### Changed -- `manifest:read` rewritten to use Gitea manifest API as primary source (#283) - - Falls back to auto-detection from source tree (Joomla, Dolibarr, generic) - - No longer requires `.mokogitea/manifest.xml` file - - Backward-compatible field aliases for existing CI consumers -- Renamed `MokoStandards` namespace → `MokoCli` across all files -- Renamed `MokoEnterprise` namespace → `MokoCli` across all files -- Renamed `MokoStandardsParser` class → `ManifestParser` -- Fixed `composer.json` autoload paths: `src/` → `source/` diff --git a/README.md b/README.md index f324a51..c2df4af 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.32.01 +VERSION: 09.33.00 BRIEF: Project overview and documentation --> diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 82abf2d..6843980 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index e8dbf28..b121ad4 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index ddd9ac7..63cb026 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index b592074..956873f 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 23cc5e9..adff0de 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index e245dd0..9a7a6f1 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index f26b515..1db52bb 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index fbdd491..66d9b26 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index ea57f31..a807033 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index b85a026..40d924a 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 071402e..076ebf3 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 0f36449..7efd446 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 70be688..592c737 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index adbdb5c..c3fa688 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index 6dc5999..cf06dfc 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index 7fc2691..b47971b 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index 94550b7..6056390 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index 59ca4d7..0a2ab91 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 640978d..2804b8d 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_check.php b/cli/version_check.php index ebd0779..6be014b 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index 4c25e1a..1dc2106 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 25765c2..335d65f 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index 72de919..0aba8a1 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index 1eb6dad..aa3172a 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 5fa1595..72d26ae 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 5a17750..1a7b898 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index e57740b..2932a79 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index 6ccbf1f..6d5ce1b 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.32.01 + VERSION: 09.33.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index ec2d220..6b14161 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.32.01 +VERSION: 09.33.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index 271f233..96f178e 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.32.01 + VERSION: 09.33.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index 4e3bae9..fb0919e 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.32.01 +VERSION: 09.33.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 58151b5..17019ef 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index 8d4a990..b150e27 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 711f116..558a85e 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.32.01 + * VERSION: 09.33.00 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From 7be017ae30cb5add97d9783b42e5e76156e366cd Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 02:22:56 +0000 Subject: [PATCH 04/32] =?UTF-8?q?chore:=20promote=20changelog=20[Unrelease?= =?UTF-8?q?d]=20=E2=86=92=20[09.33.00]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5e509d..da6fb42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ BRIEF: Release changelog ## [09.33.00] --- 2026-06-21 +## [09.33.00] --- 2026-06-21 + ## [09.32.00] --- 2026-06-21 ## [09.32.00] --- 2026-06-21 -- 2.52.0 From 35075aa7434f3d3e15ef514d7391a09d3db70b40 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Sun, 21 Jun 2026 02:23:11 +0000 Subject: [PATCH 05/32] chore: sync issue-branch.yml from Template-Generic [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index f4805fa..75a6963 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.33.00 +# VERSION: 01.00.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" -- 2.52.0 From 0d3b14d55ca0c200451d888c1bb8434a53db81bc Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 20 Jun 2026 21:41:43 -0500 Subject: [PATCH 06/32] feat: cross-repo dependency update automation (#149) Add `deps:update` command that scans org repos for outdated Composer/npm dependencies, creates PRs with changelogs, and optionally auto-merges safe patch updates. - Composer: runs `composer outdated --format=json`, updates targeted packages - npm: runs `npm outdated --json`, updates targeted packages - Skips repos with existing deps PRs (no duplicates) - Checkpoint-based resumability with --resume - --patch-only for safe updates, --auto-merge for patch PRs - Supports --repos and --exclude filters --- automation/update_dependencies.php | 633 +++++++++++++++++++++++++++++ bin/moko | 1 + 2 files changed, 634 insertions(+) create mode 100644 automation/update_dependencies.php diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php new file mode 100644 index 0000000..1380846 --- /dev/null +++ b/automation/update_dependencies.php @@ -0,0 +1,633 @@ +#!/usr/bin/env php + + * + * This file is part of a Moko Consulting project. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + * FILE INFORMATION + * DEFGROUP: MokoPlatform.Automation + * INGROUP: MokoPlatform.Scripts + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli + * PATH: /automation/update_dependencies.php + * VERSION: 01.00.00 + * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge + */ + +declare(strict_types=1); + +require_once __DIR__ . '/../vendor/autoload.php'; + +use MokoCli\{ + ApiClient, + AuditLogger, + CheckpointManager, + CircuitBreakerOpen, + CliFramework, + Config, + GitPlatformAdapter, + PlatformAdapterFactory, + RateLimitExceeded +}; + +/** + * Cross-Repo Dependency Update Automation + * + * Scans org repos for outdated Composer/npm dependencies, creates PRs with + * changelogs, and optionally auto-merges safe patch updates. + * + * @see https://git.mokoconsulting.tech/MokoConsulting/mokocli/issues/149 + */ +class UpdateDependencies extends CliFramework +{ + public const VERSION = '01.00.00'; + + private const BRANCH_PREFIX = 'chore/deps-update'; + + private ApiClient $api; + private GitPlatformAdapter $adapter; + private AuditLogger $logger; + private CheckpointManager $checkpoints; + + /** Summary counters. */ + private int $reposScanned = 0; + private int $reposUpdated = 0; + private int $prsCreated = 0; + private int $autoMerged = 0; + private int $reposFailed = 0; + + protected function configure(): void + { + $this->setDescription('Cross-repo dependency update automation'); + $this->addArgument('--org', 'Organization to scan', 'MokoConsulting'); + $this->addArgument('--repos', 'Comma-separated list of specific repos', ''); + $this->addArgument('--exclude', 'Comma-separated list of repos to exclude', ''); + $this->addArgument('--skip-archived', 'Skip archived repositories', true); + $this->addArgument('--type', 'Dependency type: composer, npm, or all', 'all'); + $this->addArgument('--patch-only', 'Only update patch versions (safe updates)', false); + $this->addArgument('--auto-merge', 'Auto-merge PRs with only patch updates', false); + $this->addArgument('--resume', 'Resume from checkpoint', false); + } + + protected function run(): int + { + $this->log("Dependency Update Automation v" . self::VERSION, 'INFO'); + + if (!$this->initComponents()) { + return self::EXIT_FAILURE; + } + + $org = $this->getArgument('--org', 'MokoConsulting'); + $depType = strtolower($this->getArgument('--type', 'all')); + $patchOnly = $this->getArgument('--patch-only', false); + $autoMerge = $this->getArgument('--auto-merge', false); + + // ── Gather repos ───────────────────────────────────────────────── + $repos = $this->gatherRepos($org); + if ($repos === null) { + return self::EXIT_FAILURE; + } + + $total = count($repos); + $this->log("Found {$total} repositories to scan", 'INFO'); + + // ── Resume support ─────────────────────────────────────────────── + $completed = []; + if ($this->getArgument('--resume', false)) { + $checkpoint = $this->checkpoints->load('deps_update'); + if ($checkpoint) { + $completed = $checkpoint['completed'] ?? []; + $this->log("Resuming — skipping " . count($completed) . " already-processed repos", 'INFO'); + } + } + + // ── Process each repo ──────────────────────────────────────────── + $this->section('Scanning repositories for outdated dependencies'); + + foreach ($repos as $i => $repo) { + $repoName = $repo['name']; + $this->progress($i + 1, $total, $repoName); + + if (in_array($repoName, $completed, true)) { + continue; + } + + try { + $this->processRepo($org, $repoName, $depType, $patchOnly, $autoMerge); + $completed[] = $repoName; + + $this->checkpoints->save('deps_update', ['completed' => $completed]); + } catch (RateLimitExceeded $e) { + $this->log("Rate limit hit — checkpoint saved", 'WARNING'); + break; + } catch (CircuitBreakerOpen $e) { + $this->log("Circuit breaker open — checkpoint saved", 'WARNING'); + break; + } catch (\Exception $e) { + $this->log("Failed {$repoName}: {$e->getMessage()}", 'ERROR'); + $this->reposFailed++; + } + } + + $this->progress($total, $total, '', true); + + // ── Summary ────────────────────────────────────────────────────── + $this->section('Summary'); + $this->printSummary( + $this->reposScanned - $this->reposFailed, + $this->reposFailed, + $this->elapsed() + ); + + $this->log("Repos scanned: {$this->reposScanned}", 'INFO'); + $this->log("Repos updated: {$this->reposUpdated}", 'INFO'); + $this->log("PRs created: {$this->prsCreated}", 'INFO'); + if ($autoMerge) { + $this->log("Auto-merged: {$this->autoMerged}", 'INFO'); + } + + if (count($completed) === $total) { + $this->checkpoints->clear('deps_update'); + } + + return $this->reposFailed > 0 ? self::EXIT_FAILURE : self::EXIT_SUCCESS; + } + + // ── Component init ─────────────────────────────────────────────────── + + private function initComponents(): bool + { + try { + $config = new Config(); + $this->api = new ApiClient($config); + $this->adapter = PlatformAdapterFactory::create($this->api, $config); + $this->logger = new AuditLogger(); + $this->checkpoints = new CheckpointManager(); + return true; + } catch (\Exception $e) { + $this->log("Failed to initialise: {$e->getMessage()}", 'ERROR'); + return false; + } + } + + // ── Repo gathering ─────────────────────────────────────────────────── + + private function gatherRepos(string $org): ?array + { + $specificRepos = array_filter(explode(',', $this->getArgument('--repos', ''))); + $excludeRepos = array_filter(explode(',', $this->getArgument('--exclude', ''))); + $skipArchived = $this->getArgument('--skip-archived', true); + + // Default exclusions + $excludeRepos = array_merge($excludeRepos, [ + 'mokocli', '.mokogitea-private', 'org-profile', + ]); + + try { + $repos = $this->adapter->listOrgRepos($org, $skipArchived); + } catch (\Exception $e) { + $this->log("Failed to list repos: {$e->getMessage()}", 'ERROR'); + return null; + } + + if (!empty($specificRepos)) { + $repos = array_filter($repos, fn($r) => in_array($r['name'], $specificRepos, true)); + } + if (!empty($excludeRepos)) { + $repos = array_filter($repos, fn($r) => !in_array($r['name'], $excludeRepos, true)); + } + + return array_values($repos); + } + + // ── Per-repo processing ────────────────────────────────────────────── + + private function processRepo( + string $org, + string $repoName, + string $depType, + bool $patchOnly, + bool $autoMerge + ): void { + $this->reposScanned++; + + $hasComposer = ($depType === 'all' || $depType === 'composer'); + $hasNpm = ($depType === 'all' || $depType === 'npm'); + + $outdated = []; + + // ── Composer ───────────────────────────────────────────────── + if ($hasComposer) { + $composerOutdated = $this->scanComposer($org, $repoName, $patchOnly); + if ($composerOutdated !== null) { + $outdated['composer'] = $composerOutdated; + } + } + + // ── npm ────────────────────────────────────────────────────── + if ($hasNpm) { + $npmOutdated = $this->scanNpm($org, $repoName, $patchOnly); + if ($npmOutdated !== null) { + $outdated['npm'] = $npmOutdated; + } + } + + if (empty($outdated)) { + return; + } + + // Check if there's already an open deps PR + if ($this->hasExistingDepsPR($org, $repoName)) { + $this->log(" {$repoName}: existing deps PR found — skipping", 'INFO'); + return; + } + + $this->reposUpdated++; + + // ── Create PR ──────────────────────────────────────────────── + $totalUpdates = 0; + $allPatchOnly = true; + + foreach ($outdated as $type => $packages) { + $totalUpdates += count($packages); + foreach ($packages as $pkg) { + if (!$this->isPatchUpdate($pkg['current'] ?? '', $pkg['latest'] ?? '')) { + $allPatchOnly = false; + } + } + } + + $title = "chore(deps): update {$totalUpdates} " . ($totalUpdates === 1 ? 'dependency' : 'dependencies'); + $body = $this->buildPrBody($repoName, $outdated); + $branch = self::BRANCH_PREFIX . '-' . date('Y-m-d'); + + if ($this->dryRun) { + $this->log("[dry-run] Would create PR in {$repoName}: {$title}", 'INFO'); + foreach ($outdated as $type => $packages) { + foreach ($packages as $pkg) { + $this->log(" [{$type}] {$pkg['name']}: {$pkg['current']} → {$pkg['latest']}", 'INFO'); + } + } + return; + } + + try { + // Clone repo, run updates, push branch + $prNumber = $this->cloneUpdateAndPR($org, $repoName, $branch, $title, $body, $outdated); + + if ($prNumber > 0) { + $this->prsCreated++; + $this->log(" {$repoName}: PR #{$prNumber} created", 'INFO'); + + // Auto-merge if all updates are patch-level + if ($autoMerge && $allPatchOnly && $prNumber > 0) { + $this->tryAutoMerge($org, $repoName, $prNumber); + } + } + } catch (\Exception $e) { + $this->log(" {$repoName}: PR creation failed — {$e->getMessage()}", 'ERROR'); + } + } + + // ── Composer scanning ──────────────────────────────────────────────── + + private function scanComposer(string $org, string $repoName, bool $patchOnly): ?array + { + // Check if repo has composer.json + try { + $this->adapter->getFileContents($org, $repoName, 'composer.json'); + } catch (\Exception $e) { + return null; + } + + // Check if repo has composer.lock + try { + $this->adapter->getFileContents($org, $repoName, 'composer.lock'); + } catch (\Exception $e) { + return null; + } + + // Clone to temp dir and run composer outdated + $tmpDir = sys_get_temp_dir() . '/moko_deps_' . $repoName . '_' . getmypid(); + @mkdir($tmpDir, 0700, true); + + try { + $cloneUrl = $this->adapter->getCloneUrl($org, $repoName); + $cmd = sprintf( + 'git clone --depth 1 --quiet %s %s 2>/dev/null', + escapeshellarg($cloneUrl), + escapeshellarg($tmpDir) + ); + exec($cmd, $output, $exitCode); + if ($exitCode !== 0) { + return null; + } + + // Run composer outdated + $flags = $patchOnly ? '--minor-only' : ''; + $cmd = sprintf( + 'composer outdated --format=json --no-interaction %s --working-dir=%s 2>/dev/null', + $flags, + escapeshellarg($tmpDir) + ); + $json = shell_exec($cmd); + if ($json === null || $json === '') { + return null; + } + + $data = json_decode($json, true); + $installed = $data['installed'] ?? []; + + if (empty($installed)) { + return null; + } + + $outdated = []; + foreach ($installed as $pkg) { + // Skip abandoned/dev packages + if (($pkg['abandoned'] ?? false) || str_starts_with($pkg['version'] ?? '', 'dev-')) { + continue; + } + + $outdated[] = [ + 'name' => $pkg['name'] ?? '', + 'current' => $pkg['version'] ?? '', + 'latest' => $pkg['latest'] ?? '', + 'status' => $pkg['latest-status'] ?? 'unknown', + ]; + } + + return empty($outdated) ? null : $outdated; + } finally { + // Cleanup + if (is_dir($tmpDir)) { + exec(sprintf('rm -rf %s', escapeshellarg($tmpDir))); + } + } + } + + // ── npm scanning ───────────────────────────────────────────────────── + + private function scanNpm(string $org, string $repoName, bool $patchOnly): ?array + { + // Check if repo has package.json + try { + $this->adapter->getFileContents($org, $repoName, 'package.json'); + } catch (\Exception $e) { + return null; + } + + // Check for lock file + $hasLock = false; + foreach (['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'] as $lockFile) { + try { + $this->adapter->getFileContents($org, $repoName, $lockFile); + $hasLock = true; + break; + } catch (\Exception $e) { + // continue + } + } + + if (!$hasLock) { + return null; + } + + $tmpDir = sys_get_temp_dir() . '/moko_deps_npm_' . $repoName . '_' . getmypid(); + @mkdir($tmpDir, 0700, true); + + try { + $cloneUrl = $this->adapter->getCloneUrl($org, $repoName); + exec(sprintf('git clone --depth 1 --quiet %s %s 2>/dev/null', + escapeshellarg($cloneUrl), escapeshellarg($tmpDir))); + + if (!file_exists("{$tmpDir}/package.json")) { + return null; + } + + // Install deps first (needed for npm outdated) + exec(sprintf('cd %s && npm install --silent 2>/dev/null', escapeshellarg($tmpDir))); + + $json = shell_exec(sprintf('cd %s && npm outdated --json 2>/dev/null', escapeshellarg($tmpDir))); + if ($json === null || $json === '' || $json === '{}') { + return null; + } + + $data = json_decode($json, true); + if (!is_array($data) || empty($data)) { + return null; + } + + $outdated = []; + foreach ($data as $name => $info) { + $current = $info['current'] ?? ''; + $wanted = $info['wanted'] ?? ''; + $latest = $info['latest'] ?? ''; + $target = $patchOnly ? $wanted : $latest; + + if ($current === $target || $target === '') { + continue; + } + + $outdated[] = [ + 'name' => $name, + 'current' => $current, + 'latest' => $target, + 'status' => ($current === $wanted) ? 'up-to-date' : 'outdated', + ]; + } + + return empty($outdated) ? null : $outdated; + } finally { + if (is_dir($tmpDir)) { + exec(sprintf('rm -rf %s', escapeshellarg($tmpDir))); + } + } + } + + // ── PR creation ────────────────────────────────────────────────────── + + private function cloneUpdateAndPR( + string $org, + string $repoName, + string $branch, + string $title, + string $body, + array $outdated + ): int { + $tmpDir = sys_get_temp_dir() . '/moko_deps_pr_' . $repoName . '_' . getmypid(); + @mkdir($tmpDir, 0700, true); + + try { + $cloneUrl = $this->adapter->getCloneUrl($org, $repoName); + exec(sprintf('git clone --quiet %s %s 2>/dev/null', + escapeshellarg($cloneUrl), escapeshellarg($tmpDir))); + + // Create branch + exec(sprintf('git -C %s checkout -b %s 2>/dev/null', + escapeshellarg($tmpDir), escapeshellarg($branch))); + + $updated = false; + + // Run composer update if needed + if (isset($outdated['composer'])) { + $packages = array_column($outdated['composer'], 'name'); + $cmd = sprintf( + 'cd %s && composer update %s --no-interaction --quiet 2>/dev/null', + escapeshellarg($tmpDir), + implode(' ', array_map('escapeshellarg', $packages)) + ); + exec($cmd, $output, $exitCode); + if ($exitCode === 0) { + $updated = true; + } + } + + // Run npm update if needed + if (isset($outdated['npm'])) { + $packages = array_column($outdated['npm'], 'name'); + $cmd = sprintf( + 'cd %s && npm update %s --save 2>/dev/null', + escapeshellarg($tmpDir), + implode(' ', array_map('escapeshellarg', $packages)) + ); + exec($cmd, $output, $exitCode); + if ($exitCode === 0) { + $updated = true; + } + } + + if (!$updated) { + return 0; + } + + // Commit and push + exec(sprintf('git -C %s config user.email "gitea-actions[bot]@mokoconsulting.tech"', escapeshellarg($tmpDir))); + exec(sprintf('git -C %s config user.name "gitea-actions[bot]"', escapeshellarg($tmpDir))); + exec(sprintf('git -C %s add -A', escapeshellarg($tmpDir))); + + // Check if there are actual changes + exec(sprintf('git -C %s diff --cached --quiet', escapeshellarg($tmpDir)), $output, $diffExit); + if ($diffExit === 0) { + return 0; // No changes + } + + exec(sprintf('git -C %s commit -m %s', + escapeshellarg($tmpDir), + escapeshellarg($title . " [skip ci]"))); + exec(sprintf('git -C %s push origin %s 2>/dev/null', + escapeshellarg($tmpDir), escapeshellarg($branch)), $output, $pushExit); + + if ($pushExit !== 0) { + $this->log(" {$repoName}: push failed", 'ERROR'); + return 0; + } + + // Create PR via API + $defaultBranch = $this->getDefaultBranch($org, $repoName); + $pr = $this->adapter->createPullRequest( + $org, $repoName, $title, $branch, $defaultBranch, $body, [ + 'labels' => ['dependencies'], + ] + ); + + return (int) ($pr['number'] ?? 0); + } finally { + if (is_dir($tmpDir)) { + exec(sprintf('rm -rf %s', escapeshellarg($tmpDir))); + } + } + } + + // ── Auto-merge ─────────────────────────────────────────────────────── + + private function tryAutoMerge(string $org, string $repoName, int $prNumber): void + { + try { + $this->api->put( + "/repos/{$org}/{$repoName}/pulls/{$prNumber}/merge", + ['Do' => 'squash', 'merge_message_field' => 'chore(deps): auto-merge patch updates'] + ); + $this->autoMerged++; + $this->log(" {$repoName}: PR #{$prNumber} auto-merged", 'INFO'); + } catch (\Exception $e) { + $this->log(" {$repoName}: auto-merge failed — {$e->getMessage()}", 'WARNING'); + } + } + + // ── Helpers ─────────────────────────────────────────────────────────── + + private function hasExistingDepsPR(string $org, string $repoName): bool + { + try { + $prs = $this->adapter->listPullRequests($org, $repoName, ['state' => 'open']); + foreach ($prs as $pr) { + if (str_starts_with($pr['head']['ref'] ?? '', self::BRANCH_PREFIX)) { + return true; + } + } + } catch (\Exception $e) { + // Ignore — proceed with creating PR + } + return false; + } + + private function getDefaultBranch(string $org, string $repoName): string + { + try { + $repo = $this->api->get("/repos/{$org}/{$repoName}"); + return $repo['default_branch'] ?? 'main'; + } catch (\Exception $e) { + return 'main'; + } + } + + private function isPatchUpdate(string $current, string $latest): bool + { + $cur = explode('.', ltrim($current, 'v')); + $lat = explode('.', ltrim($latest, 'v')); + + if (count($cur) < 3 || count($lat) < 3) { + return false; + } + + // Same major and minor, only patch differs + return $cur[0] === $lat[0] && $cur[1] === $lat[1] && $cur[2] !== $lat[2]; + } + + private function buildPrBody(string $repoName, array $outdated): string + { + $lines = [ + "## Dependency Updates", + "", + "**Repository**: `{$repoName}`", + "**Scanned**: " . date('Y-m-d H:i:s'), + "", + ]; + + foreach ($outdated as $type => $packages) { + $lines[] = "### " . ucfirst($type); + $lines[] = ""; + $lines[] = "| Package | Current | Latest | Type |"; + $lines[] = "|---------|---------|--------|------|"; + + foreach ($packages as $pkg) { + $updateType = $this->isPatchUpdate($pkg['current'], $pkg['latest']) ? 'patch' : 'minor/major'; + $lines[] = "| `{$pkg['name']}` | {$pkg['current']} | {$pkg['latest']} | {$updateType} |"; + } + + $lines[] = ""; + } + + $lines[] = "---"; + $lines[] = "*Auto-generated by `moko deps:update`*"; + + return implode("\n", $lines); + } +} + +$script = new UpdateDependencies('update_dependencies', 'Cross-repo dependency update automation'); +exit($script->execute()); diff --git a/bin/moko b/bin/moko index db6a660..b6a58b6 100644 --- a/bin/moko +++ b/bin/moko @@ -89,6 +89,7 @@ const COMMAND_MAP = [ // Automation 'sync' => 'automation/bulk_sync.php', + 'deps:update' => 'automation/update_dependencies.php', 'automation:cleanup' => 'automation/repo_cleanup.php', 'automation:migrate-gitea' => 'automation/migrate_to_gitea.php', -- 2.52.0 From 109493ab4ad5e82cec63e1f65677d036f1b49ec6 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 02:42:15 +0000 Subject: [PATCH 07/32] chore(version): auto-bump patch 09.33.01-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 37 files changed, 38 insertions(+), 38 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 75a6963..73ca529 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 01.00.00 +# VERSION: 09.33.01 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/README.md b/README.md index c2df4af..15377d3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.33.00 +VERSION: 09.33.01 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index 1380846..80fa926 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 01.00.00 + * VERSION: 09.33.01 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 6843980..e011d16 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index b121ad4..028efa4 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index 63cb026..7c58c03 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 956873f..8e005ed 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index adff0de..b983b2e 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index 9a7a6f1..85b64e1 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index 1db52bb..59ce557 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index 66d9b26..7d0654b 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index a807033..5ca1f29 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 40d924a..c4bc866 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 076ebf3..0171d8f 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 7efd446..9acf2cb 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 592c737..3ce7951 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index c3fa688..2f417b4 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index cf06dfc..5b89497 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index b47971b..2b181d3 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index 6056390..b66355a 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index 0a2ab91..4a52f5e 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 2804b8d..df4b5a9 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_check.php b/cli/version_check.php index 6be014b..c0cfe0a 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index 1dc2106..f0048f4 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 335d65f..4c86337 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index 0aba8a1..f3041f2 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index aa3172a..2e39c2c 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 72d26ae..1f2f4e7 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 1a7b898..bc4de01 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index 2932a79..db0e953 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index 6d5ce1b..c064e25 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.33.00 + VERSION: 09.33.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index 6b14161..c8899e2 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.33.00 +VERSION: 09.33.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index 96f178e..a18ff08 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.33.00 + VERSION: 09.33.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index fb0919e..c80ea43 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.33.00 +VERSION: 09.33.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 17019ef..730ca24 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index b150e27..0f851be 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 558a85e..38e2d89 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.33.00 + * VERSION: 09.33.01 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From e0f1ec13727febc418338944b6610814cfabb320 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 02:47:03 +0000 Subject: [PATCH 08/32] chore(release): build 09.34.00 [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 6 ++---- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 38 files changed, 40 insertions(+), 42 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 73ca529..7beefb1 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.33.01 +# VERSION: 09.34.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index da6fb42..8b0447c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ BRIEF: Release changelog # Changelog ## [Unreleased] +## [09.34.00] --- 2026-06-21 + ## [09.33.00] --- 2026-06-21 ## [09.33.00] --- 2026-06-21 @@ -19,7 +21,3 @@ BRIEF: Release changelog ## [09.32.00] --- 2026-06-21 ## [09.32.00] --- 2026-06-21 - -## [09.31.00] --- 2026-06-21 - -## [09.31.00] --- 2026-06-21 diff --git a/README.md b/README.md index 15377d3..616d3cf 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.33.01 +VERSION: 09.34.00 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index 80fa926..b13aa48 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index e011d16..42acf2c 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index 028efa4..b3a9ca7 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index 7c58c03..bd2f237 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 8e005ed..f5c4fc0 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index b983b2e..6b989ab 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index 85b64e1..6833041 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index 59ce557..50b9392 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index 7d0654b..5f8da26 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 5ca1f29..8cdea50 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index c4bc866..94dbba5 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 0171d8f..2c768c2 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 9acf2cb..fca1c52 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 3ce7951..9358e36 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index 2f417b4..95cdd3c 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index 5b89497..3de5c12 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index 2b181d3..99189bb 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index b66355a..0a2c8a4 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index 4a52f5e..0f050d3 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index df4b5a9..0a8b149 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_check.php b/cli/version_check.php index c0cfe0a..e0c4cc4 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index f0048f4..ea2534f 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 4c86337..61bc6ff 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index f3041f2..ba0ee7b 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index 2e39c2c..65ec628 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 1f2f4e7..2cdc7b0 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index bc4de01..6a57303 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index db0e953..237a5a8 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index c064e25..1671810 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.33.01 + VERSION: 09.34.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index c8899e2..fddd5f8 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.33.01 +VERSION: 09.34.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index a18ff08..169bddb 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.33.01 + VERSION: 09.34.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index c80ea43..05e8ae6 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.33.01 +VERSION: 09.34.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 730ca24..60ec9b1 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index 0f851be..1ff416f 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 38e2d89..b68df67 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.33.01 + * VERSION: 09.34.00 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From 2a45dd873b06f4a6d2e7f2f6ba16d2feef7f29d5 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 02:47:06 +0000 Subject: [PATCH 09/32] =?UTF-8?q?chore:=20promote=20changelog=20[Unrelease?= =?UTF-8?q?d]=20=E2=86=92=20[09.34.00]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b0447c..f61a1a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ BRIEF: Release changelog ## [09.34.00] --- 2026-06-21 +## [09.34.00] --- 2026-06-21 + ## [09.33.00] --- 2026-06-21 ## [09.33.00] --- 2026-06-21 -- 2.52.0 From e7b2c1fba215541b5912a0ec1b99927d6701a3a1 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 20 Jun 2026 21:49:17 -0500 Subject: [PATCH 10/32] fix(version-bump): prevent dev from falling behind stable (#289) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-pick from dev (d5fa609). version_bump.php now checks: 1. --min-version argument from workflow 2. Auto-detect from git — scans origin/main and origin/rc for highest released version and uses it as the bump base Closes #289 --- cli/version_bump.php | 71 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/cli/version_bump.php b/cli/version_bump.php index aa2d51a..9dec58b 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -27,6 +27,7 @@ class VersionBumpCli extends CliFramework $this->addArgument('--path', 'Repository root', '.'); $this->addArgument('--minor', 'Bump minor version', false); $this->addArgument('--major', 'Bump major version', false); + $this->addArgument('--min-version', 'Minimum base version (ensures bump is above this)', ''); } protected function run(): int @@ -116,6 +117,28 @@ class VersionBumpCli extends CliFramework $baseVersion = $v; } } + + // Check --min-version: ensures dev never falls behind stable + $minVersion = $this->getArgument('--min-version'); + if (!empty($minVersion)) { + $minVersion = preg_replace('/-(?:dev|alpha|beta|rc)$/', '', $minVersion); + if (preg_match('/^\d{2}\.\d{2}\.\d{2}$/', $minVersion)) { + if ($baseVersion === null || version_compare($minVersion, $baseVersion, '>')) { + $this->log('INFO', "Using --min-version {$minVersion} (higher than manifest {$baseVersion})"); + $baseVersion = $minVersion; + } + } + } + + // Auto-detect: scan git tags for higher versions from other channels + if ($baseVersion !== null) { + $gitTagVersion = $this->getHighestGitTagVersion($root); + if ($gitTagVersion !== null && version_compare($gitTagVersion, $baseVersion, '>')) { + $this->log('INFO', "Git tag version {$gitTagVersion} is higher than manifest {$baseVersion} — using as base"); + $baseVersion = $gitTagVersion; + } + } + if ($baseVersion === null) { $this->log('ERROR', "No version found in manifest.xml, README.md, or Joomla XML"); return 1; @@ -343,6 +366,54 @@ class VersionBumpCli extends CliFramework echo "{$old} -> {$newFull}\n"; return 0; } + + /** + * Scan git release tags for the highest version across all channels. + * + * Checks release names like "MokoSuiteClient (VERSION: 02.45.00)" in + * git tags (stable, release-candidate, development, etc.) to find the + * highest version that has been released on any channel. + */ + private function getHighestGitTagVersion(string $root): ?string + { + $highest = null; + + // Method 1: Parse version from git tag annotations / release commit messages + $output = []; + exec("cd " . escapeshellarg($root) . " && git log --all --oneline --grep='chore(version)' --grep='chore(release)' --format='%s' -20 2>/dev/null", $output); + + foreach ($output as $line) { + if (preg_match('/(\d{2}\.\d{2}\.\d{2})/', $line, $m)) { + $v = preg_replace('/-(?:dev|alpha|beta|rc)$/', '', $m[1]); + if ($highest === null || version_compare($v, $highest, '>')) { + $highest = $v; + } + } + } + + // Method 2: Check version in remote branches' manifest files + $branches = ['origin/main', 'origin/rc', 'origin/dev']; + $manifestPaths = ['source/pkg_*.xml', 'pkg_*.xml']; + + foreach ($branches as $branch) { + foreach ($manifestPaths as $pattern) { + $files = []; + exec("cd " . escapeshellarg($root) . " && git ls-tree --name-only {$branch} -- '{$pattern}' 2>/dev/null", $files); + + foreach ($files as $file) { + $content = shell_exec("cd " . escapeshellarg($root) . " && git show {$branch}:{$file} 2>/dev/null"); + if ($content && preg_match('#(\d{2}\.\d{2}\.\d{2})(?:-(?:dev|alpha|beta|rc))?#', $content, $m)) { + $v = $m[1]; + if ($highest === null || version_compare($v, $highest, '>')) { + $highest = $v; + } + } + } + } + } + + return $highest; + } } $app = new VersionBumpCli(); -- 2.52.0 From 743da9c4c2978ce57e889e71d44cb82a80c73aa3 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Sun, 21 Jun 2026 02:50:31 +0000 Subject: [PATCH 11/32] chore: sync issue-branch.yml from Template-Generic [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 7beefb1..75a6963 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.34.00 +# VERSION: 01.00.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" -- 2.52.0 From cb1053274e9eb2a5dc67fbcc726d380934837ca1 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 20 Jun 2026 22:03:17 -0500 Subject: [PATCH 12/32] feat: smart error recovery suggestions in validators (#146) - Add RecoverySuggestion class with methods for common fix patterns (missing files, directories, XML elements, version mismatches, commands) - Add suggest() method to CliFramework (yellow lightbulb-prefixed output) - Integrate into check_structure.php (missing file/dir suggestions) - Integrate into check_version_consistency.php (version mismatch fixes) --- lib/Enterprise/CliFramework.php | 19 ++++++ lib/Enterprise/RecoverySuggestion.php | 93 ++++++++++++++++++++++++++ validate/check_structure.php | 3 + validate/check_version_consistency.php | 2 + 4 files changed, 117 insertions(+) create mode 100644 lib/Enterprise/RecoverySuggestion.php diff --git a/lib/Enterprise/CliFramework.php b/lib/Enterprise/CliFramework.php index eca2c7c..425ad2e 100644 --- a/lib/Enterprise/CliFramework.php +++ b/lib/Enterprise/CliFramework.php @@ -590,6 +590,25 @@ abstract class CliFramework $this->display(' ' . $this->c($color . self::C_BOLD, $icon) . ' ' . $label . $suffix . "\n"); } + /** + * Display a recovery suggestion with a lightbulb prefix. + * + * @param string $suggestion Fix suggestion text (from RecoverySuggestion) + */ + protected function suggest(string $suggestion): void + { + if ($this->quiet) { + return; + } + $this->clearProgress(); + $lines = explode("\n", $suggestion); + $first = array_shift($lines); + $this->display(' ' . $this->c(self::C_YELLOW, '💡 ' . $first) . "\n"); + foreach ($lines as $line) { + $this->display(' ' . $this->c(self::C_YELLOW, ' ' . $line) . "\n"); + } + } + // ========================================================================= // Console graphics — progress bar // ========================================================================= diff --git a/lib/Enterprise/RecoverySuggestion.php b/lib/Enterprise/RecoverySuggestion.php new file mode 100644 index 0000000..87373fa --- /dev/null +++ b/lib/Enterprise/RecoverySuggestion.php @@ -0,0 +1,93 @@ +#!/usr/bin/env php + + * SPDX-License-Identifier: GPL-3.0-or-later + * FILE INFORMATION + * DEFGROUP: MokoPlatform.Enterprise + * INGROUP: MokoPlatform.Lib + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli + * PATH: /lib/Enterprise/RecoverySuggestion.php + * BRIEF: Smart error recovery suggestions for validators + */ + +declare(strict_types=1); + +namespace MokoCli; + +/** + * Generates actionable fix suggestions when validators detect problems. + * + * Each method returns a human-readable suggestion string that tells the + * developer exactly what to do to fix the issue. + */ +class RecoverySuggestion +{ + /** + * Suggest creating a missing required file. + */ + public static function forMissingFile(string $file, string $template = ''): string + { + $suggestion = "Create the missing file: {$file}"; + if ($template !== '') { + $suggestion .= "\n Copy from template: {$template}"; + } + return $suggestion; + } + + /** + * Suggest adding a missing XML element. + */ + public static function forMissingXmlElement(string $element, string $value, string $file, int $afterLine = 0): string + { + $snippet = "<{$element}>{$value}"; + if ($afterLine > 0) { + return "Add {$snippet} after line {$afterLine} in {$file}"; + } + return "Add {$snippet} to {$file}"; + } + + /** + * Suggest fixing a version mismatch. + */ + public static function forVersionMismatch(string $file, string $found, string $expected): string + { + return "Update version in {$file}: change \"{$found}\" to \"{$expected}\""; + } + + /** + * Suggest creating a missing directory. + */ + public static function forMissingDirectory(string $dir): string + { + return "Create the missing directory:\n mkdir -p {$dir}"; + } + + /** + * Suggest fixing a syntax error. + */ + public static function forSyntaxError(string $file, int $line, string $error): string + { + return "Fix syntax error at {$file}:{$line}\n {$error}"; + } + + /** + * Suggest fixing a missing license header. + */ + public static function forMissingHeader(string $file): string + { + return "Add SPDX license header to {$file}:\n /* Copyright (C) 2026 Moko Consulting \n * SPDX-License-Identifier: GPL-3.0-or-later */"; + } + + /** + * Suggest running a command to fix an issue. + */ + public static function forCommand(string $command, string $context = ''): string + { + $suggestion = "Run: {$command}"; + if ($context !== '') { + $suggestion = "{$context}\n {$suggestion}"; + } + return $suggestion; + } +} diff --git a/validate/check_structure.php b/validate/check_structure.php index b802615..196631e 100644 --- a/validate/check_structure.php +++ b/validate/check_structure.php @@ -20,6 +20,7 @@ declare(strict_types=1); require_once __DIR__ . '/../vendor/autoload.php'; use MokoCli\CliFramework; +use MokoCli\RecoverySuggestion; /** * Validates that the required directories and files exist in the repository root. @@ -67,6 +68,7 @@ class CheckStructure extends CliFramework if (!is_dir($path . '/' . $dir)) { $missingDirs[] = $dir; $this->status(false, "Directory: {$dir}"); + $this->suggest(RecoverySuggestion::forMissingDirectory($dir)); $failed++; } else { $this->status(true, "Directory: {$dir}"); @@ -96,6 +98,7 @@ class CheckStructure extends CliFramework if (!is_file($path . '/' . $file)) { $missingFiles[] = $file; $this->status(false, "File: {$file}"); + $this->suggest(RecoverySuggestion::forMissingFile($file)); $failed++; } else { $this->status(true, "File: {$file}"); diff --git a/validate/check_version_consistency.php b/validate/check_version_consistency.php index 510b1ec..78bbcb9 100755 --- a/validate/check_version_consistency.php +++ b/validate/check_version_consistency.php @@ -21,6 +21,7 @@ declare(strict_types=1); require_once __DIR__ . '/../vendor/autoload.php'; use MokoCli\CliFramework; +use MokoCli\RecoverySuggestion; /** * Checks that the version recorded in composer.json matches VERSION headers @@ -101,6 +102,7 @@ class CheckVersionConsistency extends CliFramework if ($match[0] !== $expected) { $line = substr_count(substr($content, 0, (int) $match[1]), "\n") + 1; $this->status(false, $filename, "line {$line}: found {$match[0]}, expected {$expected}"); + $this->suggest(RecoverySuggestion::forVersionMismatch($filename, $match[0], $expected)); $issues[] = $filename; $filePassed = false; } -- 2.52.0 From 558c0a0edfb03e135dc001278972a9b2694c4bd3 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 03:20:33 +0000 Subject: [PATCH 13/32] chore(version): auto-bump patch 09.34.01-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 38 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 75a6963..25845e1 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 01.00.00 +# VERSION: 09.34.01 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/README.md b/README.md index 616d3cf..274a492 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.34.00 +VERSION: 09.34.01 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index b13aa48..cf7e33f 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 42acf2c..3e69efa 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index b3a9ca7..8f4d85e 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index bd2f237..028aec3 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index f5c4fc0..647a70e 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 6b989ab..3767bd5 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index 6833041..d4c18a4 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index 50b9392..4e82a10 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index 5f8da26..779492d 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 8cdea50..eda3890 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 94dbba5..5009c59 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 2c768c2..288361f 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index fca1c52..cd9bf00 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 9358e36..9d3dd40 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index 95cdd3c..ab5f740 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index 3de5c12..5b97e29 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index 99189bb..b922f0c 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index 0a2c8a4..bfb7934 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index 0f050d3..2454c4c 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 0a8b149..fb4ba62 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_bump.php b/cli/version_bump.php index 9dec58b..08416de 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -370,7 +370,7 @@ class VersionBumpCli extends CliFramework /** * Scan git release tags for the highest version across all channels. * - * Checks release names like "MokoSuiteClient (VERSION: 02.45.00)" in + * Checks release names like "MokoSuiteClient (VERSION: 09.34.01)" in * git tags (stable, release-candidate, development, etc.) to find the * highest version that has been released on any channel. */ diff --git a/cli/version_check.php b/cli/version_check.php index e0c4cc4..3facfc0 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index ea2534f..49182ee 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 61bc6ff..98fd815 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index ba0ee7b..f3904f3 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index 65ec628..752117b 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 2cdc7b0..b5366b7 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 6a57303..c85e1aa 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index 237a5a8..7955112 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index 1671810..cb8e926 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.34.00 + VERSION: 09.34.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index fddd5f8..9ea83da 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.34.00 +VERSION: 09.34.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index 169bddb..675be1b 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.34.00 + VERSION: 09.34.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index 05e8ae6..5888ff0 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.34.00 +VERSION: 09.34.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 60ec9b1..e9ed2bd 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index 1ff416f..def15b9 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index b68df67..8f2034f 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.34.00 + * VERSION: 09.34.01 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From 62168035900a8e83644ce626e3dbf44798da43e8 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 03:22:57 +0000 Subject: [PATCH 14/32] chore(release): build 09.35.00 [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 6 ++---- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 39 files changed, 41 insertions(+), 43 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 25845e1..ffc8861 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.34.01 +# VERSION: 09.35.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index f61a1a9..37129f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ BRIEF: Release changelog # Changelog ## [Unreleased] +## [09.35.00] --- 2026-06-21 + ## [09.34.00] --- 2026-06-21 ## [09.34.00] --- 2026-06-21 @@ -19,7 +21,3 @@ BRIEF: Release changelog ## [09.33.00] --- 2026-06-21 ## [09.33.00] --- 2026-06-21 - -## [09.32.00] --- 2026-06-21 - -## [09.32.00] --- 2026-06-21 diff --git a/README.md b/README.md index 274a492..83f9e5a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.34.01 +VERSION: 09.35.00 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index cf7e33f..51cde79 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 3e69efa..736096b 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index 8f4d85e..7f61196 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index 028aec3..91ee583 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 647a70e..4274565 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 3767bd5..660dd14 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index d4c18a4..3efb1d8 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index 4e82a10..c901c90 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index 779492d..f8088f6 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index eda3890..5c55c4d 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 5009c59..3a7f0af 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 288361f..c073723 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index cd9bf00..45cbe45 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 9d3dd40..6415534 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index ab5f740..592aabf 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index 5b97e29..2b44136 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index b922f0c..d017bfd 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index bfb7934..f54584f 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index 2454c4c..36504b0 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index fb4ba62..29b92c7 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_bump.php b/cli/version_bump.php index 08416de..10815e5 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -370,7 +370,7 @@ class VersionBumpCli extends CliFramework /** * Scan git release tags for the highest version across all channels. * - * Checks release names like "MokoSuiteClient (VERSION: 09.34.01)" in + * Checks release names like "MokoSuiteClient (VERSION: 09.35.00)" in * git tags (stable, release-candidate, development, etc.) to find the * highest version that has been released on any channel. */ diff --git a/cli/version_check.php b/cli/version_check.php index 3facfc0..90f71c0 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index 49182ee..d3f582e 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 98fd815..2c95b73 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index f3904f3..8e0f6cf 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index 752117b..27a48bc 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index b5366b7..e079448 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index c85e1aa..e3c07e0 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index 7955112..6ce9ff9 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index cb8e926..1dd9bc3 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.34.01 + VERSION: 09.35.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index 9ea83da..b7a9709 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.34.01 +VERSION: 09.35.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index 675be1b..4341766 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.34.01 + VERSION: 09.35.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index 5888ff0..e130aba 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.34.01 +VERSION: 09.35.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index e9ed2bd..839ee51 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index def15b9..abb4003 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 8f2034f..ef80bce 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.34.01 + * VERSION: 09.35.00 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From 817e9caee8a5546d23ff5e384d92b89fde8877f4 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 03:22:59 +0000 Subject: [PATCH 15/32] =?UTF-8?q?chore:=20promote=20changelog=20[Unrelease?= =?UTF-8?q?d]=20=E2=86=92=20[09.35.00]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37129f9..fcf080a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ BRIEF: Release changelog ## [09.35.00] --- 2026-06-21 +## [09.35.00] --- 2026-06-21 + ## [09.34.00] --- 2026-06-21 ## [09.34.00] --- 2026-06-21 -- 2.52.0 From 2f43bac247571f50c5855e2d316eff893d9e453b Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Sun, 21 Jun 2026 04:10:46 +0000 Subject: [PATCH 16/32] chore: sync issue-branch.yml from Template-Generic [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index ffc8861..75a6963 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.35.00 +# VERSION: 01.00.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" -- 2.52.0 From 46e33a93834ebe09680f3594b47a37b5459038dc Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 20 Jun 2026 23:31:08 -0500 Subject: [PATCH 17/32] =?UTF-8?q?feat:=20deploy:verify=20=E2=80=94=20deplo?= =?UTF-8?q?y=20with=20auto=20health=20check=20and=20rollback=20(#147)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Orchestrates backup → deploy → health-check → rollback-if-failed: - Pre-deploy snapshot via backup-before-deploy.php - Deploy via deploy-sftp.php subprocess - Inline health check with configurable retries and delay - Auto-rollback via rollback-joomla.php if health check fails - Post-rollback verification - Full audit trail via AuditLogger --- bin/moko | 1 + deploy/deploy-and-verify.php | 331 +++++++++++++++++++++++++++++++++++ 2 files changed, 332 insertions(+) create mode 100644 deploy/deploy-and-verify.php diff --git a/bin/moko b/bin/moko index b6a58b6..dd449b8 100644 --- a/bin/moko +++ b/bin/moko @@ -199,6 +199,7 @@ const COMMAND_MAP = [ 'deploy:sftp' => 'deploy/deploy-sftp.php', 'deploy:backup' => 'deploy/backup-before-deploy.php', 'deploy:health-check' => 'deploy/health-check.php', + 'deploy:verify' => 'deploy/deploy-and-verify.php', 'deploy:rollback' => 'deploy/rollback-joomla.php', 'deploy:sync' => 'deploy/sync-joomla.php', diff --git a/deploy/deploy-and-verify.php b/deploy/deploy-and-verify.php new file mode 100644 index 0000000..584f4a6 --- /dev/null +++ b/deploy/deploy-and-verify.php @@ -0,0 +1,331 @@ +#!/usr/bin/env php + + * SPDX-License-Identifier: GPL-3.0-or-later + * FILE INFORMATION + * DEFGROUP: MokoPlatform.Scripts.Deploy + * INGROUP: MokoPlatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli + * PATH: /deploy/deploy-and-verify.php + * BRIEF: Deploy with automatic health check and rollback on failure + */ + +declare(strict_types=1); + +require_once __DIR__ . '/../vendor/autoload.php'; +require_once __DIR__ . '/../lib/Enterprise/CliFramework.php'; + +use MokoCli\{AuditLogger, CliFramework}; + +/** + * Deploy-and-Verify: orchestrates backup → deploy → health-check → rollback. + * + * If the health check fails after deployment, automatically triggers a rollback + * using the pre-deploy snapshot, with full audit trail. + * + * @see https://git.mokoconsulting.tech/MokoConsulting/mokocli/issues/147 + */ +class DeployAndVerify extends CliFramework +{ + private ?AuditLogger $auditLogger = null; + + protected function configure(): void + { + $this->setDescription('Deploy with automatic health check and rollback on failure'); + $this->addArgument('--path', 'Repository root', '.'); + $this->addArgument('--env', 'Target environment: dev, demo, rs, live', ''); + $this->addArgument('--config', 'Explicit sftp-config path (overrides --env)', ''); + $this->addArgument('--url', 'Site URL for health check', ''); + $this->addArgument('--checks', 'Health checks: http,admin,api (comma-sep)', 'http'); + $this->addArgument('--timeout', 'Health check timeout in seconds', '30'); + $this->addArgument('--retries', 'Health check retries before rollback', '2'); + $this->addArgument('--delay', 'Seconds between health check retries', '5'); + } + + protected function run(): int + { + $path = realpath($this->getArgument('--path', '.')) ?: '.'; + $env = $this->getArgument('--env', ''); + $config = $this->getArgument('--config', ''); + $url = $this->getArgument('--url', ''); + $checks = $this->getArgument('--checks', 'http'); + $timeout = (int) $this->getArgument('--timeout', '30'); + $retries = (int) $this->getArgument('--retries', '2'); + $delay = (int) $this->getArgument('--delay', '5'); + + if ($url === '') { + $this->log('ERROR', 'The --url argument is required for health checks'); + return self::EXIT_USAGE; + } + + if ($env === '' && $config === '') { + $this->log('ERROR', 'Specify --env or --config for the deploy target'); + return self::EXIT_USAGE; + } + + try { + $this->auditLogger = new AuditLogger('deploy-and-verify'); + } catch (\Exception $e) { + // Non-fatal — proceed without audit logging + } + + $this->audit('start', ['path' => $path, 'env' => $env, 'url' => $url]); + + // ── Build subprocess args ──────────────────────────────────── + $deployArgs = $this->buildDeployArgs($path, $env, $config); + $healthArgs = $this->buildHealthArgs($url, $checks, $timeout); + + // ── Step 1: Backup ─────────────────────────────────────────── + $this->section('Step 1: Pre-deploy backup'); + $snapshotDir = sys_get_temp_dir() . '/moko_deploy_snapshot_' . date('Ymd_His') . '_' . getmypid(); + + if ($this->dryRun) { + $this->log('INFO', "[dry-run] Would create snapshot at {$snapshotDir}"); + } else { + $backupExit = $this->runSubprocess('backup-before-deploy.php', array_merge( + $deployArgs, ['--snapshot-dir', $snapshotDir] + )); + + if ($backupExit !== 0) { + $this->log('ERROR', 'Pre-deploy backup failed — aborting deployment'); + $this->audit('backup_failed', ['exit_code' => $backupExit]); + return self::EXIT_FAILURE; + } + $this->log('INFO', "Snapshot saved to {$snapshotDir}"); + } + + // ── Step 2: Deploy ─────────────────────────────────────────── + $this->section('Step 2: Deploy'); + + if ($this->dryRun) { + $this->log('INFO', '[dry-run] Would run deploy-sftp.php ' . implode(' ', $deployArgs)); + } else { + $deployExit = $this->runSubprocess('deploy-sftp.php', $deployArgs); + + if ($deployExit !== 0) { + $this->log('ERROR', 'Deploy failed — no rollback needed (files unchanged)'); + $this->audit('deploy_failed', ['exit_code' => $deployExit]); + $this->cleanup($snapshotDir); + return self::EXIT_FAILURE; + } + $this->log('INFO', 'Deploy completed successfully'); + } + + // ── Step 3: Health check (with retries) ────────────────────── + $this->section('Step 3: Health check'); + + if ($this->dryRun) { + $this->log('INFO', "[dry-run] Would check {$url} with checks: {$checks}"); + $this->log('INFO', '[dry-run] Deploy-and-verify complete'); + return self::EXIT_SUCCESS; + } + + $healthy = false; + for ($attempt = 1; $attempt <= $retries; $attempt++) { + $this->log('INFO', "Health check attempt {$attempt}/{$retries}..."); + + if ($attempt > 1) { + $this->log('INFO', "Waiting {$delay}s before retry..."); + sleep($delay); + } + + $healthExit = $this->runHealthCheck($url, $checks, $timeout); + + if ($healthExit === 0) { + $healthy = true; + break; + } + + $this->log('WARNING', "Health check attempt {$attempt} failed (exit {$healthExit})"); + } + + if ($healthy) { + $this->section('Result: SUCCESS'); + $this->log('INFO', 'Health check passed — deploy verified'); + $this->audit('success', ['url' => $url, 'attempts' => $attempt]); + $this->cleanup($snapshotDir); + return self::EXIT_SUCCESS; + } + + // ── Step 4: Rollback ───────────────────────────────────────── + $this->section('Step 4: ROLLBACK'); + $this->log('ERROR', "Health check failed after {$retries} attempts — rolling back"); + $this->audit('rollback_triggered', ['url' => $url, 'retries' => $retries]); + + $rollbackExit = $this->runSubprocess('rollback-joomla.php', array_merge( + $deployArgs, ['--snapshot-dir', $snapshotDir] + )); + + if ($rollbackExit === 0) { + $this->log('INFO', 'Rollback completed — site restored to pre-deploy state'); + $this->audit('rollback_success', []); + + // Verify rollback worked + $postRollbackHealth = $this->runHealthCheck($url, $checks, $timeout); + if ($postRollbackHealth === 0) { + $this->log('INFO', 'Post-rollback health check passed — site is healthy'); + } else { + $this->log('ERROR', 'Post-rollback health check FAILED — manual intervention needed'); + $this->audit('rollback_verification_failed', []); + } + } else { + $this->log('ERROR', 'Rollback FAILED — manual intervention required'); + $this->audit('rollback_failed', ['exit_code' => $rollbackExit]); + } + + $this->cleanup($snapshotDir); + return self::EXIT_FAILURE; + } + + // ── Health check (inline, no subprocess) ───────────────────────── + + private function runHealthCheck(string $url, string $checks, int $timeout): int + { + $url = rtrim($url, '/'); + $checkList = array_map('trim', explode(',', $checks)); + $failed = 0; + + foreach ($checkList as $check) { + $checkUrl = match ($check) { + 'admin' => $url . '/administrator/', + 'api' => $url . '/api/index.php/v1', + default => $url, + }; + + $result = $this->httpGet($checkUrl, $timeout); + + if ($result === null) { + $this->log('ERROR', " [{$check}] FAIL: connection failed"); + $failed++; + continue; + } + + $validCodes = ($check === 'api') ? [200, 401] : [200]; + if (!in_array($result['http_code'], $validCodes, true)) { + $this->log('ERROR', " [{$check}] FAIL: HTTP {$result['http_code']}"); + $failed++; + continue; + } + + if ($this->containsFatalError($result['body'])) { + $this->log('ERROR', " [{$check}] FAIL: PHP fatal error in response"); + $failed++; + continue; + } + + $this->log('INFO', " [{$check}] PASS: HTTP {$result['http_code']} ({$result['time_ms']}ms)"); + } + + return $failed > 0 ? 1 : 0; + } + + private function httpGet(string $url, int $timeout): ?array + { + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_MAXREDIRS => 5, + CURLOPT_TIMEOUT => $timeout, + CURLOPT_CONNECTTIMEOUT => $timeout, + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_USERAGENT => 'MokoDeployVerify/1.0', + ]); + + $body = curl_exec($ch); + if (curl_errno($ch)) { + curl_close($ch); + return null; + } + + $httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE); + $totalTime = curl_getinfo($ch, CURLINFO_TOTAL_TIME); + curl_close($ch); + + return [ + 'http_code' => $httpCode, + 'body' => is_string($body) ? $body : '', + 'time_ms' => (int) round($totalTime * 1000), + ]; + } + + private function containsFatalError(string $body): bool + { + foreach (['Fatal error:', 'Fatal Error', 'Parse error:', 'Uncaught Error:', 'Uncaught Exception:'] as $pattern) { + if (stripos($body, $pattern) !== false) { + return true; + } + } + return false; + } + + // ── Subprocess helpers ─────────────────────────────────────────── + + private function runSubprocess(string $script, array $args): int + { + $scriptPath = __DIR__ . '/' . $script; + if (!is_file($scriptPath)) { + $this->log('ERROR', "Script not found: {$scriptPath}"); + return 127; + } + + $cmd = sprintf('php %s %s 2>&1', + escapeshellarg($scriptPath), + implode(' ', array_map('escapeshellarg', $args)) + ); + + $this->log('DEBUG', "Running: {$cmd}"); + passthru($cmd, $exitCode); + return $exitCode; + } + + private function buildDeployArgs(string $path, string $env, string $config): array + { + $args = ['--path', $path]; + if ($config !== '') { + $args[] = '--config'; + $args[] = $config; + } elseif ($env !== '') { + $args[] = '--env'; + $args[] = $env; + } + if ($this->dryRun) { + $args[] = '--dry-run'; + } + return $args; + } + + private function buildHealthArgs(string $url, string $checks, int $timeout): array + { + return ['--url', $url, '--checks', $checks, '--timeout', (string) $timeout]; + } + + // ── Audit ──────────────────────────────────────────────────────── + + private function audit(string $event, array $data): void + { + if ($this->auditLogger === null) { + return; + } + try { + $this->auditLogger->logInfo("deploy-verify:{$event}", $data); + } catch (\Exception $e) { + // Non-fatal + } + } + + // ── Cleanup ────────────────────────────────────────────────────── + + private function cleanup(string $snapshotDir): void + { + if (is_dir($snapshotDir)) { + exec(sprintf('rm -rf %s', escapeshellarg($snapshotDir))); + $this->log('DEBUG', "Cleaned up snapshot: {$snapshotDir}"); + } + } +} + +$app = new DeployAndVerify('deploy_and_verify', 'Deploy with automatic health check and rollback'); +exit($app->execute()); -- 2.52.0 From 19aa0111f04b7a67243f238ee81e494bc84d8316 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 04:31:30 +0000 Subject: [PATCH 18/32] chore(version): auto-bump patch 09.35.01-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 38 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 75a6963..9932fb5 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 01.00.00 +# VERSION: 09.35.01 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/README.md b/README.md index 83f9e5a..31bc5c6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.35.00 +VERSION: 09.35.01 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index 51cde79..d95a003 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 736096b..3569bd2 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index 7f61196..f1bde3e 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index 91ee583..a7fd550 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 4274565..81ab386 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 660dd14..3386eee 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index 3efb1d8..da53bc9 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index c901c90..d2e4816 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index f8088f6..15ad128 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 5c55c4d..192caf3 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 3a7f0af..5d9c800 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index c073723..d9f5e59 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 45cbe45..9ba7983 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 6415534..021ca30 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index 592aabf..b5001cb 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index 2b44136..fcab9a5 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index d017bfd..8591776 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index f54584f..0bc326d 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index 36504b0..e304022 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 29b92c7..cc3f802 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_bump.php b/cli/version_bump.php index 10815e5..76b2cfd 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -370,7 +370,7 @@ class VersionBumpCli extends CliFramework /** * Scan git release tags for the highest version across all channels. * - * Checks release names like "MokoSuiteClient (VERSION: 09.35.00)" in + * Checks release names like "MokoSuiteClient (VERSION: 09.35.01)" in * git tags (stable, release-candidate, development, etc.) to find the * highest version that has been released on any channel. */ diff --git a/cli/version_check.php b/cli/version_check.php index 90f71c0..7742dbd 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index d3f582e..c37d248 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 2c95b73..ab1653a 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index 8e0f6cf..c6cb673 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index 27a48bc..dc495fd 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index e079448..44d9263 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index e3c07e0..19a217c 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index 6ce9ff9..2003b65 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index 1dd9bc3..95902e2 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.35.00 + VERSION: 09.35.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index b7a9709..fe002d9 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.35.00 +VERSION: 09.35.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index 4341766..13a4197 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.35.00 + VERSION: 09.35.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index e130aba..775fa73 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.35.00 +VERSION: 09.35.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 839ee51..2f63fab 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index abb4003..5b42ce0 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index ef80bce..741d52b 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.35.00 + * VERSION: 09.35.01 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From 4fc3d0a4a9624283c1ea7fe49c6e56ffc9eda15e Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 20 Jun 2026 23:40:54 -0500 Subject: [PATCH 19/32] fix: address review findings in deploy-and-verify.php - Fix #1: replace rm -rf with cross-platform PHP removeDirectory() - Fix #2: sanitize URL in audit log (log hostname only) - Fix #3: remove unused buildHealthArgs() and $healthArgs - Fix #4: add random suffix to snapshot dir name for uniqueness - Fix #5: fix constructor to match CliFramework pattern (no args) - Fix #6: trigger rollback on deploy failure (partial deploy risk) --- deploy/deploy-and-verify.php | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/deploy/deploy-and-verify.php b/deploy/deploy-and-verify.php index 584f4a6..2315404 100644 --- a/deploy/deploy-and-verify.php +++ b/deploy/deploy-and-verify.php @@ -70,15 +70,14 @@ class DeployAndVerify extends CliFramework // Non-fatal — proceed without audit logging } - $this->audit('start', ['path' => $path, 'env' => $env, 'url' => $url]); + $this->audit('start', ['path' => $path, 'env' => $env, 'url' => parse_url($url, PHP_URL_HOST) ?? $url]); // ── Build subprocess args ──────────────────────────────────── $deployArgs = $this->buildDeployArgs($path, $env, $config); - $healthArgs = $this->buildHealthArgs($url, $checks, $timeout); // ── Step 1: Backup ─────────────────────────────────────────── $this->section('Step 1: Pre-deploy backup'); - $snapshotDir = sys_get_temp_dir() . '/moko_deploy_snapshot_' . date('Ymd_His') . '_' . getmypid(); + $snapshotDir = sys_get_temp_dir() . '/moko_deploy_snapshot_' . date('Ymd_His') . '_' . getmypid() . '_' . bin2hex(random_bytes(4)); if ($this->dryRun) { $this->log('INFO', "[dry-run] Would create snapshot at {$snapshotDir}"); @@ -104,8 +103,11 @@ class DeployAndVerify extends CliFramework $deployExit = $this->runSubprocess('deploy-sftp.php', $deployArgs); if ($deployExit !== 0) { - $this->log('ERROR', 'Deploy failed — no rollback needed (files unchanged)'); + $this->log('ERROR', 'Deploy failed — rolling back to pre-deploy state'); $this->audit('deploy_failed', ['exit_code' => $deployExit]); + $this->runSubprocess('rollback-joomla.php', array_merge( + $deployArgs, ['--snapshot-dir', $snapshotDir] + )); $this->cleanup($snapshotDir); return self::EXIT_FAILURE; } @@ -297,11 +299,6 @@ class DeployAndVerify extends CliFramework return $args; } - private function buildHealthArgs(string $url, string $checks, int $timeout): array - { - return ['--url', $url, '--checks', $checks, '--timeout', (string) $timeout]; - } - // ── Audit ──────────────────────────────────────────────────────── private function audit(string $event, array $data): void @@ -321,11 +318,27 @@ class DeployAndVerify extends CliFramework private function cleanup(string $snapshotDir): void { if (is_dir($snapshotDir)) { - exec(sprintf('rm -rf %s', escapeshellarg($snapshotDir))); + $this->removeDirectory($snapshotDir); $this->log('DEBUG', "Cleaned up snapshot: {$snapshotDir}"); } } + + private function removeDirectory(string $dir): void + { + $entries = scandir($dir); + if ($entries === false) { + return; + } + foreach ($entries as $entry) { + if ($entry === '.' || $entry === '..') { + continue; + } + $path = $dir . DIRECTORY_SEPARATOR . $entry; + is_dir($path) ? $this->removeDirectory($path) : unlink($path); + } + rmdir($dir); + } } -$app = new DeployAndVerify('deploy_and_verify', 'Deploy with automatic health check and rollback'); +$app = new DeployAndVerify(); exit($app->execute()); -- 2.52.0 From 8900b12f81307ca87c8028a4c68342517197f53c Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 04:42:00 +0000 Subject: [PATCH 20/32] chore(version): auto-bump patch 09.35.02-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 38 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 9932fb5..897c734 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.35.01 +# VERSION: 09.35.02 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/README.md b/README.md index 31bc5c6..1b2243d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.35.01 +VERSION: 09.35.02 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index d95a003..5a2daa1 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 3569bd2..88b96fe 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index f1bde3e..1d06e2b 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index a7fd550..1d43df9 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 81ab386..fb50e96 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 3386eee..26818eb 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index da53bc9..f5bbeee 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index d2e4816..3bc960f 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index 15ad128..b7159ca 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 192caf3..f609339 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 5d9c800..0165595 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index d9f5e59..1bb09c3 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 9ba7983..7d0ac46 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 021ca30..bdbc9d9 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index b5001cb..5376d6d 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index fcab9a5..2629f13 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index 8591776..41b50ca 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index 0bc326d..d8eead0 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index e304022..a33e80f 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index cc3f802..0801c97 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_bump.php b/cli/version_bump.php index 76b2cfd..d5278e8 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -370,7 +370,7 @@ class VersionBumpCli extends CliFramework /** * Scan git release tags for the highest version across all channels. * - * Checks release names like "MokoSuiteClient (VERSION: 09.35.01)" in + * Checks release names like "MokoSuiteClient (VERSION: 09.35.02)" in * git tags (stable, release-candidate, development, etc.) to find the * highest version that has been released on any channel. */ diff --git a/cli/version_check.php b/cli/version_check.php index 7742dbd..1269601 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index c37d248..6e1151f 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index ab1653a..50ac988 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index c6cb673..c48c12f 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index dc495fd..2a1cef0 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 44d9263..8a53518 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 19a217c..6b14049 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index 2003b65..f0f0f33 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index 95902e2..576d018 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.35.01 + VERSION: 09.35.02 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index fe002d9..07606c4 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.35.01 +VERSION: 09.35.02 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index 13a4197..1e1a045 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.35.01 + VERSION: 09.35.02 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index 775fa73..dbafcfe 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.35.01 +VERSION: 09.35.02 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 2f63fab..1b5be73 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index 5b42ce0..981913e 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 741d52b..9b7f1f0 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.35.01 + * VERSION: 09.35.02 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From ebf37423f21171665d1442e675895eb57ca40aef Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 04:46:38 +0000 Subject: [PATCH 21/32] chore(release): build 09.36.00 [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 6 ++---- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 39 files changed, 41 insertions(+), 43 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 897c734..cc78a9e 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.35.02 +# VERSION: 09.36.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index fcf080a..9168a4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ BRIEF: Release changelog # Changelog ## [Unreleased] +## [09.36.00] --- 2026-06-21 + ## [09.35.00] --- 2026-06-21 ## [09.35.00] --- 2026-06-21 @@ -19,7 +21,3 @@ BRIEF: Release changelog ## [09.34.00] --- 2026-06-21 ## [09.34.00] --- 2026-06-21 - -## [09.33.00] --- 2026-06-21 - -## [09.33.00] --- 2026-06-21 diff --git a/README.md b/README.md index 1b2243d..38b7a71 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.35.02 +VERSION: 09.36.00 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index 5a2daa1..e5f67d7 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 88b96fe..4fb60c0 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index 1d06e2b..eb3b4f1 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index 1d43df9..49db5e2 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index fb50e96..0c72460 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 26818eb..665fb7d 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index f5bbeee..8a5e95e 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index 3bc960f..e71c7dc 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index b7159ca..ad00fe2 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index f609339..4fdc442 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 0165595..76c37ec 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 1bb09c3..4bfc0df 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 7d0ac46..832db1e 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index bdbc9d9..18f89c9 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index 5376d6d..d97e562 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index 2629f13..e3cca4f 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index 41b50ca..ae5fe9f 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index d8eead0..df03377 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index a33e80f..d4cae46 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 0801c97..87a5e09 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_bump.php b/cli/version_bump.php index d5278e8..64e9b94 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -370,7 +370,7 @@ class VersionBumpCli extends CliFramework /** * Scan git release tags for the highest version across all channels. * - * Checks release names like "MokoSuiteClient (VERSION: 09.35.02)" in + * Checks release names like "MokoSuiteClient (VERSION: 09.36.00)" in * git tags (stable, release-candidate, development, etc.) to find the * highest version that has been released on any channel. */ diff --git a/cli/version_check.php b/cli/version_check.php index 1269601..e162b57 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index 6e1151f..efcc6de 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 50ac988..126299a 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index c48c12f..c6fc865 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index 2a1cef0..a84a34b 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 8a53518..82d0c20 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 6b14049..1d6df71 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index f0f0f33..716cca7 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index 576d018..39695d4 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.35.02 + VERSION: 09.36.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index 07606c4..b078206 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.35.02 +VERSION: 09.36.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index 1e1a045..ba615f3 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.35.02 + VERSION: 09.36.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index dbafcfe..2cfc703 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.35.02 +VERSION: 09.36.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 1b5be73..309f91d 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index 981913e..13b910a 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 9b7f1f0..7f499c6 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.35.02 + * VERSION: 09.36.00 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From c976f400f4cb81278d672ce5c0a39aeda5535f95 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 04:46:41 +0000 Subject: [PATCH 22/32] =?UTF-8?q?chore:=20promote=20changelog=20[Unrelease?= =?UTF-8?q?d]=20=E2=86=92=20[09.36.00]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9168a4e..45fa597 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ BRIEF: Release changelog ## [09.36.00] --- 2026-06-21 +## [09.36.00] --- 2026-06-21 + ## [09.35.00] --- 2026-06-21 ## [09.35.00] --- 2026-06-21 -- 2.52.0 From 00f0e44c78fd1c87fd7aeb69bdfb94f14b10d229 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Sun, 21 Jun 2026 04:46:56 +0000 Subject: [PATCH 23/32] chore: sync issue-branch.yml from Template-Generic [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index cc78a9e..75a6963 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.36.00 +# VERSION: 01.00.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" -- 2.52.0 From 1cf076f088f5b08ee55e08e199a35095e5a35f52 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 20 Jun 2026 23:33:19 -0500 Subject: [PATCH 24/32] feat: interactive repo configuration wizard (#145) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add `repo:wizard` command — walks through platform selection, generates config files (phpcs, phpstan, eslint, tsconfig, composer/package.json, .editorconfig, README, CHANGELOG, .gitignore, workflows), and optionally creates the repo on Gitea via API. Supports --dry-run, --non-interactive, and --create-remote flags. --- bin/moko | 1 + cli/repo_wizard.php | 411 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 412 insertions(+) create mode 100644 cli/repo_wizard.php diff --git a/bin/moko b/bin/moko index dd449b8..d484dff 100644 --- a/bin/moko +++ b/bin/moko @@ -178,6 +178,7 @@ const COMMAND_MAP = [ 'repo:archive' => 'cli/archive_repo.php', 'repo:scaffold-client' => 'cli/scaffold_client.php', 'repo:provision' => 'cli/client_provision.php', + 'repo:wizard' => 'cli/repo_wizard.php', 'repo:rename-branch' => 'cli/branch_rename.php', 'repo:reset-dev' => 'cli/dev_branch_reset.php', diff --git a/cli/repo_wizard.php b/cli/repo_wizard.php new file mode 100644 index 0000000..5dc612d --- /dev/null +++ b/cli/repo_wizard.php @@ -0,0 +1,411 @@ +#!/usr/bin/env php + + * SPDX-License-Identifier: GPL-3.0-or-later + * FILE INFORMATION + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli + * PATH: /cli/repo_wizard.php + * BRIEF: Interactive configuration wizard for new repositories + */ + +declare(strict_types=1); + +require_once __DIR__ . '/../vendor/autoload.php'; +require_once __DIR__ . '/../lib/Enterprise/CliFramework.php'; + +use MokoCli\{CliFramework, Config, PlatformAdapterFactory}; + +/** + * Interactive repo setup wizard. + * + * Walks through platform selection, generates config files, workflows, + * and optionally creates the repo on Gitea via API. + * + * @see https://git.mokoconsulting.tech/MokoConsulting/mokocli/issues/145 + */ +class RepoWizard extends CliFramework +{ + private const PLATFORMS = [ + 'joomla' => 'Joomla extension (component, module, plugin, package)', + 'dolibarr' => 'Dolibarr ERP module', + 'nodejs' => 'Node.js / TypeScript project', + 'python' => 'Python project', + 'mcp-server' => 'MCP server (Model Context Protocol)', + 'generic' => 'Generic PHP or multi-language project', + ]; + + private const LICENSES = [ + 'GPL-3.0-or-later' => 'GNU General Public License v3', + 'MIT' => 'MIT License', + 'Apache-2.0' => 'Apache License 2.0', + 'proprietary' => 'Proprietary / All rights reserved', + ]; + + /** Collected wizard answers. */ + private array $answers = []; + + protected function configure(): void + { + $this->setDescription('Interactive configuration wizard for new repositories'); + $this->addArgument('--path', 'Directory to generate files in', '.'); + $this->addArgument('--create-remote', 'Create repo on Gitea via API', false); + $this->addArgument('--non-interactive', 'Use defaults (no prompts)', false); + } + + protected function run(): int + { + $targetPath = realpath($this->getArgument('--path', '.')) ?: $this->getArgument('--path', '.'); + + $this->section('MokoCli Repository Wizard'); + + // ── Gather info ────────────────────────────────────────────── + $this->answers['name'] = $this->input('Repository name', basename($targetPath)); + $this->answers['platform'] = $this->menu('Platform type', self::PLATFORMS, 'generic'); + $this->answers['org'] = $this->input('Organization', 'MokoConsulting'); + $this->answers['description'] = $this->input('Description', ''); + $this->answers['license'] = $this->menu('License', self::LICENSES, 'GPL-3.0-or-later'); + + // ── Confirm ────────────────────────────────────────────────── + $this->section('Configuration Summary'); + foreach ($this->answers as $key => $value) { + $this->log('INFO', sprintf(' %-12s %s', $key . ':', $value)); + } + + if (!$this->confirm('Proceed with these settings?', true)) { + $this->log('INFO', 'Wizard cancelled'); + return 0; + } + + // ── Generate files ─────────────────────────────────────────── + $this->section('Generating files'); + $generated = $this->generateFiles($targetPath); + + foreach ($generated as $file) { + $this->status(true, $file); + } + + // ── Create remote repo ─────────────────────────────────────── + if ($this->getArgument('--create-remote', false)) { + $this->section('Creating remote repository'); + $this->createRemoteRepo(); + } + + $this->log('INFO', ''); + $this->log('INFO', "Generated {$this->count($generated)} files in {$targetPath}"); + $this->log('INFO', 'Next: git init && git add -A && git commit -m "chore: initial scaffold"'); + + return 0; + } + + // ── File generation ────────────────────────────────────────────── + + private function generateFiles(string $path): array + { + $platform = $this->answers['platform']; + $name = $this->answers['name']; + $generated = []; + + // .editorconfig + $generated[] = $this->writeFile($path, '.editorconfig', $this->editorconfig()); + + // README.md + $generated[] = $this->writeFile($path, 'README.md', $this->readme()); + + // CHANGELOG.md + $generated[] = $this->writeFile($path, 'CHANGELOG.md', $this->changelog()); + + // LICENSE + if ($this->answers['license'] !== 'proprietary') { + $generated[] = $this->writeFile($path, 'LICENSE', "See SPDX: {$this->answers['license']}"); + } + + // Platform-specific configs + switch ($platform) { + case 'joomla': + case 'dolibarr': + case 'generic': + $generated[] = $this->writeFile($path, 'phpcs.xml', $this->phpcsXml()); + $generated[] = $this->writeFile($path, 'phpstan.neon', $this->phpstanNeon()); + $generated[] = $this->writeFile($path, 'composer.json', $this->composerJson()); + break; + case 'nodejs': + case 'mcp-server': + $generated[] = $this->writeFile($path, 'package.json', $this->packageJson()); + $generated[] = $this->writeFile($path, 'tsconfig.json', $this->tsconfigJson()); + $generated[] = $this->writeFile($path, '.eslintrc.json', $this->eslintrc()); + break; + case 'python': + $generated[] = $this->writeFile($path, 'pyproject.toml', $this->pyprojectToml()); + $generated[] = $this->writeFile($path, 'requirements.txt', ''); + break; + } + + // .mokogitea/workflows + $generated[] = $this->writeFile($path, '.mokogitea/workflows/pr-check.yml', + "# PR check workflow — synced from mokocli templates\n# Run: moko sync to update\n"); + + // .gitignore + $generated[] = $this->writeFile($path, '.gitignore', $this->gitignore($platform)); + + // Source directory + $srcDir = in_array($platform, ['joomla', 'dolibarr', 'generic']) ? 'source' : 'src'; + if (!is_dir("{$path}/{$srcDir}")) { + @mkdir("{$path}/{$srcDir}", 0755, true); + $generated[] = "{$srcDir}/"; + } + + return array_filter($generated); + } + + private function writeFile(string $basePath, string $relativePath, string $content): ?string + { + $fullPath = $basePath . '/' . $relativePath; + $dir = dirname($fullPath); + + if (file_exists($fullPath)) { + $this->log('DEBUG', " SKIP {$relativePath} (already exists)"); + return null; + } + + if ($this->dryRun) { + $this->log('INFO', "[dry-run] Would create {$relativePath}"); + return $relativePath; + } + + if (!is_dir($dir)) { + @mkdir($dir, 0755, true); + } + + file_put_contents($fullPath, $content); + return $relativePath; + } + + // ── Remote repo creation ───────────────────────────────────────── + + private function createRemoteRepo(): void + { + try { + $config = Config::load(); + $adapter = PlatformAdapterFactory::create($config); + $org = $this->answers['org']; + + if ($this->dryRun) { + $this->log('INFO', "[dry-run] Would create {$org}/{$this->answers['name']} on Gitea"); + return; + } + + $result = $adapter->createRepository($org, $this->answers['name'], [ + 'description' => $this->answers['description'], + 'private' => false, + ]); + + $url = $result['html_url'] ?? "{$org}/{$this->answers['name']}"; + $this->log('INFO', "Created: {$url}"); + } catch (\Exception $e) { + $this->log('ERROR', "Failed to create remote repo: {$e->getMessage()}"); + } + } + + private function count(array $arr): int { return \count($arr); } + + // ── Template content ───────────────────────────────────────────── + + private function editorconfig(): string + { + return <<<'CONF' +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = tab +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{yml,yaml}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false +CONF; + } + + private function readme(): string + { + $name = $this->answers['name']; + $desc = $this->answers['description'] ?: 'A Moko Consulting project.'; + $license = $this->answers['license']; + + return <<answers['name']); + $desc = $this->answers['description'] ?: $this->answers['name']; + $license = $this->answers['license']; + + return <<=8.1" + }, + "autoload": { + "psr-4": {} + } +} +JSON; + } + + private function phpcsXml(): string + { + return <<<'XML' + + + + source/ + vendor/* + +XML; + } + + private function phpstanNeon(): string + { + return <<<'NEON' +parameters: + level: 6 + paths: + - source/ +NEON; + } + + private function packageJson(): string + { + $name = strtolower($this->answers['name']); + $desc = $this->answers['description'] ?: $this->answers['name']; + + return <<answers['name']); + $desc = $this->answers['description'] ?: $this->answers['name']; + + return <<=68.0"] +build-backend = "setuptools.build_meta" +TOML; + } + + private function gitignore(string $platform): string + { + $common = <<<'GI' +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db +desktop.ini + +# Logs +*.log +GI; + + $extra = match ($platform) { + 'joomla', 'dolibarr', 'generic' => "\n# PHP\nvendor/\n.phpunit.result.cache\n", + 'nodejs', 'mcp-server' => "\n# Node\nnode_modules/\ndist/\n*.tsbuildinfo\n", + 'python' => "\n# Python\n__pycache__/\n*.pyc\n.venv/\n*.egg-info/\n", + default => '', + }; + + return $common . $extra; + } +} + +$app = new RepoWizard('repo_wizard', 'Interactive configuration wizard for new repositories'); +exit($app->execute()); -- 2.52.0 From 558cd6043d379354f8185ea84c6cba7edc934e45 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 20 Jun 2026 23:38:45 -0500 Subject: [PATCH 25/32] fix: address review findings in repo_wizard.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix #1: replace nonexistent menu() with choose() using select() - Fix #2: constructor — pass name only, not description as version - Fix #3: respect --non-interactive flag (skip prompts, use defaults) - Fix #4: use json_encode for composer/package.json (prevent injection) - Fix #5: remove pointless count() wrapper - Fix #6: validate --path exists or can be created before proceeding - Fix TOML description escaping --- cli/repo_wizard.php | 110 ++++++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 46 deletions(-) diff --git a/cli/repo_wizard.php b/cli/repo_wizard.php index 5dc612d..9268f48 100644 --- a/cli/repo_wizard.php +++ b/cli/repo_wizard.php @@ -47,6 +47,9 @@ class RepoWizard extends CliFramework /** Collected wizard answers. */ private array $answers = []; + /** When true, skip all interactive prompts and use defaults. */ + private bool $nonInteractive = false; + protected function configure(): void { $this->setDescription('Interactive configuration wizard for new repositories'); @@ -57,16 +60,25 @@ class RepoWizard extends CliFramework protected function run(): int { - $targetPath = realpath($this->getArgument('--path', '.')) ?: $this->getArgument('--path', '.'); + $rawPath = $this->getArgument('--path', '.'); + $targetPath = realpath($rawPath) ?: $rawPath; + $this->nonInteractive = (bool) $this->getArgument('--non-interactive', false); + + // Validate target path + if (!is_dir($targetPath) && !@mkdir($targetPath, 0755, true)) { + $this->log('ERROR', "Target path does not exist and cannot be created: {$targetPath}"); + return self::EXIT_USAGE; + } + $targetPath = realpath($targetPath) ?: $targetPath; $this->section('MokoCli Repository Wizard'); // ── Gather info ────────────────────────────────────────────── - $this->answers['name'] = $this->input('Repository name', basename($targetPath)); - $this->answers['platform'] = $this->menu('Platform type', self::PLATFORMS, 'generic'); - $this->answers['org'] = $this->input('Organization', 'MokoConsulting'); - $this->answers['description'] = $this->input('Description', ''); - $this->answers['license'] = $this->menu('License', self::LICENSES, 'GPL-3.0-or-later'); + $this->answers['name'] = $this->ask('Repository name', basename($targetPath)); + $this->answers['platform'] = $this->choose('Platform type', self::PLATFORMS, 'generic'); + $this->answers['org'] = $this->ask('Organization', 'MokoConsulting'); + $this->answers['description'] = $this->ask('Description', ''); + $this->answers['license'] = $this->choose('License', self::LICENSES, 'GPL-3.0-or-later'); // ── Confirm ────────────────────────────────────────────────── $this->section('Configuration Summary'); @@ -94,7 +106,7 @@ class RepoWizard extends CliFramework } $this->log('INFO', ''); - $this->log('INFO', "Generated {$this->count($generated)} files in {$targetPath}"); + $this->log('INFO', 'Generated ' . count($generated) . " files in {$targetPath}"); $this->log('INFO', 'Next: git init && git add -A && git commit -m "chore: initial scaffold"'); return 0; @@ -209,7 +221,31 @@ class RepoWizard extends CliFramework } } - private function count(array $arr): int { return \count($arr); } + // ── Interactive helpers (respect --non-interactive) ───────────── + + private function ask(string $prompt, string $default): string + { + if ($this->nonInteractive) { + return $default; + } + return $this->input($prompt, $default); + } + + private function choose(string $prompt, array $options, string $default): string + { + if ($this->nonInteractive) { + return $default; + } + $keys = array_keys($options); + $labels = []; + foreach ($options as $key => $desc) { + $labels[] = "{$key} — {$desc}"; + } + $chosen = $this->select($prompt, $labels); + // Extract the key from "key — description" + $chosenKey = explode(' — ', $chosen, 2)[0] ?? $default; + return in_array($chosenKey, $keys, true) ? $chosenKey : $default; + } // ── Template content ───────────────────────────────────────────── @@ -266,24 +302,15 @@ MD; private function composerJson(): string { - $name = strtolower($this->answers['name']); - $desc = $this->answers['description'] ?: $this->answers['name']; - $license = $this->answers['license']; - - return <<=8.1" - }, - "autoload": { - "psr-4": {} - } -} -JSON; + $data = [ + 'name' => 'mokoconsulting/' . strtolower($this->answers['name']), + 'description' => $this->answers['description'] ?: $this->answers['name'], + 'type' => 'library', + 'license' => $this->answers['license'], + 'require' => ['php' => '>=8.1'], + 'autoload' => ['psr-4' => new \stdClass()], + ]; + return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n"; } private function phpcsXml(): string @@ -310,24 +337,15 @@ NEON; private function packageJson(): string { - $name = strtolower($this->answers['name']); - $desc = $this->answers['description'] ?: $this->answers['name']; - - return << '@mokoconsulting/' . strtolower($this->answers['name']), + 'version' => '0.1.0', + 'description' => $this->answers['description'] ?: $this->answers['name'], + 'type' => 'module', + 'scripts' => ['build' => 'tsc', 'start' => 'node dist/index.js'], + 'devDependencies' => ['typescript' => '^5.0'], + ]; + return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n"; } private function tsconfigJson(): string @@ -363,7 +381,7 @@ JSON; private function pyprojectToml(): string { $name = strtolower($this->answers['name']); - $desc = $this->answers['description'] ?: $this->answers['name']; + $desc = str_replace(['\\', '"'], ['\\\\', '\\"'], $this->answers['description'] ?: $this->answers['name']); return <<execute()); -- 2.52.0 From 632d8486b85804696dd39b83116107448e830ba7 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 05:25:14 +0000 Subject: [PATCH 26/32] chore(version): auto-bump patch 09.36.01-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 38 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 75a6963..82ef6a3 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 01.00.00 +# VERSION: 09.36.01 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/README.md b/README.md index 38b7a71..2485b2d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.36.00 +VERSION: 09.36.01 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index e5f67d7..5d4240f 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 4fb60c0..7234af4 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index eb3b4f1..439e652 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index 49db5e2..4557f42 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 0c72460..faf9112 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 665fb7d..081f3b9 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index 8a5e95e..7f208a2 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index e71c7dc..0b0d812 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index ad00fe2..a65e1c3 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 4fdc442..0cf8cc5 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 76c37ec..ce5e3e4 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 4bfc0df..72dde92 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 832db1e..cf01795 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 18f89c9..7386bdb 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index d97e562..5fb6877 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index e3cca4f..5d5055e 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index ae5fe9f..84766a4 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index df03377..34bb055 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index d4cae46..f6f88a4 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 87a5e09..5301250 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_bump.php b/cli/version_bump.php index 64e9b94..9efc410 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -370,7 +370,7 @@ class VersionBumpCli extends CliFramework /** * Scan git release tags for the highest version across all channels. * - * Checks release names like "MokoSuiteClient (VERSION: 09.36.00)" in + * Checks release names like "MokoSuiteClient (VERSION: 09.36.01)" in * git tags (stable, release-candidate, development, etc.) to find the * highest version that has been released on any channel. */ diff --git a/cli/version_check.php b/cli/version_check.php index e162b57..1b9af54 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index efcc6de..e0d2023 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 126299a..f819bf9 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index c6fc865..4cb6a95 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index a84a34b..44332eb 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 82d0c20..621a06e 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 1d6df71..56726ca 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index 716cca7..d04d785 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index 39695d4..d153bfb 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.36.00 + VERSION: 09.36.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index b078206..1512566 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.36.00 +VERSION: 09.36.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index ba615f3..8249a15 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.36.00 + VERSION: 09.36.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index 2cfc703..785a90a 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.36.00 +VERSION: 09.36.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 309f91d..dde2bfc 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index 13b910a..9b405cc 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 7f499c6..47e3ba4 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From cb7340ce21870608801188c157bcdb4d0b7224da Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 05:28:19 +0000 Subject: [PATCH 27/32] chore(release): build 09.37.00 [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 6 ++---- README.md | 2 +- automation/update_dependencies.php | 2 +- cli/branch_rename.php | 2 +- cli/bulk_workflow_push.php | 2 +- cli/bulk_workflow_trigger.php | 2 +- cli/client_dashboard.php | 2 +- cli/client_inventory.php | 2 +- cli/client_provision.php | 2 +- cli/grafana_dashboard.php | 2 +- cli/joomla_build.php | 2 +- cli/joomla_metadata_validate.php | 2 +- cli/manifest_detect.php | 2 +- cli/manifest_integrity.php | 2 +- cli/manifest_licensing.php | 2 +- cli/manifest_read.php | 2 +- cli/platform_detect.php | 2 +- cli/release_cascade.php | 2 +- cli/release_publish.php | 2 +- cli/scaffold_client.php | 2 +- cli/updates_xml_sync.php | 2 +- cli/version_auto_bump.php | 2 +- cli/version_bump.php | 2 +- cli/version_check.php | 2 +- cli/wiki_sync.php | 2 +- cli/workflow_sync.php | 2 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- mcp/servers/mokocrm_api/CONTRIBUTING.md | 2 +- mcp/servers/mokocrm_api/SECURITY.md | 2 +- mcp/servers/mokosuite_api/CONTRIBUTING.md | 2 +- mcp/servers/mokosuite_api/SECURITY.md | 2 +- tests/Unit/VersionBumpTest.php | 2 +- tests/Unit/VersionReadTest.php | 4 ++-- validate/check_file_integrity.php | 2 +- 39 files changed, 41 insertions(+), 43 deletions(-) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 82ef6a3..5fdaa64 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 09.36.01 +# VERSION: 09.37.00 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 45fa597..6b2183c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ BRIEF: Release changelog # Changelog ## [Unreleased] +## [09.37.00] --- 2026-06-21 + ## [09.36.00] --- 2026-06-21 ## [09.36.00] --- 2026-06-21 @@ -19,7 +21,3 @@ BRIEF: Release changelog ## [09.35.00] --- 2026-06-21 ## [09.35.00] --- 2026-06-21 - -## [09.34.00] --- 2026-06-21 - -## [09.34.00] --- 2026-06-21 diff --git a/README.md b/README.md index 2485b2d..b8d72c5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.36.01 +VERSION: 09.37.00 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index 5d4240f..063e457 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 7234af4..0cc274e 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index 439e652..814e250 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index 4557f42..b6ab39c 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index faf9112..6911d79 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 081f3b9..e906fea 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index 7f208a2..e2d0be8 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index 0b0d812..4f6c4b2 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index a65e1c3..664aa15 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 0cf8cc5..37a0a24 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index ce5e3e4..c0afc61 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 72dde92..ff5d237 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index cf01795..67958d3 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 7386bdb..00dd254 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index 5fb6877..d8371a2 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index 5d5055e..bd65d9f 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index 84766a4..f2bc1dd 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index 34bb055..fdd2d4c 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index f6f88a4..f1a67a6 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 5301250..a33c415 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_bump.php b/cli/version_bump.php index 9efc410..3214d5a 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -370,7 +370,7 @@ class VersionBumpCli extends CliFramework /** * Scan git release tags for the highest version across all channels. * - * Checks release names like "MokoSuiteClient (VERSION: 09.36.01)" in + * Checks release names like "MokoSuiteClient (VERSION: 09.37.00)" in * git tags (stable, release-candidate, development, etc.) to find the * highest version that has been released on any channel. */ diff --git a/cli/version_check.php b/cli/version_check.php index 1b9af54..48de802 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index e0d2023..93d3d17 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index f819bf9..47da940 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index 4cb6a95..eed657c 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index 44332eb..ee85c7f 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 621a06e..3cb3465 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 56726ca..0b0961e 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index d04d785..b8ccbbc 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index d153bfb..d0d6dec 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.36.01 + VERSION: 09.37.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index 1512566..13b33c8 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.36.01 +VERSION: 09.37.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index 8249a15..7c213b0 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.36.01 + VERSION: 09.37.00 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index 785a90a..7a2767a 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.36.01 +VERSION: 09.37.00 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index dde2bfc..e77f6e9 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index 9b405cc..7aa63d8 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 47e3ba4..b120ecf 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.36.01 + * VERSION: 09.37.00 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */ -- 2.52.0 From 7275c8c646ac5474f9eaad1daedf58d6b388a603 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 21 Jun 2026 05:28:23 +0000 Subject: [PATCH 28/32] =?UTF-8?q?chore:=20promote=20changelog=20[Unrelease?= =?UTF-8?q?d]=20=E2=86=92=20[09.37.00]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b2183c..7f16f59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ BRIEF: Release changelog ## [09.37.00] --- 2026-06-21 +## [09.37.00] --- 2026-06-21 + ## [09.36.00] --- 2026-06-21 ## [09.36.00] --- 2026-06-21 -- 2.52.0 From 5948d599f2128a2a9ad2cfcb9747ff8bc21fb6cb Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Sun, 21 Jun 2026 05:44:48 +0000 Subject: [PATCH 29/32] chore: rename package to mokoconsulting/mokocli, update description --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index ead62df..a1f93dd 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { - "name": "mokoconsulting-tech/enterprise", - "description": "mokoplatform Enterprise API \u2014 PHP implementation", + "name": "mokoconsulting/mokocli", + "description": "MokoCLI — enterprise CLI automation, validation, and governance engine for all Moko Consulting repositories", "type": "library", "version": "09.23.00", "license": "GPL-3.0-or-later", -- 2.52.0 From 11371cf2d003c81e0e06c035eb695e5490a0e161 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Sun, 21 Jun 2026 05:45:12 +0000 Subject: [PATCH 30/32] feat: add Composer publish workflow for Gitea registry + Packagist --- .mokogitea/workflows/composer-publish.yml | 76 +++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .mokogitea/workflows/composer-publish.yml diff --git a/.mokogitea/workflows/composer-publish.yml b/.mokogitea/workflows/composer-publish.yml new file mode 100644 index 0000000..03735c9 --- /dev/null +++ b/.mokogitea/workflows/composer-publish.yml @@ -0,0 +1,76 @@ +# Copyright (C) 2026 Moko Consulting +# SPDX-License-Identifier: GPL-3.0-or-later + +name: "Publish to Composer" + +on: + push: + tags: + - 'v*' + - '[0-9]*.[0-9]*.[0-9]*' + release: + types: [published] + workflow_dispatch: + +env: + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + +jobs: + publish: + name: Publish Package + runs-on: ubuntu-latest + if: >- + !contains(github.event.head_commit.message, '[skip ci]') && + !contains(github.event.head_commit.message, '[skip publish]') + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup PHP + run: | + if ! command -v php &> /dev/null; then + sudo apt-get update -qq + sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 + fi + + - name: Install dependencies + run: composer install --no-dev --no-interaction --prefer-dist --quiet + + - name: Determine version + id: version + run: | + VERSION=$(php -r "echo json_decode(file_get_contents('composer.json'))->version;") + echo "version=${VERSION}" >> "$GITHUB_OUTPUT" + echo "Package version: ${VERSION}" + + # Gitea Composer Registry — auto-publishes from tags + # The tag push itself registers the package at: + # https://git.mokoconsulting.tech/api/packages/MokoConsulting/composer + - name: Verify Gitea registry + run: | + echo "Gitea Composer registry auto-publishes from tags." + echo "Package available at: ${GITEA_URL}/api/packages/MokoConsulting/composer" + echo "Install: composer require mokoconsulting/mokocli" + + # Packagist — notify of new version + - name: Notify Packagist + if: secrets.PACKAGIST_TOKEN != '' + run: | + VERSION="${{ steps.version.outputs.version }}" + echo "Notifying Packagist of version ${VERSION}..." + curl -sf -X POST \ + -H "Content-Type: application/json" \ + -d '{"repository":{"url":"https://git.mokoconsulting.tech/MokoConsulting/mokocli"}}' \ + "https://packagist.org/api/update-package?username=mokoconsulting&apiToken=${{ secrets.PACKAGIST_TOKEN }}" \ + && echo "Packagist notified" \ + || echo "::warning::Packagist notification failed (package may not be registered yet)" + + - name: Summary + run: | + VERSION="${{ steps.version.outputs.version }}" + echo "## Composer Package Published" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Registry | Status |" >> $GITHUB_STEP_SUMMARY + echo "|----------|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Gitea | \`composer require mokoconsulting/mokocli:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY + echo "| Packagist | \`composer require mokoconsulting/mokocli\` |" >> $GITHUB_STEP_SUMMARY -- 2.52.0 From 32776720bdb7e5b71803da3bbc7928f3249d3118 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sun, 21 Jun 2026 00:43:06 -0500 Subject: [PATCH 31/32] =?UTF-8?q?chore:=20complete=20namespace=20cleanup?= =?UTF-8?q?=20=E2=80=94=20remove=20all=20mokoplatform/MokoStandards/MokoEn?= =?UTF-8?q?terprise=20refs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sweep 391 files across templates, workflows, MCP servers, CLI tools, lib, deploy, validate, wrappers, configs, and docs. All references to mokoplatform, moko-platform, MokoStandards, MokoStandards-API, and MokoEnterprise replaced with mokocli/MokoCli. Also renamed moko-platform.sublime-project → mokocli.sublime-project and fixed composer.json description. --- .mokogitea/CLAUDE.md | 6 +- .mokogitea/ISSUE_TEMPLATE/config.yml | 4 +- .mokogitea/ISSUE_TEMPLATE/documentation.md | 2 +- .mokogitea/ISSUE_TEMPLATE/feature_request.md | 2 +- .mokogitea/ISSUE_TEMPLATE/security.md | 2 +- .mokogitea/branch-protection.yml | 6 +- .mokogitea/bulk-repo-sync.yml | 4 +- .mokogitea/pr-branch-check.yml | 6 +- .mokogitea/renovate.yml | 6 +- .mokogitea/sync-wikis.yml | 4 +- .mokogitea/workflows/auto-bump.yml | 132 +- .mokogitea/workflows/branch-cleanup.yml | 2 +- .mokogitea/workflows/ci-generic.yml | 2 +- .mokogitea/workflows/ci-platform.yml | 12 +- .mokogitea/workflows/cleanup.yml | 4 +- .mokogitea/workflows/deploy-manual.yml | 8 +- .mokogitea/workflows/gitleaks.yml | 4 +- .mokogitea/workflows/notify.yml | 4 +- .mokogitea/workflows/pr-check.yml | 1068 ++++++------- .mokogitea/workflows/repo-health.yml | 1424 ++++++++--------- .mokogitea/workflows/security-audit.yml | 4 +- .script-registry.json | 2 +- PLUGIN_SCRIPTS.md | 4 +- README.md | 6 +- analysis/index.md | 2 +- automation/bulk_joomla_template.php | 6 +- automation/bulk_sync.php | 80 +- automation/bulk_workflow_trigger.sh | 246 +-- automation/ci-issue-reporter.sh | 4 +- automation/enrich_manifest_xml.php | 6 +- automation/enrich_mokostandards_xml.php | 6 +- automation/index.md | 2 +- automation/migrate_to_gitea.php | 6 +- automation/push_files.php | 40 +- automation/push_manifest_xml.php | 6 +- automation/push_mokostandards_xml.php | 6 +- automation/repo_cleanup.php | 18 +- automation/server-autoheal.sh | 2 +- bin/moko | 2 +- cli/archive_repo.php | 10 +- cli/audit_query.php | 2 +- cli/badge_update.php | 6 +- cli/branch_rename.php | 6 +- cli/bulk_workflow_push.php | 10 +- cli/bulk_workflow_trigger.php | 6 +- cli/changelog_promote.php | 6 +- cli/changelog_prune.php | 6 +- cli/client_dashboard.php | 6 +- cli/client_health_check.php | 6 +- cli/client_inventory.php | 6 +- cli/client_provision.php | 6 +- cli/completion.php | 6 +- cli/create_project.php | 14 +- cli/create_repo.php | 34 +- cli/deploy_joomla.php | 2 +- cli/dev_branch_reset.php | 6 +- cli/grafana_dashboard.php | 6 +- cli/joomla_build.php | 6 +- cli/joomla_compat_check.php | 6 +- cli/joomla_metadata_validate.php | 6 +- cli/joomla_release.php | 8 +- cli/license_manage.php | 6 +- cli/manifest_detect.php | 6 +- cli/manifest_element.php | 6 +- cli/manifest_integrity.php | 6 +- cli/manifest_licensing.php | 6 +- cli/package_build.php | 6 +- cli/platform_detect.php | 10 +- cli/release.php | 10 +- cli/release_body_update.php | 6 +- cli/release_create.php | 6 +- cli/release_manage.php | 6 +- cli/release_mirror.php | 10 +- cli/release_notes.php | 6 +- cli/release_package.php | 6 +- cli/release_promote.php | 6 +- cli/release_publish.php | 6 +- cli/release_validate.php | 6 +- cli/release_verify.php | 6 +- cli/scaffold_client.php | 6 +- cli/sync_rulesets.php | 8 +- cli/theme_lint.php | 6 +- cli/updates_xml_build.php | 6 +- cli/updates_xml_sync.php | 6 +- cli/version_auto_bump.php | 6 +- cli/version_bump.php | 6 +- cli/version_bump_remote.php | 6 +- cli/version_check.php | 6 +- cli/version_read.php | 6 +- cli/version_reset_dev.php | 6 +- cli/version_set_platform.php | 6 +- cli/wiki_sync.php | 14 +- cli/workflow_sync.php | 6 +- composer.json | 4 +- deploy/backup-before-deploy.php | 2 +- deploy/deploy-dolibarr.php | 2 +- deploy/deploy-joomla.php | 2 +- deploy/deploy-sftp.php | 2 +- deploy/health-check.php | 2 +- deploy/rollback-joomla.php | 2 +- deploy/sync-joomla.php | 2 +- fix/fix_line_endings.php | 2 +- fix/fix_permissions.php | 2 +- fix/fix_tabs.php | 2 +- fix/fix_trailing_spaces.php | 2 +- fix/index.md | 2 +- index.md | 8 +- lib/CliBase.php | 2 +- lib/Common.php | 4 +- lib/Enterprise/AbstractProjectPlugin.php | 2 +- lib/Enterprise/ApiClient.php | 4 +- lib/Enterprise/AuditLogger.php | 4 +- lib/Enterprise/CheckpointManager.php | 4 +- lib/Enterprise/CliFramework.php | 8 +- lib/Enterprise/Config.php | 4 +- lib/Enterprise/ConfigValidator.php | 4 +- .../EnterpriseReadinessValidator.php | 2 +- lib/Enterprise/ErrorRecovery.php | 4 +- lib/Enterprise/FileFixUtility.php | 2 +- lib/Enterprise/GitHubAdapter.php | 2 +- lib/Enterprise/GitPlatformAdapter.php | 4 +- lib/Enterprise/InputValidator.php | 8 +- lib/Enterprise/ManifestParser.php | 10 +- lib/Enterprise/ManifestReader.php | 8 +- lib/Enterprise/MetricsCollector.php | 6 +- lib/Enterprise/MokoGiteaAdapter.php | 2 +- lib/Enterprise/PackageBuilder.php | 2 +- lib/Enterprise/PlatformAdapterFactory.php | 2 +- lib/Enterprise/PluginFactory.php | 2 +- lib/Enterprise/PluginRegistry.php | 2 +- lib/Enterprise/Plugins/ApiPlugin.php | 2 +- .../Plugins/DocumentationPlugin.php | 2 +- lib/Enterprise/Plugins/DolibarrPlugin.php | 2 +- lib/Enterprise/Plugins/GenericPlugin.php | 2 +- lib/Enterprise/Plugins/JoomlaPlugin.php | 2 +- lib/Enterprise/Plugins/McpServerPlugin.php | 2 +- lib/Enterprise/Plugins/MobilePlugin.php | 2 +- lib/Enterprise/Plugins/NodeJsPlugin.php | 2 +- lib/Enterprise/Plugins/PythonPlugin.php | 2 +- lib/Enterprise/Plugins/TerraformPlugin.php | 2 +- lib/Enterprise/Plugins/WordPressPlugin.php | 2 +- lib/Enterprise/ProjectConfigValidator.php | 2 +- lib/Enterprise/ProjectMetricsCollector.php | 2 +- lib/Enterprise/ProjectPluginInterface.php | 2 +- lib/Enterprise/ProjectTypeDetector.php | 2 +- lib/Enterprise/RecoveryError.php | 4 +- lib/Enterprise/RecoveryManager.php | 4 +- lib/Enterprise/RepositoryHealthChecker.php | 2 +- lib/Enterprise/RepositorySynchronizer.php | 36 +- lib/Enterprise/RetryHelper.php | 4 +- lib/Enterprise/SecurityValidator.php | 6 +- lib/Enterprise/SourceResolver.php | 2 +- lib/Enterprise/SynchronizationException.php | 2 +- lib/Enterprise/TransactionManager.php | 6 +- lib/Enterprise/UnifiedValidation.php | 6 +- lib/index.md | 2 +- lib/plugins/Joomla/UpdateXmlGenerator.php | 2 +- maintenance/index.md | 2 +- maintenance/pin_action_shas.php | 2 +- maintenance/repo_inventory.php | 12 +- maintenance/rotate_secrets.php | 10 +- maintenance/setup_labels.php | 14 +- maintenance/sync_dolibarr_readmes.php | 6 +- maintenance/update_repo_inventory.php | 4 +- maintenance/update_sha_hashes.php | 2 +- maintenance/update_version_from_readme.php | 6 +- mcp/config.example.json | 4 +- mcp/package.json | 6 +- mcp/servers/mokobackup/.mokogitea/CLAUDE.md | 2 +- .../.mokogitea/workflows/pr-check.yml | 4 +- mcp/servers/mokobackup/CONTRIBUTING.md | 2 +- mcp/servers/mokobackup/README.md | 4 +- mcp/servers/mokocrm_api/.mokogitea/CLAUDE.md | 2 +- mcp/servers/mokocrm_api/README.md | 2 +- .../mokodreamhost/.mokogitea/CLAUDE.md | 2 +- mcp/servers/mokodreamhost/CONTRIBUTING.md | 2 +- mcp/servers/mokodreamhost/README.md | 2 +- .../mokogitea_skill/skills/mokogitea/SKILL.md | 2 +- .../mokomonitor/.mokogitea/.moko-platform | 4 +- mcp/servers/mokomonitor/.mokogitea/CLAUDE.md | 4 +- mcp/servers/mokomonitor/CONTRIBUTING.md | 2 +- mcp/servers/mokomonitor/README.md | 4 +- .../mcp_mokomonitor/.mokogitea/.moko-platform | 4 +- .../mcp_mokomonitor/.mokogitea/CLAUDE.md | 4 +- mcp/servers/mokossh/.mokogitea/CLAUDE.md | 2 +- .../.mokogitea/ISSUE_TEMPLATE/config.yml | 2 +- .../.mokogitea/workflows/auto-release.yml | 34 +- .../.mokogitea/workflows/cascade-dev.yml | 4 +- .../mokossh/.mokogitea/workflows/cleanup.yml | 4 +- .../.mokogitea/workflows/deploy-manual.yml | 22 +- .../mokossh/.mokogitea/workflows/gitleaks.yml | 4 +- .../mokossh/.mokogitea/workflows/notify.yml | 4 +- .../mokossh/.mokogitea/workflows/pr-check.yml | 4 +- .../.mokogitea/workflows/pre-release.yml | 18 +- .../.mokogitea/workflows/repo-health.yml | 4 +- .../.mokogitea/workflows/security-audit.yml | 4 +- mcp/servers/mokossh/README.md | 4 +- .../docs/images/ssh-manager-cli-menu.png | Bin 1559581 -> 1559563 bytes .../mokosuite_api/.mokogitea/CLAUDE.md | 2 +- .../.mokogitea/ISSUE_TEMPLATE/config.yml | 2 +- .../mokosuite_api/.mokogitea/manifest.xml | 8 +- .../.mokogitea/workflows/auto-release.yml | 34 +- .../.mokogitea/workflows/cascade-dev.yml | 4 +- .../.mokogitea/workflows/cleanup.yml | 4 +- .../.mokogitea/workflows/deploy-manual.yml | 22 +- .../.mokogitea/workflows/gitleaks.yml | 4 +- .../.mokogitea/workflows/notify.yml | 4 +- .../.mokogitea/workflows/pr-check.yml | 4 +- .../.mokogitea/workflows/pre-release.yml | 18 +- .../.mokogitea/workflows/repo-health.yml | 4 +- .../.mokogitea/workflows/security-audit.yml | 4 +- mcp/servers/mokosuite_api/README.md | 4 +- mcp/servers/windows/.mokogitea/CLAUDE.md | 2 +- .../.mokogitea/ISSUE_TEMPLATE/config.yml | 2 +- mcp/servers/windows/.mokogitea/manifest.xml | 8 +- .../.mokogitea/workflows/auto-release.yml | 34 +- .../.mokogitea/workflows/mcp-auto-release.yml | 4 +- .../.mokogitea/workflows/pre-release.yml | 24 +- mcp/servers/windows/README.md | 2 +- mcp/src/config.ts | 2 +- mcp/src/index.ts | 2 +- mcp/src/runner.ts | 2 +- mcp/src/types.ts | 2 +- phpcs.xml | 4 +- phpstan.neon | 2 +- plugin_health_check.php | 2 +- plugin_list.php | 2 +- plugin_metrics.php | 2 +- plugin_readiness.php | 2 +- plugin_validate.php | 2 +- release/generate_dolibarr_version_txt.php | 2 +- release/generate_joomla_update_xml.php | 4 +- scripts/sync-wikis-to-github.sh | 4 +- source/functions.php | 10 +- src/functions.php | 2 +- templates/configs/README.md | 10 +- templates/configs/index.md | 2 +- templates/configs/manifest.xml.template | 12 +- templates/configs/manifest.yml.template | 10 +- templates/configs/mokostandards.xml.template | 12 +- templates/configs/mokostandards.yml.template | 10 +- templates/configs/phpcs.xml | 4 +- templates/docs/README.md | 4 +- templates/docs/extra/README.md | 2 +- templates/docs/extra/index.md | 2 +- templates/docs/index.md | 2 +- templates/docs/required/GOVERNANCE.md | 14 +- templates/docs/required/README.md | 4 +- templates/docs/required/index.md | 2 +- .../docs/required/template-CONTRIBUTING.md | 28 +- templates/docs/required/template-README.md | 4 +- templates/docs/required/template-SECURITY.md | 6 +- templates/fonts/Google/Open Sans-300.ttf | Bin 130808 -> 130797 bytes .../fonts/Google/Open Sans-300italic.ttf | Bin 136948 -> 136937 bytes templates/fonts/Google/Open Sans-500.ttf | Bin 130980 -> 130969 bytes .../fonts/Google/Open Sans-500italic.ttf | Bin 136848 -> 136831 bytes templates/fonts/Google/Open Sans-600.ttf | Bin 130764 -> 130751 bytes .../fonts/Google/Open Sans-600italic.ttf | Bin 136776 -> 136760 bytes templates/fonts/Google/Open Sans-700.ttf | Bin 130864 -> 130854 bytes .../fonts/Google/Open Sans-700italic.ttf | Bin 136412 -> 136396 bytes templates/fonts/Google/Open Sans-800.ttf | Bin 131248 -> 131240 bytes .../fonts/Google/Open Sans-800italic.ttf | Bin 136980 -> 136968 bytes templates/fonts/Google/Open Sans-Italic.ttf | Bin 136656 -> 136628 bytes templates/fonts/Google/Open Sans-Regular.ttf | Bin 130836 -> 130828 bytes templates/fonts/Google/OpenSans-Bold.ttf | Bin 130860 -> 130850 bytes .../fonts/Google/OpenSans-BoldItalic.ttf | Bin 136360 -> 136344 bytes templates/fonts/Google/OpenSans-ExtraBold.ttf | Bin 131244 -> 131236 bytes .../fonts/Google/OpenSans-ExtraBoldItalic.ttf | Bin 136928 -> 136916 bytes templates/fonts/Google/OpenSans-Italic.ttf | Bin 580280 -> 580164 bytes .../fonts/Google/OpenSans-ItalicVariable.ttf | Bin 580280 -> 580164 bytes templates/fonts/Google/OpenSans-Light.ttf | Bin 130804 -> 130793 bytes .../fonts/Google/OpenSans-LightItalic.ttf | Bin 136896 -> 136885 bytes templates/fonts/Google/OpenSans-Medium.ttf | Bin 130976 -> 130965 bytes .../fonts/Google/OpenSans-MediumItalic.ttf | Bin 136796 -> 136779 bytes templates/fonts/Google/OpenSans-Regular.ttf | Bin 529700 -> 529610 bytes .../fonts/Google/OpenSans-RegularVariable.ttf | Bin 529700 -> 529610 bytes templates/fonts/Google/OpenSans-SemiBold.ttf | Bin 130760 -> 130747 bytes .../fonts/Google/OpenSans-SemiBoldItalic.ttf | Bin 136724 -> 136708 bytes templates/fonts/osaka-re.ttf | Bin 12484 -> 12475 bytes templates/images/primary/apple-touch-icon.png | Bin 38951 -> 38949 bytes templates/images/primary/background.png | Bin 1794394 -> 1794389 bytes templates/images/primary/favicon-96x96.png | Bin 12774 -> 12773 bytes templates/images/primary/favicon_120.png | Bin 20816 -> 20815 bytes templates/images/primary/favicon_256.png | Bin 75434 -> 75432 bytes templates/images/primary/logo.png | Bin 65489 -> 65487 bytes templates/images/primary/logo_tiger.png | Bin 46098 -> 46097 bytes .../primary/web-app-manifest-192x192.png | Bin 43467 -> 43466 bytes .../primary/web-app-manifest-512x512.png | Bin 217824 -> 217819 bytes templates/index.md | 12 +- templates/licenses/README.md | 10 +- templates/licenses/index.md | 2 +- templates/makefiles/README.md | 4 +- .../mokogitea/CLAUDE.dolibarr.md.template | 32 +- templates/mokogitea/CLAUDE.joomla.md.template | 22 +- templates/mokogitea/CLAUDE.md.template | 2 +- templates/mokogitea/ISSUE_TEMPLATE/config.yml | 4 +- .../mokogitea/ISSUE_TEMPLATE/documentation.md | 2 +- .../dolibarr_module_id_request.md | 6 +- .../ISSUE_TEMPLATE/feature_request.md | 2 +- .../mokogitea/ISSUE_TEMPLATE/security.md | 2 +- templates/mokogitea/README.md | 10 +- .../copilot-instructions.dolibarr.md.template | 28 +- .../copilot-instructions.joomla.md.template | 22 +- .../copilot-instructions.md.template | 34 +- templates/mokogitea/dependabot.yml.template | 2 +- templates/mokogitea/override.tf.template | 4 +- templates/required/README.md | 36 +- templates/schemas/README.md | 2 +- templates/schemas/manifest-schema.xsd | 8 +- templates/schemas/moko-platform-schema.xsd | 14 +- templates/schemas/mokostandards-schema.xsd | 12 +- templates/schemas/schemas/README.md | 2 +- .../schemas/template-repository-structure.xml | 8 +- templates/scripts/README.md | 4 +- templates/scripts/common/CliBase.template.php | 2 +- templates/scripts/fix/index.md | 2 +- templates/scripts/index.md | 2 +- templates/scripts/release/index.md | 2 +- .../scripts/release/package_dolibarr.php | 2 +- templates/scripts/release/package_joomla.php | 2 +- templates/scripts/sftp-config/README.md | 16 +- .../scripts/validate/dolibarr_module.php | 10 +- templates/scripts/validate/index.md | 2 +- .../scripts/validate/validate_manifest.php | 10 +- .../scripts/validate/validate_structure.php | 14 +- templates/security/README.md | 4 +- templates/security/index.php | 2 +- templates/stubs/dolibarr.php | 2 +- templates/stubs/joomla.php | 2 +- templates/web/assets/css/app.css | 2 +- templates/web/index.php | 8 +- tests/Enterprise/GitPlatformAdapterTest.php | 2 +- tests/index.md | 2 +- tests/test_circuit_breaker_handling.php | 2 +- tests/test_enterprise_libraries.php | 6 +- validate/SECURITY_SCANNING.md | 4 +- validate/auto_detect_platform.php | 6 +- validate/check_changelog.php | 2 +- validate/check_client_theme.php | 2 +- validate/check_composer_deps.php | 4 +- validate/check_dolibarr_module.php | 2 +- validate/check_enterprise_readiness.php | 4 +- validate/check_file_integrity.php | 2 +- validate/check_joomla_manifest.php | 2 +- validate/check_language_structure.php | 2 +- validate/check_license_headers.php | 2 +- validate/check_no_secrets.php | 2 +- validate/check_paths.php | 2 +- validate/check_php_syntax.php | 2 +- validate/check_repo_health.php | 24 +- validate/check_structure.php | 2 +- validate/check_tabs.php | 2 +- validate/check_version_consistency.php | 2 +- validate/check_wiki_health.php | 12 +- validate/check_xml_wellformed.php | 2 +- validate/index.md | 2 +- validate/scan_drift.php | 6 +- wrappers/auto_detect_platform.php | 2 +- wrappers/bulk_sync.php | 2 +- wrappers/check_changelog.php | 2 +- wrappers/check_dolibarr_module.php | 2 +- wrappers/check_enterprise_readiness.php | 2 +- wrappers/check_joomla_manifest.php | 2 +- wrappers/check_language_structure.php | 2 +- wrappers/check_license_headers.php | 2 +- wrappers/check_no_secrets.php | 2 +- wrappers/check_paths.php | 2 +- wrappers/check_php_syntax.php | 2 +- wrappers/check_repo_health.php | 2 +- wrappers/check_structure.php | 2 +- wrappers/check_tabs.php | 2 +- wrappers/check_version_consistency.php | 2 +- wrappers/check_xml_wellformed.php | 2 +- wrappers/deploy_sftp.php | 2 +- wrappers/fix_line_endings.php | 2 +- wrappers/fix_permissions.php | 2 +- wrappers/fix_tabs.php | 2 +- wrappers/fix_trailing_spaces.php | 2 +- wrappers/gen_wrappers.php | 4 +- wrappers/index.md | 4 +- wrappers/pin_action_shas.php | 2 +- wrappers/plugin_health_check.php | 2 +- wrappers/plugin_list.php | 2 +- wrappers/plugin_metrics.php | 2 +- wrappers/plugin_readiness.php | 2 +- wrappers/plugin_validate.php | 2 +- wrappers/scan_drift.php | 2 +- wrappers/setup_labels.php | 2 +- wrappers/sync_dolibarr_readmes.php | 2 +- wrappers/update_sha_hashes.php | 2 +- wrappers/update_version_from_readme.php | 2 +- 391 files changed, 2452 insertions(+), 2452 deletions(-) diff --git a/.mokogitea/CLAUDE.md b/.mokogitea/CLAUDE.md index 7d04f8d..4694270 100644 --- a/.mokogitea/CLAUDE.md +++ b/.mokogitea/CLAUDE.md @@ -1,4 +1,4 @@ -# mokoplatform +# mokocli Enterprise automation, validation, sync, and governance engine for all Moko Consulting repositories. @@ -9,7 +9,7 @@ Enterprise automation, validation, sync, and governance engine for all Moko Cons | **Language** | PHP 8.1+ | | **Version** | 09.01.00 | | **Branch** | develop on `dev`, merge to `main` (protected) | -| **Wiki** | [mokoplatform Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki) | +| **Wiki** | [mokocli Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki) | ## Commands @@ -73,4 +73,4 @@ PHPStan runs with `--memory-limit=512M`. CI enforces PHPCS errors; PHPStan is `c - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files - **New CLI tools**: extend `CliFramework`, not `CLIApp` (legacy) -- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/.mokogitea/ISSUE_TEMPLATE/config.yml b/.mokogitea/ISSUE_TEMPLATE/config.yml index d77a1bc..f392686 100644 --- a/.mokogitea/ISSUE_TEMPLATE/config.yml +++ b/.mokogitea/ISSUE_TEMPLATE/config.yml @@ -7,8 +7,8 @@ contact_links: - name: 💬 Ask a Question url: https://mokoconsulting.tech/ about: Get help or ask questions through our website - - name: 📚 mokoplatform Documentation - url: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + - name: 📚 mokocli Documentation + url: https://git.mokoconsulting.tech/MokoConsulting/mokocli about: View our coding standards and best practices - name: 🔒 Report a Security Vulnerability url: https://git.mokoconsulting.tech/mokoconsulting-tech/.github-private/security/advisories/new diff --git a/.mokogitea/ISSUE_TEMPLATE/documentation.md b/.mokogitea/ISSUE_TEMPLATE/documentation.md index 6269db7..43ad195 100644 --- a/.mokogitea/ISSUE_TEMPLATE/documentation.md +++ b/.mokogitea/ISSUE_TEMPLATE/documentation.md @@ -42,7 +42,7 @@ Suggested text here ## Standards Alignment -- [ ] Follows mokoplatform documentation guidelines +- [ ] Follows mokocli documentation guidelines - [ ] Uses en_US/en_GB localization - [ ] Includes proper SPDX headers where applicable diff --git a/.mokogitea/ISSUE_TEMPLATE/feature_request.md b/.mokogitea/ISSUE_TEMPLATE/feature_request.md index f7df007..2f7d663 100644 --- a/.mokogitea/ISSUE_TEMPLATE/feature_request.md +++ b/.mokogitea/ISSUE_TEMPLATE/feature_request.md @@ -37,7 +37,7 @@ If you have ideas about how this could be implemented, share them here: Add any other context, mockups, or screenshots about the feature request here. ## Relevant Standards -Does this relate to any standards in [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)? +Does this relate to any standards in [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli)? - [ ] Accessibility (WCAG 2.1 AA) - [ ] Localization (en_US/en_GB) - [ ] Security best practices diff --git a/.mokogitea/ISSUE_TEMPLATE/security.md b/.mokogitea/ISSUE_TEMPLATE/security.md index 7d290fb..ea85959 100644 --- a/.mokogitea/ISSUE_TEMPLATE/security.md +++ b/.mokogitea/ISSUE_TEMPLATE/security.md @@ -35,7 +35,7 @@ Use this template only for: ## Standards Reference -Does this relate to security standards in [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)? +Does this relate to security standards in [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli)? - [ ] SPDX license identifiers - [ ] Secret management - [ ] Dependency security diff --git a/.mokogitea/branch-protection.yml b/.mokogitea/branch-protection.yml index 80df873..82f5650 100644 --- a/.mokogitea/branch-protection.yml +++ b/.mokogitea/branch-protection.yml @@ -2,8 +2,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Automation -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Automation +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/branch-protection.yml # BRIEF: Apply standardised branch protection rules to all governed repositories # @@ -62,7 +62,7 @@ jobs: API="${GITEA_URL}/api/v1" # Platform/standards/infra repos to exclude - EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokoplatform MokoTesting" + EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokocli MokoTesting" EXCLUDE="$EXCLUDE MokoCli-Template-Client MokoCli-Template-Dolibarr MokoCli-Template-Generic MokoCli-Template-Joomla MokoDoliProjTemplate" if [ -n "${{ inputs.repos }}" ]; then diff --git a/.mokogitea/bulk-repo-sync.yml b/.mokogitea/bulk-repo-sync.yml index e67f932..521616b 100644 --- a/.mokogitea/bulk-repo-sync.yml +++ b/.mokogitea/bulk-repo-sync.yml @@ -2,8 +2,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Automation -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Automation +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/bulk-repo-sync.yml # BRIEF: Bulk repo sync — runs from API repo, syncs standards to all governed repos diff --git a/.mokogitea/pr-branch-check.yml b/.mokogitea/pr-branch-check.yml index a56a3f8..2366cc9 100644 --- a/.mokogitea/pr-branch-check.yml +++ b/.mokogitea/pr-branch-check.yml @@ -2,9 +2,9 @@ # SPDX-License-Identifier: GPL-3.0-or-later # # FILE INFORMATION -# DEFGROUP: mokoplatform.CI -# INGROUP: mokoplatform -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# DEFGROUP: mokocli.CI +# INGROUP: mokocli +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/pr-branch-check.yml # BRIEF: PR branch merge policy enforcement # diff --git a/.mokogitea/renovate.yml b/.mokogitea/renovate.yml index d8f2802..31179f3 100644 --- a/.mokogitea/renovate.yml +++ b/.mokogitea/renovate.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Automation -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Automation +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/renovate.yml # BRIEF: Run Renovate Bot across all governed repos for dependency updates # @@ -61,7 +61,7 @@ jobs: run: | API="${GITEA_URL}/api/v1" - EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokoplatform MokoTesting" + EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokocli MokoTesting" EXCLUDE="$EXCLUDE MokoCli-Template-Client MokoCli-Template-Dolibarr MokoCli-Template-Generic MokoCli-Template-Joomla MokoDoliProjTemplate" if [ -n "${{ inputs.repos }}" ]; then diff --git a/.mokogitea/sync-wikis.yml b/.mokogitea/sync-wikis.yml index b0912db..ab2e97f 100644 --- a/.mokogitea/sync-wikis.yml +++ b/.mokogitea/sync-wikis.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Maintenance -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Maintenance +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/sync-wikis.yml # BRIEF: Daily sync of all Gitea wikis to consolidated GitHub wiki repo diff --git a/.mokogitea/workflows/auto-bump.yml b/.mokogitea/workflows/auto-bump.yml index cb078c6..6c13103 100644 --- a/.mokogitea/workflows/auto-bump.yml +++ b/.mokogitea/workflows/auto-bump.yml @@ -1,66 +1,66 @@ -# Copyright (C) 2026 Moko Consulting -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# FILE INFORMATION -# DEFGROUP: Gitea.Workflow -# INGROUP: mokocli.Release -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli -# PATH: /.mokogitea/workflows/auto-bump.yml -# VERSION: 09.02.00 -# BRIEF: Auto patch-bump version on every push to dev (skips merge commits) - -name: "Universal: Auto Version Bump" - -on: - push: - branches: - - dev - - rc - - 'feature/**' - - 'patch/**' - -env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} - -permissions: - contents: write - -jobs: - bump: - name: Version Bump - runs-on: release - if: >- - !contains(github.event.head_commit.message, '[skip ci]') && - !contains(github.event.head_commit.message, '[skip bump]') && - !startsWith(github.event.head_commit.message, 'Merge pull request') - - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - token: ${{ secrets.MOKOGITEA_TOKEN }} - fetch-depth: 1 - - - name: Setup mokocli tools - run: | - if ! command -v composer &> /dev/null; then - sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 - fi - if [ -d "/opt/mokocli/cli" ]; then - echo "MOKO_CLI=/opt/mokocli/cli" >> "$GITHUB_ENV" - else - git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/MokoConsulting/mokocli.git" \ - /tmp/mokocli - cd /tmp/mokocli && composer install --no-dev --no-interaction --quiet - echo "MOKO_CLI=/tmp/mokocli/cli" >> "$GITHUB_ENV" - fi - - - name: Bump version - run: | - php ${MOKO_CLI}/version_auto_bump.php \ - --path . --branch "${GITHUB_REF_NAME}" \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" \ - --repo-url "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" +# Copyright (C) 2026 Moko Consulting +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# FILE INFORMATION +# DEFGROUP: Gitea.Workflow +# INGROUP: mokocli.Release +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli +# PATH: /.mokogitea/workflows/auto-bump.yml +# VERSION: 09.02.00 +# BRIEF: Auto patch-bump version on every push to dev (skips merge commits) + +name: "Universal: Auto Version Bump" + +on: + push: + branches: + - dev + - rc + - 'feature/**' + - 'patch/**' + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + +permissions: + contents: write + +jobs: + bump: + name: Version Bump + runs-on: release + if: >- + !contains(github.event.head_commit.message, '[skip ci]') && + !contains(github.event.head_commit.message, '[skip bump]') && + !startsWith(github.event.head_commit.message, 'Merge pull request') + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + token: ${{ secrets.MOKOGITEA_TOKEN }} + fetch-depth: 1 + + - name: Setup mokocli tools + run: | + if ! command -v composer &> /dev/null; then + sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 + fi + if [ -d "/opt/mokocli/cli" ]; then + echo "MOKO_CLI=/opt/mokocli/cli" >> "$GITHUB_ENV" + else + git clone --depth 1 --branch main --quiet \ + "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/MokoConsulting/mokocli.git" \ + /tmp/mokocli + cd /tmp/mokocli && composer install --no-dev --no-interaction --quiet + echo "MOKO_CLI=/tmp/mokocli/cli" >> "$GITHUB_ENV" + fi + + - name: Bump version + run: | + php ${MOKO_CLI}/version_auto_bump.php \ + --path . --branch "${GITHUB_REF_NAME}" \ + --token "${{ secrets.MOKOGITEA_TOKEN }}" \ + --repo-url "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" diff --git a/.mokogitea/workflows/branch-cleanup.yml b/.mokogitea/workflows/branch-cleanup.yml index 9d884e7..91a1f9b 100644 --- a/.mokogitea/workflows/branch-cleanup.yml +++ b/.mokogitea/workflows/branch-cleanup.yml @@ -4,7 +4,7 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: MokoStandards.Universal +# INGROUP: MokoCli.Universal # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.mokogitea/workflows/branch-cleanup.yml # VERSION: 01.00.00 diff --git a/.mokogitea/workflows/ci-generic.yml b/.mokogitea/workflows/ci-generic.yml index 18ae768..2f7116e 100644 --- a/.mokogitea/workflows/ci-generic.yml +++ b/.mokogitea/workflows/ci-generic.yml @@ -4,7 +4,7 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: MokoStandards.CI +# INGROUP: MokoCli.CI # REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Generic # PATH: /.gitea/workflows/ci-generic.yml # VERSION: 01.00.00 diff --git a/.mokogitea/workflows/ci-platform.yml b/.mokogitea/workflows/ci-platform.yml index a4bbeeb..b2bd759 100644 --- a/.mokogitea/workflows/ci-platform.yml +++ b/.mokogitea/workflows/ci-platform.yml @@ -4,18 +4,18 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.CI -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.CI +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.mokogitea/workflows/ci-platform.yml # VERSION: 09.23.00 -# BRIEF: mokoplatform CI — the standards engine validates itself +# BRIEF: mokocli CI — the standards engine validates itself # # +========================================================================+ # | MOKO-PLATFORM CI | # +========================================================================+ # | | # | This is NOT a generic CI workflow. This is the self-validation | -# | pipeline for the central mokoplatform enterprise engine. | +# | pipeline for the central mokocli enterprise engine. | # | | # | It dogfoods every tool the platform ships to governed repos: | # | | @@ -29,7 +29,7 @@ # | | # +========================================================================+ -name: "Platform: mokoplatform CI" +name: "Platform: mokocli CI" on: push: @@ -421,7 +421,7 @@ jobs: - name: Check gate results run: | { - echo "# mokoplatform CI" + echo "# mokocli CI" echo "" echo "| Gate | Job | Status |" echo "|---|---|---|" diff --git a/.mokogitea/workflows/cleanup.yml b/.mokogitea/workflows/cleanup.yml index 3a81856..a62968a 100644 --- a/.mokogitea/workflows/cleanup.yml +++ b/.mokogitea/workflows/cleanup.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: MokoStandards.Maintenance -# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards +# INGROUP: MokoCli.Maintenance +# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli # PATH: /.gitea/workflows/cleanup.yml # VERSION: 01.00.00 # BRIEF: Scheduled cleanup — delete merged branches and old workflow runs diff --git a/.mokogitea/workflows/deploy-manual.yml b/.mokogitea/workflows/deploy-manual.yml index bb133ed..07f4538 100644 --- a/.mokogitea/workflows/deploy-manual.yml +++ b/.mokogitea/workflows/deploy-manual.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: MokoStandards.Deploy -# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards-API +# INGROUP: MokoCli.Deploy +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/workflows/joomla/deploy-manual.yml.template # VERSION: 04.07.00 # BRIEF: Manual SFTP deploy to dev server for Joomla repos @@ -40,7 +40,7 @@ jobs: run: | php -v && composer --version - - name: Setup MokoStandards tools + - name: Setup MokoCli tools env: GA_TOKEN: ${{ secrets.GA_TOKEN || secrets.GA_TOKEN || github.token }} MOKO_CLONE_TOKEN: ${{ secrets.GA_TOKEN || secrets.GA_TOKEN || github.token }} @@ -48,7 +48,7 @@ jobs: COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}' run: | git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/MokoStandards-API.git" \ + "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git" \ /tmp/mokostandards-api 2>/dev/null || true if [ -d "/tmp/mokostandards-api" ] && [ -f "/tmp/mokostandards-api/composer.json" ]; then cd /tmp/mokostandards-api && composer install --no-dev --no-interaction --quiet 2>/dev/null || true diff --git a/.mokogitea/workflows/gitleaks.yml b/.mokogitea/workflows/gitleaks.yml index 196cf0c..9d2d3da 100644 --- a/.mokogitea/workflows/gitleaks.yml +++ b/.mokogitea/workflows/gitleaks.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: MokoStandards.Security -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/MokoStandards-API +# INGROUP: MokoCli.Security +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/gitleaks.yml.template # VERSION: 01.00.00 # BRIEF: Secret scanning — detect leaked credentials, API keys, and tokens diff --git a/.mokogitea/workflows/notify.yml b/.mokogitea/workflows/notify.yml index 51dfcb5..979f76c 100644 --- a/.mokogitea/workflows/notify.yml +++ b/.mokogitea/workflows/notify.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: MokoStandards.Notifications -# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards +# INGROUP: MokoCli.Notifications +# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli # PATH: /.gitea/workflows/notify.yml # VERSION: 01.00.00 # BRIEF: Push notifications via ntfy on release success or workflow failure diff --git a/.mokogitea/workflows/pr-check.yml b/.mokogitea/workflows/pr-check.yml index d34108c..3ac389c 100644 --- a/.mokogitea/workflows/pr-check.yml +++ b/.mokogitea/workflows/pr-check.yml @@ -1,534 +1,534 @@ -# Copyright (C) 2026 Moko Consulting -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# FILE INFORMATION -# DEFGROUP: Gitea.Workflow -# INGROUP: moko-platform.CI -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform -# PATH: /templates/workflows/universal/pr-check.yml.template -# VERSION: 09.23.00 -# BRIEF: PR gate — branch policy + code validation before merge - -name: "Universal: PR Check" - -on: - pull_request: - types: [opened, synchronize, reopened, edited] - -permissions: - contents: read - pull-requests: write - -env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - -jobs: - # ── Branch Policy ────────────────────────────────────────────────────── - branch-policy: - name: Branch Policy - runs-on: ubuntu-latest - steps: - - name: Check branch merge target - run: | - HEAD="${{ github.head_ref }}" - BASE="${{ github.base_ref }}" - - echo "PR: ${HEAD} → ${BASE}" - - ALLOWED=true - REASON="" - - case "$HEAD" in - feature/*|feat/*) - if [ "$BASE" != "dev" ]; then - ALLOWED=false - REASON="Feature branches must target 'dev', not '${BASE}'" - fi - ;; - fix/*|bugfix/*) - if [ "$BASE" != "dev" ]; then - ALLOWED=false - REASON="Fix branches must target 'dev', not '${BASE}'" - fi - ;; - patch/*) - if [ "$BASE" != "dev" ] && [ "$BASE" != "rc" ]; then - ALLOWED=false - REASON="Patch branches must target 'dev' or 'rc', not '${BASE}'" - fi - ;; - hotfix/*) - if [ "$BASE" != "dev" ] && [ "$BASE" != "main" ]; then - ALLOWED=false - REASON="Hotfix branches can only target 'dev' or 'main', not '${BASE}'" - fi - ;; - rc) - if [ "$BASE" != "main" ]; then - ALLOWED=false - REASON="RC branch can only merge into 'main', not '${BASE}'" - fi - ;; - dev) - if [ "$BASE" != "main" ]; then - ALLOWED=false - REASON="Dev branch can only merge into 'main', not '${BASE}'" - fi - ;; - esac - - if [ "$ALLOWED" = false ]; then - echo "::error::${REASON}" - echo "## Branch Policy Violation" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "${REASON}" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "### Allowed merge paths:" >> $GITHUB_STEP_SUMMARY - echo "- \`feature/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY - echo "- \`fix/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY - echo "- \`hotfix/*\` → \`dev\` or \`main\`" >> $GITHUB_STEP_SUMMARY - echo "- \`dev\` → \`main\`" >> $GITHUB_STEP_SUMMARY - echo "- \`rc/*\` → \`main\`" >> $GITHUB_STEP_SUMMARY - exit 1 - fi - - echo "Branch policy: OK (${HEAD} → ${BASE})" - echo "## Branch Policy: Passed" >> $GITHUB_STEP_SUMMARY - - # ── Secret Scanning ────────────────────────────────────────────────── - gitleaks: - name: Secret Scan - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install Gitleaks - run: | - GITLEAKS_VERSION="8.21.2" - curl -sSL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" \ - | tar -xz -C /usr/local/bin gitleaks - - - name: Scan PR commits for secrets - run: | - if gitleaks detect --source . --verbose \ - --log-opts=${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} 2>&1; then - echo "**No secrets detected.**" >> $GITHUB_STEP_SUMMARY - else - echo "::error::Potential secrets detected in PR commits" - exit 1 - fi - - # ── Code Validation ──────────────────────────────────────────────────── - validate: - name: Validate PR - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Check for merge conflict markers - run: | - CONFLICTS=$(grep -rn '<<<<<<< \|>>>>>>> \|^=======$' --include='*.php' --include='*.xml' --include='*.css' --include='*.js' --include='*.json' --include='*.md' --include='*.yml' --include='*.yaml' --include='*.ini' --include='*.txt' . 2>/dev/null | grep -v '.git/' || true) - if [ -n "$CONFLICTS" ]; then - echo "::error::Merge conflict markers found in source files" - echo "## Conflict Markers Found" >> $GITHUB_STEP_SUMMARY - echo '```' >> $GITHUB_STEP_SUMMARY - echo "$CONFLICTS" >> $GITHUB_STEP_SUMMARY - echo '```' >> $GITHUB_STEP_SUMMARY - exit 1 - fi - echo "No conflict markers found" - - - name: Detect platform - id: platform - run: | - # Read platform from XML manifest ( tag) or plain text fallback - PLATFORM=$(sed -n 's/.*\([^<]*\)<\/platform>.*/\1/p' .mokogitea/manifest.xml 2>/dev/null | head -1) - [ -z "$PLATFORM" ] && PLATFORM=$(cat .mokogitea/manifest.xml 2>/dev/null | tr -d '[:space:]') - [ -z "$PLATFORM" ] && PLATFORM="generic" - echo "platform=$PLATFORM" >> "$GITHUB_OUTPUT" - - - name: Setup PHP - if: steps.platform.outputs.platform == 'joomla' || steps.platform.outputs.platform == 'dolibarr' - run: | - if ! command -v php &> /dev/null; then - sudo apt-get update -qq - sudo apt-get install -y -qq php-cli php-mbstring php-xml >/dev/null 2>&1 - fi - - - name: PHP syntax check - if: steps.platform.outputs.platform == 'joomla' || steps.platform.outputs.platform == 'dolibarr' - run: | - ERRORS=0 - while IFS= read -r -d '' file; do - if ! php -l "$file" 2>&1 | grep -q "No syntax errors"; then - ERRORS=$((ERRORS + 1)) - fi - done < <(find . -name "*.php" -not -path "./.git/*" -not -path "./vendor/*" -print0) - echo "PHP lint: ${ERRORS} error(s)" - [ "$ERRORS" -eq 0 ] || { echo "::error::PHP syntax errors found"; exit 1; } - - - name: Joomla JEXEC guard check - if: steps.platform.outputs.platform == 'joomla' - run: | - ERRORS=0 - while IFS= read -r -d '' file; do - # Skip vendor, node_modules, and index.html stub files - case "$file" in ./vendor/*|./node_modules/*) continue ;; esac - # Check first 10 lines for JEXEC or JPATH guard - if ! head -20 "$file" | grep -qE "defined\s*\(\s*['\"](_JEXEC|JPATH_BASE|\\\\JPATH_PLATFORM)['\"]"; then - echo "::error file=${file}::Missing JEXEC guard: ${file}" - ERRORS=$((ERRORS + 1)) - fi - done < <(find . -name "*.php" -path "*/src/*" -not -path "./.git/*" -not -path "./vendor/*" -print0) - if [ "$ERRORS" -gt 0 ]; then - echo "::error::${ERRORS} PHP file(s) missing defined('_JEXEC') or die guard" - echo "## JEXEC Guard Check: Failed" >> $GITHUB_STEP_SUMMARY - echo "${ERRORS} file(s) in src/ are missing the Joomla execution guard." >> $GITHUB_STEP_SUMMARY - exit 1 - fi - echo "JEXEC guard: OK" - - - name: Joomla directory listing protection - if: steps.platform.outputs.platform == 'joomla' - run: | - MISSING=0 - SOURCE_DIR="src" - [ ! -d "$SOURCE_DIR" ] && exit 0 - while IFS= read -r dir; do - if [ ! -f "${dir}/index.html" ]; then - echo "::warning::Missing index.html in ${dir} (directory listing protection)" - MISSING=$((MISSING + 1)) - fi - done < <(find "$SOURCE_DIR" -type d -not -path "./.git/*" -not -path "*/vendor/*" -not -path "*/node_modules/*") - if [ "$MISSING" -gt 0 ]; then - echo "## Directory Protection" >> $GITHUB_STEP_SUMMARY - echo "${MISSING} director(ies) missing index.html" >> $GITHUB_STEP_SUMMARY - fi - echo "Directory protection: ${MISSING} missing (advisory)" - - - name: Joomla script file and asset checks - if: steps.platform.outputs.platform == 'joomla' - run: | - ERRORS=0 - MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1) - [ -z "$MANIFEST" ] && exit 0 - MANIFEST_DIR=$(dirname "$MANIFEST") - - # Check scriptfile exists if declared - SCRIPTFILE=$(sed -n 's/.*\([^<]*\)<\/scriptfile>.*/\1/p' "$MANIFEST" 2>/dev/null) - if [ -n "$SCRIPTFILE" ]; then - if [ ! -f "${MANIFEST_DIR}/${SCRIPTFILE}" ]; then - echo "::error::Manifest declares ${SCRIPTFILE} but file not found at ${MANIFEST_DIR}/${SCRIPTFILE}" - ERRORS=$((ERRORS + 1)) - else - echo "Script file: ${MANIFEST_DIR}/${SCRIPTFILE} (OK)" - fi - fi - - # Require joomla.asset.json and validate it - ASSET_JSON=$(find "$MANIFEST_DIR" -name "joomla.asset.json" -not -path "./.git/*" 2>/dev/null | head -1) - if [ -z "$ASSET_JSON" ]; then - echo "::error::joomla.asset.json not found — Joomla asset system is required" - ERRORS=$((ERRORS + 1)) - else - if command -v php &> /dev/null; then - php -r "json_decode(file_get_contents('$ASSET_JSON')); if(json_last_error()!==JSON_ERROR_NONE){echo json_last_error_msg();exit(1);}" 2>&1 || { - echo "::error::joomla.asset.json is not valid JSON" - ERRORS=$((ERRORS + 1)) - } - fi - echo "joomla.asset.json: valid" - fi - - # Validate all XML files in src/ are well-formed - XML_ERRORS=0 - if command -v php &> /dev/null; then - while IFS= read -r -d '' xmlfile; do - if ! php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('$xmlfile'); if(!\$x){foreach(libxml_get_errors() as \$e) echo trim(\$e->message) . ' in $xmlfile'; exit(1);}" 2>&1; then - XML_ERRORS=$((XML_ERRORS + 1)) - fi - done < <(find "$MANIFEST_DIR" -name "*.xml" -not -path "./.git/*" -print0) - fi - if [ "$XML_ERRORS" -gt 0 ]; then - echo "::error::${XML_ERRORS} XML file(s) are malformed" - ERRORS=$((ERRORS + 1)) - else - echo "XML well-formedness: OK" - fi - - [ "$ERRORS" -gt 0 ] && exit 1 - echo "Joomla asset checks: OK" - - - name: Validate platform manifest - run: | - PLATFORM="${{ steps.platform.outputs.platform }}" - case "$PLATFORM" in - joomla) - MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1) - if [ -z "$MANIFEST" ]; then - echo "::warning::No Joomla manifest found (WaaS site)" - exit 0 - fi - echo "Manifest: ${MANIFEST}" - if command -v php &> /dev/null; then - php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('$MANIFEST'); if(!\$x){foreach(libxml_get_errors() as \$e) echo \$e->message; exit(1);}" || { echo "::error::Manifest XML is malformed"; exit 1; } - fi - for ELEMENT in name version description; do - grep -q "<${ELEMENT}>" "$MANIFEST" || { echo "::error::Missing <${ELEMENT}> in manifest"; exit 1; } - done - # Block legacy raw/branch update server URLs on MokoGitea - RAW_URLS=$(grep -n 'raw/branch' "$MANIFEST" | grep -i 'mokoconsulting\|mokogitea\|git\.mokoconsulting\.tech' || true) - if [ -n "$RAW_URLS" ]; then - echo "::error::Manifest contains legacy raw/branch update server URL on MokoGitea. Use the Gitea Pages URL instead (e.g. /{REPO}/updates.xml not /{REPO}/raw/branch/main/updates.xml)" - echo "$RAW_URLS" - exit 1 - fi - echo "Joomla manifest valid" - ;; - dolibarr) - MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1) - if [ -z "$MOD_FILE" ]; then - echo "::error::No mod*.class.php found" - exit 1 - fi - echo "Dolibarr module: ${MOD_FILE}" - ;; - *) - echo "Generic platform — no manifest validation" - ;; - esac - - - name: Check update stream format - run: | - PLATFORM="${{ steps.platform.outputs.platform }}" - case "$PLATFORM" in - joomla) - if [ -f "updates.xml" ]; then - if command -v php &> /dev/null; then - php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('updates.xml'); if(!\$x){foreach(libxml_get_errors() as \$e) echo \$e->message; exit(1);}" || { echo "::error::updates.xml is malformed"; exit 1; } - fi - echo "updates.xml valid" - fi - ;; - dolibarr) - [ -f "update.txt" ] && echo "update.txt present" || echo "::warning::No update.txt" - ;; - esac - - - name: Validate Joomla language files - if: steps.platform.outputs.platform == 'joomla' - run: | - ERRORS=0 - WARNINGS=0 - - # Require both en-GB and en-US language directories - LANG_ROOT=$(find . -path "*/language" -type d -not -path "./.git/*" 2>/dev/null | head -1) - if [ -z "$LANG_ROOT" ]; then - echo "No language/ directory found — skipping" - exit 0 - fi - - if [ ! -d "$LANG_ROOT/en-GB" ]; then - echo "::error::Missing en-GB language directory (${LANG_ROOT}/en-GB)" - ERRORS=$((ERRORS + 1)) - fi - if [ ! -d "$LANG_ROOT/en-US" ]; then - echo "::error::Missing en-US language directory (${LANG_ROOT}/en-US)" - ERRORS=$((ERRORS + 1)) - fi - - # Check that en-GB and en-US have matching .ini files - if [ -d "$LANG_ROOT/en-GB" ] && [ -d "$LANG_ROOT/en-US" ]; then - for GB_INI in "$LANG_ROOT/en-GB"/*.ini; do - [ ! -f "$GB_INI" ] && continue - US_INI="$LANG_ROOT/en-US/$(basename "$GB_INI")" - if [ ! -f "$US_INI" ]; then - echo "::error::$(basename "$GB_INI") exists in en-GB but missing from en-US" - ERRORS=$((ERRORS + 1)) - fi - done - for US_INI in "$LANG_ROOT/en-US"/*.ini; do - [ ! -f "$US_INI" ] && continue - GB_INI="$LANG_ROOT/en-GB/$(basename "$US_INI")" - if [ ! -f "$GB_INI" ]; then - echo "::error::$(basename "$US_INI") exists in en-US but missing from en-GB" - ERRORS=$((ERRORS + 1)) - fi - done - fi - - # Find all .ini language files - INI_FILES=$(find . -path "*/language/*/*.ini" -not -path "./.git/*" 2>/dev/null) - if [ -z "$INI_FILES" ]; then - echo "No .ini language files found" - [ "$ERRORS" -gt 0 ] && exit 1 - exit 0 - fi - - echo "Found $(echo "$INI_FILES" | wc -l) language file(s)" - - for FILE in $INI_FILES; do - FNAME=$(basename "$FILE") - LINENUM=0 - SEEN_KEYS="" - - while IFS= read -r line || [ -n "$line" ]; do - LINENUM=$((LINENUM + 1)) - - # Skip empty lines and comments - [ -z "$line" ] && continue - echo "$line" | grep -qE '^\s*;' && continue - echo "$line" | grep -qE '^\s*$' && continue - - # Must match KEY="VALUE" format - if ! echo "$line" | grep -qE '^[A-Z_][A-Z0-9_]*=".*"$'; then - echo "::error file=${FILE},line=${LINENUM}::Malformed line: ${line}" - ERRORS=$((ERRORS + 1)) - continue - fi - - # Extract key and check for duplicates - KEY=$(echo "$line" | sed 's/=.*//') - if echo "$SEEN_KEYS" | grep -qx "$KEY"; then - echo "::error file=${FILE},line=${LINENUM}::Duplicate key: ${KEY}" - ERRORS=$((ERRORS + 1)) - fi - SEEN_KEYS="${SEEN_KEYS} - ${KEY}" - done < "$FILE" - - echo " ${FILE}: checked ${LINENUM} lines" - done - - # Cross-check en-GB vs en-US key consistency - GB_DIR=$(find . -path "*/language/en-GB" -type d -not -path "./.git/*" 2>/dev/null | head -1) - US_DIR=$(find . -path "*/language/en-US" -type d -not -path "./.git/*" 2>/dev/null | head -1) - - if [ -n "$GB_DIR" ] && [ -n "$US_DIR" ]; then - for GB_FILE in "$GB_DIR"/*.ini; do - [ ! -f "$GB_FILE" ] && continue - FNAME=$(basename "$GB_FILE") - US_FILE="$US_DIR/$FNAME" - [ ! -f "$US_FILE" ] && continue - - GB_KEYS=$(grep -oP '^[A-Z_][A-Z0-9_]*(?==)' "$GB_FILE" 2>/dev/null | sort) - US_KEYS=$(grep -oP '^[A-Z_][A-Z0-9_]*(?==)' "$US_FILE" 2>/dev/null | sort) - - # Keys in en-GB but not en-US - MISSING_US=$(comm -23 <(echo "$GB_KEYS") <(echo "$US_KEYS")) - if [ -n "$MISSING_US" ]; then - echo "::warning::Keys in en-GB/$FNAME but missing from en-US/$FNAME:" - echo "$MISSING_US" | while read -r k; do echo " - $k"; done - WARNINGS=$((WARNINGS + 1)) - fi - - # Keys in en-US but not en-GB - MISSING_GB=$(comm -13 <(echo "$GB_KEYS") <(echo "$US_KEYS")) - if [ -n "$MISSING_GB" ]; then - echo "::warning::Keys in en-US/$FNAME but missing from en-GB/$FNAME:" - echo "$MISSING_GB" | while read -r k; do echo " - $k"; done - WARNINGS=$((WARNINGS + 1)) - fi - done - fi - - { - echo "### Language File Validation" - echo "| Metric | Count |" - echo "|---|---|" - echo "| Files checked | $(echo "$INI_FILES" | wc -l) |" - echo "| Errors | ${ERRORS} |" - echo "| Warnings | ${WARNINGS} |" - } >> $GITHUB_STEP_SUMMARY - - if [ "$ERRORS" -gt 0 ]; then - echo "::error::Language validation failed with ${ERRORS} error(s)" - exit 1 - fi - echo "Language files: OK (${WARNINGS} warning(s))" - - - name: Check changelog has unreleased entry - run: | - if [ ! -f "CHANGELOG.md" ]; then - echo "::warning::No CHANGELOG.md found" - exit 0 - fi - # Check for content under [Unreleased] section - if ! grep -q "## \[Unreleased\]" CHANGELOG.md; then - echo "::error::CHANGELOG.md missing [Unreleased] section" - exit 1 - fi - # Check there's at least one entry (Added/Changed/Fixed/Removed) under Unreleased - UNRELEASED_CONTENT=$(sed -n '/## \[Unreleased\]/,/## \[/p' CHANGELOG.md | grep -cE '^\s*-\s' || true) - if [ "$UNRELEASED_CONTENT" -eq 0 ]; then - echo "::error::CHANGELOG.md [Unreleased] section has no entries. Add a changelog entry describing your changes." - echo "## Changelog Check: Failed" >> $GITHUB_STEP_SUMMARY - echo "The \`[Unreleased]\` section in CHANGELOG.md has no entries." >> $GITHUB_STEP_SUMMARY - echo "Add a line like \`- Description of your change\` under a heading (\`### Added\`, \`### Changed\`, \`### Fixed\`, etc.)" >> $GITHUB_STEP_SUMMARY - exit 1 - fi - echo "Changelog: ${UNRELEASED_CONTENT} entry/entries in [Unreleased]" - - - name: Verify package source - run: | - SOURCE_DIR="src" - [ ! -d "$SOURCE_DIR" ] && SOURCE_DIR="htdocs" - if [ ! -d "$SOURCE_DIR" ]; then - echo "::warning::No src/ or htdocs/ directory" - exit 0 - fi - FILE_COUNT=$(find "$SOURCE_DIR" -type f | wc -l) - echo "Source: ${FILE_COUNT} files" - [ "$FILE_COUNT" -gt 0 ] || { echo "::error::Source directory is empty"; exit 1; } - - # ── Pre-Release RC Build ───────────────────────────────────────────────── - pre-release: - name: Build RC Package - runs-on: ubuntu-latest - needs: [branch-policy, validate] - - steps: - - name: Trigger RC pre-release - env: - GA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} - REPO: ${{ github.repository }} - BRANCH: ${{ github.head_ref }} - GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} - run: | - curl -s -X POST "${GITEA_URL}/api/v1/repos/${REPO}/actions/workflows/pre-release.yml/dispatches" -H "Authorization: token ${GITEA_TOKEN}" -H "Content-Type: application/json" -d "{\"ref\":\"${BRANCH}\",\"inputs\":{\"stability\":\"release-candidate\"}}" - echo "### Pre-Release" >> $GITHUB_STEP_SUMMARY - echo "Triggered RC build on branch \`${BRANCH}\`" >> $GITHUB_STEP_SUMMARY - - # ── Issue Reporter ────────────────────────────────────────────────────── - report-issues: - name: Report Issues - runs-on: ubuntu-latest - needs: [branch-policy, validate] - if: >- - always() && - needs.validate.result == 'failure' - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - sparse-checkout: automation/ci-issue-reporter.sh - sparse-checkout-cone-mode: false - - - name: "File issue for PR validation failure" - env: - GITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} - GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} - run: | - chmod +x automation/ci-issue-reporter.sh - ./automation/ci-issue-reporter.sh \ - --gate "PR Validation" \ - --workflow "PR Check" \ - --severity error \ - --details "PR validation failed (syntax, manifest, changelog, or source checks). See the CI run for the specific check that failed." +# Copyright (C) 2026 Moko Consulting +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# FILE INFORMATION +# DEFGROUP: Gitea.Workflow +# INGROUP: mokocli.CI +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli +# PATH: /templates/workflows/universal/pr-check.yml.template +# VERSION: 09.23.00 +# BRIEF: PR gate — branch policy + code validation before merge + +name: "Universal: PR Check" + +on: + pull_request: + types: [opened, synchronize, reopened, edited] + +permissions: + contents: read + pull-requests: write + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +jobs: + # ── Branch Policy ────────────────────────────────────────────────────── + branch-policy: + name: Branch Policy + runs-on: ubuntu-latest + steps: + - name: Check branch merge target + run: | + HEAD="${{ github.head_ref }}" + BASE="${{ github.base_ref }}" + + echo "PR: ${HEAD} → ${BASE}" + + ALLOWED=true + REASON="" + + case "$HEAD" in + feature/*|feat/*) + if [ "$BASE" != "dev" ]; then + ALLOWED=false + REASON="Feature branches must target 'dev', not '${BASE}'" + fi + ;; + fix/*|bugfix/*) + if [ "$BASE" != "dev" ]; then + ALLOWED=false + REASON="Fix branches must target 'dev', not '${BASE}'" + fi + ;; + patch/*) + if [ "$BASE" != "dev" ] && [ "$BASE" != "rc" ]; then + ALLOWED=false + REASON="Patch branches must target 'dev' or 'rc', not '${BASE}'" + fi + ;; + hotfix/*) + if [ "$BASE" != "dev" ] && [ "$BASE" != "main" ]; then + ALLOWED=false + REASON="Hotfix branches can only target 'dev' or 'main', not '${BASE}'" + fi + ;; + rc) + if [ "$BASE" != "main" ]; then + ALLOWED=false + REASON="RC branch can only merge into 'main', not '${BASE}'" + fi + ;; + dev) + if [ "$BASE" != "main" ]; then + ALLOWED=false + REASON="Dev branch can only merge into 'main', not '${BASE}'" + fi + ;; + esac + + if [ "$ALLOWED" = false ]; then + echo "::error::${REASON}" + echo "## Branch Policy Violation" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "${REASON}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Allowed merge paths:" >> $GITHUB_STEP_SUMMARY + echo "- \`feature/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY + echo "- \`fix/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY + echo "- \`hotfix/*\` → \`dev\` or \`main\`" >> $GITHUB_STEP_SUMMARY + echo "- \`dev\` → \`main\`" >> $GITHUB_STEP_SUMMARY + echo "- \`rc/*\` → \`main\`" >> $GITHUB_STEP_SUMMARY + exit 1 + fi + + echo "Branch policy: OK (${HEAD} → ${BASE})" + echo "## Branch Policy: Passed" >> $GITHUB_STEP_SUMMARY + + # ── Secret Scanning ────────────────────────────────────────────────── + gitleaks: + name: Secret Scan + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Gitleaks + run: | + GITLEAKS_VERSION="8.21.2" + curl -sSL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" \ + | tar -xz -C /usr/local/bin gitleaks + + - name: Scan PR commits for secrets + run: | + if gitleaks detect --source . --verbose \ + --log-opts=${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} 2>&1; then + echo "**No secrets detected.**" >> $GITHUB_STEP_SUMMARY + else + echo "::error::Potential secrets detected in PR commits" + exit 1 + fi + + # ── Code Validation ──────────────────────────────────────────────────── + validate: + name: Validate PR + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Check for merge conflict markers + run: | + CONFLICTS=$(grep -rn '<<<<<<< \|>>>>>>> \|^=======$' --include='*.php' --include='*.xml' --include='*.css' --include='*.js' --include='*.json' --include='*.md' --include='*.yml' --include='*.yaml' --include='*.ini' --include='*.txt' . 2>/dev/null | grep -v '.git/' || true) + if [ -n "$CONFLICTS" ]; then + echo "::error::Merge conflict markers found in source files" + echo "## Conflict Markers Found" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + echo "$CONFLICTS" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + exit 1 + fi + echo "No conflict markers found" + + - name: Detect platform + id: platform + run: | + # Read platform from XML manifest ( tag) or plain text fallback + PLATFORM=$(sed -n 's/.*\([^<]*\)<\/platform>.*/\1/p' .mokogitea/manifest.xml 2>/dev/null | head -1) + [ -z "$PLATFORM" ] && PLATFORM=$(cat .mokogitea/manifest.xml 2>/dev/null | tr -d '[:space:]') + [ -z "$PLATFORM" ] && PLATFORM="generic" + echo "platform=$PLATFORM" >> "$GITHUB_OUTPUT" + + - name: Setup PHP + if: steps.platform.outputs.platform == 'joomla' || steps.platform.outputs.platform == 'dolibarr' + run: | + if ! command -v php &> /dev/null; then + sudo apt-get update -qq + sudo apt-get install -y -qq php-cli php-mbstring php-xml >/dev/null 2>&1 + fi + + - name: PHP syntax check + if: steps.platform.outputs.platform == 'joomla' || steps.platform.outputs.platform == 'dolibarr' + run: | + ERRORS=0 + while IFS= read -r -d '' file; do + if ! php -l "$file" 2>&1 | grep -q "No syntax errors"; then + ERRORS=$((ERRORS + 1)) + fi + done < <(find . -name "*.php" -not -path "./.git/*" -not -path "./vendor/*" -print0) + echo "PHP lint: ${ERRORS} error(s)" + [ "$ERRORS" -eq 0 ] || { echo "::error::PHP syntax errors found"; exit 1; } + + - name: Joomla JEXEC guard check + if: steps.platform.outputs.platform == 'joomla' + run: | + ERRORS=0 + while IFS= read -r -d '' file; do + # Skip vendor, node_modules, and index.html stub files + case "$file" in ./vendor/*|./node_modules/*) continue ;; esac + # Check first 10 lines for JEXEC or JPATH guard + if ! head -20 "$file" | grep -qE "defined\s*\(\s*['\"](_JEXEC|JPATH_BASE|\\\\JPATH_PLATFORM)['\"]"; then + echo "::error file=${file}::Missing JEXEC guard: ${file}" + ERRORS=$((ERRORS + 1)) + fi + done < <(find . -name "*.php" -path "*/src/*" -not -path "./.git/*" -not -path "./vendor/*" -print0) + if [ "$ERRORS" -gt 0 ]; then + echo "::error::${ERRORS} PHP file(s) missing defined('_JEXEC') or die guard" + echo "## JEXEC Guard Check: Failed" >> $GITHUB_STEP_SUMMARY + echo "${ERRORS} file(s) in src/ are missing the Joomla execution guard." >> $GITHUB_STEP_SUMMARY + exit 1 + fi + echo "JEXEC guard: OK" + + - name: Joomla directory listing protection + if: steps.platform.outputs.platform == 'joomla' + run: | + MISSING=0 + SOURCE_DIR="src" + [ ! -d "$SOURCE_DIR" ] && exit 0 + while IFS= read -r dir; do + if [ ! -f "${dir}/index.html" ]; then + echo "::warning::Missing index.html in ${dir} (directory listing protection)" + MISSING=$((MISSING + 1)) + fi + done < <(find "$SOURCE_DIR" -type d -not -path "./.git/*" -not -path "*/vendor/*" -not -path "*/node_modules/*") + if [ "$MISSING" -gt 0 ]; then + echo "## Directory Protection" >> $GITHUB_STEP_SUMMARY + echo "${MISSING} director(ies) missing index.html" >> $GITHUB_STEP_SUMMARY + fi + echo "Directory protection: ${MISSING} missing (advisory)" + + - name: Joomla script file and asset checks + if: steps.platform.outputs.platform == 'joomla' + run: | + ERRORS=0 + MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1) + [ -z "$MANIFEST" ] && exit 0 + MANIFEST_DIR=$(dirname "$MANIFEST") + + # Check scriptfile exists if declared + SCRIPTFILE=$(sed -n 's/.*\([^<]*\)<\/scriptfile>.*/\1/p' "$MANIFEST" 2>/dev/null) + if [ -n "$SCRIPTFILE" ]; then + if [ ! -f "${MANIFEST_DIR}/${SCRIPTFILE}" ]; then + echo "::error::Manifest declares ${SCRIPTFILE} but file not found at ${MANIFEST_DIR}/${SCRIPTFILE}" + ERRORS=$((ERRORS + 1)) + else + echo "Script file: ${MANIFEST_DIR}/${SCRIPTFILE} (OK)" + fi + fi + + # Require joomla.asset.json and validate it + ASSET_JSON=$(find "$MANIFEST_DIR" -name "joomla.asset.json" -not -path "./.git/*" 2>/dev/null | head -1) + if [ -z "$ASSET_JSON" ]; then + echo "::error::joomla.asset.json not found — Joomla asset system is required" + ERRORS=$((ERRORS + 1)) + else + if command -v php &> /dev/null; then + php -r "json_decode(file_get_contents('$ASSET_JSON')); if(json_last_error()!==JSON_ERROR_NONE){echo json_last_error_msg();exit(1);}" 2>&1 || { + echo "::error::joomla.asset.json is not valid JSON" + ERRORS=$((ERRORS + 1)) + } + fi + echo "joomla.asset.json: valid" + fi + + # Validate all XML files in src/ are well-formed + XML_ERRORS=0 + if command -v php &> /dev/null; then + while IFS= read -r -d '' xmlfile; do + if ! php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('$xmlfile'); if(!\$x){foreach(libxml_get_errors() as \$e) echo trim(\$e->message) . ' in $xmlfile'; exit(1);}" 2>&1; then + XML_ERRORS=$((XML_ERRORS + 1)) + fi + done < <(find "$MANIFEST_DIR" -name "*.xml" -not -path "./.git/*" -print0) + fi + if [ "$XML_ERRORS" -gt 0 ]; then + echo "::error::${XML_ERRORS} XML file(s) are malformed" + ERRORS=$((ERRORS + 1)) + else + echo "XML well-formedness: OK" + fi + + [ "$ERRORS" -gt 0 ] && exit 1 + echo "Joomla asset checks: OK" + + - name: Validate platform manifest + run: | + PLATFORM="${{ steps.platform.outputs.platform }}" + case "$PLATFORM" in + joomla) + MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1) + if [ -z "$MANIFEST" ]; then + echo "::warning::No Joomla manifest found (WaaS site)" + exit 0 + fi + echo "Manifest: ${MANIFEST}" + if command -v php &> /dev/null; then + php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('$MANIFEST'); if(!\$x){foreach(libxml_get_errors() as \$e) echo \$e->message; exit(1);}" || { echo "::error::Manifest XML is malformed"; exit 1; } + fi + for ELEMENT in name version description; do + grep -q "<${ELEMENT}>" "$MANIFEST" || { echo "::error::Missing <${ELEMENT}> in manifest"; exit 1; } + done + # Block legacy raw/branch update server URLs on MokoGitea + RAW_URLS=$(grep -n 'raw/branch' "$MANIFEST" | grep -i 'mokoconsulting\|mokogitea\|git\.mokoconsulting\.tech' || true) + if [ -n "$RAW_URLS" ]; then + echo "::error::Manifest contains legacy raw/branch update server URL on MokoGitea. Use the Gitea Pages URL instead (e.g. /{REPO}/updates.xml not /{REPO}/raw/branch/main/updates.xml)" + echo "$RAW_URLS" + exit 1 + fi + echo "Joomla manifest valid" + ;; + dolibarr) + MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1) + if [ -z "$MOD_FILE" ]; then + echo "::error::No mod*.class.php found" + exit 1 + fi + echo "Dolibarr module: ${MOD_FILE}" + ;; + *) + echo "Generic platform — no manifest validation" + ;; + esac + + - name: Check update stream format + run: | + PLATFORM="${{ steps.platform.outputs.platform }}" + case "$PLATFORM" in + joomla) + if [ -f "updates.xml" ]; then + if command -v php &> /dev/null; then + php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('updates.xml'); if(!\$x){foreach(libxml_get_errors() as \$e) echo \$e->message; exit(1);}" || { echo "::error::updates.xml is malformed"; exit 1; } + fi + echo "updates.xml valid" + fi + ;; + dolibarr) + [ -f "update.txt" ] && echo "update.txt present" || echo "::warning::No update.txt" + ;; + esac + + - name: Validate Joomla language files + if: steps.platform.outputs.platform == 'joomla' + run: | + ERRORS=0 + WARNINGS=0 + + # Require both en-GB and en-US language directories + LANG_ROOT=$(find . -path "*/language" -type d -not -path "./.git/*" 2>/dev/null | head -1) + if [ -z "$LANG_ROOT" ]; then + echo "No language/ directory found — skipping" + exit 0 + fi + + if [ ! -d "$LANG_ROOT/en-GB" ]; then + echo "::error::Missing en-GB language directory (${LANG_ROOT}/en-GB)" + ERRORS=$((ERRORS + 1)) + fi + if [ ! -d "$LANG_ROOT/en-US" ]; then + echo "::error::Missing en-US language directory (${LANG_ROOT}/en-US)" + ERRORS=$((ERRORS + 1)) + fi + + # Check that en-GB and en-US have matching .ini files + if [ -d "$LANG_ROOT/en-GB" ] && [ -d "$LANG_ROOT/en-US" ]; then + for GB_INI in "$LANG_ROOT/en-GB"/*.ini; do + [ ! -f "$GB_INI" ] && continue + US_INI="$LANG_ROOT/en-US/$(basename "$GB_INI")" + if [ ! -f "$US_INI" ]; then + echo "::error::$(basename "$GB_INI") exists in en-GB but missing from en-US" + ERRORS=$((ERRORS + 1)) + fi + done + for US_INI in "$LANG_ROOT/en-US"/*.ini; do + [ ! -f "$US_INI" ] && continue + GB_INI="$LANG_ROOT/en-GB/$(basename "$US_INI")" + if [ ! -f "$GB_INI" ]; then + echo "::error::$(basename "$US_INI") exists in en-US but missing from en-GB" + ERRORS=$((ERRORS + 1)) + fi + done + fi + + # Find all .ini language files + INI_FILES=$(find . -path "*/language/*/*.ini" -not -path "./.git/*" 2>/dev/null) + if [ -z "$INI_FILES" ]; then + echo "No .ini language files found" + [ "$ERRORS" -gt 0 ] && exit 1 + exit 0 + fi + + echo "Found $(echo "$INI_FILES" | wc -l) language file(s)" + + for FILE in $INI_FILES; do + FNAME=$(basename "$FILE") + LINENUM=0 + SEEN_KEYS="" + + while IFS= read -r line || [ -n "$line" ]; do + LINENUM=$((LINENUM + 1)) + + # Skip empty lines and comments + [ -z "$line" ] && continue + echo "$line" | grep -qE '^\s*;' && continue + echo "$line" | grep -qE '^\s*$' && continue + + # Must match KEY="VALUE" format + if ! echo "$line" | grep -qE '^[A-Z_][A-Z0-9_]*=".*"$'; then + echo "::error file=${FILE},line=${LINENUM}::Malformed line: ${line}" + ERRORS=$((ERRORS + 1)) + continue + fi + + # Extract key and check for duplicates + KEY=$(echo "$line" | sed 's/=.*//') + if echo "$SEEN_KEYS" | grep -qx "$KEY"; then + echo "::error file=${FILE},line=${LINENUM}::Duplicate key: ${KEY}" + ERRORS=$((ERRORS + 1)) + fi + SEEN_KEYS="${SEEN_KEYS} + ${KEY}" + done < "$FILE" + + echo " ${FILE}: checked ${LINENUM} lines" + done + + # Cross-check en-GB vs en-US key consistency + GB_DIR=$(find . -path "*/language/en-GB" -type d -not -path "./.git/*" 2>/dev/null | head -1) + US_DIR=$(find . -path "*/language/en-US" -type d -not -path "./.git/*" 2>/dev/null | head -1) + + if [ -n "$GB_DIR" ] && [ -n "$US_DIR" ]; then + for GB_FILE in "$GB_DIR"/*.ini; do + [ ! -f "$GB_FILE" ] && continue + FNAME=$(basename "$GB_FILE") + US_FILE="$US_DIR/$FNAME" + [ ! -f "$US_FILE" ] && continue + + GB_KEYS=$(grep -oP '^[A-Z_][A-Z0-9_]*(?==)' "$GB_FILE" 2>/dev/null | sort) + US_KEYS=$(grep -oP '^[A-Z_][A-Z0-9_]*(?==)' "$US_FILE" 2>/dev/null | sort) + + # Keys in en-GB but not en-US + MISSING_US=$(comm -23 <(echo "$GB_KEYS") <(echo "$US_KEYS")) + if [ -n "$MISSING_US" ]; then + echo "::warning::Keys in en-GB/$FNAME but missing from en-US/$FNAME:" + echo "$MISSING_US" | while read -r k; do echo " - $k"; done + WARNINGS=$((WARNINGS + 1)) + fi + + # Keys in en-US but not en-GB + MISSING_GB=$(comm -13 <(echo "$GB_KEYS") <(echo "$US_KEYS")) + if [ -n "$MISSING_GB" ]; then + echo "::warning::Keys in en-US/$FNAME but missing from en-GB/$FNAME:" + echo "$MISSING_GB" | while read -r k; do echo " - $k"; done + WARNINGS=$((WARNINGS + 1)) + fi + done + fi + + { + echo "### Language File Validation" + echo "| Metric | Count |" + echo "|---|---|" + echo "| Files checked | $(echo "$INI_FILES" | wc -l) |" + echo "| Errors | ${ERRORS} |" + echo "| Warnings | ${WARNINGS} |" + } >> $GITHUB_STEP_SUMMARY + + if [ "$ERRORS" -gt 0 ]; then + echo "::error::Language validation failed with ${ERRORS} error(s)" + exit 1 + fi + echo "Language files: OK (${WARNINGS} warning(s))" + + - name: Check changelog has unreleased entry + run: | + if [ ! -f "CHANGELOG.md" ]; then + echo "::warning::No CHANGELOG.md found" + exit 0 + fi + # Check for content under [Unreleased] section + if ! grep -q "## \[Unreleased\]" CHANGELOG.md; then + echo "::error::CHANGELOG.md missing [Unreleased] section" + exit 1 + fi + # Check there's at least one entry (Added/Changed/Fixed/Removed) under Unreleased + UNRELEASED_CONTENT=$(sed -n '/## \[Unreleased\]/,/## \[/p' CHANGELOG.md | grep -cE '^\s*-\s' || true) + if [ "$UNRELEASED_CONTENT" -eq 0 ]; then + echo "::error::CHANGELOG.md [Unreleased] section has no entries. Add a changelog entry describing your changes." + echo "## Changelog Check: Failed" >> $GITHUB_STEP_SUMMARY + echo "The \`[Unreleased]\` section in CHANGELOG.md has no entries." >> $GITHUB_STEP_SUMMARY + echo "Add a line like \`- Description of your change\` under a heading (\`### Added\`, \`### Changed\`, \`### Fixed\`, etc.)" >> $GITHUB_STEP_SUMMARY + exit 1 + fi + echo "Changelog: ${UNRELEASED_CONTENT} entry/entries in [Unreleased]" + + - name: Verify package source + run: | + SOURCE_DIR="src" + [ ! -d "$SOURCE_DIR" ] && SOURCE_DIR="htdocs" + if [ ! -d "$SOURCE_DIR" ]; then + echo "::warning::No src/ or htdocs/ directory" + exit 0 + fi + FILE_COUNT=$(find "$SOURCE_DIR" -type f | wc -l) + echo "Source: ${FILE_COUNT} files" + [ "$FILE_COUNT" -gt 0 ] || { echo "::error::Source directory is empty"; exit 1; } + + # ── Pre-Release RC Build ───────────────────────────────────────────────── + pre-release: + name: Build RC Package + runs-on: ubuntu-latest + needs: [branch-policy, validate] + + steps: + - name: Trigger RC pre-release + env: + GA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + REPO: ${{ github.repository }} + BRANCH: ${{ github.head_ref }} + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + run: | + curl -s -X POST "${GITEA_URL}/api/v1/repos/${REPO}/actions/workflows/pre-release.yml/dispatches" -H "Authorization: token ${GITEA_TOKEN}" -H "Content-Type: application/json" -d "{\"ref\":\"${BRANCH}\",\"inputs\":{\"stability\":\"release-candidate\"}}" + echo "### Pre-Release" >> $GITHUB_STEP_SUMMARY + echo "Triggered RC build on branch \`${BRANCH}\`" >> $GITHUB_STEP_SUMMARY + + # ── Issue Reporter ────────────────────────────────────────────────────── + report-issues: + name: Report Issues + runs-on: ubuntu-latest + needs: [branch-policy, validate] + if: >- + always() && + needs.validate.result == 'failure' + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + sparse-checkout: automation/ci-issue-reporter.sh + sparse-checkout-cone-mode: false + + - name: "File issue for PR validation failure" + env: + GITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + run: | + chmod +x automation/ci-issue-reporter.sh + ./automation/ci-issue-reporter.sh \ + --gate "PR Validation" \ + --workflow "PR Check" \ + --severity error \ + --details "PR validation failed (syntax, manifest, changelog, or source checks). See the CI run for the specific check that failed." diff --git a/.mokogitea/workflows/repo-health.yml b/.mokogitea/workflows/repo-health.yml index 154f77d..6a25f5b 100644 --- a/.mokogitea/workflows/repo-health.yml +++ b/.mokogitea/workflows/repo-health.yml @@ -1,712 +1,712 @@ -# ============================================================================ -# Copyright (C) 2025 Moko Consulting -# -# This file is part of a Moko Consulting project. -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# FILE INFORMATION -# DEFGROUP: Gitea.Workflow -# INGROUP: mokocli.Validation -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli -# PATH: /templates/workflows/joomla/repo_health.yml.template -# VERSION: 09.23.00 -# BRIEF: Enforces repository guardrails by validating scripts governance, tooling availability, and core repository health artifacts. -# ============================================================================ - -name: "Generic: Repo Health" - -defaults: - run: - shell: bash - -on: - workflow_dispatch: - inputs: - profile: - description: 'Validation profile: all, scripts, or repo' - required: true - default: all - type: choice - options: - - all - - scripts - - repo - pull_request: - branches: - - main - -permissions: - contents: read - -env: - # Scripts governance policy - SCRIPTS_REQUIRED_DIRS: - SCRIPTS_ALLOWED_DIRS: scripts,scripts/fix,scripts/lib,scripts/release,scripts/run,scripts/validate - - # Repo health policy - REPO_REQUIRED_ARTIFACTS: README.md,LICENSE,CHANGELOG.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,.mokogitea/workflows/ - REPO_OPTIONAL_FILES: SECURITY.md,GOVERNANCE.md,.editorconfig,.gitattributes,.gitignore,README.md,docs/ - REPO_DISALLOWED_DIRS: - REPO_DISALLOWED_FILES: TODO.md,todo.md - - # Extended checks toggles - EXTENDED_CHECKS: "true" - - # File / directory variables - DOCS_INDEX: docs/docs-index.md - SCRIPT_DIR: scripts - WORKFLOWS_DIR: .mokogitea/workflows - SHELLCHECK_PATTERN: '*.sh' - SPDX_FILE_GLOBS: '*.sh,*.php,*.js,*.ts,*.css,*.xml,*.yml,*.yaml' - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - -jobs: - access_check: - name: Access control - runs-on: ubuntu-latest - timeout-minutes: 10 - permissions: - contents: read - - outputs: - allowed: ${{ steps.perm.outputs.allowed }} - permission: ${{ steps.perm.outputs.permission }} - - steps: - - name: Check actor permission (admin only) - id: perm - env: - TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }} - REPO: ${{ github.repository }} - ACTOR: ${{ github.actor }} - run: | - set -euo pipefail - ALLOWED=false - PERMISSION=unknown - METHOD="" - - # Hardcoded authorized users — always allowed - case "$ACTOR" in - jmiller|gitea-actions[bot]) - ALLOWED=true - PERMISSION=admin - METHOD="hardcoded allowlist" - ;; - *) - # Detect platform and check permissions via API - API_BASE="${GITHUB_API_URL:-${GITEA_API_URL:-https://api.github.com}}" - RESP=$(curl -sf -H "Authorization: token ${TOKEN}" \ - "${API_BASE}/repos/${REPO}/collaborators/${ACTOR}/permission" 2>/dev/null || echo '{}') - PERMISSION=$(echo "$RESP" | grep -oP '"permission"\s*:\s*"\K[^"]+' || echo "unknown") - if [ "$PERMISSION" = "admin" ] || [ "$PERMISSION" = "maintain" ] || [ "$PERMISSION" = "owner" ]; then - ALLOWED=true - fi - METHOD="collaborator API" - ;; - esac - - echo "permission=${PERMISSION}" >> "$GITHUB_OUTPUT" - echo "allowed=${ALLOWED}" >> "$GITHUB_OUTPUT" - - { - echo "## Access Authorization" - echo "" - echo "| Field | Value |" - echo "|-------|-------|" - echo "| **Actor** | \`${ACTOR}\` |" - echo "| **Repository** | \`${REPO}\` |" - echo "| **Permission** | \`${PERMISSION}\` |" - echo "| **Method** | ${METHOD} |" - echo "| **Authorized** | ${ALLOWED} |" - echo "" - if [ "$ALLOWED" = "true" ]; then - echo "${ACTOR} authorized (${METHOD})" - else - echo "${ACTOR} is NOT authorized. Requires admin or maintain role." - fi - } >> "${GITHUB_STEP_SUMMARY}" - - - name: Deny execution when not permitted - if: ${{ steps.perm.outputs.allowed != 'true' }} - run: | - set -euo pipefail - printf '%s\n' 'ERROR: Access denied. Admin permission required.' >> "${GITHUB_STEP_SUMMARY}" - exit 1 - - scripts_governance: - name: Scripts governance - needs: access_check - if: ${{ needs.access_check.outputs.allowed == 'true' }} - runs-on: ubuntu-latest - timeout-minutes: 15 - permissions: - contents: read - - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - fetch-depth: 0 - - - name: Scripts folder checks - env: - PROFILE_RAW: ${{ github.event.inputs.profile }} - run: | - set -euo pipefail - - profile="${PROFILE_RAW:-all}" - case "${profile}" in - all|scripts|repo) ;; - *) - printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" - exit 1 - ;; - esac - - if [ "${profile}" = 'repo' ]; then - { - printf '%s\n' '### Scripts governance' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' 'Status: SKIPPED' - printf '%s\n' 'Reason: profile excludes scripts governance' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 0 - fi - - if [ ! -d "${SCRIPT_DIR}" ]; then - { - printf '%s\n' '### Scripts governance' - printf '%s\n' 'Status: OK (advisory)' - printf '%s\n' 'scripts/ directory not present. No scripts governance enforced.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 0 - fi - - if [ -n "${SCRIPTS_REQUIRED_DIRS:-}" ]; then IFS=',' read -r -a required_dirs <<< "${SCRIPTS_REQUIRED_DIRS}"; else required_dirs=(); fi - IFS=',' read -r -a allowed_dirs <<< "${SCRIPTS_ALLOWED_DIRS}" - - missing_dirs=() - unapproved_dirs=() - - for d in "${required_dirs[@]}"; do - req="${d%/}" - [ ! -d "${req}" ] && missing_dirs+=("${req}/") - done - - while IFS= read -r d; do - allowed=false - for a in "${allowed_dirs[@]}"; do - a_norm="${a%/}" - [ "${d%/}" = "${a_norm}" ] && allowed=true - done - [ "${allowed}" = false ] && unapproved_dirs+=("${d%/}/") - done < <(find "${SCRIPT_DIR}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sed 's#^\./##') - - { - printf '%s\n' '### Scripts governance' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' '| Area | Status | Notes |' - printf '%s\n' '|---|---|---|' - - if [ "${#missing_dirs[@]}" -gt 0 ]; then - printf '%s\n' '| Required directories | Warning | Missing required subfolders |' - else - printf '%s\n' '| Required directories | OK | All required subfolders present |' - fi - - if [ "${#unapproved_dirs[@]}" -gt 0 ]; then - printf '%s\n' '| Directory policy | Warning | Unapproved directories detected |' - else - printf '%s\n' '| Directory policy | OK | No unapproved directories |' - fi - - printf '%s\n' '| Enforcement mode | Advisory | scripts folder is optional |' - printf '\n' - - if [ "${#missing_dirs[@]}" -gt 0 ]; then - printf '%s\n' 'Missing required script directories:' - for m in "${missing_dirs[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - else - printf '%s\n' 'Missing required script directories: none.' - printf '\n' - fi - - if [ "${#unapproved_dirs[@]}" -gt 0 ]; then - printf '%s\n' 'Unapproved script directories detected:' - for m in "${unapproved_dirs[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - else - printf '%s\n' 'Unapproved script directories detected: none.' - printf '\n' - fi - - printf '%s\n' 'Scripts governance completed in advisory mode.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - repo_health: - name: Repository health - needs: access_check - if: ${{ needs.access_check.outputs.allowed == 'true' }} - runs-on: ubuntu-latest - timeout-minutes: 20 - permissions: - contents: read - - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - fetch-depth: 0 - - - name: Repository health checks - env: - PROFILE_RAW: ${{ github.event.inputs.profile }} - run: | - set -euo pipefail - - profile="${PROFILE_RAW:-all}" - case "${profile}" in - all|scripts|repo) ;; - *) - printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" - exit 1 - ;; - esac - - if [ "${profile}" = 'scripts' ]; then - { - printf '%s\n' '### Repository health' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' 'Status: SKIPPED' - printf '%s\n' 'Reason: profile excludes repository health' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 0 - fi - - IFS=',' read -r -a required_artifacts <<< "${REPO_REQUIRED_ARTIFACTS}" - IFS=',' read -r -a optional_files <<< "${REPO_OPTIONAL_FILES}" - if [ -n "${REPO_DISALLOWED_DIRS:-}" ]; then IFS=',' read -r -a disallowed_dirs <<< "${REPO_DISALLOWED_DIRS}"; else disallowed_dirs=(); fi - IFS=',' read -r -a disallowed_files <<< "${REPO_DISALLOWED_FILES:-}" - - missing_required=() - missing_optional=() - - # Source directory: src/ or htdocs/ (either is valid for extension repos) - SOURCE_DIR="" - if [ -d "src" ]; then - SOURCE_DIR="src" - elif [ -d "htdocs" ]; then - SOURCE_DIR="htdocs" - elif [ -d "deploy" ] || [ -d "cli" ] || [ -d "monitoring" ]; then - # Platform/tooling repos don't need src/ - SOURCE_DIR="" - else - missing_required+=("src/ or htdocs/ (source directory required)") - fi - - for item in "${required_artifacts[@]}"; do - if printf '%s' "${item}" | grep -q '/$'; then - d="${item%/}" - [ ! -d "${d}" ] && missing_required+=("${item}") - else - [ ! -f "${item}" ] && missing_required+=("${item}") - fi - done - - for f in "${optional_files[@]}"; do - if printf '%s' "${f}" | grep -q '/$'; then - d="${f%/}" - [ ! -d "${d}" ] && missing_optional+=("${f}") - else - [ ! -f "${f}" ] && missing_optional+=("${f}") - fi - done - - for d in "${disallowed_dirs[@]}"; do - d_norm="${d%/}" - [ -d "${d_norm}" ] && missing_required+=("${d_norm}/ (disallowed)") - done - - for f in "${disallowed_files[@]}"; do - [ -f "${f}" ] && missing_required+=("${f} (disallowed)") - done - - git fetch origin --prune - - dev_paths=() - dev_branches=() - - while IFS= read -r b; do - name="${b#origin/}" - if [ "${name}" = 'dev' ]; then - dev_branches+=("${name}") - else - dev_paths+=("${name}") - fi - done < <(git branch -r --list 'origin/dev*' | sed 's/^ *//') - - if [ "${#dev_paths[@]}" -eq 0 ] && [ "${#dev_branches[@]}" -eq 0 ]; then - missing_required+=("dev or dev/* branch") - fi - - content_warnings=() - - if [ -f 'CHANGELOG.md' ] && ! grep -Eq '^# Changelog' CHANGELOG.md; then - content_warnings+=("CHANGELOG.md missing '# Changelog' header") - fi - - if [ -f 'CHANGELOG.md' ] && grep -Eq '^[# ]*Unreleased' CHANGELOG.md; then - content_warnings+=("CHANGELOG.md contains Unreleased section (review release readiness)") - fi - - if [ -f 'LICENSE' ] && ! grep -qiE 'GNU GENERAL PUBLIC LICENSE|GPL' LICENSE; then - content_warnings+=("LICENSE does not look like a GPL text") - fi - - if [ -f 'README.md' ] && ! grep -qiE 'moko|Moko' README.md; then - content_warnings+=("README.md missing expected brand keyword") - fi - - export PROFILE_RAW="${profile}" - export MISSING_REQUIRED="$(printf '%s\n' "${missing_required[@]:-}")" - export MISSING_OPTIONAL="$(printf '%s\n' "${missing_optional[@]:-}")" - export CONTENT_WARNINGS="$(printf '%s\n' "${content_warnings[@]:-}")" - - report_json=$(printf '{"profile":"%s","missing_required":%d,"missing_optional":%d,"content_warnings":%d}' "$profile" "${#missing_required[@]}" "${#missing_optional[@]}" "${#content_warnings[@]}") - - { - printf '%s\n' '### Repository health' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' '| Metric | Value |' - printf '%s\n' '|---|---|' - printf '%s\n' "| Missing required | ${#missing_required[@]} |" - printf '%s\n' "| Missing optional | ${#missing_optional[@]} |" - printf '%s\n' "| Content warnings | ${#content_warnings[@]} |" - printf '\n' - - printf '%s\n' '### Guardrails report (JSON)' - printf '%s\n' '```json' - printf '%s\n' "${report_json}" - printf '%s\n' '```' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - if [ "${#missing_required[@]}" -gt 0 ]; then - { - printf '%s\n' '### Missing required repo artifacts' - for m in "${missing_required[@]}"; do printf '%s\n' "- ${m}"; done - printf '%s\n' 'ERROR: Guardrails failed. Missing required repository artifacts.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 1 - fi - - if [ "${#missing_optional[@]}" -gt 0 ]; then - { - printf '%s\n' '### Missing optional repo artifacts' - for m in "${missing_optional[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - if [ "${#content_warnings[@]}" -gt 0 ]; then - { - printf '%s\n' '### Repo content warnings' - for m in "${content_warnings[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - # -- Joomla-specific checks -- - joomla_findings=() - - MANIFEST="$(find . -maxdepth 2 -name '*.xml' -exec grep -l '/dev/null | head -1 || true)" - if [ -z "${MANIFEST}" ]; then - joomla_findings+=("Joomla XML manifest not found (no *.xml with tag)") - else - if ! grep -qP '' "${MANIFEST}"; then - joomla_findings+=("XML manifest: tag missing") - fi - if ! grep -qP 'type="(component|module|plugin|library|package|template|language)"' "${MANIFEST}"; then - joomla_findings+=("XML manifest: type attribute missing or invalid") - fi - if ! grep -qP '' "${MANIFEST}"; then - joomla_findings+=("XML manifest: tag missing") - fi - if ! grep -qP '' "${MANIFEST}"; then - joomla_findings+=("XML manifest: tag missing") - fi - if ! grep -qP ' missing (required for Joomla 5+)") - fi - fi - - INI_COUNT="$(find . -name '*.ini' -type f 2>/dev/null | wc -l)" - if [ "${INI_COUNT}" -eq 0 ]; then - joomla_findings+=("No .ini language files found") - fi - - if [ ! -f 'updates.xml' ]; then - joomla_findings+=("updates.xml missing in root (required for Joomla update server)") - fi - - if [ -n "${SOURCE_DIR}" ]; then - INDEX_DIRS=("${SOURCE_DIR}" "${SOURCE_DIR}/admin" "${SOURCE_DIR}/site") - for dir in "${INDEX_DIRS[@]}"; do - if [ -d "${dir}" ] && [ ! -f "${dir}/index.html" ]; then - joomla_findings+=("${dir}/index.html missing (directory listing protection)") - fi - done - fi - - if [ "${#joomla_findings[@]}" -gt 0 ]; then - { - printf '%s\n' '### Joomla extension checks' - printf '%s\n' '| Check | Status |' - printf '%s\n' '|---|---|' - for f in "${joomla_findings[@]}"; do - printf '%s\n' "| ${f} | Warning |" - done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - else - { - printf '%s\n' '### Joomla extension checks' - printf '%s\n' 'All Joomla-specific checks passed.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - extended_enabled="${EXTENDED_CHECKS:-true}" - extended_findings=() - - if [ "${extended_enabled}" = 'true' ]; then - if [ -f '.github/CODEOWNERS' ] || [ -f 'CODEOWNERS' ] || [ -f 'docs/CODEOWNERS' ]; then - : - else - extended_findings+=("CODEOWNERS not found (.github/CODEOWNERS preferred)") - fi - - if ls "${WORKFLOWS_DIR}"/*.yml >/dev/null 2>&1 || ls "${WORKFLOWS_DIR}"/*.yaml >/dev/null 2>&1; then - bad_refs="$(grep -RIn --include='*.yml' --include='*.yaml' -E '^[[:space:]]*uses:[[:space:]]*[^#]+@(main|master)\b' "${WORKFLOWS_DIR}" 2>/dev/null || true)" - if [ -n "${bad_refs}" ]; then - extended_findings+=("Workflows reference actions @main/@master (pin versions): see log excerpt") - { - printf '%s\n' '### Workflow pinning advisory' - printf '%s\n' 'Found uses: entries pinned to main/master:' - printf '%s\n' '```' - printf '%s\n' "${bad_refs}" - printf '%s\n' '```' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - fi - - if [ -f "${DOCS_INDEX}" ]; then - missing_links="" - while IFS= read -r docline; do - for link in $(echo "$docline" | grep -oE '\]\([^)]+\)' | sed 's/\](//' | sed 's/)$//' || true); do - case "$link" in http://*|https://*|"#"*|mailto:*) continue ;; esac - linkpath="${link%%#*}" - linkpath="${linkpath%%\?*}" - [ -z "$linkpath" ] && continue - if [ "${linkpath:0:1}" = "/" ]; then - testpath="${linkpath#/}" - else - testpath="$(dirname "${DOCS_INDEX}")/${linkpath}" - fi - [ ! -e "$testpath" ] && missing_links="${missing_links}${testpath} " - done - done < "${DOCS_INDEX}" - if [ -n "${missing_links}" ]; then - extended_findings+=("docs/docs-index.md contains broken relative links") - { - printf '%s\n' '### Docs index link integrity' - printf '%s\n' 'Broken relative links:' - for bl in ${missing_links}; do - printf '%s\n' "- ${bl}" - done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - fi - - if [ -d "${SCRIPT_DIR}" ]; then - if ! command -v shellcheck >/dev/null 2>&1; then - sudo apt-get update -qq - sudo apt-get install -y shellcheck >/dev/null - fi - - sc_out='' - while IFS= read -r shf; do - [ -z "${shf}" ] && continue - out_one="$(shellcheck -S warning -x "${shf}" 2>/dev/null || true)" - if [ -n "${out_one}" ]; then - sc_out="${sc_out}${out_one}\n" - fi - done < <(find "${SCRIPT_DIR}" -type f -name "${SHELLCHECK_PATTERN}" 2>/dev/null | sort) - - if [ -n "${sc_out}" ]; then - extended_findings+=("ShellCheck warnings detected (advisory)") - sc_head="$(printf '%s' "${sc_out}" | head -n 200)" - { - printf '%s\n' '### ShellCheck (advisory)' - printf '%s\n' '```' - printf '%s\n' "${sc_head}" - printf '%s\n' '```' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - fi - - spdx_missing=() - IFS=',' read -r -a spdx_globs <<< "${SPDX_FILE_GLOBS}" - spdx_args=() - for g in "${spdx_globs[@]}"; do spdx_args+=("${g}"); done - - while IFS= read -r f; do - [ -z "${f}" ] && continue - if ! head -n 40 "${f}" | grep -q 'SPDX-License-Identifier:'; then - spdx_missing+=("${f}") - fi - done < <(git ls-files "${spdx_args[@]}" 2>/dev/null || true) - - if [ "${#spdx_missing[@]}" -gt 0 ]; then - extended_findings+=("SPDX header missing in some tracked files (advisory)") - { - printf '%s\n' '### SPDX header advisory' - printf '%s\n' 'Files missing SPDX-License-Identifier (first 40 lines scan):' - for f in "${spdx_missing[@]}"; do printf '%s\n' "- ${f}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - stale_cutoff_days=180 - stale_branches="$(git for-each-ref --format='%(refname:short) %(committerdate:unix)' refs/remotes/origin 2>/dev/null | awk -v now="$(date +%s)" -v days="${stale_cutoff_days}" '{if (now-$2 > days*86400) print $1}' | head -50)" - if [ -n "${stale_branches}" ]; then - extended_findings+=("Stale remote branches detected (advisory)") - { - printf '%s\n' '### Git hygiene advisory' - printf '%s\n' "Branches with last commit older than ${stale_cutoff_days} days (sample up to 50):" - while IFS= read -r b; do [ -n "${b}" ] && printf '%s\n' "- ${b}"; done <<< "${stale_branches}" - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - fi - - { - printf '%s\n' '### Guardrails coverage matrix' - printf '%s\n' '| Domain | Status | Notes |' - printf '%s\n' '|---|---|---|' - printf '%s\n' '| Access control | OK | Admin-only execution gate |' - printf '%s\n' '| Release policy | N/A | Releases handled by MokoGitea |' - printf '%s\n' '| Scripts governance | OK | Directory policy and advisory reporting |' - printf '%s\n' '| Repo required artifacts | OK | Required, optional, disallowed enforcement |' - printf '%s\n' '| Repo content heuristics | OK | Brand, license, changelog structure |' - if [ "${extended_enabled}" = 'true' ]; then - if [ "${#extended_findings[@]}" -gt 0 ]; then - printf '%s\n' '| Extended checks | Warning | See extended findings below |' - else - printf '%s\n' '| Extended checks | OK | No findings |' - fi - else - printf '%s\n' '| Extended checks | SKIPPED | EXTENDED_CHECKS disabled |' - fi - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - if [ "${extended_enabled}" = 'true' ] && [ "${#extended_findings[@]}" -gt 0 ]; then - { - printf '%s\n' '### Extended findings (advisory)' - for f in "${extended_findings[@]}"; do printf '%s\n' "- ${f}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - printf '%s\n' 'Repository health guardrails passed.' >> "${GITHUB_STEP_SUMMARY}" - - - site-health: - name: Site Health - runs-on: ubuntu-latest - if: github.event_name == 'workflow_dispatch' - steps: - - uses: actions/checkout@v4 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.3' - - - name: Uptime check - if: env.URLS != '' - run: | - echo "$URLS" > /tmp/urls.txt - php monitoring/uptime-probe.php --urls /tmp/urls.txt --timeout 15 || echo "::warning::Some sites are down" - rm -f /tmp/urls.txt - env: - URLS: ${{ vars.MONITORED_URLS }} - - - name: SSL certificate check - if: env.DOMAINS != '' - run: | - echo "$DOMAINS" > /tmp/domains.txt - php monitoring/ssl-check.php --domains /tmp/domains.txt --warn-days 30 || echo "::warning::SSL certificates expiring soon" - rm -f /tmp/domains.txt - env: - DOMAINS: ${{ vars.MONITORED_DOMAINS }} - - - name: Summary - if: always() - run: | - echo "### Site Health" >> $GITHUB_STEP_SUMMARY - echo "Uptime and SSL checks completed." >> $GITHUB_STEP_SUMMARY - - # ═══════════════════════════════════════════════════════════════════════ - # Issue Reporter — file issues for failed gates - # ═══════════════════════════════════════════════════════════════════════ - report-issues: - name: "Report Issues" - runs-on: ubuntu-latest - needs: [access_check, scripts_governance, repo_health] - if: >- - always() && - (needs.scripts_governance.result == 'failure' || - needs.repo_health.result == 'failure') - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - sparse-checkout: automation/ci-issue-reporter.sh - sparse-checkout-cone-mode: false - - - name: "File issues for failed gates" - env: - GITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} - GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} - run: | - chmod +x automation/ci-issue-reporter.sh - REPORTER="./automation/ci-issue-reporter.sh" - WF="Repo Health" - - report_gate() { - local gate="$1" result="$2" details="$3" - if [ "$result" = "failure" ]; then - "$REPORTER" --gate "$gate" --details "$details" --workflow "$WF" --severity error - fi - } - - report_gate "Scripts Governance" \ - "${{ needs.scripts_governance.result }}" \ - "Scripts directory policy violations detected. Review required and allowed directories." - - report_gate "Repository Health" \ - "${{ needs.repo_health.result }}" \ - "Repository health checks failed — missing required artifacts, disallowed files, or content warnings. Check the CI run summary." +# ============================================================================ +# Copyright (C) 2025 Moko Consulting +# +# This file is part of a Moko Consulting project. +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# FILE INFORMATION +# DEFGROUP: Gitea.Workflow +# INGROUP: mokocli.Validation +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli +# PATH: /templates/workflows/joomla/repo_health.yml.template +# VERSION: 09.23.00 +# BRIEF: Enforces repository guardrails by validating scripts governance, tooling availability, and core repository health artifacts. +# ============================================================================ + +name: "Generic: Repo Health" + +defaults: + run: + shell: bash + +on: + workflow_dispatch: + inputs: + profile: + description: 'Validation profile: all, scripts, or repo' + required: true + default: all + type: choice + options: + - all + - scripts + - repo + pull_request: + branches: + - main + +permissions: + contents: read + +env: + # Scripts governance policy + SCRIPTS_REQUIRED_DIRS: + SCRIPTS_ALLOWED_DIRS: scripts,scripts/fix,scripts/lib,scripts/release,scripts/run,scripts/validate + + # Repo health policy + REPO_REQUIRED_ARTIFACTS: README.md,LICENSE,CHANGELOG.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,.mokogitea/workflows/ + REPO_OPTIONAL_FILES: SECURITY.md,GOVERNANCE.md,.editorconfig,.gitattributes,.gitignore,README.md,docs/ + REPO_DISALLOWED_DIRS: + REPO_DISALLOWED_FILES: TODO.md,todo.md + + # Extended checks toggles + EXTENDED_CHECKS: "true" + + # File / directory variables + DOCS_INDEX: docs/docs-index.md + SCRIPT_DIR: scripts + WORKFLOWS_DIR: .mokogitea/workflows + SHELLCHECK_PATTERN: '*.sh' + SPDX_FILE_GLOBS: '*.sh,*.php,*.js,*.ts,*.css,*.xml,*.yml,*.yaml' + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +jobs: + access_check: + name: Access control + runs-on: ubuntu-latest + timeout-minutes: 10 + permissions: + contents: read + + outputs: + allowed: ${{ steps.perm.outputs.allowed }} + permission: ${{ steps.perm.outputs.permission }} + + steps: + - name: Check actor permission (admin only) + id: perm + env: + TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }} + REPO: ${{ github.repository }} + ACTOR: ${{ github.actor }} + run: | + set -euo pipefail + ALLOWED=false + PERMISSION=unknown + METHOD="" + + # Hardcoded authorized users — always allowed + case "$ACTOR" in + jmiller|gitea-actions[bot]) + ALLOWED=true + PERMISSION=admin + METHOD="hardcoded allowlist" + ;; + *) + # Detect platform and check permissions via API + API_BASE="${GITHUB_API_URL:-${GITEA_API_URL:-https://api.github.com}}" + RESP=$(curl -sf -H "Authorization: token ${TOKEN}" \ + "${API_BASE}/repos/${REPO}/collaborators/${ACTOR}/permission" 2>/dev/null || echo '{}') + PERMISSION=$(echo "$RESP" | grep -oP '"permission"\s*:\s*"\K[^"]+' || echo "unknown") + if [ "$PERMISSION" = "admin" ] || [ "$PERMISSION" = "maintain" ] || [ "$PERMISSION" = "owner" ]; then + ALLOWED=true + fi + METHOD="collaborator API" + ;; + esac + + echo "permission=${PERMISSION}" >> "$GITHUB_OUTPUT" + echo "allowed=${ALLOWED}" >> "$GITHUB_OUTPUT" + + { + echo "## Access Authorization" + echo "" + echo "| Field | Value |" + echo "|-------|-------|" + echo "| **Actor** | \`${ACTOR}\` |" + echo "| **Repository** | \`${REPO}\` |" + echo "| **Permission** | \`${PERMISSION}\` |" + echo "| **Method** | ${METHOD} |" + echo "| **Authorized** | ${ALLOWED} |" + echo "" + if [ "$ALLOWED" = "true" ]; then + echo "${ACTOR} authorized (${METHOD})" + else + echo "${ACTOR} is NOT authorized. Requires admin or maintain role." + fi + } >> "${GITHUB_STEP_SUMMARY}" + + - name: Deny execution when not permitted + if: ${{ steps.perm.outputs.allowed != 'true' }} + run: | + set -euo pipefail + printf '%s\n' 'ERROR: Access denied. Admin permission required.' >> "${GITHUB_STEP_SUMMARY}" + exit 1 + + scripts_governance: + name: Scripts governance + needs: access_check + if: ${{ needs.access_check.outputs.allowed == 'true' }} + runs-on: ubuntu-latest + timeout-minutes: 15 + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 0 + + - name: Scripts folder checks + env: + PROFILE_RAW: ${{ github.event.inputs.profile }} + run: | + set -euo pipefail + + profile="${PROFILE_RAW:-all}" + case "${profile}" in + all|scripts|repo) ;; + *) + printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" + exit 1 + ;; + esac + + if [ "${profile}" = 'repo' ]; then + { + printf '%s\n' '### Scripts governance' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' 'Status: SKIPPED' + printf '%s\n' 'Reason: profile excludes scripts governance' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 0 + fi + + if [ ! -d "${SCRIPT_DIR}" ]; then + { + printf '%s\n' '### Scripts governance' + printf '%s\n' 'Status: OK (advisory)' + printf '%s\n' 'scripts/ directory not present. No scripts governance enforced.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 0 + fi + + if [ -n "${SCRIPTS_REQUIRED_DIRS:-}" ]; then IFS=',' read -r -a required_dirs <<< "${SCRIPTS_REQUIRED_DIRS}"; else required_dirs=(); fi + IFS=',' read -r -a allowed_dirs <<< "${SCRIPTS_ALLOWED_DIRS}" + + missing_dirs=() + unapproved_dirs=() + + for d in "${required_dirs[@]}"; do + req="${d%/}" + [ ! -d "${req}" ] && missing_dirs+=("${req}/") + done + + while IFS= read -r d; do + allowed=false + for a in "${allowed_dirs[@]}"; do + a_norm="${a%/}" + [ "${d%/}" = "${a_norm}" ] && allowed=true + done + [ "${allowed}" = false ] && unapproved_dirs+=("${d%/}/") + done < <(find "${SCRIPT_DIR}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sed 's#^\./##') + + { + printf '%s\n' '### Scripts governance' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' '| Area | Status | Notes |' + printf '%s\n' '|---|---|---|' + + if [ "${#missing_dirs[@]}" -gt 0 ]; then + printf '%s\n' '| Required directories | Warning | Missing required subfolders |' + else + printf '%s\n' '| Required directories | OK | All required subfolders present |' + fi + + if [ "${#unapproved_dirs[@]}" -gt 0 ]; then + printf '%s\n' '| Directory policy | Warning | Unapproved directories detected |' + else + printf '%s\n' '| Directory policy | OK | No unapproved directories |' + fi + + printf '%s\n' '| Enforcement mode | Advisory | scripts folder is optional |' + printf '\n' + + if [ "${#missing_dirs[@]}" -gt 0 ]; then + printf '%s\n' 'Missing required script directories:' + for m in "${missing_dirs[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + else + printf '%s\n' 'Missing required script directories: none.' + printf '\n' + fi + + if [ "${#unapproved_dirs[@]}" -gt 0 ]; then + printf '%s\n' 'Unapproved script directories detected:' + for m in "${unapproved_dirs[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + else + printf '%s\n' 'Unapproved script directories detected: none.' + printf '\n' + fi + + printf '%s\n' 'Scripts governance completed in advisory mode.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + + repo_health: + name: Repository health + needs: access_check + if: ${{ needs.access_check.outputs.allowed == 'true' }} + runs-on: ubuntu-latest + timeout-minutes: 20 + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 0 + + - name: Repository health checks + env: + PROFILE_RAW: ${{ github.event.inputs.profile }} + run: | + set -euo pipefail + + profile="${PROFILE_RAW:-all}" + case "${profile}" in + all|scripts|repo) ;; + *) + printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" + exit 1 + ;; + esac + + if [ "${profile}" = 'scripts' ]; then + { + printf '%s\n' '### Repository health' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' 'Status: SKIPPED' + printf '%s\n' 'Reason: profile excludes repository health' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 0 + fi + + IFS=',' read -r -a required_artifacts <<< "${REPO_REQUIRED_ARTIFACTS}" + IFS=',' read -r -a optional_files <<< "${REPO_OPTIONAL_FILES}" + if [ -n "${REPO_DISALLOWED_DIRS:-}" ]; then IFS=',' read -r -a disallowed_dirs <<< "${REPO_DISALLOWED_DIRS}"; else disallowed_dirs=(); fi + IFS=',' read -r -a disallowed_files <<< "${REPO_DISALLOWED_FILES:-}" + + missing_required=() + missing_optional=() + + # Source directory: src/ or htdocs/ (either is valid for extension repos) + SOURCE_DIR="" + if [ -d "src" ]; then + SOURCE_DIR="src" + elif [ -d "htdocs" ]; then + SOURCE_DIR="htdocs" + elif [ -d "deploy" ] || [ -d "cli" ] || [ -d "monitoring" ]; then + # Platform/tooling repos don't need src/ + SOURCE_DIR="" + else + missing_required+=("src/ or htdocs/ (source directory required)") + fi + + for item in "${required_artifacts[@]}"; do + if printf '%s' "${item}" | grep -q '/$'; then + d="${item%/}" + [ ! -d "${d}" ] && missing_required+=("${item}") + else + [ ! -f "${item}" ] && missing_required+=("${item}") + fi + done + + for f in "${optional_files[@]}"; do + if printf '%s' "${f}" | grep -q '/$'; then + d="${f%/}" + [ ! -d "${d}" ] && missing_optional+=("${f}") + else + [ ! -f "${f}" ] && missing_optional+=("${f}") + fi + done + + for d in "${disallowed_dirs[@]}"; do + d_norm="${d%/}" + [ -d "${d_norm}" ] && missing_required+=("${d_norm}/ (disallowed)") + done + + for f in "${disallowed_files[@]}"; do + [ -f "${f}" ] && missing_required+=("${f} (disallowed)") + done + + git fetch origin --prune + + dev_paths=() + dev_branches=() + + while IFS= read -r b; do + name="${b#origin/}" + if [ "${name}" = 'dev' ]; then + dev_branches+=("${name}") + else + dev_paths+=("${name}") + fi + done < <(git branch -r --list 'origin/dev*' | sed 's/^ *//') + + if [ "${#dev_paths[@]}" -eq 0 ] && [ "${#dev_branches[@]}" -eq 0 ]; then + missing_required+=("dev or dev/* branch") + fi + + content_warnings=() + + if [ -f 'CHANGELOG.md' ] && ! grep -Eq '^# Changelog' CHANGELOG.md; then + content_warnings+=("CHANGELOG.md missing '# Changelog' header") + fi + + if [ -f 'CHANGELOG.md' ] && grep -Eq '^[# ]*Unreleased' CHANGELOG.md; then + content_warnings+=("CHANGELOG.md contains Unreleased section (review release readiness)") + fi + + if [ -f 'LICENSE' ] && ! grep -qiE 'GNU GENERAL PUBLIC LICENSE|GPL' LICENSE; then + content_warnings+=("LICENSE does not look like a GPL text") + fi + + if [ -f 'README.md' ] && ! grep -qiE 'moko|Moko' README.md; then + content_warnings+=("README.md missing expected brand keyword") + fi + + export PROFILE_RAW="${profile}" + export MISSING_REQUIRED="$(printf '%s\n' "${missing_required[@]:-}")" + export MISSING_OPTIONAL="$(printf '%s\n' "${missing_optional[@]:-}")" + export CONTENT_WARNINGS="$(printf '%s\n' "${content_warnings[@]:-}")" + + report_json=$(printf '{"profile":"%s","missing_required":%d,"missing_optional":%d,"content_warnings":%d}' "$profile" "${#missing_required[@]}" "${#missing_optional[@]}" "${#content_warnings[@]}") + + { + printf '%s\n' '### Repository health' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' '| Metric | Value |' + printf '%s\n' '|---|---|' + printf '%s\n' "| Missing required | ${#missing_required[@]} |" + printf '%s\n' "| Missing optional | ${#missing_optional[@]} |" + printf '%s\n' "| Content warnings | ${#content_warnings[@]} |" + printf '\n' + + printf '%s\n' '### Guardrails report (JSON)' + printf '%s\n' '```json' + printf '%s\n' "${report_json}" + printf '%s\n' '```' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + + if [ "${#missing_required[@]}" -gt 0 ]; then + { + printf '%s\n' '### Missing required repo artifacts' + for m in "${missing_required[@]}"; do printf '%s\n' "- ${m}"; done + printf '%s\n' 'ERROR: Guardrails failed. Missing required repository artifacts.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 1 + fi + + if [ "${#missing_optional[@]}" -gt 0 ]; then + { + printf '%s\n' '### Missing optional repo artifacts' + for m in "${missing_optional[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + if [ "${#content_warnings[@]}" -gt 0 ]; then + { + printf '%s\n' '### Repo content warnings' + for m in "${content_warnings[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + # -- Joomla-specific checks -- + joomla_findings=() + + MANIFEST="$(find . -maxdepth 2 -name '*.xml' -exec grep -l '/dev/null | head -1 || true)" + if [ -z "${MANIFEST}" ]; then + joomla_findings+=("Joomla XML manifest not found (no *.xml with tag)") + else + if ! grep -qP '' "${MANIFEST}"; then + joomla_findings+=("XML manifest: tag missing") + fi + if ! grep -qP 'type="(component|module|plugin|library|package|template|language)"' "${MANIFEST}"; then + joomla_findings+=("XML manifest: type attribute missing or invalid") + fi + if ! grep -qP '' "${MANIFEST}"; then + joomla_findings+=("XML manifest: tag missing") + fi + if ! grep -qP '' "${MANIFEST}"; then + joomla_findings+=("XML manifest: tag missing") + fi + if ! grep -qP ' missing (required for Joomla 5+)") + fi + fi + + INI_COUNT="$(find . -name '*.ini' -type f 2>/dev/null | wc -l)" + if [ "${INI_COUNT}" -eq 0 ]; then + joomla_findings+=("No .ini language files found") + fi + + if [ ! -f 'updates.xml' ]; then + joomla_findings+=("updates.xml missing in root (required for Joomla update server)") + fi + + if [ -n "${SOURCE_DIR}" ]; then + INDEX_DIRS=("${SOURCE_DIR}" "${SOURCE_DIR}/admin" "${SOURCE_DIR}/site") + for dir in "${INDEX_DIRS[@]}"; do + if [ -d "${dir}" ] && [ ! -f "${dir}/index.html" ]; then + joomla_findings+=("${dir}/index.html missing (directory listing protection)") + fi + done + fi + + if [ "${#joomla_findings[@]}" -gt 0 ]; then + { + printf '%s\n' '### Joomla extension checks' + printf '%s\n' '| Check | Status |' + printf '%s\n' '|---|---|' + for f in "${joomla_findings[@]}"; do + printf '%s\n' "| ${f} | Warning |" + done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + else + { + printf '%s\n' '### Joomla extension checks' + printf '%s\n' 'All Joomla-specific checks passed.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + extended_enabled="${EXTENDED_CHECKS:-true}" + extended_findings=() + + if [ "${extended_enabled}" = 'true' ]; then + if [ -f '.github/CODEOWNERS' ] || [ -f 'CODEOWNERS' ] || [ -f 'docs/CODEOWNERS' ]; then + : + else + extended_findings+=("CODEOWNERS not found (.github/CODEOWNERS preferred)") + fi + + if ls "${WORKFLOWS_DIR}"/*.yml >/dev/null 2>&1 || ls "${WORKFLOWS_DIR}"/*.yaml >/dev/null 2>&1; then + bad_refs="$(grep -RIn --include='*.yml' --include='*.yaml' -E '^[[:space:]]*uses:[[:space:]]*[^#]+@(main|master)\b' "${WORKFLOWS_DIR}" 2>/dev/null || true)" + if [ -n "${bad_refs}" ]; then + extended_findings+=("Workflows reference actions @main/@master (pin versions): see log excerpt") + { + printf '%s\n' '### Workflow pinning advisory' + printf '%s\n' 'Found uses: entries pinned to main/master:' + printf '%s\n' '```' + printf '%s\n' "${bad_refs}" + printf '%s\n' '```' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + fi + + if [ -f "${DOCS_INDEX}" ]; then + missing_links="" + while IFS= read -r docline; do + for link in $(echo "$docline" | grep -oE '\]\([^)]+\)' | sed 's/\](//' | sed 's/)$//' || true); do + case "$link" in http://*|https://*|"#"*|mailto:*) continue ;; esac + linkpath="${link%%#*}" + linkpath="${linkpath%%\?*}" + [ -z "$linkpath" ] && continue + if [ "${linkpath:0:1}" = "/" ]; then + testpath="${linkpath#/}" + else + testpath="$(dirname "${DOCS_INDEX}")/${linkpath}" + fi + [ ! -e "$testpath" ] && missing_links="${missing_links}${testpath} " + done + done < "${DOCS_INDEX}" + if [ -n "${missing_links}" ]; then + extended_findings+=("docs/docs-index.md contains broken relative links") + { + printf '%s\n' '### Docs index link integrity' + printf '%s\n' 'Broken relative links:' + for bl in ${missing_links}; do + printf '%s\n' "- ${bl}" + done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + fi + + if [ -d "${SCRIPT_DIR}" ]; then + if ! command -v shellcheck >/dev/null 2>&1; then + sudo apt-get update -qq + sudo apt-get install -y shellcheck >/dev/null + fi + + sc_out='' + while IFS= read -r shf; do + [ -z "${shf}" ] && continue + out_one="$(shellcheck -S warning -x "${shf}" 2>/dev/null || true)" + if [ -n "${out_one}" ]; then + sc_out="${sc_out}${out_one}\n" + fi + done < <(find "${SCRIPT_DIR}" -type f -name "${SHELLCHECK_PATTERN}" 2>/dev/null | sort) + + if [ -n "${sc_out}" ]; then + extended_findings+=("ShellCheck warnings detected (advisory)") + sc_head="$(printf '%s' "${sc_out}" | head -n 200)" + { + printf '%s\n' '### ShellCheck (advisory)' + printf '%s\n' '```' + printf '%s\n' "${sc_head}" + printf '%s\n' '```' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + fi + + spdx_missing=() + IFS=',' read -r -a spdx_globs <<< "${SPDX_FILE_GLOBS}" + spdx_args=() + for g in "${spdx_globs[@]}"; do spdx_args+=("${g}"); done + + while IFS= read -r f; do + [ -z "${f}" ] && continue + if ! head -n 40 "${f}" | grep -q 'SPDX-License-Identifier:'; then + spdx_missing+=("${f}") + fi + done < <(git ls-files "${spdx_args[@]}" 2>/dev/null || true) + + if [ "${#spdx_missing[@]}" -gt 0 ]; then + extended_findings+=("SPDX header missing in some tracked files (advisory)") + { + printf '%s\n' '### SPDX header advisory' + printf '%s\n' 'Files missing SPDX-License-Identifier (first 40 lines scan):' + for f in "${spdx_missing[@]}"; do printf '%s\n' "- ${f}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + stale_cutoff_days=180 + stale_branches="$(git for-each-ref --format='%(refname:short) %(committerdate:unix)' refs/remotes/origin 2>/dev/null | awk -v now="$(date +%s)" -v days="${stale_cutoff_days}" '{if (now-$2 > days*86400) print $1}' | head -50)" + if [ -n "${stale_branches}" ]; then + extended_findings+=("Stale remote branches detected (advisory)") + { + printf '%s\n' '### Git hygiene advisory' + printf '%s\n' "Branches with last commit older than ${stale_cutoff_days} days (sample up to 50):" + while IFS= read -r b; do [ -n "${b}" ] && printf '%s\n' "- ${b}"; done <<< "${stale_branches}" + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + fi + + { + printf '%s\n' '### Guardrails coverage matrix' + printf '%s\n' '| Domain | Status | Notes |' + printf '%s\n' '|---|---|---|' + printf '%s\n' '| Access control | OK | Admin-only execution gate |' + printf '%s\n' '| Release policy | N/A | Releases handled by MokoGitea |' + printf '%s\n' '| Scripts governance | OK | Directory policy and advisory reporting |' + printf '%s\n' '| Repo required artifacts | OK | Required, optional, disallowed enforcement |' + printf '%s\n' '| Repo content heuristics | OK | Brand, license, changelog structure |' + if [ "${extended_enabled}" = 'true' ]; then + if [ "${#extended_findings[@]}" -gt 0 ]; then + printf '%s\n' '| Extended checks | Warning | See extended findings below |' + else + printf '%s\n' '| Extended checks | OK | No findings |' + fi + else + printf '%s\n' '| Extended checks | SKIPPED | EXTENDED_CHECKS disabled |' + fi + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + + if [ "${extended_enabled}" = 'true' ] && [ "${#extended_findings[@]}" -gt 0 ]; then + { + printf '%s\n' '### Extended findings (advisory)' + for f in "${extended_findings[@]}"; do printf '%s\n' "- ${f}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + printf '%s\n' 'Repository health guardrails passed.' >> "${GITHUB_STEP_SUMMARY}" + + + site-health: + name: Site Health + runs-on: ubuntu-latest + if: github.event_name == 'workflow_dispatch' + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + + - name: Uptime check + if: env.URLS != '' + run: | + echo "$URLS" > /tmp/urls.txt + php monitoring/uptime-probe.php --urls /tmp/urls.txt --timeout 15 || echo "::warning::Some sites are down" + rm -f /tmp/urls.txt + env: + URLS: ${{ vars.MONITORED_URLS }} + + - name: SSL certificate check + if: env.DOMAINS != '' + run: | + echo "$DOMAINS" > /tmp/domains.txt + php monitoring/ssl-check.php --domains /tmp/domains.txt --warn-days 30 || echo "::warning::SSL certificates expiring soon" + rm -f /tmp/domains.txt + env: + DOMAINS: ${{ vars.MONITORED_DOMAINS }} + + - name: Summary + if: always() + run: | + echo "### Site Health" >> $GITHUB_STEP_SUMMARY + echo "Uptime and SSL checks completed." >> $GITHUB_STEP_SUMMARY + + # ═══════════════════════════════════════════════════════════════════════ + # Issue Reporter — file issues for failed gates + # ═══════════════════════════════════════════════════════════════════════ + report-issues: + name: "Report Issues" + runs-on: ubuntu-latest + needs: [access_check, scripts_governance, repo_health] + if: >- + always() && + (needs.scripts_governance.result == 'failure' || + needs.repo_health.result == 'failure') + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + sparse-checkout: automation/ci-issue-reporter.sh + sparse-checkout-cone-mode: false + + - name: "File issues for failed gates" + env: + GITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + run: | + chmod +x automation/ci-issue-reporter.sh + REPORTER="./automation/ci-issue-reporter.sh" + WF="Repo Health" + + report_gate() { + local gate="$1" result="$2" details="$3" + if [ "$result" = "failure" ]; then + "$REPORTER" --gate "$gate" --details "$details" --workflow "$WF" --severity error + fi + } + + report_gate "Scripts Governance" \ + "${{ needs.scripts_governance.result }}" \ + "Scripts directory policy violations detected. Review required and allowed directories." + + report_gate "Repository Health" \ + "${{ needs.repo_health.result }}" \ + "Repository health checks failed — missing required artifacts, disallowed files, or content warnings. Check the CI run summary." diff --git a/.mokogitea/workflows/security-audit.yml b/.mokogitea/workflows/security-audit.yml index 789325a..5b3cd92 100644 --- a/.mokogitea/workflows/security-audit.yml +++ b/.mokogitea/workflows/security-audit.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: MokoStandards.Security -# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards +# INGROUP: MokoCli.Security +# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli # PATH: /.gitea/workflows/security-audit.yml # VERSION: 01.00.00 # BRIEF: Dependency vulnerability scanning for composer and npm packages diff --git a/.script-registry.json b/.script-registry.json index 4bb8034..7dad2a8 100644 --- a/.script-registry.json +++ b/.script-registry.json @@ -1,7 +1,7 @@ { "metadata": { "generated_at": "2026-03-10T19:51:42.238134Z", - "repository": "MokoConsulting/mokoplatform", + "repository": "MokoConsulting/mokocli", "version": "1.0.0" }, "scripts": [ diff --git a/PLUGIN_SCRIPTS.md b/PLUGIN_SCRIPTS.md index 758459b..73c23aa 100644 --- a/PLUGIN_SCRIPTS.md +++ b/PLUGIN_SCRIPTS.md @@ -4,14 +4,14 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /PLUGIN_SCRIPTS.md BRIEF: Plugin system CLI documentation --> # Plugin System CLI Scripts -Command-line scripts for validating, health checking, and managing projects using the mokoplatform plugin system. +Command-line scripts for validating, health checking, and managing projects using the mokocli plugin system. ## Available Scripts diff --git a/README.md b/README.md index b8d72c5..e90b57f 100644 --- a/README.md +++ b/README.md @@ -4,17 +4,17 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /README.md VERSION: 09.37.00 BRIEF: Project overview and documentation --> -# mokoplatform Enterprise API +# mokocli Enterprise API ![Version](https://img.shields.io/badge/version-09.01.00-blue) ![PHP](https://img.shields.io/badge/PHP-8.1%2B-777BB4) ![License](https://img.shields.io/badge/license-GPL--3.0--or--later-green) -PHP implementation of mokoplatform — enterprise standards, automation framework, workflow templates, and bulk sync tooling. +PHP implementation of mokocli — enterprise standards, automation framework, workflow templates, and bulk sync tooling. > **Primary platform**: [Gitea — git.mokoconsulting.tech](https://git.mokoconsulting.tech/MokoConsulting/MokoCli-API) > **Backup mirror**: [GitHub](https://github.com/MokoConsulting/MokoCli-API) *(read-only mirror)* diff --git a/analysis/index.md b/analysis/index.md index 9b2fe1d..c786b1a 100644 --- a/analysis/index.md +++ b/analysis/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Analysis -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /analysis/index.md BRIEF: Analysis directory index --> diff --git a/automation/bulk_joomla_template.php b/automation/bulk_joomla_template.php index 734fa64..496eabd 100644 --- a/automation/bulk_joomla_template.php +++ b/automation/bulk_joomla_template.php @@ -11,7 +11,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Automation * INGROUP: MokoPlatform.Scripts - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/bulk_joomla_template.php * BRIEF: Bulk scaffold and sync Joomla template repositories * @@ -42,7 +42,7 @@ use MokoCli\{ * * Provides three operations for Joomla template projects: * --scaffold: Create a new template repository with the full directory structure - * --sync: Push mokoplatform files to existing template repositories + * --sync: Push mokocli files to existing template repositories * --list: List all repositories tagged as joomla-template * * Works with both GitHub and Gitea via the PlatformAdapterFactory. @@ -318,7 +318,7 @@ class BulkJoomlaTemplate extends CliFramework $name, $path, $content, - "chore: update {$path} from mokoplatform", + "chore: update {$path} from mokocli", $existingSha, $branch ); diff --git a/automation/bulk_sync.php b/automation/bulk_sync.php index 4e9a396..efcedd3 100755 --- a/automation/bulk_sync.php +++ b/automation/bulk_sync.php @@ -11,7 +11,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Automation * INGROUP: MokoPlatform.Scripts - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/bulk_sync.php * BRIEF: Enterprise-grade bulk repository synchronization */ @@ -42,7 +42,7 @@ use MokoCli\{ /** * Bulk Repository Synchronization Tool * - * Synchronizes mokoplatform files across multiple repositories using + * Synchronizes mokocli files across multiple repositories using * the Enterprise library for robust, audited operations. */ class BulkSync extends CliFramework @@ -95,7 +95,7 @@ class BulkSync extends CliFramework */ protected function run(): int { - $this->log("🚀 mokoplatform Bulk Synchronization v" . self::VERSION, 'INFO'); + $this->log("🚀 mokocli Bulk Synchronization v" . self::VERSION, 'INFO'); // Initialize enterprise components if (!$this->initializeComponents()) { @@ -180,7 +180,7 @@ class BulkSync extends CliFramework $results['health'] = $this->runHealthChecksAll($org, $repositories); } - // Create/update tracking issue in mokoplatform + // Create/update tracking issue in mokocli $this->createSyncIssue($org, $results); // Create/update a failure issue when any repos failed @@ -244,7 +244,7 @@ class BulkSync extends CliFramework * Filter repositories based on include/exclude lists */ /** Repositories that are permanently excluded from bulk sync. */ - private const ALWAYS_EXCLUDE = ['mokoplatform', '.github-private']; + private const ALWAYS_EXCLUDE = ['mokocli', '.github-private']; private function filterRepositories(array $repositories, array $include, array $exclude): array { @@ -426,7 +426,7 @@ class BulkSync extends CliFramework $this->log("", 'ERROR'); $this->log("Required Implementation:", 'ERROR'); $this->log(" 1. Clone/fetch target repository", 'ERROR'); - $this->log(" 2. Apply file updates based on mokoplatform configuration", 'ERROR'); + $this->log(" 2. Apply file updates based on mokocli configuration", 'ERROR'); $this->log(" 3. Create pull request with changes", 'ERROR'); $this->log(" 4. Handle merge conflicts and validation", 'ERROR'); $this->log("", 'ERROR'); @@ -837,7 +837,7 @@ class BulkSync extends CliFramework } /** - * Ensure all standard mokoplatform labels exist on a target repository. + * Ensure all standard mokocli labels exist on a target repository. * * Fetches existing labels first (GET) and only POSTs the ones that are * missing. This avoids the 422 "already exists" responses that would @@ -872,7 +872,7 @@ class BulkSync extends CliFramework // Workflow / Process ['automation', '8B4513', 'Automated processes or scripts'], - ['mokoplatform', 'B60205', 'mokoplatform compliance'], + ['mokocli', 'B60205', 'mokocli compliance'], ['needs-review', 'FBCA04', 'Awaiting code review'], ['work-in-progress', 'D93F0B', 'Work in progress, not ready for merge'], ['breaking-change', 'D73A4A', 'Breaking API or functionality change'], @@ -912,8 +912,8 @@ class BulkSync extends CliFramework ['health: poor', 'FF6B6B', 'Health score below 50'], // Sync / Automation (used by bulk_sync, scan_drift, check_repo_health) - ['standards-update', 'B60205', 'mokoplatform sync update'], - ['standards-drift', 'FBCA04', 'Repository drifted from mokoplatform'], + ['standards-update', 'B60205', 'mokocli sync update'], + ['standards-drift', 'FBCA04', 'Repository drifted from mokocli'], ['sync-report', '0075CA', 'Bulk sync run report'], ['sync-failure', 'D73A4A', 'Bulk sync failure requiring attention'], ['push-failure', 'D73A4A', 'File push failure requiring attention'], @@ -925,10 +925,10 @@ class BulkSync extends CliFramework ['type: version', '0E8A16', 'Version-related change'], ]; - // Quick check: if the repo already has the 'mokoplatform' label, it was + // Quick check: if the repo already has the 'mokocli' label, it was // provisioned previously — skip the expensive full label provisioning. try { - $probe = $this->api->get("/repos/{$org}/{$repo}/labels/mokoplatform"); + $probe = $this->api->get("/repos/{$org}/{$repo}/labels/mokocli"); if (!empty($probe['name'])) { return; // already provisioned } @@ -1024,7 +1024,7 @@ class BulkSync extends CliFramework */ private function updateOpenBranches(string $org, string $repo): void { - $syncBranchPrefix = 'chore/sync-mokoplatform-'; + $syncBranchPrefix = 'chore/sync-mokocli-'; try { $defaultBranch = 'main'; @@ -1055,7 +1055,7 @@ class BulkSync extends CliFramework $this->api->post("/repos/{$org}/{$repo}/merges", [ 'base' => $branch, 'head' => $defaultBranch, - 'commit_message' => "chore: merge {$defaultBranch} into {$branch} (mokoplatform sync)", + 'commit_message' => "chore: merge {$defaultBranch} into {$branch} (mokocli sync)", ]); $this->log(" 🔀 Merged {$defaultBranch} → {$branch} (PR #{$prNum})", 'INFO'); } catch (\Exception $e) { @@ -1076,7 +1076,7 @@ class BulkSync extends CliFramework /** * Records which sync run touched the repo, the PR number, and the - * mokoplatform version that was applied — giving each repo a clear audit + * mokocli version that was applied — giving each repo a clear audit * trail of what was changed and why. */ /** @@ -1119,16 +1119,16 @@ class BulkSync extends CliFramework $minor = self::VERSION_MINOR; $force = isset($this->options['force']) ? ' *(--force)*' : ''; $prLink = $this->adapter->getPullRequestWebUrl($org, $repo, $prNumber); - $source = $this->adapter->getRepoWebUrl($org, 'mokoplatform'); - $branchName = 'chore/sync-mokoplatform-v' . $minor; + $source = $this->adapter->getRepoWebUrl($org, 'mokocli'); + $branchName = 'chore/sync-mokocli-v' . $minor; $branchLink = $this->adapter->getBranchWebUrl($org, $repo, $branchName); - $title = "chore: mokoplatform v{$minor} sync tracking"; + $title = "chore: mokocli v{$minor} sync tracking"; $body = <<resolveLabelIds($org, $repo, $labelNames); try { @@ -1213,7 +1213,7 @@ class BulkSync extends CliFramework } /** - * Create a tracking issue in mokoplatform for this sync run. + * Create a tracking issue in mokocli for this sync run. */ private function createSyncIssue(string $org, array $results): void { @@ -1232,7 +1232,7 @@ class BulkSync extends CliFramework $issues = $results['issues'] ?? []; // Stable title — no timestamp so repeated runs update a single issue - $title = "sync: mokoplatform v" . self::VERSION_MINOR . " bulk sync report"; + $title = "sync: mokocli v" . self::VERSION_MINOR . " bulk sync report"; $protection = $results['protection'] ?? []; $hasProtect = !empty($protection); @@ -1281,7 +1281,7 @@ class BulkSync extends CliFramework : "|---|---|---|---|"; $body = <<api->get("/repos/{$org}/mokoplatform/issues", [ + $existing = $this->api->get("/repos/{$org}/mokocli/issues", [ 'labels' => 'sync-report', 'state' => 'all', 'per_page' => 1, @@ -1309,8 +1309,8 @@ class BulkSync extends CliFramework 'direction' => 'desc', ]); - $labelNames = ['sync-report', 'mokoplatform', 'type: chore', 'automation']; - $labels = $this->resolveLabelIds($org, 'mokoplatform', $labelNames); + $labelNames = ['sync-report', 'mokocli', 'type: chore', 'automation']; + $labels = $this->resolveLabelIds($org, 'mokocli', $labelNames); $existing = array_values($existing); if (!empty($existing) && isset($existing[0]['number'])) { @@ -1319,22 +1319,22 @@ class BulkSync extends CliFramework if (($existing[0]['state'] ?? 'open') === 'closed') { $patch['state'] = 'open'; } - $this->api->patch("/repos/{$org}/mokoplatform/issues/{$issueNumber}", $patch); + $this->api->patch("/repos/{$org}/mokocli/issues/{$issueNumber}", $patch); try { - $this->api->post("/repos/{$org}/mokoplatform/issues/{$issueNumber}/labels", ['labels' => $labels]); + $this->api->post("/repos/{$org}/mokocli/issues/{$issueNumber}/labels", ['labels' => $labels]); } catch (\Exception $le) { /* non-fatal */ } - $this->log("📋 Sync report issue updated: {$org}/mokoplatform#{$issueNumber}", 'INFO'); + $this->log("📋 Sync report issue updated: {$org}/mokocli#{$issueNumber}", 'INFO'); } else { - $issue = $this->api->post("/repos/{$org}/mokoplatform/issues", [ + $issue = $this->api->post("/repos/{$org}/mokocli/issues", [ 'title' => $title, 'body' => $body, 'labels' => $labels, 'assignees' => ['jmiller'], ]); $issueNumber = $issue['number'] ?? '?'; - $this->log("📋 Sync report issue created: {$org}/mokoplatform#{$issueNumber}", 'INFO'); + $this->log("📋 Sync report issue created: {$org}/mokocli#{$issueNumber}", 'INFO'); } } catch (\Exception $e) { $this->log("⚠️ Failed to create/update sync report issue: " . $e->getMessage(), 'WARN'); @@ -1342,7 +1342,7 @@ class BulkSync extends CliFramework } /** - * Create or update a failure issue in mokoplatform when repos fail to sync. + * Create or update a failure issue in mokocli when repos fail to sync. * Uses the 'sync-failure' label so it is distinct from the run-report issue. * Reopens a closed issue rather than creating a duplicate. */ @@ -1388,7 +1388,7 @@ class BulkSync extends CliFramework $body = preg_replace('/^ /m', '', $body); try { - $existing = $this->api->get("/repos/{$org}/mokoplatform/issues", [ + $existing = $this->api->get("/repos/{$org}/mokocli/issues", [ 'labels' => 'sync-failure', 'state' => 'all', 'per_page' => 1, @@ -1403,17 +1403,17 @@ class BulkSync extends CliFramework if (($existing[0]['state'] ?? 'open') === 'closed') { $patch['state'] = 'open'; } - $this->api->patch("/repos/{$org}/mokoplatform/issues/{$num}", $patch); - $this->log("🚨 Failure issue #{$num} updated: {$org}/mokoplatform#{$num}", 'WARN'); + $this->api->patch("/repos/{$org}/mokocli/issues/{$num}", $patch); + $this->log("🚨 Failure issue #{$num} updated: {$org}/mokocli#{$num}", 'WARN'); } else { - $issue = $this->api->post("/repos/{$org}/mokoplatform/issues", [ + $issue = $this->api->post("/repos/{$org}/mokocli/issues", [ 'title' => $title, 'body' => $body, - 'labels' => $this->resolveLabelIds($org, 'mokoplatform', ['sync-failure']), + 'labels' => $this->resolveLabelIds($org, 'mokocli', ['sync-failure']), 'assignees' => ['jmiller'], ]); $num = $issue['number'] ?? '?'; - $this->log("🚨 Failure issue created: {$org}/mokoplatform#{$num}", 'WARN'); + $this->log("🚨 Failure issue created: {$org}/mokocli#{$num}", 'WARN'); } } catch (\Exception $e) { $this->log("⚠️ Could not create/update failure issue: " . $e->getMessage(), 'WARN'); diff --git a/automation/bulk_workflow_trigger.sh b/automation/bulk_workflow_trigger.sh index b649fb6..c63032d 100644 --- a/automation/bulk_workflow_trigger.sh +++ b/automation/bulk_workflow_trigger.sh @@ -1,123 +1,123 @@ -#!/usr/bin/env bash -# Copyright (C) 2026 Moko Consulting -# SPDX-License-Identifier: GPL-3.0-or-later -# BRIEF: Trigger a workflow across all client-waas repos in a Gitea org - -set -euo pipefail - -# --------------------------------------------------------------------------- -# Usage -# --------------------------------------------------------------------------- -usage() { - cat < +# SPDX-License-Identifier: GPL-3.0-or-later +# BRIEF: Trigger a workflow across all client-waas repos in a Gitea org + +set -euo pipefail + +# --------------------------------------------------------------------------- +# Usage +# --------------------------------------------------------------------------- +usage() { + cat <dryRun ? "DRY RUN" : "LIVE") . "\n"; if (!empty($skipRepos)) { echo "Skipping: " . implode(', ', $skipRepos) . "\n"; @@ -97,7 +97,7 @@ class EnrichManifestXmlCli extends CliFramework } $manifestPath = "{$workDir}/.mokogitea/manifest.xml"; - if (!file_exists($manifestPath) || !str_contains(file_get_contents($manifestPath), 'rmTree($workDir); diff --git a/automation/enrich_mokostandards_xml.php b/automation/enrich_mokostandards_xml.php index 99f22bf..686e6b3 100644 --- a/automation/enrich_mokostandards_xml.php +++ b/automation/enrich_mokostandards_xml.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Automation * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/enrich_mokostandards_xml.php * BRIEF: Enrich XML manifests with repo-specific build and deploy details * @@ -46,7 +46,7 @@ class EnrichMokostandardsXmlCli extends CliFramework $parser = new ManifestParser(); $tmpBase = sys_get_temp_dir() . '/moko-enrich-' . getmypid(); - echo "=== mokoplatform XML Manifest Enrichment ===\n"; + echo "=== mokocli XML Manifest Enrichment ===\n"; echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n"; if (!empty($skipRepos)) { echo "Skipping: " . implode(', ', $skipRepos) . "\n"; @@ -97,7 +97,7 @@ class EnrichMokostandardsXmlCli extends CliFramework } $manifestPath = "{$workDir}/.mokogitea/manifest.xml"; - if (!file_exists($manifestPath) || !str_contains(file_get_contents($manifestPath), 'rmTree($workDir); diff --git a/automation/index.md b/automation/index.md index 872f34e..f064f33 100644 --- a/automation/index.md +++ b/automation/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Automation -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /automation/index.md BRIEF: Automation directory index --> diff --git a/automation/migrate_to_gitea.php b/automation/migrate_to_gitea.php index 686e3d6..323b75b 100644 --- a/automation/migrate_to_gitea.php +++ b/automation/migrate_to_gitea.php @@ -10,14 +10,14 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Automation * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/migrate_to_gitea.php * BRIEF: Migrate repositories from GitHub to self-hosted Gitea instance * * USAGE * php automation/migrate_to_gitea.php --dry-run * php automation/migrate_to_gitea.php --repos MokoCRM MokoDoliMods - * php automation/migrate_to_gitea.php --exclude mokoplatform --skip-archived + * php automation/migrate_to_gitea.php --exclude mokocli --skip-archived * php automation/migrate_to_gitea.php --resume */ @@ -278,7 +278,7 @@ class MigrateToGitea extends CliFramework try { $this->gitea->createIssue( $giteaOrg, - 'mokoplatform', + 'mokocli', 'chore: GitHub → Gitea migration report — ' . count($results['migrated']) . ' repos migrated', $report, ['labels' => ['automation', 'type: chore']] diff --git a/automation/push_files.php b/automation/push_files.php index c6d5b55..a62bfc4 100644 --- a/automation/push_files.php +++ b/automation/push_files.php @@ -11,7 +11,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Automation * INGROUP: MokoPlatform.Scripts - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/push_files.php * BRIEF: Push one or more specific files to one or more remote repositories */ @@ -35,7 +35,7 @@ use MokoCli\{ /** * Targeted File Push Tool * - * Pushes one or more specific files from mokoplatform templates to one or + * Pushes one or more specific files from mokocli templates to one or * more remote repositories — without running a full sync. * * Files are specified by their destination path as they appear in the target @@ -81,7 +81,7 @@ class PushFiles extends CliFramework */ protected function run(): int { - $this->log('📦 mokoplatform File Push v' . self::VERSION, 'INFO'); + $this->log('📦 mokocli File Push v' . self::VERSION, 'INFO'); if (!$this->initializeComponents()) { return 1; @@ -337,7 +337,7 @@ class PushFiles extends CliFramework $prNumber = null; if (!$direct) { - $prTitle = "chore: push " . count($entries) . " file(s) from mokoplatform"; + $prTitle = "chore: push " . count($entries) . " file(s) from mokocli"; $prBody = $this->buildPRBody($entries); $pr = $this->adapter->createPullRequest( $org, @@ -414,7 +414,7 @@ class PushFiles extends CliFramework $message = !empty($customMessage) ? $customMessage - : "chore: update {$destPath} from mokoplatform"; + : "chore: update {$destPath} from mokocli"; // Fetch existing file SHA (needed for updates) $existingSha = null; @@ -457,9 +457,9 @@ class PushFiles extends CliFramework ): void { $now = gmdate('Y-m-d H:i:s') . ' UTC'; $version = self::VERSION; - $source = $this->adapter->getRepoWebUrl($org, 'mokoplatform'); + $source = $this->adapter->getRepoWebUrl($org, 'mokocli'); - $title = "chore: mokoplatform file push tracking"; + $title = "chore: mokocli file push tracking"; $deliveryLine = $prNumber !== null ? "| **Pull request** | [#{$prNumber}](" . $this->adapter->getPullRequestWebUrl($org, $repo, $prNumber) . ") |" @@ -471,9 +471,9 @@ class PushFiles extends CliFramework )); $body = <<api->get("/repos/{$org}/{$repo}/issues", [ @@ -550,7 +550,7 @@ class PushFiles extends CliFramework } /** - * Create or update a failure issue in mokoplatform when repos fail to receive files. + * Create or update a failure issue in mokocli when repos fail to receive files. * Uses the 'push-failure' label. Reopens a closed issue rather than creating a duplicate. */ private function createFailureIssue(string $org, array $results): void @@ -598,7 +598,7 @@ class PushFiles extends CliFramework $body = preg_replace('/^ /m', '', $body); try { - $existing = $this->api->get("/repos/{$org}/mokoplatform/issues", [ + $existing = $this->api->get("/repos/{$org}/mokocli/issues", [ 'labels' => 'push-failure', 'state' => 'all', 'per_page' => 1, @@ -613,17 +613,17 @@ class PushFiles extends CliFramework if (($existing[0]['state'] ?? 'open') === 'closed') { $patch['state'] = 'open'; } - $this->api->patch("/repos/{$org}/mokoplatform/issues/{$num}", $patch); - $this->log("🚨 Failure issue #{$num} updated: {$org}/mokoplatform#{$num}", 'WARN'); + $this->api->patch("/repos/{$org}/mokocli/issues/{$num}", $patch); + $this->log("🚨 Failure issue #{$num} updated: {$org}/mokocli#{$num}", 'WARN'); } else { - $issue = $this->api->post("/repos/{$org}/mokoplatform/issues", [ + $issue = $this->api->post("/repos/{$org}/mokocli/issues", [ 'title' => $title, 'body' => $body, 'labels' => ['push-failure'], 'assignees' => ['jmiller'], ]); $num = $issue['number'] ?? '?'; - $this->log("🚨 Failure issue created: {$org}/mokoplatform#{$num}", 'WARN'); + $this->log("🚨 Failure issue created: {$org}/mokocli#{$num}", 'WARN'); } } catch (\Exception $e) { $this->log("⚠️ Could not create/update failure issue: " . $e->getMessage(), 'WARN'); @@ -638,14 +638,14 @@ class PushFiles extends CliFramework private function buildPRBody(array $entries): string { $now = gmdate('Y-m-d H:i:s') . ' UTC'; - $lines = ["## mokoplatform File Push\n", "**Pushed:** {$now}\n", '### Files\n']; + $lines = ["## mokocli File Push\n", "**Pushed:** {$now}\n", '### Files\n']; foreach ($entries as $entry) { $lines[] = "- `{$entry['destination']}`"; } - $sourceUrl = $this->adapter->getRepoWebUrl(self::DEFAULT_ORG, 'mokoplatform'); - $lines[] = "\n---\n*Generated by [mokoplatform]({$sourceUrl}) `push_files.php`*"; + $sourceUrl = $this->adapter->getRepoWebUrl(self::DEFAULT_ORG, 'mokocli'); + $lines[] = "\n---\n*Generated by [mokocli]({$sourceUrl}) `push_files.php`*"; return implode("\n", $lines); } diff --git a/automation/push_manifest_xml.php b/automation/push_manifest_xml.php index aa77bbd..00c7a59 100644 --- a/automation/push_manifest_xml.php +++ b/automation/push_manifest_xml.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Automation * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/push_manifest_xml.php * BRIEF: Push XML manifests to all governed repositories */ @@ -47,7 +47,7 @@ class PushManifestXmlCli extends CliFramework $parser = new ManifestParser(); $tmpBase = sys_get_temp_dir() . '/moko-manifest-push-' . getmypid(); - echo "=== mokoplatform XML Manifest Push ===\n"; + echo "=== mokocli XML Manifest Push ===\n"; echo "Org: {$giteaOrg}\n"; echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n"; if ($repoFilter) { @@ -125,7 +125,7 @@ class PushManifestXmlCli extends CliFramework // Check if already XML and up-to-date $manifestPath = "{$workDir}/.mokogitea/manifest.xml"; - $existingIsXml = file_exists($manifestPath) && str_contains(file_get_contents($manifestPath), 'extractPlatform(file_get_contents($manifestPath)); if ($existingPlatform === $platform) { diff --git a/automation/push_mokostandards_xml.php b/automation/push_mokostandards_xml.php index 4e7877c..4ba48f9 100644 --- a/automation/push_mokostandards_xml.php +++ b/automation/push_mokostandards_xml.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Automation * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/push_mokostandards_xml.php * BRIEF: Push XML manifests to all governed repositories */ @@ -47,7 +47,7 @@ class PushMokostandardsXmlCli extends CliFramework $parser = new ManifestParser(); $tmpBase = sys_get_temp_dir() . '/moko-manifest-push-' . getmypid(); - echo "=== mokoplatform XML Manifest Push ===\n"; + echo "=== mokocli XML Manifest Push ===\n"; echo "Org: {$giteaOrg}\n"; echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n"; if ($repoFilter) { @@ -125,7 +125,7 @@ class PushMokostandardsXmlCli extends CliFramework // Check if already XML and up-to-date $manifestPath = "{$workDir}/.mokogitea/manifest.xml"; - $existingIsXml = file_exists($manifestPath) && str_contains(file_get_contents($manifestPath), 'extractPlatform(file_get_contents($manifestPath)); if ($existingPlatform === $platform) { diff --git a/automation/repo_cleanup.php b/automation/repo_cleanup.php index f852231..d6d90ab 100644 --- a/automation/repo_cleanup.php +++ b/automation/repo_cleanup.php @@ -11,7 +11,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Automation * INGROUP: MokoPlatform.Scripts - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/repo_cleanup.php * BRIEF: Enterprise repository cleanup — branches, PRs, issues, workflows, labels, logs */ @@ -39,14 +39,14 @@ use MokoCli\{ApiClient, AuditLogger, CliFramework, Config, GitPlatformAdapter, M class RepoCleanup extends CliFramework { private const VERSION = '09.23.00'; - private const SYNC_PREFIX = 'chore/sync-mokoplatform-'; - private const CURRENT_BRANCH = 'chore/sync-mokoplatform-v04.02.00'; + private const SYNC_PREFIX = 'chore/sync-mokocli-'; + private const CURRENT_BRANCH = 'chore/sync-mokocli-v04.02.00'; /** Workflow files that have been retired and should be deleted from governed repos. */ private const RETIRED_WORKFLOWS = [ 'build.yml', 'code-quality.yml', 'release-cycle.yml', 'release-pipeline.yml', 'branch-cleanup.yml', 'auto-update-changelog.yml', 'enterprise-issue-manager.yml', - 'flush-actions-cache.yml', 'mokoplatform-script-runner.yml', 'unified-ci.yml', + 'flush-actions-cache.yml', 'mokocli-script-runner.yml', 'unified-ci.yml', 'unified-platform-testing.yml', 'reusable-build.yml', 'reusable-ci-validation.yml', 'reusable-deploy.yml', 'reusable-php-quality.yml', 'reusable-platform-testing.yml', 'reusable-project-detector.yml', 'reusable-release.yml', 'reusable-script-executor.yml', @@ -98,7 +98,7 @@ class RepoCleanup extends CliFramework } - $this->logMsg("🧹 mokoplatform Repository Cleanup v" . self::VERSION); + $this->logMsg("🧹 mokocli Repository Cleanup v" . self::VERSION); $this->logMsg("Organization: {$org}"); $this->logMsg("Current sync branch: " . self::CURRENT_BRANCH); if ($this->dryRun) { @@ -225,7 +225,7 @@ class RepoCleanup extends CliFramework } $allRepos = $this->adapter->listOrgRepos($org, $skipArchived); - return array_filter($allRepos, fn($r) => !in_array($r['name'], ['mokoplatform', '.github-private'], true)); + return array_filter($allRepos, fn($r) => !in_array($r['name'], ['mokocli', '.github-private'], true)); } // ─── Cleanup operations ────────────────────────────────────────────── @@ -463,9 +463,9 @@ class RepoCleanup extends CliFramework private function checkLabels(string $org, string $repo, array &$results): void { try { - $this->api->get("/repos/{$org}/{$repo}/labels/mokoplatform"); + $this->api->get("/repos/{$org}/{$repo}/labels/mokocli"); } catch (\Exception $e) { - $this->logMsg(" ⚠️ Missing 'mokoplatform' label"); + $this->logMsg(" ⚠️ Missing 'mokocli' label"); $results['labels_missing']++; $this->api->resetCircuitBreaker(); } @@ -479,7 +479,7 @@ class RepoCleanup extends CliFramework if (preg_match('/^\s*VERSION:\s*(\d{2}\.\d{2}\.\d{2})/m', $content, $m)) { $version = $m[1]; - // Check manifest.xml for the tracked mokoplatform version + // Check manifest.xml for the tracked mokocli version try { $mokoFile = $this->api->get("/repos/{$org}/{$repo}/contents/.mokogitea/manifest.xml"); $mokoContent = base64_decode($mokoFile['content'] ?? ''); diff --git a/automation/server-autoheal.sh b/automation/server-autoheal.sh index 86e7b9a..11a0739 100644 --- a/automation/server-autoheal.sh +++ b/automation/server-autoheal.sh @@ -6,7 +6,7 @@ # # DEFGROUP: MokoPlatform.Automation.ServerAutoheal # INGROUP: MokoPlatform.Automation -# REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /automation/server-autoheal.sh # BRIEF: Server auto-heal on unclean restart + split system/content backups # diff --git a/bin/moko b/bin/moko index d484dff..8cea39b 100644 --- a/bin/moko +++ b/bin/moko @@ -11,7 +11,7 @@ * FILE INFORMATION * DEFGROUP: MokoCli.CLI * INGROUP: MokoCli - * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /bin/moko * BRIEF: Unified CLI dispatcher — run any MokoCli script without needing GitHub Actions * diff --git a/cli/archive_repo.php b/cli/archive_repo.php index 25ca9bb..fba5d5e 100644 --- a/cli/archive_repo.php +++ b/cli/archive_repo.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/archive_repo.php * BRIEF: Gracefully retire a governed repository — archive, close issues/PRs, remove sync def */ @@ -135,7 +135,7 @@ class ArchiveRepoCli extends CliFramework try { $issue = $adapter->createIssue( $org, - 'mokoplatform', + 'mokocli', "chore: archived repository {$repoName}", "## Repository Archived\n\n" . "**Repository:** `{$org}/{$repoName}`\n" @@ -150,7 +150,7 @@ class ArchiveRepoCli extends CliFramework ] ); if (isset($issue['number'])) { - echo " Archival record: mokoplatform#{$issue['number']}\n"; + echo " Archival record: mokocli#{$issue['number']}\n"; } } catch (\Exception $e) { echo " Warning: could not create archival record: " . $e->getMessage() . "\n"; diff --git a/cli/audit_query.php b/cli/audit_query.php index 24b0771..da0c527 100644 --- a/cli/audit_query.php +++ b/cli/audit_query.php @@ -16,7 +16,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.CLI * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/audit_query.php * BRIEF: Search, filter, and export audit logs */ diff --git a/cli/badge_update.php b/cli/badge_update.php index be63432..ec86e6f 100644 --- a/cli/badge_update.php +++ b/cli/badge_update.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/badge_update.php * BRIEF: Update [VERSION: XX.XX.XX] badges in all markdown files */ diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 0cc274e..34651d0 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/branch_rename.php * VERSION: 09.37.00 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index 814e250..b7b65df 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/bulk_workflow_push.php * VERSION: 09.37.00 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API @@ -154,7 +154,7 @@ class BulkWorkflowPushCli extends CliFramework 'content' => $encodedContent, 'sha' => $remoteSha, 'message' => "chore: sync {$destPath} " - . "from mokoplatform [skip ci]", + . "from mokocli [skip ci]", 'branch' => $branch, ]); @@ -184,7 +184,7 @@ class BulkWorkflowPushCli extends CliFramework $payload = json_encode([ 'content' => $encodedContent, 'message' => "chore: add {$destPath} " - . "from mokoplatform [skip ci]", + . "from mokocli [skip ci]", 'branch' => $branch, ]); diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index b6ab39c..af5397a 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/bulk_workflow_trigger.php * VERSION: 09.37.00 * BRIEF: Trigger a workflow across multiple repos at once diff --git a/cli/changelog_promote.php b/cli/changelog_promote.php index e56ac76..b528d29 100644 --- a/cli/changelog_promote.php +++ b/cli/changelog_promote.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/changelog_promote.php * BRIEF: Promote [Unreleased] section in CHANGELOG.md to a versioned entry */ diff --git a/cli/changelog_prune.php b/cli/changelog_prune.php index 8e2e6a7..07627cc 100644 --- a/cli/changelog_prune.php +++ b/cli/changelog_prune.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/changelog_prune.php * BRIEF: Prune old CHANGELOG.md entries — keeps [Unreleased] + last N releases */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 6911d79..08c8da0 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/client_dashboard.php * VERSION: 09.37.00 * BRIEF: Generate unified client dashboard HTML diff --git a/cli/client_health_check.php b/cli/client_health_check.php index 1a72b2c..23037d1 100644 --- a/cli/client_health_check.php +++ b/cli/client_health_check.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/client_health_check.php * BRIEF: Verify a client site's update server, installed version, and release availability */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index e906fea..9903268 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/client_inventory.php * VERSION: 09.37.00 * BRIEF: Discover and list all client-waas repos with their server configuration status diff --git a/cli/client_provision.php b/cli/client_provision.php index e2d0be8..f34220a 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/client_provision.php * VERSION: 09.37.00 * BRIEF: Provision a new client environment end-to-end diff --git a/cli/completion.php b/cli/completion.php index 8900b22..f89464c 100644 --- a/cli/completion.php +++ b/cli/completion.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/completion.php * BRIEF: Generate bash/zsh tab completion scripts for bin/moko */ diff --git a/cli/create_project.php b/cli/create_project.php index e07cc95..f7926ef 100644 --- a/cli/create_project.php +++ b/cli/create_project.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/create_project.php * BRIEF: Create baseline GitHub Projects for repositories with standard fields and views */ @@ -24,7 +24,7 @@ use MokoCli\CliFramework; class CreateProjectCli extends CliFramework { /** @var string[] */ - private array $ALWAYS_EXCLUDE = ['mokoplatform', '.github-private']; + private array $ALWAYS_EXCLUDE = ['mokocli', '.github-private']; /** @var array */ private array $PLATFORM_TO_TYPE = [ @@ -183,7 +183,7 @@ class CreateProjectCli extends CliFramework CURLOPT_HTTPHEADER => [ 'Authorization: bearer ' . $token, 'Content-Type: application/json', - 'User-Agent: mokoplatform-CreateProject', + 'User-Agent: mokocli-CreateProject', ], ]); $body = (string) curl_exec($ch); @@ -422,14 +422,14 @@ class CreateProjectCli extends CliFramework updateProjectV2(input: { projectId: $projectId, shortDescription: $shortDescription, - readme: "Managed by mokoplatform. Run `php cli/create_project.php` to regenerate." + readme: "Managed by mokocli. Run `php cli/create_project.php` to regenerate." }) { projectV2 { id } } }', [ 'projectId' => $projectId, - 'shortDescription' => "Standard project board for {$repo}. Auto-created by mokoplatform.", + 'shortDescription' => "Standard project board for {$repo}. Auto-created by mokocli.", ], $token ); diff --git a/cli/create_repo.php b/cli/create_repo.php index 13118fe..5cb01d4 100644 --- a/cli/create_repo.php +++ b/cli/create_repo.php @@ -8,11 +8,11 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/create_repo.php - * BRIEF: Scaffold a new governed repository with full mokoplatform baseline + * BRIEF: Scaffold a new governed repository with full mokocli baseline */ declare(strict_types=1); @@ -28,7 +28,7 @@ class CreateRepoCli extends CliFramework { protected function configure(): void { - $this->setDescription('Scaffold a new governed repository with full mokoplatform baseline'); + $this->setDescription('Scaffold a new governed repository with full mokocli baseline'); $this->addArgument('--name', 'Repository name', null); $this->addArgument('--type', 'Project type', null); $this->addArgument('--description', 'Repository description', ''); @@ -60,16 +60,16 @@ class CreateRepoCli extends CliFramework 'generic' => 'generic', ]; $TYPE_TO_TOPICS = [ - 'dolibarr' => ['dolibarr', 'erp', 'crm', 'php', 'mokoplatform'], - 'joomla' => ['joomla', 'cms', 'php', 'mokoplatform'], - 'nodejs' => ['nodejs', 'javascript', 'typescript', 'mokoplatform'], - 'terraform' => ['terraform', 'infrastructure', 'iac', 'mokoplatform'], - 'python' => ['python', 'mokoplatform'], - 'wordpress' => ['wordpress', 'php', 'cms', 'mokoplatform'], - 'generic' => ['mokoplatform'], + 'dolibarr' => ['dolibarr', 'erp', 'crm', 'php', 'mokocli'], + 'joomla' => ['joomla', 'cms', 'php', 'mokocli'], + 'nodejs' => ['nodejs', 'javascript', 'typescript', 'mokocli'], + 'terraform' => ['terraform', 'infrastructure', 'iac', 'mokocli'], + 'python' => ['python', 'mokocli'], + 'wordpress' => ['wordpress', 'php', 'cms', 'mokocli'], + 'generic' => ['mokocli'], ]; $platform = $TYPE_TO_PLATFORM[$type] ?? 'generic'; - $topics = $TYPE_TO_TOPICS[$type] ?? ['mokoplatform']; + $topics = $TYPE_TO_TOPICS[$type] ?? ['mokocli']; $platformName = $adapter->getPlatformName(); $vis = $private ? 'private' : 'public'; echo "Scaffolding new repository: {$org}/{$name}" @@ -84,7 +84,7 @@ class CreateRepoCli extends CliFramework if (!$this->dryRun) { try { $data = $adapter->createOrgRepo($org, $name, [ - 'description' => $description ?: "Managed by mokoplatform ({$type})", + 'description' => $description ?: "Managed by mokocli ({$type})", 'private' => $private, 'has_issues' => true, 'has_projects' => true, @@ -143,7 +143,7 @@ class CreateRepoCli extends CliFramework . "Copyright (C) 2026 Moko Consulting \n" . "SPDX-License-Identifier: GPL-3.0-or-later\n" . "DEFGROUP: {$name}\n" - . "INGROUP: mokoplatform\n" + . "INGROUP: mokocli\n" . "REPO: {$repoUrl}\n" . "PATH: /README.md\n" . "BRIEF: {$description}\n" @@ -152,7 +152,7 @@ class CreateRepoCli extends CliFramework . "{$description}\n\n" . "## Getting Started\n\n" . "This repository is governed by" - . " [mokoplatform]({$standardsUrl}).\n\n" + . " [mokocli]({$standardsUrl}).\n\n" . "## License\n\n" . "GPL-3.0-or-later. See [LICENSE](LICENSE)" . " for details.\n"; @@ -169,7 +169,7 @@ class CreateRepoCli extends CliFramework $name, 'README.md', $readmeContent, - 'docs: initialize README with mokoplatform header [skip ci]', + 'docs: initialize README with mokocli header [skip ci]', $sha ); echo " README.md created\n"; diff --git a/cli/deploy_joomla.php b/cli/deploy_joomla.php index a52f470..77856f5 100644 --- a/cli/deploy_joomla.php +++ b/cli/deploy_joomla.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.CLI * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/deploy_joomla.php * BRIEF: Smart Joomla deploy — routes files to correct server directories by extension type * diff --git a/cli/dev_branch_reset.php b/cli/dev_branch_reset.php index ea2b96b..84a910f 100644 --- a/cli/dev_branch_reset.php +++ b/cli/dev_branch_reset.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/dev_branch_reset.php * BRIEF: Delete and recreate dev branch from main via Gitea API */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index 4f6c4b2..b6a3b00 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/grafana_dashboard.php * VERSION: 09.37.00 * BRIEF: Manage Grafana dashboards via API diff --git a/cli/joomla_build.php b/cli/joomla_build.php index 664aa15..8ea2f2b 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/joomla_build.php * VERSION: 09.37.00 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported diff --git a/cli/joomla_compat_check.php b/cli/joomla_compat_check.php index 79c53a7..6f4647a 100644 --- a/cli/joomla_compat_check.php +++ b/cli/joomla_compat_check.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/joomla_compat_check.php * BRIEF: Check if extension targetplatform regex matches the latest Joomla version */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 37a0a24..f9c8332 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/joomla_metadata_validate.php * VERSION: 09.37.00 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML diff --git a/cli/joomla_release.php b/cli/joomla_release.php index b57cbb4..b059341 100644 --- a/cli/joomla_release.php +++ b/cli/joomla_release.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/joomla_release.php * BRIEF: Joomla release pipeline — build ZIP+tar.gz, upload to GitHub Release, update updates.xml * @@ -407,7 +407,7 @@ class JoomlaRelease extends CliFramework $this->api->post("/repos/{$repo}/releases", [ 'tag_name' => $tag, 'name' => $releaseName, - 'body' => "## {$version}\n\nCreated by mokoplatform release pipeline.", + 'body' => "## {$version}\n\nCreated by mokocli release pipeline.", 'prerelease' => ($stability !== 'stable'), ]); } diff --git a/cli/license_manage.php b/cli/license_manage.php index ff5f32c..4cace9c 100644 --- a/cli/license_manage.php +++ b/cli/license_manage.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/license_manage.php * BRIEF: Manage license packages and keys via MokoGitea licensing API * diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index c0afc61..b0eef9b 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_detect.php * VERSION: 09.37.00 * BRIEF: Auto-detect manifest fields from source files and optionally push to API diff --git a/cli/manifest_element.php b/cli/manifest_element.php index 9ab75f8..11fffb8 100644 --- a/cli/manifest_element.php +++ b/cli/manifest_element.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_element.php * BRIEF: Extract element name, type, type prefix, and ZIP name from manifest */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index ff5d237..0b1f5fa 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_integrity.php * VERSION: 09.37.00 * BRIEF: Cross-check manifest API fields against repo contents across the org diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 67958d3..04a0ae9 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_licensing.php * VERSION: 09.37.00 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests diff --git a/cli/package_build.php b/cli/package_build.php index edc7875..a87d6b0 100644 --- a/cli/package_build.php +++ b/cli/package_build.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/package_build.php * BRIEF: Build ZIP and tar.gz install packages for Joomla/Dolibarr/generic projects * diff --git a/cli/platform_detect.php b/cli/platform_detect.php index d8371a2..4e215c9 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/platform_detect.php * VERSION: 09.37.00 * BRIEF: Auto-detect repository platform type and optionally update manifest @@ -134,9 +134,9 @@ class PlatformDetectCli extends CliFramework } } - // 5. Platform — is mokoplatform itself or org-config + // 5. Platform — is mokocli itself or org-config $repoName = basename($root); - if (in_array($repoName, ['mokoplatform', 'mokogitea-org-config'])) { + if (in_array($repoName, ['mokocli', 'mokogitea-org-config'])) { return 'platform'; } diff --git a/cli/release.php b/cli/release.php index 1133962..ef059d4 100644 --- a/cli/release.php +++ b/cli/release.php @@ -6,11 +6,11 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release.php - * BRIEF: Automate the mokoplatform version branch release flow + * BRIEF: Automate the mokocli version branch release flow */ declare(strict_types=1); @@ -23,7 +23,7 @@ class ReleaseCli extends CliFramework { protected function configure(): void { - $this->setDescription('Automate the mokoplatform version branch release flow'); + $this->setDescription('Automate the mokocli version branch release flow'); $this->addArgument('--bump', 'Bump type: patch, minor, or major', ''); } diff --git a/cli/release_body_update.php b/cli/release_body_update.php index 570985a..717be61 100644 --- a/cli/release_body_update.php +++ b/cli/release_body_update.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_body_update.php * BRIEF: Update Gitea release body with changelog extract and checksums */ diff --git a/cli/release_create.php b/cli/release_create.php index bbd48d5..1d84df3 100644 --- a/cli/release_create.php +++ b/cli/release_create.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_create.php * BRIEF: Create or overwrite a Gitea release with proper naming */ diff --git a/cli/release_manage.php b/cli/release_manage.php index d626aa9..ce286b8 100644 --- a/cli/release_manage.php +++ b/cli/release_manage.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_manage.php * BRIEF: Create/update Gitea releases, upload assets, update release body */ diff --git a/cli/release_mirror.php b/cli/release_mirror.php index d2731e9..b01da8f 100644 --- a/cli/release_mirror.php +++ b/cli/release_mirror.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_mirror.php * BRIEF: Mirror a Gitea release (with assets) to a GitHub repository */ @@ -201,7 +201,7 @@ class ReleaseMirrorCli extends CliFramework CURLOPT_HTTPHEADER => [ "Authorization: token {$token}", 'Accept: application/vnd.github+json', - 'User-Agent: mokoplatform', + 'User-Agent: mokocli', 'Content-Type: application/json', ], CURLOPT_TIMEOUT => 30, @@ -229,7 +229,7 @@ class ReleaseMirrorCli extends CliFramework CURLOPT_HTTPHEADER => [ "Authorization: token {$token}", 'Accept: application/vnd.github+json', - 'User-Agent: mokoplatform', + 'User-Agent: mokocli', 'Content-Type: application/octet-stream', ], CURLOPT_POSTFIELDS => file_get_contents($filePath), diff --git a/cli/release_notes.php b/cli/release_notes.php index 365cec4..2c457ac 100644 --- a/cli/release_notes.php +++ b/cli/release_notes.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_notes.php * BRIEF: Extract release notes from CHANGELOG.md for a given version */ diff --git a/cli/release_package.php b/cli/release_package.php index 724037a..29e6d1f 100644 --- a/cli/release_package.php +++ b/cli/release_package.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_package.php * BRIEF: Build packages (ZIP + tar.gz) with SHA-256 and upload to Gitea release */ diff --git a/cli/release_promote.php b/cli/release_promote.php index 03006ce..96c43e3 100644 --- a/cli/release_promote.php +++ b/cli/release_promote.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_promote.php * BRIEF: Promote a Gitea release from one channel to another (rename release, tag, assets) */ diff --git a/cli/release_publish.php b/cli/release_publish.php index f2bc1dd..d692b07 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_publish.php * VERSION: 09.37.00 * BRIEF: Publish a release and create copies for all lesser stability streams. diff --git a/cli/release_validate.php b/cli/release_validate.php index 82f6e5d..ce93c34 100644 --- a/cli/release_validate.php +++ b/cli/release_validate.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_validate.php * BRIEF: Pre-release validation -- version consistency, required files, manifest checks */ diff --git a/cli/release_verify.php b/cli/release_verify.php index 793ae9a..7f71a69 100644 --- a/cli/release_verify.php +++ b/cli/release_verify.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_verify.php * BRIEF: Verify a built release artifact — version, SHA256, disallowed files */ diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index fdd2d4c..08f6a90 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/scaffold_client.php * VERSION: 09.37.00 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings diff --git a/cli/sync_rulesets.php b/cli/sync_rulesets.php index e016840..9baaa6c 100644 --- a/cli/sync_rulesets.php +++ b/cli/sync_rulesets.php @@ -8,9 +8,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/sync_rulesets.php * BRIEF: Apply branch protection rules to all repos via platform adapter */ @@ -46,7 +46,7 @@ class SyncRulesetsCli extends CliFramework ); $platformName = $adapter->getPlatformName(); - $ALWAYS_EXCLUDE = ['mokoplatform', '.github-private']; + $ALWAYS_EXCLUDE = ['mokocli', '.github-private']; // -- Protection rules (platform-agnostic format) -- $PROTECTIONS = [ diff --git a/cli/theme_lint.php b/cli/theme_lint.php index f451b5a..3343aba 100644 --- a/cli/theme_lint.php +++ b/cli/theme_lint.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/theme_lint.php * BRIEF: Lint theme files -- CSS syntax, image sizes, hardcoded URLs */ diff --git a/cli/updates_xml_build.php b/cli/updates_xml_build.php index 6d17ae6..e8ea4eb 100644 --- a/cli/updates_xml_build.php +++ b/cli/updates_xml_build.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/updates_xml_build.php * BRIEF: Generate Joomla updates.xml from extension manifest metadata */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index f1a67a6..2379181 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/updates_xml_sync.php * VERSION: 09.37.00 * BRIEF: Sync updates.xml to target branches via Gitea API diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index a33c415..66c4526 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/version_auto_bump.php * VERSION: 09.37.00 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash diff --git a/cli/version_bump.php b/cli/version_bump.php index 3214d5a..690f49e 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/version_bump.php * BRIEF: Auto-increment version -- manifest.xml is canonical, cascades to all XML and MD files */ diff --git a/cli/version_bump_remote.php b/cli/version_bump_remote.php index fbbebc8..759a075 100644 --- a/cli/version_bump_remote.php +++ b/cli/version_bump_remote.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/version_bump_remote.php * BRIEF: Bump version in manifest XML and CHANGELOG.md on a remote branch via Gitea API */ diff --git a/cli/version_check.php b/cli/version_check.php index 48de802..6e984a7 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/version_check.php * VERSION: 09.37.00 * BRIEF: Validate version consistency across README, manifests, and sub-packages diff --git a/cli/version_read.php b/cli/version_read.php index d53b483..1569a29 100644 --- a/cli/version_read.php +++ b/cli/version_read.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/version_read.php * BRIEF: Read version — manifest.xml is canonical, falls back to README.md and Joomla XML */ diff --git a/cli/version_reset_dev.php b/cli/version_reset_dev.php index c62e0f8..ebcf086 100644 --- a/cli/version_reset_dev.php +++ b/cli/version_reset_dev.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/version_reset_dev.php * BRIEF: Reset platform version to 'development' on a branch via Gitea API */ diff --git a/cli/version_set_platform.php b/cli/version_set_platform.php index e7f67c2..79e1c15 100644 --- a/cli/version_set_platform.php +++ b/cli/version_set_platform.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/version_set_platform.php * BRIEF: Set version in platform-specific files (Dolibarr $this->version, Joomla ) */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index 93d3d17..41e5315 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -6,12 +6,12 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.CLI - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/wiki_sync.php * VERSION: 09.37.00 - * BRIEF: Sync select wiki pages from mokoplatform to all template repos + * BRIEF: Sync select wiki pages from mokocli to all template repos */ declare(strict_types=1); @@ -25,7 +25,7 @@ class WikiSyncCli extends CliFramework private string $giteaUrl = 'https://git.mokoconsulting.tech'; private string $token = ''; private string $org = 'MokoConsulting'; - private string $sourceRepo = 'mokoplatform'; + private string $sourceRepo = 'mokocli'; private array $targetRepos = []; private array $pages = []; private bool $allTemplates = false; @@ -38,10 +38,10 @@ class WikiSyncCli extends CliFramework protected function configure(): void { - $this->setDescription('Sync wiki pages from mokoplatform to template repos'); + $this->setDescription('Sync wiki pages from mokocli to template repos'); $this->addArgument('--token', 'Gitea API token (required)', ''); $this->addArgument('--org', 'Organization (default: MokoConsulting)', 'MokoConsulting'); - $this->addArgument('--source', 'Source repo (default: mokoplatform)', 'mokoplatform'); + $this->addArgument('--source', 'Source repo (default: mokocli)', 'mokocli'); $this->addArgument('--target', 'Target repo (can repeat)', ''); $this->addArgument('--page', 'Page to sync (can repeat)', ''); $this->addArgument('--all-standards', 'Sync all UPPERCASE standards pages', false); diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 47da940..c5baf84 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -6,9 +6,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: moko-platform.CLI - * INGROUP: moko-platform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/workflow_sync.php * VERSION: 09.37.00 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform diff --git a/composer.json b/composer.json index a1f93dd..7faa8d4 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { - "name": "mokoconsulting/mokocli", - "description": "MokoCLI — enterprise CLI automation, validation, and governance engine for all Moko Consulting repositories", + "name": "mokoconsulting-tech/enterprise", + "description": "mokocli Enterprise API \u2014 PHP implementation", "type": "library", "version": "09.23.00", "license": "GPL-3.0-or-later", diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index eed657c..fc46f69 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Deploy * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /deploy/backup-before-deploy.php * VERSION: 09.37.00 * BRIEF: Snapshot Joomla directories before deployment for rollback capability diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index ee85c7f..2785b7a 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Deploy * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /deploy/deploy-dolibarr.php * VERSION: 09.37.00 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync diff --git a/deploy/deploy-joomla.php b/deploy/deploy-joomla.php index 781d145..f3ffc05 100644 --- a/deploy/deploy-joomla.php +++ b/deploy/deploy-joomla.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Deploy * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /deploy/deploy-joomla.php * BRIEF: Smart Joomla deploy — routes files to correct Joomla directories based on XML manifest * diff --git a/deploy/deploy-sftp.php b/deploy/deploy-sftp.php index 9f0f996..b53a6f8 100644 --- a/deploy/deploy-sftp.php +++ b/deploy/deploy-sftp.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Deploy * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /deploy/deploy-sftp.php * BRIEF: Deploy a repository src/ directory to a remote web server via SFTP */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 3cb3465..29970fa 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Deploy * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /deploy/health-check.php * VERSION: 09.37.00 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 0b0961e..d020e92 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Deploy * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /deploy/rollback-joomla.php * VERSION: 09.37.00 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index b8ccbbc..2ebf959 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Deploy * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /deploy/sync-joomla.php * VERSION: 09.37.00 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH diff --git a/fix/fix_line_endings.php b/fix/fix_line_endings.php index 67f5b79..4b1215a 100644 --- a/fix/fix_line_endings.php +++ b/fix/fix_line_endings.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Fix * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /fix/fix_line_endings.php * BRIEF: CLI script to normalise CRLF/CR to LF in tracked source files */ diff --git a/fix/fix_permissions.php b/fix/fix_permissions.php index c7b6ea5..0600e11 100644 --- a/fix/fix_permissions.php +++ b/fix/fix_permissions.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Fix * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /fix/fix_permissions.php * BRIEF: CLI script to normalise file permissions (dirs 755, files 644, scripts 755) */ diff --git a/fix/fix_tabs.php b/fix/fix_tabs.php index 380b9af..cee465c 100644 --- a/fix/fix_tabs.php +++ b/fix/fix_tabs.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Fix * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /fix/fix_tabs.php * BRIEF: CLI script to convert tabs to spaces in tracked source files */ diff --git a/fix/fix_trailing_spaces.php b/fix/fix_trailing_spaces.php index 8374516..0c79b4d 100644 --- a/fix/fix_trailing_spaces.php +++ b/fix/fix_trailing_spaces.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Fix * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /fix/fix_trailing_spaces.php * BRIEF: CLI script to remove trailing whitespace from tracked source files */ diff --git a/fix/index.md b/fix/index.md index ae5caa6..db654c7 100644 --- a/fix/index.md +++ b/fix/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Fix -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /fix/index.md BRIEF: Fix directory index --> diff --git a/index.md b/index.md index 978c16e..02692f2 100644 --- a/index.md +++ b/index.md @@ -4,14 +4,14 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /index.md BRIEF: Scripts directory index --> # Scripts Index -Quick navigation for mokoplatform scripts organized by function. +Quick navigation for mokocli scripts organized by function. ## Core Categories @@ -60,7 +60,7 @@ Shared library code - Extension utilities - GitHub client -### [Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki) +### [Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki) All documentation lives in the Gitea wiki. ### [Tests](tests/) @@ -93,4 +93,4 @@ All three languages may coexist in the same directory for the same functionality ## See Also - [README.md](README.md) - Comprehensive scripts documentation -- [Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki) - Documentation (wiki-first) +- [Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki) - Documentation (wiki-first) diff --git a/lib/CliBase.php b/lib/CliBase.php index 210d79c..b87842c 100644 --- a/lib/CliBase.php +++ b/lib/CliBase.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Lib * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/CliBase.php * BRIEF: Standalone base CLI class for scripts that do not use CliFramework */ diff --git a/lib/Common.php b/lib/Common.php index 9a330c0..84b240d 100644 --- a/lib/Common.php +++ b/lib/Common.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Lib * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Common.php * BRIEF: Common utility functions for scripts * NOTE: Version format used throughout is zero-padded semver: XX.YY.ZZ (e.g. 04.00.04). @@ -33,7 +33,7 @@ class Common const FALLBACK_VERSION = '04.00.00'; const REPO_URL = 'https://git.mokoconsulting.tech/MokoConsulting/mokocli'; - const REPO_URL_GITHUB = 'https://git.mokoconsulting.tech/MokoConsulting/mokoplatform'; + const REPO_URL_GITHUB = 'https://git.mokoconsulting.tech/MokoConsulting/mokocli'; const COPYRIGHT = 'Copyright (C) 2026 Moko Consulting '; const LICENSE = 'GPL-3.0-or-later'; diff --git a/lib/Enterprise/AbstractProjectPlugin.php b/lib/Enterprise/AbstractProjectPlugin.php index c841572..de8e952 100644 --- a/lib/Enterprise/AbstractProjectPlugin.php +++ b/lib/Enterprise/AbstractProjectPlugin.php @@ -11,7 +11,7 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/AbstractProjectPlugin.php * BRIEF: Abstract base class for project plugins */ diff --git a/lib/Enterprise/ApiClient.php b/lib/Enterprise/ApiClient.php index a4d0928..c766734 100644 --- a/lib/Enterprise/ApiClient.php +++ b/lib/Enterprise/ApiClient.php @@ -11,7 +11,7 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.API * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ApiClient.php * BRIEF: HTTP API client library */ @@ -33,7 +33,7 @@ declare(strict_types=1); * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/AuditLogger.php b/lib/Enterprise/AuditLogger.php index 83305a3..3f7fd51 100644 --- a/lib/Enterprise/AuditLogger.php +++ b/lib/Enterprise/AuditLogger.php @@ -24,13 +24,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Audit * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/AuditLogger.php * BRIEF: Enterprise audit logging * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/CheckpointManager.php b/lib/Enterprise/CheckpointManager.php index bc4e88f..d7efd6d 100644 --- a/lib/Enterprise/CheckpointManager.php +++ b/lib/Enterprise/CheckpointManager.php @@ -12,13 +12,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Checkpoint * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/CheckpointManager.php * BRIEF: Checkpoint manager for resumable operations * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/CliFramework.php b/lib/Enterprise/CliFramework.php index 425ad2e..1285ce5 100644 --- a/lib/Enterprise/CliFramework.php +++ b/lib/Enterprise/CliFramework.php @@ -9,9 +9,9 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.CLI * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/CliFramework.php - * BRIEF: CliFramework — unified base class for all mokoplatform CLI scripts + * BRIEF: CliFramework — unified base class for all mokocli CLI scripts */ declare(strict_types=1); @@ -23,11 +23,11 @@ use DateTimeZone; use Exception; // ============================================================================= -// CliFramework — current base class for all mokoplatform CLI scripts +// CliFramework — current base class for all mokocli CLI scripts // ============================================================================= /** - * Base class for mokoplatform CLI scripts. + * Base class for mokocli CLI scripts. * * Provides argument parsing, a structured lifecycle, and a full console * graphics system (banners, coloured log levels, progress bars, status diff --git a/lib/Enterprise/Config.php b/lib/Enterprise/Config.php index 51cbaa4..b2bd66b 100644 --- a/lib/Enterprise/Config.php +++ b/lib/Enterprise/Config.php @@ -11,7 +11,7 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Config * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Config.php * BRIEF: Configuration manager */ @@ -34,7 +34,7 @@ declare(strict_types=1); * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/ConfigValidator.php b/lib/Enterprise/ConfigValidator.php index 867b023..ed07fb0 100644 --- a/lib/Enterprise/ConfigValidator.php +++ b/lib/Enterprise/ConfigValidator.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ConfigValidator.php * BRIEF: Validate project config against plugin JSON schema */ @@ -21,7 +21,7 @@ namespace MokoCli; /** * Configuration Validator * - * Validates mokoplatform configuration files (YAML, JSON, HCL) + * Validates mokocli configuration files (YAML, JSON, HCL) * against expected schemas and reports errors. * * @since 04.00.00 diff --git a/lib/Enterprise/EnterpriseReadinessValidator.php b/lib/Enterprise/EnterpriseReadinessValidator.php index b15cf9c..ab791f6 100644 --- a/lib/Enterprise/EnterpriseReadinessValidator.php +++ b/lib/Enterprise/EnterpriseReadinessValidator.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/EnterpriseReadinessValidator.php * BRIEF: Enterprise readiness validation library */ diff --git a/lib/Enterprise/ErrorRecovery.php b/lib/Enterprise/ErrorRecovery.php index 7c0eeab..07db26f 100644 --- a/lib/Enterprise/ErrorRecovery.php +++ b/lib/Enterprise/ErrorRecovery.php @@ -19,13 +19,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Recovery * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ErrorRecovery.php * BRIEF: Error recovery framework * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later * @deprecated Individual class files should be used instead */ diff --git a/lib/Enterprise/FileFixUtility.php b/lib/Enterprise/FileFixUtility.php index e4c494e..788fe43 100644 --- a/lib/Enterprise/FileFixUtility.php +++ b/lib/Enterprise/FileFixUtility.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform.Lib - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/FileFixUtility.php * BRIEF: Utility class for fixing file formatting issues (line endings, permissions, tabs, trailing spaces) */ diff --git a/lib/Enterprise/GitHubAdapter.php b/lib/Enterprise/GitHubAdapter.php index 8d9c120..5fa23b9 100644 --- a/lib/Enterprise/GitHubAdapter.php +++ b/lib/Enterprise/GitHubAdapter.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Platform * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/GitHubAdapter.php * BRIEF: GitHub implementation of GitPlatformAdapter */ diff --git a/lib/Enterprise/GitPlatformAdapter.php b/lib/Enterprise/GitPlatformAdapter.php index 289519f..3fa2a94 100644 --- a/lib/Enterprise/GitPlatformAdapter.php +++ b/lib/Enterprise/GitPlatformAdapter.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Platform * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/GitPlatformAdapter.php * BRIEF: Interface defining all git platform operations for GitHub/Gitea abstraction */ @@ -21,7 +21,7 @@ namespace MokoCli; /** * Git Platform Adapter Interface * - * Defines all platform operations required by mokoplatform automation. + * Defines all platform operations required by mokocli automation. * Implementations exist for GitHub (GitHubAdapter) and Gitea (MokoGiteaAdapter), * allowing scripts to work against either platform transparently. * diff --git a/lib/Enterprise/InputValidator.php b/lib/Enterprise/InputValidator.php index 426e8c9..944d86e 100644 --- a/lib/Enterprise/InputValidator.php +++ b/lib/Enterprise/InputValidator.php @@ -11,7 +11,7 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Validation * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/InputValidator.php * BRIEF: Input validation library */ @@ -33,7 +33,7 @@ declare(strict_types=1); * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ @@ -161,11 +161,11 @@ class InputValidator break; case 'moko': - // mokoplatform format: XX.YY.ZZ + // mokocli format: XX.YY.ZZ $pattern = '/^\d{2}\.\d{2}\.\d{2}$/'; if (!preg_match($pattern, $version)) { throw new ValidationError( - "Invalid mokoplatform version format: {$version}. Expected: XX.YY.ZZ" + "Invalid mokocli version format: {$version}. Expected: XX.YY.ZZ" ); } break; diff --git a/lib/Enterprise/ManifestParser.php b/lib/Enterprise/ManifestParser.php index f2c189f..77653cd 100644 --- a/lib/Enterprise/ManifestParser.php +++ b/lib/Enterprise/ManifestParser.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ManifestParser.php * BRIEF: Parser for the XML-based manifest.xml repository manifest */ @@ -34,8 +34,8 @@ use SimpleXMLElement; class ManifestParser { public const SCHEMA_VERSION = '1.0'; - public const NAMESPACE_URI = 'https://standards.mokoconsulting.tech/mokoplatform/1.0'; - public const STANDARDS_SOURCE = 'https://git.mokoconsulting.tech/MokoConsulting/mokoplatform'; + public const NAMESPACE_URI = 'https://standards.mokoconsulting.tech/mokocli/1.0'; + public const STANDARDS_SOURCE = 'https://git.mokoconsulting.tech/MokoConsulting/mokocli'; /** Valid platform slugs — must match Template-* repo names. */ public const VALID_PLATFORMS = [ @@ -180,7 +180,7 @@ class ManifestParser * @type string $name Repository name (required) * @type string $org Organization (required) * @type string $platform Platform slug (required) - * @type string $standards_version mokoplatform version + * @type string $standards_version mokocli version * @type string $description Repo description * @type string $license SPDX license identifier * @type list $topics Repo topics @@ -205,7 +205,7 @@ class ManifestParser // Add comment header $dom->appendChild($dom->createComment( "\n MokoCli Repository Manifest\n" - . " Auto-generated by mokoplatform bulk sync.\n" + . " Auto-generated by mokocli bulk sync.\n" . " Manual edits to and may be overwritten.\n" . " See: docs/standards/mokostandards-file-spec.md\n" )); diff --git a/lib/Enterprise/ManifestReader.php b/lib/Enterprise/ManifestReader.php index 9408c03..be77119 100644 --- a/lib/Enterprise/ManifestReader.php +++ b/lib/Enterprise/ManifestReader.php @@ -7,9 +7,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: mokoplatform.Enterprise - * INGROUP: mokoplatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * DEFGROUP: mokocli.Enterprise + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ManifestReader.php * BRIEF: Read and parse .mokogitea/manifest.xml — shared across all CLI tools */ @@ -58,7 +58,7 @@ class ManifestReader $candidates = [ "{$root}/.mokogitea/manifest.xml", "{$root}/.mokogitea/.manifest.xml", - "{$root}/.mokogitea/.mokoplatform", + "{$root}/.mokogitea/.mokocli", ]; $manifestFile = null; diff --git a/lib/Enterprise/MetricsCollector.php b/lib/Enterprise/MetricsCollector.php index a4484cf..bb06ee2 100644 --- a/lib/Enterprise/MetricsCollector.php +++ b/lib/Enterprise/MetricsCollector.php @@ -11,13 +11,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Metrics * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/MetricsCollector.php * BRIEF: Metrics collection framework */ /** - * Metrics Collector for mokoplatform + * Metrics Collector for mokocli * * Provides observability and monitoring capabilities: * - Execution time tracking with timers @@ -48,7 +48,7 @@ declare(strict_types=1); * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/MokoGiteaAdapter.php b/lib/Enterprise/MokoGiteaAdapter.php index ffd6117..451731f 100644 --- a/lib/Enterprise/MokoGiteaAdapter.php +++ b/lib/Enterprise/MokoGiteaAdapter.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Platform * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/MokoGiteaAdapter.php * BRIEF: Gitea implementation of GitPlatformAdapter */ diff --git a/lib/Enterprise/PackageBuilder.php b/lib/Enterprise/PackageBuilder.php index 2ffdf50..d0609de 100644 --- a/lib/Enterprise/PackageBuilder.php +++ b/lib/Enterprise/PackageBuilder.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform.Lib - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/PackageBuilder.php * BRIEF: Builds release packages for generic, Dolibarr module, and Joomla component projects */ diff --git a/lib/Enterprise/PlatformAdapterFactory.php b/lib/Enterprise/PlatformAdapterFactory.php index a8734c4..287c8a2 100644 --- a/lib/Enterprise/PlatformAdapterFactory.php +++ b/lib/Enterprise/PlatformAdapterFactory.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Platform * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/PlatformAdapterFactory.php * BRIEF: Factory for creating platform-specific GitPlatformAdapter instances */ diff --git a/lib/Enterprise/PluginFactory.php b/lib/Enterprise/PluginFactory.php index faca471..526b567 100644 --- a/lib/Enterprise/PluginFactory.php +++ b/lib/Enterprise/PluginFactory.php @@ -11,7 +11,7 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/PluginFactory.php * BRIEF: Plugin factory for project type detection */ diff --git a/lib/Enterprise/PluginRegistry.php b/lib/Enterprise/PluginRegistry.php index e138181..f3dcced 100644 --- a/lib/Enterprise/PluginRegistry.php +++ b/lib/Enterprise/PluginRegistry.php @@ -11,7 +11,7 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/PluginRegistry.php * BRIEF: Plugin registry for available project plugins */ diff --git a/lib/Enterprise/Plugins/ApiPlugin.php b/lib/Enterprise/Plugins/ApiPlugin.php index f3e2412..9df5af0 100644 --- a/lib/Enterprise/Plugins/ApiPlugin.php +++ b/lib/Enterprise/Plugins/ApiPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/ApiPlugin.php * BRIEF: Enterprise plugin for API/Microservices projects */ diff --git a/lib/Enterprise/Plugins/DocumentationPlugin.php b/lib/Enterprise/Plugins/DocumentationPlugin.php index a8518f0..a8209f4 100644 --- a/lib/Enterprise/Plugins/DocumentationPlugin.php +++ b/lib/Enterprise/Plugins/DocumentationPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/DocumentationPlugin.php * BRIEF: Enterprise plugin for documentation projects */ diff --git a/lib/Enterprise/Plugins/DolibarrPlugin.php b/lib/Enterprise/Plugins/DolibarrPlugin.php index d6f29b8..c4f8e08 100644 --- a/lib/Enterprise/Plugins/DolibarrPlugin.php +++ b/lib/Enterprise/Plugins/DolibarrPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/DolibarrPlugin.php * BRIEF: Enterprise plugin for Dolibarr modules */ diff --git a/lib/Enterprise/Plugins/GenericPlugin.php b/lib/Enterprise/Plugins/GenericPlugin.php index 36e4afe..d9ccf5f 100644 --- a/lib/Enterprise/Plugins/GenericPlugin.php +++ b/lib/Enterprise/Plugins/GenericPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/GenericPlugin.php * BRIEF: Enterprise plugin for generic projects */ diff --git a/lib/Enterprise/Plugins/JoomlaPlugin.php b/lib/Enterprise/Plugins/JoomlaPlugin.php index e541c0e..f763137 100644 --- a/lib/Enterprise/Plugins/JoomlaPlugin.php +++ b/lib/Enterprise/Plugins/JoomlaPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/JoomlaPlugin.php * BRIEF: Enterprise plugin for Joomla projects */ diff --git a/lib/Enterprise/Plugins/McpServerPlugin.php b/lib/Enterprise/Plugins/McpServerPlugin.php index 2e0a37d..63e8e16 100644 --- a/lib/Enterprise/Plugins/McpServerPlugin.php +++ b/lib/Enterprise/Plugins/McpServerPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/McpServerPlugin.php * BRIEF: Enterprise plugin for MCP (Model Context Protocol) server projects */ diff --git a/lib/Enterprise/Plugins/MobilePlugin.php b/lib/Enterprise/Plugins/MobilePlugin.php index 7331f00..b12318d 100644 --- a/lib/Enterprise/Plugins/MobilePlugin.php +++ b/lib/Enterprise/Plugins/MobilePlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/MobilePlugin.php * BRIEF: Enterprise plugin for mobile app projects */ diff --git a/lib/Enterprise/Plugins/NodeJsPlugin.php b/lib/Enterprise/Plugins/NodeJsPlugin.php index 0a9cccd..957a645 100644 --- a/lib/Enterprise/Plugins/NodeJsPlugin.php +++ b/lib/Enterprise/Plugins/NodeJsPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/NodeJsPlugin.php * BRIEF: Enterprise plugin for Node.js/TypeScript projects */ diff --git a/lib/Enterprise/Plugins/PythonPlugin.php b/lib/Enterprise/Plugins/PythonPlugin.php index 87a6652..016279c 100644 --- a/lib/Enterprise/Plugins/PythonPlugin.php +++ b/lib/Enterprise/Plugins/PythonPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/PythonPlugin.php * BRIEF: Enterprise plugin for Python projects */ diff --git a/lib/Enterprise/Plugins/TerraformPlugin.php b/lib/Enterprise/Plugins/TerraformPlugin.php index e87e22c..8bb3622 100644 --- a/lib/Enterprise/Plugins/TerraformPlugin.php +++ b/lib/Enterprise/Plugins/TerraformPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/TerraformPlugin.php * BRIEF: Enterprise plugin for Terraform projects */ diff --git a/lib/Enterprise/Plugins/WordPressPlugin.php b/lib/Enterprise/Plugins/WordPressPlugin.php index 683fcdd..ce53678 100644 --- a/lib/Enterprise/Plugins/WordPressPlugin.php +++ b/lib/Enterprise/Plugins/WordPressPlugin.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/Plugins/WordPressPlugin.php * BRIEF: Enterprise plugin for WordPress projects */ diff --git a/lib/Enterprise/ProjectConfigValidator.php b/lib/Enterprise/ProjectConfigValidator.php index f1e263b..d0ae799 100644 --- a/lib/Enterprise/ProjectConfigValidator.php +++ b/lib/Enterprise/ProjectConfigValidator.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.ProjectTypes * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ProjectConfigValidator.php * BRIEF: Enterprise library for validating project configurations */ diff --git a/lib/Enterprise/ProjectMetricsCollector.php b/lib/Enterprise/ProjectMetricsCollector.php index 68826f1..531a396 100644 --- a/lib/Enterprise/ProjectMetricsCollector.php +++ b/lib/Enterprise/ProjectMetricsCollector.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.ProjectTypes * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ProjectMetricsCollector.php * BRIEF: Enterprise library for collecting project-specific metrics */ diff --git a/lib/Enterprise/ProjectPluginInterface.php b/lib/Enterprise/ProjectPluginInterface.php index 2e2e141..b2f5b4b 100644 --- a/lib/Enterprise/ProjectPluginInterface.php +++ b/lib/Enterprise/ProjectPluginInterface.php @@ -11,7 +11,7 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Plugins * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ProjectPluginInterface.php * BRIEF: Interface for project type plugins */ diff --git a/lib/Enterprise/ProjectTypeDetector.php b/lib/Enterprise/ProjectTypeDetector.php index c9e226b..bf57128 100644 --- a/lib/Enterprise/ProjectTypeDetector.php +++ b/lib/Enterprise/ProjectTypeDetector.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.ProjectTypes * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/ProjectTypeDetector.php * BRIEF: Enterprise library for detecting project types */ diff --git a/lib/Enterprise/RecoveryError.php b/lib/Enterprise/RecoveryError.php index c23c015..3780c14 100644 --- a/lib/Enterprise/RecoveryError.php +++ b/lib/Enterprise/RecoveryError.php @@ -12,13 +12,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Recovery * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/RecoveryError.php * BRIEF: Recovery error exception class * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/RecoveryManager.php b/lib/Enterprise/RecoveryManager.php index 4776605..013bb70 100644 --- a/lib/Enterprise/RecoveryManager.php +++ b/lib/Enterprise/RecoveryManager.php @@ -12,13 +12,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Recovery * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/RecoveryManager.php * BRIEF: Recovery manager for failed operations * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/RepositoryHealthChecker.php b/lib/Enterprise/RepositoryHealthChecker.php index 736f01b..38e666c 100644 --- a/lib/Enterprise/RepositoryHealthChecker.php +++ b/lib/Enterprise/RepositoryHealthChecker.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/RepositoryHealthChecker.php * BRIEF: Repository health checking enterprise library */ diff --git a/lib/Enterprise/RepositorySynchronizer.php b/lib/Enterprise/RepositorySynchronizer.php index b24e257..51e0e57 100644 --- a/lib/Enterprise/RepositorySynchronizer.php +++ b/lib/Enterprise/RepositorySynchronizer.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/RepositorySynchronizer.php * BRIEF: Repository synchronization enterprise library */ @@ -165,8 +165,8 @@ class RepositorySynchronizer // Resolve repo root (three levels up from this file: Enterprise/ → lib/ → root) // API repo root (definitions, sync code) $repoRoot = dirname(dirname(__DIR__)); - // mokoplatform repo root (templates, configs) - $standardsRoot = getenv('MOKOSTANDARDS_ROOT') ?: dirname($repoRoot) . '/mokoplatform'; + // mokocli repo root (templates, configs) + $standardsRoot = getenv('MOKOSTANDARDS_ROOT') ?: dirname($repoRoot) . '/mokocli'; // Detect platform from repo metadata $repoInfo = $this->adapter->getRepo($org, $repo); @@ -364,7 +364,7 @@ class RepositorySynchronizer * @param string $repo * @param string $platform Detected platform slug (e.g. 'dolibarr') * @param array $filesToSync - * @param string $repoRoot Absolute path to the mokoplatform repository root + * @param string $repoRoot Absolute path to the mokocli repository root * @param bool $force When true, overwrite files even when always_overwrite = false * @return array{number: ?int, summary: array} */ @@ -421,7 +421,7 @@ class RepositorySynchronizer // Create tracking issue (no PR — files pushed directly to default branch) $issueBody = $this->generatePRBody($summary); - $issueTitle = 'chore: mokoplatform v' . self::STANDARDS_MINOR . ' sync — ' . count($summary['copied']) . ' files updated'; + $issueTitle = 'chore: mokocli v' . self::STANDARDS_MINOR . ' sync — ' . count($summary['copied']) . ' files updated'; $issueNumber = null; try { @@ -478,7 +478,7 @@ class RepositorySynchronizer * never added. * * @param string $existing Current file content from the remote repo - * @param string $template Template file content from mokoplatform + * @param string $template Template file content from mokocli * @return string Merged content */ /** @@ -501,7 +501,7 @@ class RepositorySynchronizer * @param string $repo Repository name * @param string $platform Detected platform type * @param array $filesToSync Files to synchronize - * @param string $repoRoot Path to mokoplatform root + * @param string $repoRoot Path to mokocli root * @param bool $force Force overwrite * @param string $branchName Target branch * @param string|null $moduleId Dolibarr module ID (pre-fetched) @@ -583,7 +583,7 @@ class RepositorySynchronizer $repo, $targetPath, $content, - "chore: update {$targetPath} from mokoplatform", + "chore: update {$targetPath} from mokocli", $existingFile['sha'] ?? null, $branchName ); @@ -597,7 +597,7 @@ class RepositorySynchronizer $repo, $targetPath, $content, - "chore: add {$targetPath} from mokoplatform", + "chore: add {$targetPath} from mokocli", null, $branchName ); @@ -613,7 +613,7 @@ class RepositorySynchronizer $repo, $targetPath, $content, - "chore: update {$targetPath} from mokoplatform", + "chore: update {$targetPath} from mokocli", $existing['sha'] ?? null, $branchName ); @@ -782,7 +782,7 @@ class RepositorySynchronizer 'license' => 'GPL-3.0-or-later', 'topics' => $repoInfo['topics'] ?? [], 'language' => $repoInfo['language'] ?? ManifestParser::platformLanguage($platform), - 'package_type' => mokoplatformParser::platformPackageType($platform), + 'package_type' => mokocliParser::platformPackageType($platform), 'last_synced' => date('c'), ]; @@ -1110,7 +1110,7 @@ class RepositorySynchronizer // so repos have a safe place for custom workflows that sync won't touch. $entries[] = [ 'inline_content' => "# Custom Workflows\n\nPlace repo-specific workflows here.\n\n" - . "- **Never overwritten** by mokoplatform bulk sync\n" + . "- **Never overwritten** by mokocli bulk sync\n" . "- **Never deleted** by the repository-cleanup workflow\n" . "- Safe for custom CI, notifications, or repo-specific automation\n\n" . "Synced workflows live in the parent `{$wfDir}/` directory.\n", @@ -1261,7 +1261,7 @@ class RepositorySynchronizer // Append missing lines with a clear separator $merged = rtrim($existing) . "\n\n" - . "# ── mokoplatform sync (auto-appended) ────────────────────────────────\n" + . "# ── mokocli sync (auto-appended) ────────────────────────────────\n" . implode("\n", $missing) . "\n"; return $merged; @@ -1313,7 +1313,7 @@ class RepositorySynchronizer '{{standards_version}}' => self::STANDARDS_VERSION, '{{standards_minor}}' => self::STANDARDS_MINOR, '{{standards_branch}}' => self::VERSION_BRANCH, - // Single-brace tokens — used by GitHub repository templates and older mokoplatform stubs + // Single-brace tokens — used by GitHub repository templates and older mokocli stubs '{REPO_NAME}' => $repoInfo['name'] ?? $repo, '{REPO_URL}' => "https://github.com/{$org}/{$repo}", '{REPO_DESCRIPTION}' => $repoInfo['description'] ?? '', @@ -1383,8 +1383,8 @@ class RepositorySynchronizer */ private function generatePRBody(array $summary): string { - $body = "## mokoplatform Synchronization\n\n"; - $body .= "This PR synchronizes workflows, configurations, and scripts from the mokoplatform repository.\n\n"; + $body = "## mokocli Synchronization\n\n"; + $body .= "This PR synchronizes workflows, configurations, and scripts from the mokocli repository.\n\n"; // Summary statistics $body .= "### Summary\n"; @@ -1419,7 +1419,7 @@ class RepositorySynchronizer $body .= "- Verify issue templates render correctly\n\n"; $body .= "---\n"; - $body .= "*This PR was automatically generated by the mokoplatform bulk sync process.*\n"; + $body .= "*This PR was automatically generated by the mokocli bulk sync process.*\n"; return $body; } @@ -1524,7 +1524,7 @@ class RepositorySynchronizer default => 'EDEDED', }, match ($label) { - 'mokostandards' => 'mokoplatform compliance', + 'mokostandards' => 'mokocli compliance', 'type: chore' => 'Maintenance tasks', 'automation' => 'Automated processes or scripts', default => '', diff --git a/lib/Enterprise/RetryHelper.php b/lib/Enterprise/RetryHelper.php index 11ccffd..9898704 100644 --- a/lib/Enterprise/RetryHelper.php +++ b/lib/Enterprise/RetryHelper.php @@ -12,13 +12,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Recovery * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/RetryHelper.php * BRIEF: Retry helper with exponential backoff * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/SecurityValidator.php b/lib/Enterprise/SecurityValidator.php index 4cab950..be3c0ac 100644 --- a/lib/Enterprise/SecurityValidator.php +++ b/lib/Enterprise/SecurityValidator.php @@ -11,13 +11,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Security * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/SecurityValidator.php * BRIEF: Security validation library */ /** - * Security Validator for mokoplatform + * Security Validator for mokocli * * Provides security scanning and validation: * - Credential detection in code/config files @@ -47,7 +47,7 @@ declare(strict_types=1); * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/SourceResolver.php b/lib/Enterprise/SourceResolver.php index e943647..8b582b0 100644 --- a/lib/Enterprise/SourceResolver.php +++ b/lib/Enterprise/SourceResolver.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform.Lib - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/SourceResolver.php * BRIEF: Resolve the root-level source directory across repos (source/, src/, htdocs/) */ diff --git a/lib/Enterprise/SynchronizationException.php b/lib/Enterprise/SynchronizationException.php index 2d23cad..86b6ca1 100644 --- a/lib/Enterprise/SynchronizationException.php +++ b/lib/Enterprise/SynchronizationException.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/SynchronizationException.php * BRIEF: Custom exception for repository synchronization errors */ diff --git a/lib/Enterprise/TransactionManager.php b/lib/Enterprise/TransactionManager.php index 37b9e41..cf91c4a 100644 --- a/lib/Enterprise/TransactionManager.php +++ b/lib/Enterprise/TransactionManager.php @@ -11,13 +11,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Transaction * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/TransactionManager.php * BRIEF: Transaction manager for atomic operations */ /** - * Transaction Manager for mokoplatform + * Transaction Manager for mokocli * * Provides atomic multi-step operations with automatic rollback: * - Transaction boundaries for ACID operations @@ -54,7 +54,7 @@ declare(strict_types=1); * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/Enterprise/UnifiedValidation.php b/lib/Enterprise/UnifiedValidation.php index 95a1067..8db0afe 100644 --- a/lib/Enterprise/UnifiedValidation.php +++ b/lib/Enterprise/UnifiedValidation.php @@ -11,13 +11,13 @@ declare(strict_types=1); * FILE INFORMATION * DEFGROUP: MokoPlatform.Enterprise.Validation * INGROUP: MokoPlatform.Enterprise - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/Enterprise/UnifiedValidation.php * BRIEF: Unified validation framework */ /** - * Unified Validation Framework for mokoplatform + * Unified Validation Framework for mokocli * * Consolidates all validation logic into a single framework with plugins. * Replaces 12+ individual validator scripts with a unified approach. @@ -53,7 +53,7 @@ declare(strict_types=1); * * @package MokoPlatform\Enterprise * @version 04.00.04 - * @author mokoplatform Team + * @author mokocli Team * @license GPL-3.0-or-later */ diff --git a/lib/index.md b/lib/index.md index e1196af..a76eac1 100644 --- a/lib/index.md +++ b/lib/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Lib -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /lib/index.md BRIEF: Library directory index --> diff --git a/lib/plugins/Joomla/UpdateXmlGenerator.php b/lib/plugins/Joomla/UpdateXmlGenerator.php index de300db..505eafb 100644 --- a/lib/plugins/Joomla/UpdateXmlGenerator.php +++ b/lib/plugins/Joomla/UpdateXmlGenerator.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Joomla * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /lib/plugins/Joomla/UpdateXmlGenerator.php * BRIEF: Generates and updates Joomla extension updates.xml files */ diff --git a/maintenance/index.md b/maintenance/index.md index a18d20e..e291914 100644 --- a/maintenance/index.md +++ b/maintenance/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Maintenance -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /maintenance/index.md BRIEF: Maintenance directory index --> diff --git a/maintenance/pin_action_shas.php b/maintenance/pin_action_shas.php index 2cc239e..4d3c5f0 100644 --- a/maintenance/pin_action_shas.php +++ b/maintenance/pin_action_shas.php @@ -11,7 +11,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Maintenance * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /maintenance/pin_action_shas.php * BRIEF: Pin GitHub Actions to immutable commit SHAs in workflow files * NOTE: Resolves tag/branch refs to commit SHAs via the GitHub API to satisfy diff --git a/maintenance/repo_inventory.php b/maintenance/repo_inventory.php index 4776397..d019fd8 100644 --- a/maintenance/repo_inventory.php +++ b/maintenance/repo_inventory.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Maintenance * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /maintenance/repo_inventory.php * BRIEF: Generate a live inventory dashboard of all governed repos as a GitHub issue */ @@ -26,7 +26,7 @@ class RepoInventoryCli extends CliFramework private $api = null; private string $token = ''; private $platformConfig = null; - private const ALWAYS_EXCLUDE = ['mokoplatform', '.github-private']; + private const ALWAYS_EXCLUDE = ['mokocli', '.github-private']; protected function configure(): void { @@ -161,7 +161,7 @@ class RepoInventoryCli extends CliFramework if (!$this->dryRun) { $title = "dashboard: repository inventory ({$org})"; - $issueQuery = "repos/{$org}/mokoplatform/issues" + $issueQuery = "repos/{$org}/mokocli/issues" . "?labels=inventory&state=all&per_page=1" . "&sort=created&direction=desc"; [$_, $existing] = $this->ghApi('GET', $issueQuery, null); @@ -169,7 +169,7 @@ class RepoInventoryCli extends CliFramework $num = $existing[0]['number']; $this->ghApi( 'PATCH', - "repos/{$org}/mokoplatform/issues/{$num}", + "repos/{$org}/mokocli/issues/{$num}", [ 'title' => $title, 'body' => $body, @@ -181,7 +181,7 @@ class RepoInventoryCli extends CliFramework } else { [$_, $issue] = $this->ghApi( 'POST', - "repos/{$org}/mokoplatform/issues", + "repos/{$org}/mokocli/issues", [ 'title' => $title, 'body' => $body, @@ -226,7 +226,7 @@ class RepoInventoryCli extends CliFramework CURLOPT_HTTPHEADER => [ 'Authorization: bearer ' . $this->token, 'Content-Type: application/json', - 'User-Agent: mokoplatform-Inventory', + 'User-Agent: mokocli-Inventory', ], ]); $body = (string) curl_exec($ch); diff --git a/maintenance/rotate_secrets.php b/maintenance/rotate_secrets.php index 44b764d..882abf9 100644 --- a/maintenance/rotate_secrets.php +++ b/maintenance/rotate_secrets.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Maintenance * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /maintenance/rotate_secrets.php * BRIEF: Audit FTP secrets and variables across all governed repos -- report missing or stale */ @@ -25,7 +25,7 @@ class RotateSecretsCli extends CliFramework { private $api = null; private string $token = ''; - private const ALWAYS_EXCLUDE = ['mokoplatform', '.github-private']; + private const ALWAYS_EXCLUDE = ['mokocli', '.github-private']; private const ENVS = [ 'DEV' => [ 'vars' => ['DEV_FTP_HOST', 'DEV_FTP_PATH', 'DEV_FTP_USERNAME', 'DEV_FTP_SUFFIX'], @@ -186,7 +186,7 @@ class RotateSecretsCli extends CliFramework . "| Repository | Issue |\n|---|---|\n" . "{$table}\n\n---\n" . "*Auto-created by `rotate_secrets.php`*\n"; - $auditQuery = "repos/{$org}/mokoplatform/issues" + $auditQuery = "repos/{$org}/mokocli/issues" . "?labels=secret-audit&state=all" . "&per_page=1&sort=created&direction=desc"; [$_, $existing] = $this->ghApi('GET', $auditQuery, null); @@ -196,7 +196,7 @@ class RotateSecretsCli extends CliFramework $num = $existing[0]['number']; $this->ghApi( 'PATCH', - "repos/{$org}/mokoplatform/issues/{$num}", + "repos/{$org}/mokocli/issues/{$num}", [ 'title' => $auditTitle, 'body' => $body, @@ -210,7 +210,7 @@ class RotateSecretsCli extends CliFramework } else { [$_, $issue] = $this->ghApi( 'POST', - "repos/{$org}/mokoplatform/issues", + "repos/{$org}/mokocli/issues", [ 'title' => $auditTitle, 'body' => $body, diff --git a/maintenance/setup_labels.php b/maintenance/setup_labels.php index 04713be..cebfd6e 100644 --- a/maintenance/setup_labels.php +++ b/maintenance/setup_labels.php @@ -3,7 +3,7 @@ /* Copyright (C) 2026 Moko Consulting * - * REQUIRED FILE: This file must be present in all mokoplatform-compliant repositories + * REQUIRED FILE: This file must be present in all mokocli-compliant repositories * * This file is part of a Moko Consulting project. * @@ -12,9 +12,9 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Maintenance * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /maintenance/setup_labels.php - * BRIEF: REQUIRED label deployment script for all mokoplatform-governed repositories + * BRIEF: REQUIRED label deployment script for all mokocli-governed repositories */ declare(strict_types=1); @@ -27,7 +27,7 @@ use MokoCli\GitPlatformAdapter; use MokoCli\PlatformAdapterFactory; /** - * Deploys the standard set of repository labels required by mokoplatform. + * Deploys the standard set of repository labels required by mokocli. * * Uses the platform adapter (GitHub or Gitea) to create or update each label. * Supports --dry-run mode to preview without making changes. @@ -66,7 +66,7 @@ class SetupLabels extends CliFramework // Workflow / Process ['automation', '8B4513', 'Automated processes or scripts'], - ['mokoplatform', 'B60205', 'mokoplatform compliance'], + ['mokocli', 'B60205', 'mokocli compliance'], ['needs-review', 'FBCA04', 'Awaiting code review'], ['work-in-progress', 'D93F0B', 'Work in progress, not ready for merge'], ['breaking-change', 'D73A4A', 'Breaking API or functionality change'], @@ -106,8 +106,8 @@ class SetupLabels extends CliFramework ['health: poor', 'FF6B6B', 'Health score below 50'], // Sync / Automation - ['standards-update', 'B60205', 'mokoplatform sync update'], - ['standards-drift', 'FBCA04', 'Repository drifted from mokoplatform'], + ['standards-update', 'B60205', 'mokocli sync update'], + ['standards-drift', 'FBCA04', 'Repository drifted from mokocli'], ['sync-report', '0075CA', 'Bulk sync run report'], ['sync-failure', 'D73A4A', 'Bulk sync failure requiring attention'], ['push-failure', 'D73A4A', 'File push failure requiring attention'], diff --git a/maintenance/sync_dolibarr_readmes.php b/maintenance/sync_dolibarr_readmes.php index d413e23..4658ff6 100644 --- a/maintenance/sync_dolibarr_readmes.php +++ b/maintenance/sync_dolibarr_readmes.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Maintenance * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /maintenance/sync_dolibarr_readmes.php * BRIEF: Keeps root README.md and src/README.md in sync for Dolibarr module repositories * NOTE: Version format is zero-padded semver: XX.YY.ZZ (e.g. 04.00.04). All version regex @@ -78,7 +78,7 @@ class SyncDolibarrReadmes extends CliFramework $moduleName = $this->extractModuleName($rootContent, $repoRoot); $repoUrl = $this->extractField($rootContent, 'REPO', 'https://git.mokoconsulting.tech/MokoConsulting'); $defgroup = $this->extractField($rootContent, 'DEFGROUP', 'MokoPlatform.Module'); - $ingroup = $this->extractField($rootContent, 'INGROUP', 'mokoplatform'); + $ingroup = $this->extractField($rootContent, 'INGROUP', 'mokocli'); $brief = $this->extractField($rootContent, 'BRIEF', "{$moduleName} end-user documentation"); $installSection = $this->extractSection($rootContent, 'Installation'); @@ -272,7 +272,7 @@ NOTE: This file is auto-generated by sync_dolibarr_readmes.php from root README. Last synced: {$today} --> -[![mokoplatform](https://img.shields.io/badge/moko--platform-{$version}-blue)]({$repoUrl}) +[![mokocli](https://img.shields.io/badge/moko--platform-{$version}-blue)]({$repoUrl}) # {$moduleName} diff --git a/maintenance/update_repo_inventory.php b/maintenance/update_repo_inventory.php index 5ba7d04..1f4e175 100644 --- a/maintenance/update_repo_inventory.php +++ b/maintenance/update_repo_inventory.php @@ -11,7 +11,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Maintenance * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /maintenance/update_repo_inventory.php * BRIEF: Queries GitHub org repos and rewrites the auto-generated section of REPOSITORY_INVENTORY.md */ @@ -205,7 +205,7 @@ class UpdateRepoInventory extends CliFramework $lower = strtolower($name); - if (in_array('mokostandards-core', $topics, true) || $name === 'mokoplatform' || $name === '.github-private') { + if (in_array('mokostandards-core', $topics, true) || $name === 'mokocli' || $name === '.github-private') { $groups['core'][] = $repo; } elseif ( in_array('dolibarr-module', $topics, true) diff --git a/maintenance/update_sha_hashes.php b/maintenance/update_sha_hashes.php index 7c0eba2..7dbd1be 100755 --- a/maintenance/update_sha_hashes.php +++ b/maintenance/update_sha_hashes.php @@ -11,7 +11,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Maintenance * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /maintenance/update_sha_hashes.php * BRIEF: Update SHA-256 hashes in script registry */ diff --git a/maintenance/update_version_from_readme.php b/maintenance/update_version_from_readme.php index 8898bf1..49b2173 100644 --- a/maintenance/update_version_from_readme.php +++ b/maintenance/update_version_from_readme.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Maintenance * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /maintenance/update_version_from_readme.php * BRIEF: Reads VERSION from README.md FILE INFORMATION block and propagates it to all badges and FILE INFORMATION headers * NOTE: README.md is the single source of truth for the repository version. @@ -29,7 +29,7 @@ use MokoCli\{ApiClient, AuditLogger, CliFramework}; * badge and FILE INFORMATION VERSION field in the repository. * * Sources updated: - * - Markdown badge: [![mokoplatform](https://img.shields.io/badge/moko--platform-OLD-blue)] + * - Markdown badge: [![mokocli](https://img.shields.io/badge/moko--platform-OLD-blue)] * - Markdown header: VERSION: OLD (inside comment blocks) * - PHP header: * VERSION: OLD (inside block comments) * - YAML/Shell header:# VERSION: OLD @@ -220,7 +220,7 @@ class UpdateVersionFromReadme extends CliFramework $updated = $original; // ── Badge replacement (all file types) ─────────────────────────── - // shields.io badge: [![mokoplatform](...badge/moko--platform-XX.YY.ZZ-color)] + // shields.io badge: [![mokocli](...badge/moko--platform-XX.YY.ZZ-color)] $updated = preg_replace( '/(\[!\[MokoCli\]\(https:\/\/img\.shields\.io\/badge\/MokoCli-)[0-9]{2}\.[0-9]{2}\.[0-9]{2}(-[a-z]+\)\])/', '${1}' . $version . '${2}', diff --git a/mcp/config.example.json b/mcp/config.example.json index 47de388..339f5a1 100644 --- a/mcp/config.example.json +++ b/mcp/config.example.json @@ -1,6 +1,6 @@ { - "apiPath": "A:/mokoplatform", - "standardsPath": "A:/mokoplatform", + "apiPath": "A:/mokocli", + "standardsPath": "A:/mokocli", "giteaUrl": "https://git.mokoconsulting.tech", "giteaToken": "your-gitea-api-token" } diff --git a/mcp/package.json b/mcp/package.json index e59563a..44c916c 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -1,11 +1,11 @@ { - "name": "@mokoconsulting/mokoplatform-mcp", + "name": "@mokoconsulting/mokocli-mcp", "version": "1.0.0", - "description": "MCP server for mokoplatform governance — validation, compliance, platform detection, definitions browser", + "description": "MCP server for mokocli governance — validation, compliance, platform detection, definitions browser", "type": "module", "main": "dist/index.js", "bin": { - "mokoplatform-mcp": "dist/index.js" + "mokocli-mcp": "dist/index.js" }, "scripts": { "build": "tsc", diff --git a/mcp/servers/mokobackup/.mokogitea/CLAUDE.md b/mcp/servers/mokobackup/.mokogitea/CLAUDE.md index 4a39740..7b51297 100644 --- a/mcp/servers/mokobackup/.mokogitea/CLAUDE.md +++ b/mcp/servers/mokobackup/.mokogitea/CLAUDE.md @@ -46,4 +46,4 @@ Default config at `~/.mcp_mokobackup.json`. Client repos override via `BACKUP_MC - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files -- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/mcp/servers/mokobackup/.mokogitea/workflows/pr-check.yml b/mcp/servers/mokobackup/.mokogitea/workflows/pr-check.yml index a92189f..fe93637 100644 --- a/mcp/servers/mokobackup/.mokogitea/workflows/pr-check.yml +++ b/mcp/servers/mokobackup/.mokogitea/workflows/pr-check.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.CI -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.CI +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/universal/pr-check.yml.template # VERSION: 05.00.00 # BRIEF: PR gate — branch policy + code validation before merge diff --git a/mcp/servers/mokobackup/CONTRIBUTING.md b/mcp/servers/mokobackup/CONTRIBUTING.md index 2b4ccb8..4109c6b 100644 --- a/mcp/servers/mokobackup/CONTRIBUTING.md +++ b/mcp/servers/mokobackup/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing -See [standards](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki). +See [standards](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki). diff --git a/mcp/servers/mokobackup/README.md b/mcp/servers/mokobackup/README.md index ff422e6..73c6de4 100644 --- a/mcp/servers/mokobackup/README.md +++ b/mcp/servers/mokobackup/README.md @@ -51,7 +51,7 @@ Each client repo has its own `.backup-mcp.json` scoped via the `BACKUP_MCP_CONFI --- -> **[MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki)** -- central standards hub for all Moko Consulting projects. +> **[MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki)** -- central standards hub for all Moko Consulting projects. --- @@ -73,4 +73,4 @@ This project is licensed under the GNU General Public License v3.0 or later -- s --- -*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)* +*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home)* diff --git a/mcp/servers/mokocrm_api/.mokogitea/CLAUDE.md b/mcp/servers/mokocrm_api/.mokogitea/CLAUDE.md index d77ecb9..56a3168 100644 --- a/mcp/servers/mokocrm_api/.mokogitea/CLAUDE.md +++ b/mcp/servers/mokocrm_api/.mokogitea/CLAUDE.md @@ -41,4 +41,4 @@ src/ - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files -- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/mcp/servers/mokocrm_api/README.md b/mcp/servers/mokocrm_api/README.md index 80b3186..2eda4be 100644 --- a/mcp/servers/mokocrm_api/README.md +++ b/mcp/servers/mokocrm_api/README.md @@ -367,4 +367,4 @@ This project is licensed under the GNU General Public License v3.0 or later -- s --- -*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)* +*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home)* diff --git a/mcp/servers/mokodreamhost/.mokogitea/CLAUDE.md b/mcp/servers/mokodreamhost/.mokogitea/CLAUDE.md index be1c53e..5383398 100644 --- a/mcp/servers/mokodreamhost/.mokogitea/CLAUDE.md +++ b/mcp/servers/mokodreamhost/.mokogitea/CLAUDE.md @@ -39,4 +39,4 @@ src/ - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files -- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/mcp/servers/mokodreamhost/CONTRIBUTING.md b/mcp/servers/mokodreamhost/CONTRIBUTING.md index 2b4ccb8..4109c6b 100644 --- a/mcp/servers/mokodreamhost/CONTRIBUTING.md +++ b/mcp/servers/mokodreamhost/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing -See [standards](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki). +See [standards](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki). diff --git a/mcp/servers/mokodreamhost/README.md b/mcp/servers/mokodreamhost/README.md index 02fa64f..1f6ec10 100644 --- a/mcp/servers/mokodreamhost/README.md +++ b/mcp/servers/mokodreamhost/README.md @@ -156,4 +156,4 @@ Full documentation is available on the [Wiki](https://git.mokoconsulting.tech/Mo --- -*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)* +*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home)* diff --git a/mcp/servers/mokogitea_skill/skills/mokogitea/SKILL.md b/mcp/servers/mokogitea_skill/skills/mokogitea/SKILL.md index 7a91058..f4af8ee 100644 --- a/mcp/servers/mokogitea_skill/skills/mokogitea/SKILL.md +++ b/mcp/servers/mokogitea_skill/skills/mokogitea/SKILL.md @@ -185,6 +185,6 @@ All repos mirror to GitHub (mokoconsulting-tech org) as backup: - Port 2918 on GIT server is **shell SSH** (not just git protocol) — full command execution - Gitea repo names on server use **hyphens** (e.g. `mcp-mokobackup`), local dirs use **underscores** -- `mokoplatform` CLI tools handle CI checks — don't inline bash in workflows +- `mokocli` CLI tools handle CI checks — don't inline bash in workflows - All infra docs live in **mokogitea-private wiki**, not public repos - Two master SSH keys (jmiller + moko) on all servers diff --git a/mcp/servers/mokomonitor/.mokogitea/.moko-platform b/mcp/servers/mokomonitor/.mokogitea/.moko-platform index 7c293ce..8ffa6f5 100644 --- a/mcp/servers/mokomonitor/.mokogitea/.moko-platform +++ b/mcp/servers/mokomonitor/.mokogitea/.moko-platform @@ -1,5 +1,5 @@ - + monitor-mcpMokoConsulting 05.00.00 - + diff --git a/mcp/servers/mokomonitor/.mokogitea/CLAUDE.md b/mcp/servers/mokomonitor/.mokogitea/CLAUDE.md index c12dc4f..de7166d 100644 --- a/mcp/servers/mokomonitor/.mokogitea/CLAUDE.md +++ b/mcp/servers/mokomonitor/.mokogitea/CLAUDE.md @@ -32,7 +32,7 @@ src/ ``` - Config defines **connections** for health checks + optional **Grafana** config -- Sites list at `A:/mokoplatform/monitoring/sites.json` for bulk monitoring +- Sites list at `A:/mokocli/monitoring/sites.json` for bulk monitoring - Grafana at bench.mokoconsulting.tech — WaaS dashboard for uptime/performance ## Rules @@ -41,4 +41,4 @@ src/ - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files -- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/mcp/servers/mokomonitor/CONTRIBUTING.md b/mcp/servers/mokomonitor/CONTRIBUTING.md index 2b4ccb8..4109c6b 100644 --- a/mcp/servers/mokomonitor/CONTRIBUTING.md +++ b/mcp/servers/mokomonitor/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing -See [standards](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki). +See [standards](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki). diff --git a/mcp/servers/mokomonitor/README.md b/mcp/servers/mokomonitor/README.md index bdfc0d4..44eba64 100644 --- a/mcp/servers/mokomonitor/README.md +++ b/mcp/servers/mokomonitor/README.md @@ -48,7 +48,7 @@ monitor-mcp provides MCP tools for monitoring server infrastructure and Grafana --- -> **[MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki)** -- central standards hub for all Moko Consulting projects. +> **[MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki)** -- central standards hub for all Moko Consulting projects. --- @@ -70,4 +70,4 @@ This project is licensed under the GNU General Public License v3.0 or later -- s --- -*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)* +*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home)* diff --git a/mcp/servers/mokomonitor/mcp_mokomonitor/.mokogitea/.moko-platform b/mcp/servers/mokomonitor/mcp_mokomonitor/.mokogitea/.moko-platform index 7c293ce..8ffa6f5 100644 --- a/mcp/servers/mokomonitor/mcp_mokomonitor/.mokogitea/.moko-platform +++ b/mcp/servers/mokomonitor/mcp_mokomonitor/.mokogitea/.moko-platform @@ -1,5 +1,5 @@ - + monitor-mcpMokoConsulting 05.00.00 - + diff --git a/mcp/servers/mokomonitor/mcp_mokomonitor/.mokogitea/CLAUDE.md b/mcp/servers/mokomonitor/mcp_mokomonitor/.mokogitea/CLAUDE.md index c12dc4f..de7166d 100644 --- a/mcp/servers/mokomonitor/mcp_mokomonitor/.mokogitea/CLAUDE.md +++ b/mcp/servers/mokomonitor/mcp_mokomonitor/.mokogitea/CLAUDE.md @@ -32,7 +32,7 @@ src/ ``` - Config defines **connections** for health checks + optional **Grafana** config -- Sites list at `A:/mokoplatform/monitoring/sites.json` for bulk monitoring +- Sites list at `A:/mokocli/monitoring/sites.json` for bulk monitoring - Grafana at bench.mokoconsulting.tech — WaaS dashboard for uptime/performance ## Rules @@ -41,4 +41,4 @@ src/ - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files -- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/mcp/servers/mokossh/.mokogitea/CLAUDE.md b/mcp/servers/mokossh/.mokogitea/CLAUDE.md index 917a71e..b53d270 100644 --- a/mcp/servers/mokossh/.mokogitea/CLAUDE.md +++ b/mcp/servers/mokossh/.mokogitea/CLAUDE.md @@ -65,4 +65,4 @@ SSH key: `jmiller_private.openssh` - **Never commit** `.env`, `.claude/`, `.mcp.json`, `TODO.md` - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) -- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/mcp/servers/mokossh/.mokogitea/ISSUE_TEMPLATE/config.yml b/mcp/servers/mokossh/.mokogitea/ISSUE_TEMPLATE/config.yml index 14db946..fd83dde 100644 --- a/mcp/servers/mokossh/.mokogitea/ISSUE_TEMPLATE/config.yml +++ b/mcp/servers/mokossh/.mokogitea/ISSUE_TEMPLATE/config.yml @@ -8,7 +8,7 @@ contact_links: url: https://mokoconsulting.tech/ about: Get help or ask questions through our website - name: 📚 MokoCli Documentation - url: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + url: https://git.mokoconsulting.tech/MokoConsulting/mokocli about: View our coding standards and best practices - name: 🔒 Report a Security Vulnerability url: https://git.mokoconsulting.tech/mokoconsulting-tech/.github-private/security/advisories/new diff --git a/mcp/servers/mokossh/.mokogitea/workflows/auto-release.yml b/mcp/servers/mokossh/.mokogitea/workflows/auto-release.yml index 54b9a1c..29caa72 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/auto-release.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/auto-release.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Release -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Release +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/universal/auto-release.yml.template # VERSION: 05.00.00 # BRIEF: Universal build & release � detects platform from manifest.xml @@ -58,7 +58,7 @@ jobs: token: ${{ secrets.MOKOGITEA_TOKEN }} fetch-depth: 0 - - name: Setup mokoplatform tools + - name: Setup mokocli tools env: MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting @@ -69,9 +69,9 @@ jobs: sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 fi git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokoplatform.git" \ - /tmp/mokoplatform-api - cd /tmp/mokoplatform-api + "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git" \ + /tmp/mokocli-api + cd /tmp/mokocli-api composer install --no-dev --no-interaction --quiet @@ -79,7 +79,7 @@ jobs: - name: Detect platform id: platform run: | - php /tmp/mokoplatform-api/cli/manifest_read.php --path . --github-output + php /tmp/mokocli-api/cli/manifest_read.php --path . --github-output MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1 || true) MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1 || true) echo "manifest=${MANIFEST}" >> "$GITHUB_OUTPUT" @@ -88,7 +88,7 @@ jobs: - name: "Step 1: Read version" id: version run: | - VERSION=$(php /tmp/mokoplatform-api/cli/version_read.php --path .) + VERSION=$(php /tmp/mokocli-api/cli/version_read.php --path .) if [ -z "$VERSION" ]; then echo "::error::No VERSION in README.md" echo "skip=true" >> "$GITHUB_OUTPUT" @@ -103,7 +103,7 @@ jobs: id: bump if: steps.version.outputs.skip != 'true' run: | - MOKO_API="/tmp/mokoplatform-api/cli" + MOKO_API="/tmp/mokocli-api/cli" BUMP=$(php ${MOKO_API}/version_bump.php --path . --minor) VERSION=$(echo "$BUMP" | grep -oP '\d{2}\.\d{2}\.\d{2}$' || true) [ -z "$VERSION" ] && VERSION=$(php ${MOKO_API}/version_read.php --path .) @@ -253,7 +253,7 @@ jobs: steps.check.outputs.already_released != 'true' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/version_set_platform.php \ + php /tmp/mokocli-api/cli/version_set_platform.php \ --path . --version "$VERSION" --branch main # -- STEP 4: Update version badges ---------------------------------------- @@ -261,7 +261,7 @@ jobs: if: steps.version.outputs.skip != 'true' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/badge_update.php --path . --version "${VERSION}" 2>/dev/null || true + php /tmp/mokocli-api/cli/badge_update.php --path . --version "${VERSION}" 2>/dev/null || true - name: "Step 5: Write update stream" if: >- @@ -269,7 +269,7 @@ jobs: steps.platform.outputs.platform == 'joomla' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/updates_xml_build.php \ + php /tmp/mokocli-api/cli/updates_xml_build.php \ --path . --version "${VERSION}" --stability stable \ --gitea-url "${GITEA_URL}" --org "${GITEA_ORG}" --repo "${GITEA_REPO}" \ --github-output @@ -334,7 +334,7 @@ jobs: fi [ -z "$EXT_NAME" ] && EXT_NAME="${GITEA_REPO}" - NOTES=$(php /tmp/mokoplatform-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null) + NOTES=$(php /tmp/mokocli-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null) [ -z "$NOTES" ] && NOTES="Release ${VERSION}" # Build release name: "Pretty Name VERSION (type_element-VERSION)" @@ -425,8 +425,8 @@ jobs: [ ! -d "$SOURCE_DIR" ] && SOURCE_DIR="htdocs" [ ! -d "$SOURCE_DIR" ] && { echo "No src/ or htdocs/"; exit 0; } - # ZIP package (type-aware via mokoplatform PHP API) - php /tmp/mokoplatform-api/cli/joomla_build.php --path . --version "${VERSION}" --output /tmp + # ZIP package (type-aware via mokocli PHP API) + php /tmp/mokocli-api/cli/joomla_build.php --path . --version "${VERSION}" --output /tmp # Match the expected ZIP_NAME for upload BUILT_ZIP=$(ls /tmp/${TYPE_PREFIX}${EXT_ELEMENT}-${VERSION}.zip 2>/dev/null | head -1 || true) if [ -n "$BUILT_ZIP" ] && [ "$BUILT_ZIP" != "/tmp/${ZIP_NAME}" ]; then @@ -640,7 +640,7 @@ jobs: BRANCH="${{ steps.version.outputs.branch }}" GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}" - NOTES=$(php /tmp/mokoplatform-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null || true) + NOTES=$(php /tmp/mokocli-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null || true) [ -z "$NOTES" ] && NOTES="Release ${VERSION}" echo "$NOTES" > /tmp/release_notes.md @@ -689,7 +689,7 @@ jobs: - name: "Delete lesser pre-release channels" continue-on-error: true run: | - php /tmp/mokoplatform-api/cli/release_cascade.php \ + php /tmp/mokocli-api/cli/release_cascade.php \ --stability stable \ --token "${{ secrets.MOKOGITEA_TOKEN }}" \ --org "${GITEA_ORG}" --repo "${GITEA_REPO}" \ diff --git a/mcp/servers/mokossh/.mokogitea/workflows/cascade-dev.yml b/mcp/servers/mokossh/.mokogitea/workflows/cascade-dev.yml index e0511e8..e47d426 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/cascade-dev.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/cascade-dev.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Maintenance -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Maintenance +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/cascade-dev.yml.template # VERSION: 02.00.00 # BRIEF: Forward-merge main → all open branches after every push to main diff --git a/mcp/servers/mokossh/.mokogitea/workflows/cleanup.yml b/mcp/servers/mokossh/.mokogitea/workflows/cleanup.yml index 941a954..8520606 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/cleanup.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/cleanup.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Maintenance -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Maintenance +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/cleanup.yml # VERSION: 01.00.00 # BRIEF: Scheduled cleanup — delete merged branches and old workflow runs diff --git a/mcp/servers/mokossh/.mokogitea/workflows/deploy-manual.yml b/mcp/servers/mokossh/.mokogitea/workflows/deploy-manual.yml index 1d9c8da..4ebd21e 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/deploy-manual.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/deploy-manual.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Deploy -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Deploy +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/workflows/joomla/deploy-manual.yml.template # VERSION: 04.07.00 # BRIEF: Manual SFTP deploy to dev server for Joomla repos @@ -40,7 +40,7 @@ jobs: run: | php -v && composer --version - - name: Setup mokoplatform tools + - name: Setup mokocli tools env: GA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }} MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }} @@ -48,10 +48,10 @@ jobs: COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.MOKOGITEA_TOKEN || github.token }}"}}' run: | git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokoplatform.git" \ - /tmp/mokoplatform-api 2>/dev/null || true - if [ -d "/tmp/mokoplatform-api" ] && [ -f "/tmp/mokoplatform-api/composer.json" ]; then - cd /tmp/mokoplatform-api && composer install --no-dev --no-interaction --quiet 2>/dev/null || true + "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git" \ + /tmp/mokocli-api 2>/dev/null || true + if [ -d "/tmp/mokocli-api" ] && [ -f "/tmp/mokocli-api/composer.json" ]; then + cd /tmp/mokocli-api && composer install --no-dev --no-interaction --quiet 2>/dev/null || true fi - name: Check FTP configuration @@ -101,11 +101,11 @@ jobs: DEPLOY_ARGS=(--path . --src-dir "$SOURCE_DIR" --config /tmp/sftp-config.json) [ "${{ inputs.clear_remote }}" = "true" ] && DEPLOY_ARGS+=(--clear-remote) - PLATFORM=$(php /tmp/mokoplatform-api/cli/platform_detect.php --path . 2>/dev/null || true) - if [ "$PLATFORM" = "waas-component" ] && [ -f "/tmp/mokoplatform-api/deploy/deploy-joomla.php" ]; then - php /tmp/mokoplatform-api/deploy/deploy-joomla.php "${DEPLOY_ARGS[@]}" + PLATFORM=$(php /tmp/mokocli-api/cli/platform_detect.php --path . 2>/dev/null || true) + if [ "$PLATFORM" = "waas-component" ] && [ -f "/tmp/mokocli-api/deploy/deploy-joomla.php" ]; then + php /tmp/mokocli-api/deploy/deploy-joomla.php "${DEPLOY_ARGS[@]}" else - php /tmp/mokoplatform-api/deploy/deploy-sftp.php "${DEPLOY_ARGS[@]}" + php /tmp/mokocli-api/deploy/deploy-sftp.php "${DEPLOY_ARGS[@]}" fi rm -f /tmp/deploy_key /tmp/sftp-config.json diff --git a/mcp/servers/mokossh/.mokogitea/workflows/gitleaks.yml b/mcp/servers/mokossh/.mokogitea/workflows/gitleaks.yml index 3a62123..9739b1f 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/gitleaks.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/gitleaks.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Security -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Security +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/gitleaks.yml.template # VERSION: 01.00.00 # BRIEF: Secret scanning — detect leaked credentials, API keys, and tokens diff --git a/mcp/servers/mokossh/.mokogitea/workflows/notify.yml b/mcp/servers/mokossh/.mokogitea/workflows/notify.yml index dd2eb8d..0e3ad8e 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/notify.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/notify.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Notifications -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Notifications +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/notify.yml # VERSION: 01.00.00 # BRIEF: Push notifications via ntfy on release success or workflow failure diff --git a/mcp/servers/mokossh/.mokogitea/workflows/pr-check.yml b/mcp/servers/mokossh/.mokogitea/workflows/pr-check.yml index f869c88..573efed 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/pr-check.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/pr-check.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.CI -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.CI +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/universal/pr-check.yml.template # VERSION: 05.00.00 # BRIEF: PR gate — branch policy + code validation before merge diff --git a/mcp/servers/mokossh/.mokogitea/workflows/pre-release.yml b/mcp/servers/mokossh/.mokogitea/workflows/pre-release.yml index b43a80b..257763c 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/pre-release.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/pre-release.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Release -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Release +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/workflows/universal/pre-release.yml.template # VERSION: 05.00.00 # BRIEF: Manual pre-release — builds dev/alpha/beta/rc packages from any branch @@ -52,23 +52,23 @@ jobs: sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl >/dev/null 2>&1 fi - - name: Setup mokoplatform tools + - name: Setup mokocli tools env: MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting run: | - git clone --depth 1 --branch main --quiet "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokoplatform.git" /tmp/mokoplatform-api + git clone --depth 1 --branch main --quiet "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git" /tmp/mokocli-api - name: Detect platform id: platform run: | - php /tmp/mokoplatform-api/cli/manifest_read.php --path . --github-output + php /tmp/mokocli-api/cli/manifest_read.php --path . --github-output - name: Resolve metadata id: meta run: | STABILITY="${{ inputs.stability }}" - MOKO_API="/tmp/mokoplatform-api/cli" + MOKO_API="/tmp/mokocli-api/cli" case "$STABILITY" in development) SUFFIX="-dev"; TAG="development" ;; @@ -128,7 +128,7 @@ jobs: PLATFORM="${{ steps.platform.outputs.platform }}" if [ "$PLATFORM" = "joomla" ]; then - php /tmp/mokoplatform-api/cli/joomla_build.php --path . --version "${VERSION}" --suffix "${SUFFIX}" --output build --github-output + php /tmp/mokocli-api/cli/joomla_build.php --path . --version "${VERSION}" --suffix "${SUFFIX}" --output build --github-output else # Generic build: zip src/ directory SOURCE_DIR="src" @@ -200,7 +200,7 @@ jobs: VERSION="${{ steps.meta.outputs.version }}" STABILITY="${{ steps.meta.outputs.stability }}" SHA256="${{ steps.zip.outputs.sha256 }}" - php /tmp/mokoplatform-api/cli/updates_xml_build.php --path . --version "$VERSION" --stability "$STABILITY" --sha "$SHA256" --gitea-url "$GITEA_URL" --org "$GITEA_ORG" --repo "$GITEA_REPO" + php /tmp/mokocli-api/cli/updates_xml_build.php --path . --version "$VERSION" --stability "$STABILITY" --sha "$SHA256" --gitea-url "$GITEA_URL" --org "$GITEA_ORG" --repo "$GITEA_REPO" if ! git diff --quiet updates.xml 2>/dev/null; then git config --local user.email "gitea-actions[bot]@mokoconsulting.tech" git config --local user.name "gitea-actions[bot]" @@ -212,7 +212,7 @@ jobs: - name: "Sync updates.xml to all branches" if: steps.platform.outputs.platform == 'joomla' run: | - php /tmp/mokoplatform-api/cli/updates_xml_sync.php --path . --current "${{ github.ref_name }}" --branches main,dev --version "${{ steps.meta.outputs.version }}" --token "${{ secrets.MOKOGITEA_TOKEN }}" --org "${GITEA_ORG}" --repo "${GITEA_REPO}" --gitea-url "${GITEA_URL}" + php /tmp/mokocli-api/cli/updates_xml_sync.php --path . --current "${{ github.ref_name }}" --branches main,dev --version "${{ steps.meta.outputs.version }}" --token "${{ secrets.MOKOGITEA_TOKEN }}" --org "${GITEA_ORG}" --repo "${GITEA_REPO}" --gitea-url "${GITEA_URL}" - name: "Delete lesser pre-release channels (cascade)" continue-on-error: true diff --git a/mcp/servers/mokossh/.mokogitea/workflows/repo-health.yml b/mcp/servers/mokossh/.mokogitea/workflows/repo-health.yml index 2e412e2..48f27ab 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/repo-health.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/repo-health.yml @@ -7,8 +7,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Validation -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Validation +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/joomla/repo_health.yml.template # VERSION: 04.06.00 # BRIEF: Enforces repository guardrails by validating release configuration, scripts governance, tooling availability, and core repository health artifacts. diff --git a/mcp/servers/mokossh/.mokogitea/workflows/security-audit.yml b/mcp/servers/mokossh/.mokogitea/workflows/security-audit.yml index f377378..2406a07 100644 --- a/mcp/servers/mokossh/.mokogitea/workflows/security-audit.yml +++ b/mcp/servers/mokossh/.mokogitea/workflows/security-audit.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Security -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Security +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/security-audit.yml # VERSION: 01.00.00 # BRIEF: Dependency vulnerability scanning for composer and npm packages diff --git a/mcp/servers/mokossh/README.md b/mcp/servers/mokossh/README.md index 8b5c8d2..d51cfb9 100644 --- a/mcp/servers/mokossh/README.md +++ b/mcp/servers/mokossh/README.md @@ -72,7 +72,7 @@ ssh-mcp exposes 37 tools that let Claude Code manage remote servers over SSH. Ca --- -> **[MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki)** -- central standards hub for all Moko Consulting projects. +> **[MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki)** -- central standards hub for all Moko Consulting projects. --- @@ -94,4 +94,4 @@ This project is licensed under the GNU General Public License v3.0 or later -- s --- -*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)* +*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home)* diff --git a/mcp/servers/mokossh/docs/images/ssh-manager-cli-menu.png b/mcp/servers/mokossh/docs/images/ssh-manager-cli-menu.png index c445f2d2b9943a30ca042758ea605e2185b94cdb..c11027e88f9b645e94479205ad24b902954dcf83 100644 GIT binary patch delta 172 zcmbO`Bffh^JWFSQpL-+gR#wK)4cntPFwSgk|7yy#{i`W+&$I1KGAywL?GJibfS7gr zgC4f;dF?lTvu(feo4wqzJ;0U&h&i_h*m518yItZo*V&8PpRM7RVQ**N!VSbcK+Fro zeA}6~@EcccH`fzb^LqOeNkM^M+rJ76somW!^HC^4qP><=czZ3U$W+UAVP}!;!p@@C X7PY^6D!TpEQ?bvdx8K_+ZZ8D@R_;p% delta 207 zcmeC45kGfEJZoowpF3|O%T^Y~&<%{d+aotH&TM7mZU1D-wEdGQbI&uNSe*<@YynX0 zb`J{>vu?lL!}dK7$iMWPZTqF)?B$L?wx=xz5OZ$#wBF?)ZW(r< z{LjtYK+FTgAU5CjpPTuOtAO%4dID=+1L+%*f&#yQ^b27jwYxx?@1szH1W;cdr||YX mPLZjWKsK|p$aZFD(QAu - + joomla-api-mcp MokoConsulting @@ -14,7 +14,7 @@ nodejs 04.07.00 - https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + https://git.mokoconsulting.tech/MokoConsulting/mokocli 2026-05-10T19:51:10+00:00 @@ -22,4 +22,4 @@ mcp-server src/ - + diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/auto-release.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/auto-release.yml index cf54398..6ec4a31 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/auto-release.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/auto-release.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Release -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Release +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/universal/auto-release.yml.template # VERSION: 05.00.00 # BRIEF: Universal build & release � detects platform from manifest.xml @@ -58,7 +58,7 @@ jobs: token: ${{ secrets.MOKOGITEA_TOKEN }} fetch-depth: 0 - - name: Setup mokoplatform tools + - name: Setup mokocli tools env: MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting @@ -69,9 +69,9 @@ jobs: sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 fi git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokoplatform.git" \ - /tmp/mokoplatform-api - cd /tmp/mokoplatform-api + "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git" \ + /tmp/mokocli-api + cd /tmp/mokocli-api composer install --no-dev --no-interaction --quiet @@ -79,7 +79,7 @@ jobs: - name: Detect platform id: platform run: | - php /tmp/mokoplatform-api/cli/manifest_read.php --path . --github-output + php /tmp/mokocli-api/cli/manifest_read.php --path . --github-output MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1 || true) MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1 || true) echo "manifest=${MANIFEST}" >> "$GITHUB_OUTPUT" @@ -88,7 +88,7 @@ jobs: - name: "Step 1: Read version" id: version run: | - VERSION=$(php /tmp/mokoplatform-api/cli/version_read.php --path .) + VERSION=$(php /tmp/mokocli-api/cli/version_read.php --path .) if [ -z "$VERSION" ]; then echo "::error::No VERSION in README.md" echo "skip=true" >> "$GITHUB_OUTPUT" @@ -103,7 +103,7 @@ jobs: id: bump if: steps.version.outputs.skip != 'true' run: | - MOKO_API="/tmp/mokoplatform-api/cli" + MOKO_API="/tmp/mokocli-api/cli" BUMP=$(php ${MOKO_API}/version_bump.php --path . --minor) VERSION=$(echo "$BUMP" | grep -oP '\d{2}\.\d{2}\.\d{2}$' || true) [ -z "$VERSION" ] && VERSION=$(php ${MOKO_API}/version_read.php --path .) @@ -253,7 +253,7 @@ jobs: steps.check.outputs.already_released != 'true' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/version_set_platform.php \ + php /tmp/mokocli-api/cli/version_set_platform.php \ --path . --version "$VERSION" --branch main # -- STEP 4: Update version badges ---------------------------------------- @@ -261,7 +261,7 @@ jobs: if: steps.version.outputs.skip != 'true' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/badge_update.php --path . --version "${VERSION}" 2>/dev/null || true + php /tmp/mokocli-api/cli/badge_update.php --path . --version "${VERSION}" 2>/dev/null || true - name: "Step 5: Write update stream" if: >- @@ -269,7 +269,7 @@ jobs: steps.platform.outputs.platform == 'joomla' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/updates_xml_build.php \ + php /tmp/mokocli-api/cli/updates_xml_build.php \ --path . --version "${VERSION}" --stability stable \ --gitea-url "${GITEA_URL}" --org "${GITEA_ORG}" --repo "${GITEA_REPO}" \ --github-output @@ -334,7 +334,7 @@ jobs: fi [ -z "$EXT_NAME" ] && EXT_NAME="${GITEA_REPO}" - NOTES=$(php /tmp/mokoplatform-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null) + NOTES=$(php /tmp/mokocli-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null) [ -z "$NOTES" ] && NOTES="Release ${VERSION}" # Build release name: "Pretty Name VERSION (type_element-VERSION)" @@ -425,8 +425,8 @@ jobs: [ ! -d "$SOURCE_DIR" ] && SOURCE_DIR="htdocs" [ ! -d "$SOURCE_DIR" ] && { echo "No src/ or htdocs/"; exit 0; } - # ZIP package (type-aware via mokoplatform PHP API) - php /tmp/mokoplatform-api/cli/joomla_build.php --path . --version "${VERSION}" --output /tmp + # ZIP package (type-aware via mokocli PHP API) + php /tmp/mokocli-api/cli/joomla_build.php --path . --version "${VERSION}" --output /tmp # Match the expected ZIP_NAME for upload BUILT_ZIP=$(ls /tmp/${TYPE_PREFIX}${EXT_ELEMENT}-${VERSION}.zip 2>/dev/null | head -1 || true) if [ -n "$BUILT_ZIP" ] && [ "$BUILT_ZIP" != "/tmp/${ZIP_NAME}" ]; then @@ -640,7 +640,7 @@ jobs: BRANCH="${{ steps.version.outputs.branch }}" GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}" - NOTES=$(php /tmp/mokoplatform-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null || true) + NOTES=$(php /tmp/mokocli-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null || true) [ -z "$NOTES" ] && NOTES="Release ${VERSION}" echo "$NOTES" > /tmp/release_notes.md @@ -689,7 +689,7 @@ jobs: - name: "Delete lesser pre-release channels" continue-on-error: true run: | - php /tmp/mokoplatform-api/cli/release_cascade.php \ + php /tmp/mokocli-api/cli/release_cascade.php \ --stability stable \ --token "${{ secrets.MOKOGITEA_TOKEN }}" \ --org "${GITEA_ORG}" --repo "${GITEA_REPO}" \ diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/cascade-dev.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/cascade-dev.yml index e0511e8..e47d426 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/cascade-dev.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/cascade-dev.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Maintenance -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Maintenance +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/cascade-dev.yml.template # VERSION: 02.00.00 # BRIEF: Forward-merge main → all open branches after every push to main diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/cleanup.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/cleanup.yml index 941a954..8520606 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/cleanup.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/cleanup.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Maintenance -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Maintenance +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/cleanup.yml # VERSION: 01.00.00 # BRIEF: Scheduled cleanup — delete merged branches and old workflow runs diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/deploy-manual.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/deploy-manual.yml index 1d9c8da..4ebd21e 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/deploy-manual.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/deploy-manual.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Deploy -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Deploy +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/workflows/joomla/deploy-manual.yml.template # VERSION: 04.07.00 # BRIEF: Manual SFTP deploy to dev server for Joomla repos @@ -40,7 +40,7 @@ jobs: run: | php -v && composer --version - - name: Setup mokoplatform tools + - name: Setup mokocli tools env: GA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }} MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }} @@ -48,10 +48,10 @@ jobs: COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.MOKOGITEA_TOKEN || github.token }}"}}' run: | git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokoplatform.git" \ - /tmp/mokoplatform-api 2>/dev/null || true - if [ -d "/tmp/mokoplatform-api" ] && [ -f "/tmp/mokoplatform-api/composer.json" ]; then - cd /tmp/mokoplatform-api && composer install --no-dev --no-interaction --quiet 2>/dev/null || true + "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git" \ + /tmp/mokocli-api 2>/dev/null || true + if [ -d "/tmp/mokocli-api" ] && [ -f "/tmp/mokocli-api/composer.json" ]; then + cd /tmp/mokocli-api && composer install --no-dev --no-interaction --quiet 2>/dev/null || true fi - name: Check FTP configuration @@ -101,11 +101,11 @@ jobs: DEPLOY_ARGS=(--path . --src-dir "$SOURCE_DIR" --config /tmp/sftp-config.json) [ "${{ inputs.clear_remote }}" = "true" ] && DEPLOY_ARGS+=(--clear-remote) - PLATFORM=$(php /tmp/mokoplatform-api/cli/platform_detect.php --path . 2>/dev/null || true) - if [ "$PLATFORM" = "waas-component" ] && [ -f "/tmp/mokoplatform-api/deploy/deploy-joomla.php" ]; then - php /tmp/mokoplatform-api/deploy/deploy-joomla.php "${DEPLOY_ARGS[@]}" + PLATFORM=$(php /tmp/mokocli-api/cli/platform_detect.php --path . 2>/dev/null || true) + if [ "$PLATFORM" = "waas-component" ] && [ -f "/tmp/mokocli-api/deploy/deploy-joomla.php" ]; then + php /tmp/mokocli-api/deploy/deploy-joomla.php "${DEPLOY_ARGS[@]}" else - php /tmp/mokoplatform-api/deploy/deploy-sftp.php "${DEPLOY_ARGS[@]}" + php /tmp/mokocli-api/deploy/deploy-sftp.php "${DEPLOY_ARGS[@]}" fi rm -f /tmp/deploy_key /tmp/sftp-config.json diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/gitleaks.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/gitleaks.yml index 3a62123..9739b1f 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/gitleaks.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/gitleaks.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Security -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Security +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/gitleaks.yml.template # VERSION: 01.00.00 # BRIEF: Secret scanning — detect leaked credentials, API keys, and tokens diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/notify.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/notify.yml index dd2eb8d..0e3ad8e 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/notify.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/notify.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Notifications -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Notifications +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/notify.yml # VERSION: 01.00.00 # BRIEF: Push notifications via ntfy on release success or workflow failure diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/pr-check.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/pr-check.yml index cc2455d..1163ccd 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/pr-check.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/pr-check.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.CI -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.CI +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/universal/pr-check.yml.template # VERSION: 05.00.00 # BRIEF: PR gate — branch policy + code validation before merge diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/pre-release.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/pre-release.yml index b43a80b..257763c 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/pre-release.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/pre-release.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Release -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Release +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/workflows/universal/pre-release.yml.template # VERSION: 05.00.00 # BRIEF: Manual pre-release — builds dev/alpha/beta/rc packages from any branch @@ -52,23 +52,23 @@ jobs: sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl >/dev/null 2>&1 fi - - name: Setup mokoplatform tools + - name: Setup mokocli tools env: MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting run: | - git clone --depth 1 --branch main --quiet "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokoplatform.git" /tmp/mokoplatform-api + git clone --depth 1 --branch main --quiet "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git" /tmp/mokocli-api - name: Detect platform id: platform run: | - php /tmp/mokoplatform-api/cli/manifest_read.php --path . --github-output + php /tmp/mokocli-api/cli/manifest_read.php --path . --github-output - name: Resolve metadata id: meta run: | STABILITY="${{ inputs.stability }}" - MOKO_API="/tmp/mokoplatform-api/cli" + MOKO_API="/tmp/mokocli-api/cli" case "$STABILITY" in development) SUFFIX="-dev"; TAG="development" ;; @@ -128,7 +128,7 @@ jobs: PLATFORM="${{ steps.platform.outputs.platform }}" if [ "$PLATFORM" = "joomla" ]; then - php /tmp/mokoplatform-api/cli/joomla_build.php --path . --version "${VERSION}" --suffix "${SUFFIX}" --output build --github-output + php /tmp/mokocli-api/cli/joomla_build.php --path . --version "${VERSION}" --suffix "${SUFFIX}" --output build --github-output else # Generic build: zip src/ directory SOURCE_DIR="src" @@ -200,7 +200,7 @@ jobs: VERSION="${{ steps.meta.outputs.version }}" STABILITY="${{ steps.meta.outputs.stability }}" SHA256="${{ steps.zip.outputs.sha256 }}" - php /tmp/mokoplatform-api/cli/updates_xml_build.php --path . --version "$VERSION" --stability "$STABILITY" --sha "$SHA256" --gitea-url "$GITEA_URL" --org "$GITEA_ORG" --repo "$GITEA_REPO" + php /tmp/mokocli-api/cli/updates_xml_build.php --path . --version "$VERSION" --stability "$STABILITY" --sha "$SHA256" --gitea-url "$GITEA_URL" --org "$GITEA_ORG" --repo "$GITEA_REPO" if ! git diff --quiet updates.xml 2>/dev/null; then git config --local user.email "gitea-actions[bot]@mokoconsulting.tech" git config --local user.name "gitea-actions[bot]" @@ -212,7 +212,7 @@ jobs: - name: "Sync updates.xml to all branches" if: steps.platform.outputs.platform == 'joomla' run: | - php /tmp/mokoplatform-api/cli/updates_xml_sync.php --path . --current "${{ github.ref_name }}" --branches main,dev --version "${{ steps.meta.outputs.version }}" --token "${{ secrets.MOKOGITEA_TOKEN }}" --org "${GITEA_ORG}" --repo "${GITEA_REPO}" --gitea-url "${GITEA_URL}" + php /tmp/mokocli-api/cli/updates_xml_sync.php --path . --current "${{ github.ref_name }}" --branches main,dev --version "${{ steps.meta.outputs.version }}" --token "${{ secrets.MOKOGITEA_TOKEN }}" --org "${GITEA_ORG}" --repo "${GITEA_REPO}" --gitea-url "${GITEA_URL}" - name: "Delete lesser pre-release channels (cascade)" continue-on-error: true diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/repo-health.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/repo-health.yml index 2e412e2..48f27ab 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/repo-health.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/repo-health.yml @@ -7,8 +7,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Validation -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Validation +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/joomla/repo_health.yml.template # VERSION: 04.06.00 # BRIEF: Enforces repository guardrails by validating release configuration, scripts governance, tooling availability, and core repository health artifacts. diff --git a/mcp/servers/mokosuite_api/.mokogitea/workflows/security-audit.yml b/mcp/servers/mokosuite_api/.mokogitea/workflows/security-audit.yml index f377378..2406a07 100644 --- a/mcp/servers/mokosuite_api/.mokogitea/workflows/security-audit.yml +++ b/mcp/servers/mokosuite_api/.mokogitea/workflows/security-audit.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Security -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Security +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /.gitea/workflows/security-audit.yml # VERSION: 01.00.00 # BRIEF: Dependency vulnerability scanning for composer and npm packages diff --git a/mcp/servers/mokosuite_api/README.md b/mcp/servers/mokosuite_api/README.md index 2ec82b4..4e6041c 100644 --- a/mcp/servers/mokosuite_api/README.md +++ b/mcp/servers/mokosuite_api/README.md @@ -79,7 +79,7 @@ joomla-api-mcp wraps the entire Joomla Web Services REST API into MCP tools that --- -> **[MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki)** -- central standards hub for all Moko Consulting projects. +> **[MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki)** -- central standards hub for all Moko Consulting projects. --- @@ -101,4 +101,4 @@ This project is licensed under the GNU General Public License v3.0 or later -- s --- -*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)* +*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home)* diff --git a/mcp/servers/windows/.mokogitea/CLAUDE.md b/mcp/servers/windows/.mokogitea/CLAUDE.md index 48b6a91..8e557f0 100644 --- a/mcp/servers/windows/.mokogitea/CLAUDE.md +++ b/mcp/servers/windows/.mokogitea/CLAUDE.md @@ -41,4 +41,4 @@ src/ - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files -- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/mcp/servers/windows/.mokogitea/ISSUE_TEMPLATE/config.yml b/mcp/servers/windows/.mokogitea/ISSUE_TEMPLATE/config.yml index 14db946..fd83dde 100644 --- a/mcp/servers/windows/.mokogitea/ISSUE_TEMPLATE/config.yml +++ b/mcp/servers/windows/.mokogitea/ISSUE_TEMPLATE/config.yml @@ -8,7 +8,7 @@ contact_links: url: https://mokoconsulting.tech/ about: Get help or ask questions through our website - name: 📚 MokoCli Documentation - url: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + url: https://git.mokoconsulting.tech/MokoConsulting/mokocli about: View our coding standards and best practices - name: 🔒 Report a Security Vulnerability url: https://git.mokoconsulting.tech/mokoconsulting-tech/.github-private/security/advisories/new diff --git a/mcp/servers/windows/.mokogitea/manifest.xml b/mcp/servers/windows/.mokogitea/manifest.xml index 9066fd5..4f8b74a 100644 --- a/mcp/servers/windows/.mokogitea/manifest.xml +++ b/mcp/servers/windows/.mokogitea/manifest.xml @@ -2,9 +2,9 @@ - + mcp-windows MokoConsulting @@ -14,11 +14,11 @@ mcp 05.00.00 - https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + https://git.mokoconsulting.tech/MokoConsulting/mokocli TypeScript mcp-server src/ - + diff --git a/mcp/servers/windows/.mokogitea/workflows/auto-release.yml b/mcp/servers/windows/.mokogitea/workflows/auto-release.yml index 3103b6b..47d5354 100644 --- a/mcp/servers/windows/.mokogitea/workflows/auto-release.yml +++ b/mcp/servers/windows/.mokogitea/workflows/auto-release.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Release -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokoplatform +# INGROUP: mokocli.Release +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli # PATH: /templates/workflows/universal/auto-release.yml.template # VERSION: 05.00.00 # BRIEF: Universal build & release � detects platform from manifest.xml @@ -56,7 +56,7 @@ jobs: token: ${{ secrets.MOKOGITEA_TOKEN }} fetch-depth: 0 - - name: Setup mokoplatform tools + - name: Setup mokocli tools env: MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting @@ -67,9 +67,9 @@ jobs: sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 fi git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokoplatform.git" \ - /tmp/mokoplatform-api - cd /tmp/mokoplatform-api + "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git" \ + /tmp/mokocli-api + cd /tmp/mokocli-api composer install --no-dev --no-interaction --quiet @@ -77,7 +77,7 @@ jobs: - name: Detect platform id: platform run: | - php /tmp/mokoplatform-api/cli/manifest_read.php --path . --github-output + php /tmp/mokocli-api/cli/manifest_read.php --path . --github-output MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1 || true) MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1 || true) echo "manifest=${MANIFEST}" >> "$GITHUB_OUTPUT" @@ -86,7 +86,7 @@ jobs: - name: "Step 1: Read version" id: version run: | - VERSION=$(php /tmp/mokoplatform-api/cli/version_read.php --path .) + VERSION=$(php /tmp/mokocli-api/cli/version_read.php --path .) if [ -z "$VERSION" ]; then echo "::error::No VERSION in README.md" echo "skip=true" >> "$GITHUB_OUTPUT" @@ -102,7 +102,7 @@ jobs: id: bump if: steps.version.outputs.skip != 'true' run: | - MOKO_API="/tmp/mokoplatform-api/cli" + MOKO_API="/tmp/mokocli-api/cli" BUMP=$(php ${MOKO_API}/version_bump.php --path . --minor) VERSION=$(echo "$BUMP" | grep -oP '\d{2}\.\d{2}\.\d{2}$' || true) [ -z "$VERSION" ] && VERSION=$(php ${MOKO_API}/version_read.php --path .) @@ -252,7 +252,7 @@ jobs: steps.check.outputs.already_released != 'true' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/version_set_platform.php \ + php /tmp/mokocli-api/cli/version_set_platform.php \ --path . --version "$VERSION" --branch main # -- STEP 4: Update version badges ---------------------------------------- @@ -260,7 +260,7 @@ jobs: if: steps.version.outputs.skip != 'true' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/badge_update.php --path . --version "${VERSION}" 2>/dev/null || true + php /tmp/mokocli-api/cli/badge_update.php --path . --version "${VERSION}" 2>/dev/null || true - name: "Step 5: Write update stream" if: >- @@ -268,7 +268,7 @@ jobs: steps.platform.outputs.platform == 'joomla' run: | VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - php /tmp/mokoplatform-api/cli/updates_xml_build.php \ + php /tmp/mokocli-api/cli/updates_xml_build.php \ --path . --version "${VERSION}" --stability stable \ --gitea-url "${GITEA_URL}" --org "${GITEA_ORG}" --repo "${GITEA_REPO}" \ --github-output @@ -333,7 +333,7 @@ jobs: fi [ -z "$EXT_NAME" ] && EXT_NAME="${GITEA_REPO}" - NOTES=$(php /tmp/mokoplatform-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null) + NOTES=$(php /tmp/mokocli-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null) [ -z "$NOTES" ] && NOTES="Release ${VERSION}" # Build release name: "Pretty Name VERSION (type_element-VERSION)" @@ -424,8 +424,8 @@ jobs: [ ! -d "$SOURCE_DIR" ] && SOURCE_DIR="htdocs" [ ! -d "$SOURCE_DIR" ] && { echo "No src/ or htdocs/"; exit 0; } - # ZIP package (type-aware via mokoplatform PHP API) - php /tmp/mokoplatform-api/cli/joomla_build.php --path . --version "${VERSION}" --output /tmp + # ZIP package (type-aware via mokocli PHP API) + php /tmp/mokocli-api/cli/joomla_build.php --path . --version "${VERSION}" --output /tmp # Match the expected ZIP_NAME for upload BUILT_ZIP=$(ls /tmp/${TYPE_PREFIX}${EXT_ELEMENT}-${VERSION}.zip 2>/dev/null | head -1 || true) if [ -n "$BUILT_ZIP" ] && [ "$BUILT_ZIP" != "/tmp/${ZIP_NAME}" ]; then @@ -639,7 +639,7 @@ jobs: BRANCH="${{ steps.version.outputs.branch }}" GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}" - NOTES=$(php /tmp/mokoplatform-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null || true) + NOTES=$(php /tmp/mokocli-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null || true) [ -z "$NOTES" ] && NOTES="Release ${VERSION}" echo "$NOTES" > /tmp/release_notes.md @@ -688,7 +688,7 @@ jobs: - name: "Delete lesser pre-release channels" continue-on-error: true run: | - php /tmp/mokoplatform-api/cli/release_cascade.php \ + php /tmp/mokocli-api/cli/release_cascade.php \ --stability stable \ --token "${{ secrets.MOKOGITEA_TOKEN }}" \ --org "${GITEA_ORG}" --repo "${GITEA_REPO}" \ diff --git a/mcp/servers/windows/.mokogitea/workflows/mcp-auto-release.yml b/mcp/servers/windows/.mokogitea/workflows/mcp-auto-release.yml index 631cb83..68f2c40 100644 --- a/mcp/servers/windows/.mokogitea/workflows/mcp-auto-release.yml +++ b/mcp/servers/windows/.mokogitea/workflows/mcp-auto-release.yml @@ -87,13 +87,13 @@ jobs: done # ── Version ────────────────────────────────────────────────────── - - name: Setup mokoplatform tools + - name: Setup mokocli tools env: GH_TOKEN: ${{ secrets.GH_PAT || github.token }} COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_PAT || github.token }}"}}' run: | git clone --depth 1 --branch version/04 --quiet \ - "https://x-access-token:${GH_TOKEN}@github.com/MokoConsulting/mokoplatform.git" \ + "https://x-access-token:${GH_TOKEN}@github.com/MokoConsulting/mokocli.git" \ /tmp/mokostandards cd /tmp/mokostandards composer install --no-dev --no-interaction --quiet diff --git a/mcp/servers/windows/.mokogitea/workflows/pre-release.yml b/mcp/servers/windows/.mokogitea/workflows/pre-release.yml index ca98406..26944c1 100644 --- a/mcp/servers/windows/.mokogitea/workflows/pre-release.yml +++ b/mcp/servers/windows/.mokogitea/workflows/pre-release.yml @@ -4,8 +4,8 @@ # # FILE INFORMATION # DEFGROUP: Gitea.Workflow -# INGROUP: mokoplatform.Release -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# INGROUP: mokocli.Release +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/workflows/universal/pre-release.yml.template # VERSION: 05.01.00 # BRIEF: Manual pre-release -- builds dev/alpha/beta/rc packages from any branch @@ -47,25 +47,25 @@ jobs: - name: Setup tools run: | - # Update mokoplatform CLI tools if available; install PHP if missing - if command -v mokoplatform-update &> /dev/null; then - mokoplatform-update - elif [ -d "/opt/mokoplatform" ]; then - cd /opt/mokoplatform && git pull origin main --quiet 2>/dev/null || true + # Update mokocli CLI tools if available; install PHP if missing + if command -v mokocli-update &> /dev/null; then + mokocli-update + elif [ -d "/opt/mokocli" ]; then + cd /opt/mokocli && git pull origin main --quiet 2>/dev/null || true else if ! command -v php &> /dev/null; then sudo apt-get update -qq sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl >/dev/null 2>&1 fi git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/MokoConsulting/mokoplatform.git" \ - /tmp/mokoplatform-api + "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/MokoConsulting/mokocli.git" \ + /tmp/mokocli-api fi # Set MOKO_CLI to whichever path exists - if [ -d "/opt/mokoplatform/cli" ]; then - echo "MOKO_CLI=/opt/mokoplatform/cli" >> "$GITHUB_ENV" + if [ -d "/opt/mokocli/cli" ]; then + echo "MOKO_CLI=/opt/mokocli/cli" >> "$GITHUB_ENV" else - echo "MOKO_CLI=/tmp/mokoplatform-api/cli" >> "$GITHUB_ENV" + echo "MOKO_CLI=/tmp/mokocli-api/cli" >> "$GITHUB_ENV" fi - name: Detect platform diff --git a/mcp/servers/windows/README.md b/mcp/servers/windows/README.md index 4b41e2e..29295e3 100644 --- a/mcp/servers/windows/README.md +++ b/mcp/servers/windows/README.md @@ -77,4 +77,4 @@ This project is licensed under the GNU General Public License v3.0 or later -- s --- -*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)* +*[Moko Consulting](https://mokoconsulting.tech) -- [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home)* diff --git a/mcp/src/config.ts b/mcp/src/config.ts index 71b4ed5..430030a 100644 --- a/mcp/src/config.ts +++ b/mcp/src/config.ts @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: mokostandards-mcp.Config * INGROUP: MokoCli-API - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /mcp/src/config.ts * BRIEF: Configuration loader for MokoCli MCP server */ diff --git a/mcp/src/index.ts b/mcp/src/index.ts index 7e042d4..80f53ec 100644 --- a/mcp/src/index.ts +++ b/mcp/src/index.ts @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: mokostandards-mcp.Server * INGROUP: MokoCli-API - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /mcp/src/index.ts * BRIEF: MCP server entry point — exposes MokoCli governance tools */ diff --git a/mcp/src/runner.ts b/mcp/src/runner.ts index c98f451..21496eb 100644 --- a/mcp/src/runner.ts +++ b/mcp/src/runner.ts @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: mokostandards-mcp.Runner * INGROUP: MokoCli-API - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /mcp/src/runner.ts * BRIEF: PHP CLI command runner for MokoCli tools — uses execFile (no shell injection) */ diff --git a/mcp/src/types.ts b/mcp/src/types.ts index 461a0d5..78a445b 100644 --- a/mcp/src/types.ts +++ b/mcp/src/types.ts @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: mokostandards-mcp.Types * INGROUP: MokoCli-API - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /mcp/src/types.ts * BRIEF: TypeScript type definitions for MokoCli MCP server */ diff --git a/phpcs.xml b/phpcs.xml index 87386bb..67b03e7 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -6,8 +6,8 @@ This file is part of a Moko Consulting project. SPDX-License-Identifier: GPL-3.0-or-later --> - - PHP_CodeSniffer configuration for mokoplatform projects + + PHP_CodeSniffer configuration for mokocli projects lib diff --git a/phpstan.neon b/phpstan.neon index f799f3c..02d68f9 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,7 +4,7 @@ # # SPDX-License-Identifier: GPL-3.0-or-later -# PHPStan configuration for moko-platform projects +# PHPStan configuration for mokocli projects parameters: level: 6 paths: diff --git a/plugin_health_check.php b/plugin_health_check.php index b371055..c7b8d5b 100755 --- a/plugin_health_check.php +++ b/plugin_health_check.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Plugin * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /plugin_health_check.php * BRIEF: Run health checks on a project using the auto-detected or specified plugin */ diff --git a/plugin_list.php b/plugin_list.php index 316331c..3bac075 100755 --- a/plugin_list.php +++ b/plugin_list.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Plugin * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /plugin_list.php * BRIEF: List all available project-type plugins and their capabilities */ diff --git a/plugin_metrics.php b/plugin_metrics.php index 4ac8bf3..883d8c6 100755 --- a/plugin_metrics.php +++ b/plugin_metrics.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Plugin * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /plugin_metrics.php * BRIEF: Collect project metrics using the auto-detected or specified plugin */ diff --git a/plugin_readiness.php b/plugin_readiness.php index b09487d..501c53d 100755 --- a/plugin_readiness.php +++ b/plugin_readiness.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Plugin * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /plugin_readiness.php * BRIEF: Check release readiness of a project using the auto-detected or specified plugin */ diff --git a/plugin_validate.php b/plugin_validate.php index 308cebe..bc4b0ef 100755 --- a/plugin_validate.php +++ b/plugin_validate.php @@ -9,7 +9,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Scripts.Plugin * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /plugin_validate.php * BRIEF: Validate a project's structure and standards using the auto-detected or specified plugin */ diff --git a/release/generate_dolibarr_version_txt.php b/release/generate_dolibarr_version_txt.php index 9c27c64..6754bdf 100644 --- a/release/generate_dolibarr_version_txt.php +++ b/release/generate_dolibarr_version_txt.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Release * INGROUP: MokoPlatform.Scripts - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /release/generate_dolibarr_version_txt.php * BRIEF: Create or update version.txt on Dolibarr module release * diff --git a/release/generate_joomla_update_xml.php b/release/generate_joomla_update_xml.php index 45a0bd3..754ffc1 100644 --- a/release/generate_joomla_update_xml.php +++ b/release/generate_joomla_update_xml.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Release * INGROUP: MokoPlatform.Scripts - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /release/generate_joomla_update_xml.php * BRIEF: Create or update the in updates.xml on release * @@ -35,7 +35,7 @@ * [--zip-url=https://github.com/org/repo/releases/download/v1.2.0/mod_foo-1.2.0.zip] \ * [--inject-updateserver] * - * Usage (remote — from mokoplatform): + * Usage (remote — from mokocli): * php generate_joomla_update_xml.php \ * --repo=mokoconsulting-tech/WaasComponent \ * --tag=v1.2.0 \ diff --git a/scripts/sync-wikis-to-github.sh b/scripts/sync-wikis-to-github.sh index 1d45498..e1f7f8f 100644 --- a/scripts/sync-wikis-to-github.sh +++ b/scripts/sync-wikis-to-github.sh @@ -7,7 +7,7 @@ # Structure: # wiki/ # README.md -# moko-platform/ +# mokocli/ # Home.md # SITE_MONITORING.md # ... @@ -70,7 +70,7 @@ for r in repos: else # Fallback to hardcoded list REPOS=( - ["MokoConsulting/moko-platform"]="moko-platform" + ["MokoConsulting/mokocli"]="mokocli" ["MokoConsulting/MokoOnyx"]="MokoOnyx" ["MokoConsulting/MokoWaaS"]="MokoWaaS" ["MokoConsulting/monitor-mcp"]="monitor-mcp" diff --git a/source/functions.php b/source/functions.php index 674c8d6..c6383fd 100644 --- a/source/functions.php +++ b/source/functions.php @@ -1,6 +1,6 @@ * @@ -9,11 +9,11 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Common * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /src/functions.php * BRIEF: Common utility functions * - * This file provides global helper functions for mokoplatform. + * This file provides global helper functions for mokocli. * * @package MokoPlatform * @version 04.00.04 @@ -23,7 +23,7 @@ declare(strict_types=1); if (!function_exists('mokostandards_version')) { /** - * Get the mokoplatform version + * Get the mokocli version * * @return string Version number */ @@ -35,7 +35,7 @@ if (!function_exists('mokostandards_version')) { if (!function_exists('mokostandards_root_dir')) { /** - * Get the mokoplatform root directory + * Get the mokocli root directory * * @return string Root directory path */ diff --git a/src/functions.php b/src/functions.php index 6ccbf51..86a5b04 100644 --- a/src/functions.php +++ b/src/functions.php @@ -1,2 +1,2 @@ # Code Quality Configuration Templates -This directory contains standardized configuration files for code quality, linting, and security tools used across mokoplatform projects. +This directory contains standardized configuration files for code quality, linting, and security tools used across mokocli projects. ## Available Configurations @@ -296,9 +296,9 @@ These tools work seamlessly with: ## Support and Updates -Configuration templates are maintained in the mokoplatform repository: -- **Repository**: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform -- **Documentation**: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/tree/main/docs +Configuration templates are maintained in the mokocli repository: +- **Repository**: https://git.mokoconsulting.tech/MokoConsulting/mokocli +- **Documentation**: https://git.mokoconsulting.tech/MokoConsulting/mokocli/tree/main/docs - **Issues**: Report problems or suggest improvements via GitHub Issues ## Version History diff --git a/templates/configs/index.md b/templates/configs/index.md index 5694b82..94bd1b6 100644 --- a/templates/configs/index.md +++ b/templates/configs/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Configs -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/configs/index.md BRIEF: Configuration templates directory index --> diff --git a/templates/configs/manifest.xml.template b/templates/configs/manifest.xml.template index 8f17503..58326ca 100644 --- a/templates/configs/manifest.xml.template +++ b/templates/configs/manifest.xml.template @@ -5,17 +5,17 @@ FILE INFORMATION DEFGROUP: MokoPlatform.Templates.Config INGROUP: MokoPlatform.Templates - REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/configs/manifest.xml.template BRIEF: XML manifest template — synced to .mokogitea/manifest.xml in every governed repository NOTE: This template is a reference only. The bulk sync generates XML via MokoCliParser::generate(). - mokoplatform Repository Manifest - Auto-generated by mokoplatform bulk sync. + mokocli Repository Manifest + Auto-generated by mokocli bulk sync. Manual edits to and may be overwritten. See: docs/standards/manifest-file-spec.md --> - @@ -28,11 +28,11 @@ {{platform}} {{standards_version}} - https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + https://git.mokoconsulting.tech/MokoConsulting/mokocli {{PRIMARY_LANGUAGE}} - + diff --git a/templates/configs/manifest.yml.template b/templates/configs/manifest.yml.template index 7960eb1..e712a25 100644 --- a/templates/configs/manifest.yml.template +++ b/templates/configs/manifest.yml.template @@ -3,17 +3,17 @@ # FILE INFORMATION # DEFGROUP: MokoPlatform.Templates.Config # INGROUP: MokoPlatform.Templates -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/configs/manifest.yml.template # BRIEF: Governance attachment template — synced to .mokogitea/manifest.xml in every governed repository # NOTE: Tokens replaced at sync time: {{org}}, {{repo_name}}, {{platform}}, {{standards_version}} # -# This file is managed automatically by mokoplatform bulk sync. +# This file is managed automatically by mokocli bulk sync. # Do not edit manually — changes will be overwritten on the next sync. -# To update governance settings, open a PR in mokoplatform instead: -# https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# To update governance settings, open a PR in mokocli instead: +# https://git.mokoconsulting.tech/MokoConsulting/mokocli -standards_source: "https://git.mokoconsulting.tech/MokoConsulting/mokoplatform" +standards_source: "https://git.mokoconsulting.tech/MokoConsulting/mokocli" standards_version: "{{standards_version}}" platform: "{{platform}}" governed_repo: "{{org}}/{{repo_name}}" diff --git a/templates/configs/mokostandards.xml.template b/templates/configs/mokostandards.xml.template index 11f32e1..ed72e27 100644 --- a/templates/configs/mokostandards.xml.template +++ b/templates/configs/mokostandards.xml.template @@ -5,17 +5,17 @@ FILE INFORMATION DEFGROUP: MokoPlatform.Templates.Config INGROUP: MokoPlatform.Templates - REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/configs/manifest.xml.template BRIEF: XML manifest template — synced to .mokogitea/manifest.xml in every governed repository NOTE: This template is a reference only. The bulk sync generates XML via MokoCliParser::generate(). - mokoplatform Repository Manifest - Auto-generated by mokoplatform bulk sync. + mokocli Repository Manifest + Auto-generated by mokocli bulk sync. Manual edits to and may be overwritten. See: docs/standards/manifest-file-spec.md --> - @@ -28,11 +28,11 @@ {{platform}} {{standards_version}} - https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + https://git.mokoconsulting.tech/MokoConsulting/mokocli {{PRIMARY_LANGUAGE}} - + diff --git a/templates/configs/mokostandards.yml.template b/templates/configs/mokostandards.yml.template index 9788a42..12bbd0e 100644 --- a/templates/configs/mokostandards.yml.template +++ b/templates/configs/mokostandards.yml.template @@ -3,17 +3,17 @@ # FILE INFORMATION # DEFGROUP: MokoPlatform.Templates.Config # INGROUP: MokoPlatform.Templates -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/configs/moko-standards.yml.template # BRIEF: Governance attachment template — synced to .mokostandards in every governed repository # NOTE: Tokens replaced at sync time: {{org}}, {{repo_name}}, {{platform}}, {{standards_version}} # -# This file is managed automatically by mokoplatform bulk sync. +# This file is managed automatically by mokocli bulk sync. # Do not edit manually — changes will be overwritten on the next sync. -# To update governance settings, open a PR in mokoplatform instead: -# https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# To update governance settings, open a PR in mokocli instead: +# https://git.mokoconsulting.tech/MokoConsulting/mokocli -standards_source: "https://git.mokoconsulting.tech/MokoConsulting/mokoplatform" +standards_source: "https://git.mokoconsulting.tech/MokoConsulting/mokocli" standards_version: "{{standards_version}}" platform: "{{platform}}" governed_repo: "{{org}}/{{repo_name}}" diff --git a/templates/configs/phpcs.xml b/templates/configs/phpcs.xml index 16c0166..babfcca 100644 --- a/templates/configs/phpcs.xml +++ b/templates/configs/phpcs.xml @@ -6,8 +6,8 @@ This file is part of a Moko Consulting project. SPDX-License-Identifier: GPL-3.0-or-later --> - - PHP_CodeSniffer configuration for mokoplatform projects + + PHP_CodeSniffer configuration for mokocli projects src diff --git a/templates/docs/README.md b/templates/docs/README.md index 0ee1d65..c71b0df 100644 --- a/templates/docs/README.md +++ b/templates/docs/README.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Docs -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/docs/README.md BRIEF: Documentation templates README --> @@ -13,7 +13,7 @@ BRIEF: Documentation templates README ## Purpose -This directory contains governed documentation templates for the mokoplatform organization. These templates ensure consistency, completeness, and compliance across all documentation artifacts. +This directory contains governed documentation templates for the mokocli organization. These templates ensure consistency, completeness, and compliance across all documentation artifacts. ## Intended Use diff --git a/templates/docs/extra/README.md b/templates/docs/extra/README.md index 4f14c08..ea89df0 100644 --- a/templates/docs/extra/README.md +++ b/templates/docs/extra/README.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Docs.Extra -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/docs/extra/README.md BRIEF: Extra documentation templates README --> diff --git a/templates/docs/extra/index.md b/templates/docs/extra/index.md index 5106b13..554d598 100644 --- a/templates/docs/extra/index.md +++ b/templates/docs/extra/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Docs.Extra -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/docs/extra/index.md BRIEF: Extra documentation templates directory index --> diff --git a/templates/docs/index.md b/templates/docs/index.md index cc4bf25..bac85a8 100644 --- a/templates/docs/index.md +++ b/templates/docs/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Docs -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/docs/index.md BRIEF: Documentation templates directory index --> diff --git a/templates/docs/required/GOVERNANCE.md b/templates/docs/required/GOVERNANCE.md index 50ff3ef..0a1cb09 100644 --- a/templates/docs/required/GOVERNANCE.md +++ b/templates/docs/required/GOVERNANCE.md @@ -24,7 +24,7 @@ BRIEF: Project governance rules, roles, and decision process for {{repo_name}} --> -[![mokoplatform](https://img.shields.io/badge/moko--platform-{{standards_version}}-blue)](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform) +[![mokocli](https://img.shields.io/badge/moko--platform-{{standards_version}}-blue)](https://git.mokoconsulting.tech/MokoConsulting/mokocli) # Project Governance @@ -32,10 +32,10 @@ This document defines the governance model for the `{{repo_name}}` repository within the `{{org}}` organization. It is automatically maintained by -[mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform) v{{standards_version}}. +[mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli) v{{standards_version}}. -Full governance policy is defined in the mokoplatform source repository: -[docs/policy/GOVERNANCE.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/GOVERNANCE.md) +Full governance policy is defined in the mokocli source repository: +[docs/policy/GOVERNANCE.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/GOVERNANCE.md) --- @@ -80,7 +80,7 @@ available. The following requirements remain mandatory regardless: 4. **Documentation** — changes are documented in `CHANGELOG.md`. See the full policy: -[Sole Operator Policy](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/GOVERNANCE.md#sole-operator-policy) +[Sole Operator Policy](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/GOVERNANCE.md#sole-operator-policy) --- @@ -113,7 +113,7 @@ See the full policy: | Applies To | {{org}}/{{repo_name}} | | Jurisdiction | Tennessee, USA | | Maintainer | @mokoconsulting-tech | -| Standards | mokoplatform v{{standards_version}} | +| Standards | mokocli v{{standards_version}} | | Repo | https://github.com/{{org}}/{{repo_name}} | | Path | /GOVERNANCE.md | -| Status | Active — auto-maintained by mokoplatform | +| Status | Active — auto-maintained by mokocli | diff --git a/templates/docs/required/README.md b/templates/docs/required/README.md index 310aa4a..8b5d4dd 100644 --- a/templates/docs/required/README.md +++ b/templates/docs/required/README.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Docs.Required -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/docs/required/README.md BRIEF: Required documentation templates README --> @@ -13,7 +13,7 @@ BRIEF: Required documentation templates README ## Purpose -This directory contains mandatory documentation templates that MUST be present in all repositories governed by mokoplatform documentation policies. These templates ensure baseline documentation compliance and organizational consistency. +This directory contains mandatory documentation templates that MUST be present in all repositories governed by mokocli documentation policies. These templates ensure baseline documentation compliance and organizational consistency. ## Intended Use diff --git a/templates/docs/required/index.md b/templates/docs/required/index.md index 17cef8b..7b8a9f8 100644 --- a/templates/docs/required/index.md +++ b/templates/docs/required/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Docs.Required -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/docs/required/index.md BRIEF: Required documentation templates directory index --> diff --git a/templates/docs/required/template-CONTRIBUTING.md b/templates/docs/required/template-CONTRIBUTING.md index 920b1bf..b1dc0a8 100644 --- a/templates/docs/required/template-CONTRIBUTING.md +++ b/templates/docs/required/template-CONTRIBUTING.md @@ -24,7 +24,7 @@ Thank you for your interest in contributing to **{{REPO_NAME}}**! -This repository is governed by **[mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)** — the authoritative source of coding standards, workflows, and policies for all Moko Consulting repositories. +This repository is governed by **[mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli)** — the authoritative source of coding standards, workflows, and policies for all Moko Consulting repositories. ## Branch Strategy @@ -49,9 +49,9 @@ This repository is governed by **[mokoplatform](https://git.mokoconsulting.tech/ |--------|-----| | `dev/XX.YY.ZZ` | Feature development (e.g., `dev/02.00.00/add-extrafields`) | | `version/XX` | Stable release (auto-created, never manually pushed) | -| `chore/` | Automated sync branches (managed by mokoplatform) | +| `chore/` | Automated sync branches (managed by mokocli) | -> **Never use** `feature/`, `hotfix/`, or `release/` prefixes — they are not part of the mokoplatform branch strategy. +> **Never use** `feature/`, `hotfix/`, or `release/` prefixes — they are not part of the mokocli branch strategy. ## Commit Conventions @@ -84,16 +84,16 @@ When your PR is merged to `main`, these workflows run automatically: ## Coding Standards -All contributions must follow [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform): +All contributions must follow [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli): | Standard | Reference | |----------|-----------| -| Coding Style | [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/coding-style-guide.md) | -| File Headers | [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/file-header-standards.md) | -| Branching | [branch-release-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/branch-release-strategy.md) | -| Merge Strategy | [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/merge-strategy.md) | -| Scripting | [scripting-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/scripting-standards.md) | -| Build & Release | [build-release.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/workflows/build-release.md) | +| Coding Style | [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/coding-style-guide.md) | +| File Headers | [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/file-header-standards.md) | +| Branching | [branch-release-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/branch-release-strategy.md) | +| Merge Strategy | [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/merge-strategy.md) | +| Scripting | [scripting-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/scripting-standards.md) | +| Build & Release | [build-release.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/workflows/build-release.md) | ## PR Checklist @@ -109,12 +109,12 @@ All contributions must follow [mokoplatform](https://git.mokoconsulting.tech/Mok ## Custom Workflows -Place repo-specific workflows in `.mokogitea/workflows/custom/` — they are **never overwritten or deleted** by mokoplatform sync: +Place repo-specific workflows in `.mokogitea/workflows/custom/` — they are **never overwritten or deleted** by mokocli sync: ``` .mokogitea/workflows/ -├── deploy-dev.yml ← Synced from mokoplatform -├── auto-release.yml ← Synced from mokoplatform +├── deploy-dev.yml ← Synced from mokocli +├── auto-release.yml ← Synced from mokocli └── custom/ ← Your custom workflows (safe) └── my-custom-ci.yml ``` @@ -125,4 +125,4 @@ By contributing, you agree that your contributions will be licensed under the [G --- -*This file is synced from [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform). Do not edit directly — changes will be overwritten on the next sync.* +*This file is synced from [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli). Do not edit directly — changes will be overwritten on the next sync.* diff --git a/templates/docs/required/template-README.md b/templates/docs/required/template-README.md index 18b3e89..d2ae455 100644 --- a/templates/docs/required/template-README.md +++ b/templates/docs/required/template-README.md @@ -22,7 +22,7 @@ BRIEF: {{REPO_DESCRIPTION}} # {{REPO_NAME}} [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) -[![mokoplatform](https://img.shields.io/badge/moko--platform-{{standards_version}}-orange)](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform) +[![mokocli](https://img.shields.io/badge/moko--platform-{{standards_version}}-orange)](https://git.mokoconsulting.tech/MokoConsulting/mokocli) > {{REPO_DESCRIPTION}} @@ -40,7 +40,7 @@ BRIEF: {{REPO_DESCRIPTION}} ## Contributing -See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. This repository follows [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform). +See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. This repository follows [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli). ## License diff --git a/templates/docs/required/template-SECURITY.md b/templates/docs/required/template-SECURITY.md index aa8a400..a9631c5 100644 --- a/templates/docs/required/template-SECURITY.md +++ b/templates/docs/required/template-SECURITY.md @@ -130,7 +130,7 @@ Advisories include: ## Security Best Practices -For repositories adopting mokoplatform: +For repositories adopting mokocli: ### Required Controls @@ -188,7 +188,7 @@ See [Security Scanning Policy](docs/policy/security-scanning.md) for detailed re ## Compliance and Governance -This security policy is binding for all repositories governed by mokoplatform. Deviations require documented justification and approval from the Security Owner. +This security policy is binding for all repositories governed by mokocli. Deviations require documented justification and approval from the Security Owner. Security policies are reviewed and updated at least annually or following significant security incidents. @@ -228,7 +228,7 @@ The following are explicitly out of scope: | Repository | [REPOSITORY_URL] | | Owner | [OWNER_NAME] | | Scope | Security vulnerability handling | -| Applies To | All repositories governed by mokoplatform | +| Applies To | All repositories governed by mokocli | | Status | Active | | Effective | [YYYY-MM-DD] | diff --git a/templates/fonts/Google/Open Sans-300.ttf b/templates/fonts/Google/Open Sans-300.ttf index cf8e0c77181bd584bc472550074a5cca2a0bd49d..3556a925c82de87cc78b3c575da9bd668b3f44af 100644 GIT binary patch delta 80 zcmV-W0I&b}{Ri#+2e2E?vmDL=2(up6DJ!=~0Ri|Rw?QHSa2vO>Jpp$yw<>P|g%G!} me*umHw?Bdb{~NbIo&kpp0ScEKssS9g delta 95 zcmaF+m;J|I_6^eK7R832g#ewV{GRE(tB4i?okBNm1h`Bi~#1u9$EkZ diff --git a/templates/fonts/Google/Open Sans-300italic.ttf b/templates/fonts/Google/Open Sans-300italic.ttf index d913f356a982bef28ea2b51cdbcb96f9d1fdfa93..02a66f1e1c5ac6a4b91757fa8f701fa0b0686164 100644 GIT binary patch delta 72 zcmV-O0Js12tqAF@2(T}@voN}uE3?YwNCmSK>x?qDpdA5O2Dkbn0apgMQYrzL8Mo>~ e0pv!v&x!#T1h?mo0h=zjgS`QcFt-x!0pcjYw;%HW delta 94 zcmaF4mgCD>jt%;|72e2{MvohD)QMV2$0RsiM5-tJZLAUg80ecX)aDV}h0=NHy0gDi~ fi<1Fe3%BW>0fGm&Y^DL<1eZ*!0W!CLs{ticoD?2> delta 106 zcmbRFpMA-H_6>&D8F@DwUcVj4$h)0KlaZMfNb~D4K6C`qAMzQi1%PyR17jZ(kp9`k z*bU;hOlFMb2GS4bF*dOS>EvaM_gNTur#r1?G-BfAntpN>qs;UYb4H=#G;H(*gmy8n=!e0Z|6G;3EObBA2U1 z0hzZ&M*)ikx6w=imlL;XU;)?=w?c6NIT5#ff&ml=w~>kg7X-JdjscA>w>P~3fH1eX N?E%3Fw|e&h79Zf5EIj}K delta 141 zcmeyrhGW87jt$kj7=DdAFZuV%#MKq&sC91KEJ|EoH`2 zN{qbIm$)&`1afWN8M}e1x1aD~oGuKc;}aNf2mopGLPkqLAYIVJD8d1xTe=vAg!^NvB3aHuXxLNkP}E}erFVu2LK_PERp~K diff --git a/templates/fonts/Google/Open Sans-600.ttf b/templates/fonts/Google/Open Sans-600.ttf index a5711671587b2dfcae36ee84ebac8b803bb81e88..be167af4c26b1eb7e6fecc3b575dd877fc4f4e2a 100644 GIT binary patch delta 84 zcmV-a0IUDZ{RhAO2e35^vo;J1%Ckb&+EKS1C;yjJ%sodALsjDTiyf0vUO?OKC82umWi%T}A^jARXk)xJDaD|I1^n z7XZ?=^^7x^fV5~6<4h2L-6Y0%ZXnG&kFk{z?juX2nSdAAG5G6u2% z=|pA5G-V)t+>LQJ3y^N|W^7Vm;^mtB=eo>x#T>@ZK!di6bTNv9B(?h(SL*@kYkL?s bs{`rICyW<3fOOSlv9&L9 diff --git a/templates/fonts/Google/Open Sans-700.ttf b/templates/fonts/Google/Open Sans-700.ttf index 4a5bc3958b164df21ed073620b89b58c1d1e420c..16581634dd181f3e1ecce77ab18fbf5433d9b9a5 100644 GIT binary patch delta 89 zcmV-f0H*)2{s*T12e2i*vnIXM7qj}*>Wc*ms0s~mlOE^6OTS5WL2A3yE0n)enNdYJvwj5cd{wd7> delta 136 zcmX@JlH<-wjtzgeG4gKyyKS~MkeczxjTK1Ud){Eg$h$pGiZPT8NN-kPTrU8mlMESo zfb{e{N5-cRN_KmJ6XQCdn(1<$jF*5)K6o-}$N*`HG{!};Kzdg*qa6#7{?X2;2%;r> W80GbWw8d`5DF%$Z%g?-K)C2&RnJYE` diff --git a/templates/fonts/Google/Open Sans-800.ttf b/templates/fonts/Google/Open Sans-800.ttf index 5dfb66cf48ad8c4a07f7e1ea03ac145ea93ecab5..c1799c5af09dca6fb5a430333e062892a6677cec 100644 GIT binary patch delta 56 zcmV-80LTBZfe5I92(VMtvsBfNJ-6c$0V!Fx4Qv6Z1Glzs0hbWBPJjWZ0=M^q0c9Mw OU7rEN47VYy0gqI(Cl^Kl delta 78 zcmZ3{$gu&4g0C|2ZVtZMXUoXD{h<(}W+ag2%3)l=45T;ZGfo!((w+^BE0}=v$0o*9 b86X`tpYbpc6ED~F?A46Y+fCOn7KZ=;7s(lB diff --git a/templates/fonts/Google/Open Sans-800italic.ttf b/templates/fonts/Google/Open Sans-800italic.ttf index d266998416704a1c8e94ecf9cb250a4025eb9898..683066a0e8f44a5ddef08a0cfeaabd7eaee9b770 100644 GIT binary patch delta 78 zcmV-U0I~m+t_X;(2(Tx(vnaUTE3*dVR0XqJ=~5rJt_T5F6SoE&0bd5UW+DN6XSd^t k0V4#r2aW-lDz~7x0g42-E4=~6Ft_sU0f`T{eEk8K8SNS$>Hq)$ delta 102 zcmeBJ$1!Cc#|HHsjJ%uGcihzmQY=qGSb)jYHvj7zbc{A<<8X@4r*vAc|=Y=y)5dqRhIgF-2>FwzSjJrTqD3&oU z7X;EL+8N)1t?pzL2g#r5WjxITq^Hkfyu}5i3zss!5ChVYdl;Jxfb{J*jJzyNyu90A Qd|=d&1qul8F)d*S0Pk~1)&Kwi diff --git a/templates/fonts/Google/Open Sans-Regular.ttf b/templates/fonts/Google/Open Sans-Regular.ttf index 29e9e605d38445507c405b444419ed76c7e63bfd..4d3ff730f9acd0fae403ebb446aa58275020737d 100644 GIT binary patch delta 63 zcmV-F0Kos0{s)Zy2e6~ov!vEyKDP%I0m%`!(Ix?uNVjHh0eKL&;C}&*0=I910p}aH VSDpcp3;_z4JgNa4w+5>L4pf(|8GHZ$ delta 72 zcmeDA$3EpB`-a8W7kUpozIK=}WjDGU;zXQx8`aAoddUoZULVVwh2xrwq5@ssVf*w_eBr&NgMZ9_;`C delta 93 zcmZ4VkA2NQ_6>@A8F@D=?!7Dyq`q8v)y>Ge{ayki3m1@nl*Krg8A#XXG0qnN(sK2T q%b0-lkw(T`86a&qk8wE<6ED|vomGr7+rO@2jF$z9hMZtLX9fU#VIbE4 diff --git a/templates/fonts/Google/OpenSans-BoldItalic.ttf b/templates/fonts/Google/OpenSans-BoldItalic.ttf index e246ffaffc139d0f17f503dfb16352dba40d0aee..741b0dd8b253fba42272f3c1acfcf5fe217cb11a 100644 GIT binary patch delta 122 zcmV-=0EPdksR)><2(Zbvv&y!cE3;;1NL_z_s2AA_l0n)d|NdYJvx9?>Eq8$th0{j7T{Q)ul$o{UE0bl_Wx3Pl( c9|X72hXEl3xAThuA1}8Py8)Cir>N@zDKR851^@s6 delta 136 zcmbQSl4He6jtwWbG4gIcxox&KkV<*v#tNiXJ#R2#85KeF X({4t2eIU)Un{kQ(Bk%GVuNgG~)*&hh diff --git a/templates/fonts/Google/OpenSans-ExtraBold.ttf b/templates/fonts/Google/OpenSans-ExtraBold.ttf index dfb9d6f743528c997e439e660b3437ddb3964014..a98b73ce986464a13f736fa1e5ea127319d6fdfb 100644 GIT binary patch delta 56 zcmV-80LTBVfe5652(VApvryHJJ-6Qy0V!Fx32XtV1Glno0hbWBN`L{V0=M&m0c9Mw OS)T#J47VMu0gqIza~B!_ delta 72 zcmZ3|$g!r8V}t)yM&8Z-SNm)kdAHvcV$_TT(rh`5E0}@wx_rjz0zlfefpG;Bkbc|5 Um?{ILgXS|H<^j^8YZ&`O0DkQkW&i*H diff --git a/templates/fonts/Google/OpenSans-ExtraBoldItalic.ttf b/templates/fonts/Google/OpenSans-ExtraBoldItalic.ttf index 02288dc0d94f0e720525427164f7b7ee95a350b7..29ea98871deae13f2a22dae212035a09f4a2c7d2 100644 GIT binary patch delta 78 zcmV-U0I~nztq9bu2(a_Fv-G#!E3?w$R0Xpq=~5rJdI$km6SvYE0bd5UG9m$dXSc73 k0V4#r(~SX`Dz|L70g42-_q+kdFt@(#0f`T{Nc{nr8P*9S)&Kwi delta 102 zcmcbzmgB)%jt!r;GxBc!y#1~=kh<_VgcV4sybO|Ou0J|vn^)+`MID?!kr=RbJ*y!y~%z1w2!wHoKqyE3#| zh2_1ZFdEqXlzuFghgPapK%Jxhez;3Tp{QZ8$r|@WIJm8S%)&`ZS#0!#>)Pmc@Klc#0V}i9Agm z7LopH8#*trXB6dCEM7);H7gB9STl5YB zd6!8PI{8*KI(ZMp0T*}3D01^zE0Pm=QUU7k@(e#rck)<2SiJmb95rm1Zu+5K!q-Jk zY~Jr`0L400^Z5S@{#{l%benq3f)1xz$)HE8J`MhH>Zu@1iUXJ$_7@!o2Yw7M*rW@P3i%CuTU(hxEPkrJXXf{h3gB_pvLN`y$Z z_{SnjDJw+Xj!H>^lv-|z5@DzW7Heo=WCnuteoMce^UXWo?L9Nt>hB) z$0~t7AB%(d$;T#igpViK0K$q%b~_kco@IBU!TR4U9kMm>m-SPvsx{Ug0d5KBi-8`I zJce|KjlT~8e?O9PiSHs6xx2e%}f1`JvZr2E9_WZUl?%;+P0zwmZc~IBr#@iC*$yM~?VP zdxVt;e5sr?_D;U{RI4$!KHcd-k7TH&BQ_n;3;W3>mi4HQHs+;oX6IDFT8G^*+Gyht+qWNK@Maf*!LMMi#EVB^D2j4)D4y~YSVJI9C-AN~*1 CiR4cJ diff --git a/templates/fonts/Google/OpenSans-ItalicVariable.ttf b/templates/fonts/Google/OpenSans-ItalicVariable.ttf index 8a2c9d9aedfbbcfd30c002b3bd5d9ffc7a454428..1e8c83d073f040e0c58033383b9a3b779925acfa 100644 GIT binary patch delta 589 zcmW;H?MqWp00-dCJ@?#m-F0i5YiejZFGH7%vL)6B&B|2F5-TixL9oQE6cmySBe4Qe zjF9YrA1sm-GfTAf6OllWN=>u0J|vn^)+`MID?!kr=RbJ*y!y~%z1w2!wHoKqyE3#| zh2_1ZFdEqXlzuFghgPapK%Jxhez;3Tp{QZ8$r|@WIJm8S%)&`ZS#0!#>)Pmc@Klc#0V}i9Agm z7LopH8#*trXB6dCEM7);H7gB9STl5YB zd6!8PI{8*KI(ZMp0T*}3D01^zE0Pm=QUU7k@(e#rck)<2SiJmb95rm1Zu+5K!q-Jk zY~Jr`0L400^Z5S@{#{l%benq3f)1xz$)HE8J`MhH>Zu@1iUXJ$_7@!o2Yw7M*rW@P3i%CuTU(hxEPkrJXXf{h3gB_pvLN`y$Z z_{SnjDJw+Xj!H>^lv-|z5@DzW7Heo=WCnuteoMce^UXWo?L9Nt>hB) z$0~t7AB%(d$;T#igpViK0K$q%b~_kco@IBU!TR4U9kMm>m-SPvsx{Ug0d5KBi-8`I zJce|KjlT~8e?O9PiSHs6xx2e%}f1`JvZr2E9_WZUl?%;+P0zwmZc~IBr#@iC*$yM~?VP zdxVt;e5sr?_D;U{RI4$!KHcd-k7TH&BQ_n;3;W3>mi4HQHs+;oX6IDFT8G^*+Gyht+qWNK@Maf*!LMMi#EVB^D2j4)D4y~YSVJI9C-AN~*1 CiR4cJ diff --git a/templates/fonts/Google/OpenSans-Light.ttf b/templates/fonts/Google/OpenSans-Light.ttf index e2d5717b76243d9544c5adbda3713d32a100d114..141eca797e02dc616d01325f8e1759e569071f19 100644 GIT binary patch delta 80 zcmV-W0I&b_{Rip&2e22;vlz|+2(ud2DJ!=`0Ri|Rw>=^Oa2vO-Jpp$ywyFX{~NbEo&kpp0ScEGssS9g;Hm+iA-90c0dz7mEgwq& delta 101 zcmaF)m;K9M_6_3a7WnhCY#jkv2Dio|0apgM9x4Hs8Mn4W e0pv!vn~DJ!1h=z}0h=zjPrU(-Ft^_A0pchDJ|PzX delta 94 zcmdnGmgB%$jt#$eGV*Tzy>q5Ekec$;gB3{KdDUaY$h$p5mNAkINFP*Y3y0RsiM4lV)VLAUU40ecX)Y=8ld0=N5u0gDi~ mhm!$a3%BK-0fGm&Xr=+*1eZvw0Wtv!m(HpI9JiRO0SHuVtsr{< delta 95 zcmbRGpMAl9_6@q%8F@GBUcVj4$h)0GlaZMfNOS8kK6C`qZ}J(d1%PyV17jZ(kp9}l p*bU-0OlFMb2GV!uF*dOS>G)-g_gNTur`xS&Gy-x9Rx_%G000aY9-IIG diff --git a/templates/fonts/Google/OpenSans-MediumItalic.ttf b/templates/fonts/Google/OpenSans-MediumItalic.ttf index c2381541fab75cb3fb0a4adf2ef6b35c82c8f01a..748536599586c74d8098f502ffc5f713a147175f 100644 GIT binary patch delta 107 zcmV-x0F?jStO(1j2(U-Gvq-vOE3>NQNCmU=>Z=#Gp8^588n;><0Z|6GtRn%+BA0hY z0hzZEM*)ikx1CG@mlL-&U;)?=w+?XuIT5!=f&ml=w_S<>7X-I;jscA>w*$QafH1d& N?E%3Fw?_8?79V)cDXRbg delta 141 zcmX@ThU3l}jt%a+7k5oGuKcwG$X`2mop3LPkqLAZ^pcD8d1x1G*T+S%7qU dA7if`kp8lVvB3aHm%L>>$O)uPzcY%-0|2f0D*pfg diff --git a/templates/fonts/Google/OpenSans-Regular.ttf b/templates/fonts/Google/OpenSans-Regular.ttf index 9c57fbdb0556a73fc3d7b34b44101a005f4772d0..823cce6db26ca77493262a677da2a9da34e7b60c 100644 GIT binary patch delta 451 zcmV~$T}V@57zc3P^S;mX%9+S!XPao)He-EQtP%=Q78!=F4_HAL5-cQY7u`g~GSdoU z6_imp&ie4iB4`(7nEiu-qfkLHMv74sR1#9QU^5DgZuOkzR=yBuuoES8)=ezh;hZbdAtrVsma2reU!);(#n%01w zILbaey>BcY!=nZ{sgY`wUJov}N+*Mz)3V=>{Jd;%q5NBBB1kV+)e_fNs24sYqADB2 zVnW5kh^5t5KL&?Y8)14xt?b4>MV}4(qo$V_si04UvsH902x}cZlbC9v`f8NhX`%uT zcTr{)I!@439cqVYyTZXN_0-_YC~dAn$e~*T&IEmM**EgE4YPSl`Ox*1l!3$?rGoZ5 z<|urcbIULp<}(s)tNEftel6dWNUrA{oA5ZvehY4M5kWo1i7^CASZzeZ^U>#B=DvY>(p!pgK*LCpw4 zsT>=aHzJZou_&04HA4ytQ;J1VVD?8$ie!*b&_&O?s~_j(d!O@s=jBk@z;IbI6jsjt zQ21;D+?jvBS2?L@oocCva~|zOu)Y<76-1x?h_~4^?yCNS>|F&a6*jlNJY#3dwpOwJI zdYxDWzclNxAJ%m0ZL)W|Pj4j&9_iO>S}>T=^a+jPX+zI(jONia!GmtPF8hl?8kO98 zHB?#zry6K14|eaNSe4{do}t(BCyO_zNyE(vYF`Q;CTWw~cJRfYCv;O`(lbUMP&s~l zf_C8eV1n98Bq8vXw7f}hmfCP-e2`h5@Eh~+O4#M+3(~;7mamBMYVH+7>v{JE*^eAy zpBIDJIX=cvUF3CgU-c#ap^W2lxqPKgYDFh!c43;G;=|H&Uxv>Y$ojh(ZphCSUH+5P z@)RF`@nmi=w7?^hbRf%(#qc(p%Ptu5m@RT{^_$=l*k5b@mghEl_nU67q*k3U1Jd%< eN#m7LpF2z>0GkKRA*nIGU}~-0%D=3cEdLKr{;;C} diff --git a/templates/fonts/Google/OpenSans-RegularVariable.ttf b/templates/fonts/Google/OpenSans-RegularVariable.ttf index 9c57fbdb0556a73fc3d7b34b44101a005f4772d0..823cce6db26ca77493262a677da2a9da34e7b60c 100644 GIT binary patch delta 451 zcmV~$T}V@57zc3P^S;mX%9+S!XPao)He-EQtP%=Q78!=F4_HAL5-cQY7u`g~GSdoU z6_imp&ie4iB4`(7nEiu-qfkLHMv74sR1#9QU^5DgZuOkzR=yBuuoES8)=ezh;hZbdAtrVsma2reU!);(#n%01w zILbaey>BcY!=nZ{sgY`wUJov}N+*Mz)3V=>{Jd;%q5NBBB1kV+)e_fNs24sYqADB2 zVnW5kh^5t5KL&?Y8)14xt?b4>MV}4(qo$V_si04UvsH902x}cZlbC9v`f8NhX`%uT zcTr{)I!@439cqVYyTZXN_0-_YC~dAn$e~*T&IEmM**EgE4YPSl`Ox*1l!3$?rGoZ5 z<|urcbIULp<}(s)tNEftel6dWNUrA{oA5ZvehY4M5kWo1i7^CASZzeZ^U>#B=DvY>(p!pgK*LCpw4 zsT>=aHzJZou_&04HA4ytQ;J1VVD?8$ie!*b&_&O?s~_j(d!O@s=jBk@z;IbI6jsjt zQ21;D+?jvBS2?L@oocCva~|zOu)Y<76-1x?h_~4^?yCNS>|F&a6*jlNJY#3dwpOwJI zdYxDWzclNxAJ%m0ZL)W|Pj4j&9_iO>S}>T=^a+jPX+zI(jONia!GmtPF8hl?8kO98 zHB?#zry6K14|eaNSe4{do}t(BCyO_zNyE(vYF`Q;CTWw~cJRfYCv;O`(lbUMP&s~l zf_C8eV1n98Bq8vXw7f}hmfCP-e2`h5@Eh~+O4#M+3(~;7mamBMYVH+7>v{JE*^eAy zpBIDJIX=cvUF3CgU-c#ap^W2lxqPKgYDFh!c43;G;=|H&Uxv>Y$ojh(ZphCSUH+5P z@)RF`@nmi=w7?^hbRf%(#qc(p%Ptu5m@RT{^_$=l*k5b@mghEl_nU67q*k3U1Jd%< eN#m7LpF2z>0GkKRA*nIGU}~-0%D=3cEdLKr{;;C} diff --git a/templates/fonts/Google/OpenSans-SemiBold.ttf b/templates/fonts/Google/OpenSans-SemiBold.ttf index 2310e8ae886d38b09bf57b07575558d02f229464..7f6e04a2fc0c4511a61d3330e2ec3f68fb8996e4 100644 GIT binary patch delta 89 zcmV-f0H*)Q{Rg}K2e2^=voZ_|%CkP!+EKR|C;G{5VwGT v0hj`}8G-?s5Vy0E0bdKZ6P^Ku2e+A}0p0|cc&Y(10ScG?sR10P$f^NU{u3de delta 110 zcmdn}m;J$SjJ%r-dALsjDVuAz0vUO?i)k=&umWj0T}A^jAnoVOxJDaD|H@;m z7XZ?g^^7x^fV5x}<4h2L)g;DvZXnG$kFk{xlsu1h)f@0jn;zue<@XC%0qd0niAyH0=Sw3Agt4 G0UjR*dn>L0 delta 132 zcmZo!!!czI$A+Cd8F@GF+&M=UNQGX%#|)&5Z-3_mQd&>lSb9&tOfu*nFQ+q delta 29 Xcmdm;cqDNFmmn_}8r;mmwOI`SV3Y-5 diff --git a/templates/images/primary/apple-touch-icon.png b/templates/images/primary/apple-touch-icon.png index c5636059cfab7e09c3d21987370eb3aa74c22855..6ee8e51a14da9f4e9e35f42665e8bcb5cdf6acc1 100644 GIT binary patch delta 20 bcmZ3!fobUmCYH_sKlhESGWDC4>RBZLQ91_Z delta 23 ecmZ3wfob^$Cf3dXKX=}ZEHd?syqgv3StS8sF9!br diff --git a/templates/images/primary/background.png b/templates/images/primary/background.png index 002cb6a90246961e85344e6878cbd53f7e130fdc..9dd154a1556a2dd03c27724ae6ffdf2a7d6c423c 100644 GIT binary patch delta 128 zcmcb0DEI22T$auNKlet~R#wJVR;E@~=2ljgR#w)ntZebu+EcHw0Wmuea{w_X5OV=B zHxTmxG4J-&YkZEY+Lt%*1F^vN3x$ccM^y*`u`m#e05OO!2E^h(ECIxl K%cCl!UIGA-S~4^M delta 137 zcmcb5DEHQ(T-MG2KX=|nmR1(VRu-mK7UotKAe(h73tRj(M&9=1YivNw4#XTl%n8I? zK+FxqJV4C5J^31+<0_!KB@O&QEUvjyP* delta 16 XcmbREf@#tVCf3dXKX=}ZEWBF)IAR6v diff --git a/templates/images/primary/web-app-manifest-192x192.png b/templates/images/primary/web-app-manifest-192x192.png index 845cff041522bc2ef36586b6aa37b29bd4d52795..1c011765c12fd5faad2218127d2e2929d127c52c 100644 GIT binary patch delta 15 XcmX?ond#JJCYH_sKlhES$5sLWIS>Zd delta 16 YcmX?gnd$UpCf3dXKX=}ZEXP&?06qr>Ue?Y4KX=}ZEJCJ?yqm>L6~%y*x%W*sM&4$DN$moY7`F>dVp=zik$3w( I4Q5#_0LFa~G5`Po diff --git a/templates/index.md b/templates/index.md index 0614797..0b85c2f 100644 --- a/templates/index.md +++ b/templates/index.md @@ -21,16 +21,16 @@ along with this program. If not, see . # FILE INFORMATION DEFGROUP: MokoPlatform.Templates INGROUP: MokoPlatform -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/index.md -BRIEF: Comprehensive catalog of all templates in mokoplatform +BRIEF: Comprehensive catalog of all templates in mokocli --> # Templates Catalog ## Overview -This directory contains all templates and reference implementations provided by mokoplatform. Templates are non-authoritative examples that demonstrate how to implement the standards defined in `/docs/policy/`. +This directory contains all templates and reference implementations provided by mokocli. Templates are non-authoritative examples that demonstrate how to implement the standards defined in `/docs/policy/`. ## Purpose @@ -102,7 +102,7 @@ Configuration file templates for common tools. ### Documentation (`docs/`) -Documentation file templates aligned with mokoplatform policies. +Documentation file templates aligned with mokocli policies. **Templates:** - `README.md.template` - Repository README template @@ -396,7 +396,7 @@ To deprecate a template: ### Getting Help - Browse existing templates for examples -- Review mokoplatform repository as reference implementation +- Review mokocli repository as reference implementation - Consult with repository maintainers - Submit issues for template problems or requests @@ -416,7 +416,7 @@ To contribute new templates or improvements: ## Metadata * **Document**: templates/index.md -* **Repository**: [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform) +* **Repository**: [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli) * **Owner**: Moko Consulting Engineering Team * **Scope**: Template catalog and usage guide * **Lifecycle**: Active diff --git a/templates/licenses/README.md b/templates/licenses/README.md index 9a5be86..eb97d3a 100644 --- a/templates/licenses/README.md +++ b/templates/licenses/README.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Licenses -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/licenses/README.md BRIEF: License templates README --> @@ -73,7 +73,7 @@ The following license files are maintained as authoritative sources: 1. **Copy the license file** to your repository root: ```bash # From your repository root - cp /path/to/mokoplatform/templates/licenses/GPL-3.0 ./LICENSE + cp /path/to/mokocli/templates/licenses/GPL-3.0 ./LICENSE ``` 2. **No file extension**: The LICENSE file must not have an extension (use `LICENSE`, not `LICENSE.txt` or `LICENSE.md`) @@ -173,7 +173,7 @@ along with this program. If not, see . ```bash # Check if your LICENSE matches the authoritative version -diff LICENSE /path/to/mokoplatform/templates/licenses/GPL-3.0 +diff LICENSE /path/to/mokocli/templates/licenses/GPL-3.0 # Calculate checksum for verification sha256sum LICENSE @@ -193,7 +193,7 @@ The repository health workflow automatically verifies: - [SPDX License List](https://spdx.org/licenses/) - [Choose a License](https://choosealicense.com/) - [GPL Compliance Guide](https://www.gnu.org/licenses/gpl-compliance.html) -- [mokoplatform License Policy](../../docs/policy/license-compliance.md) +- [mokocli License Policy](../../docs/policy/license-compliance.md) ## Maintenance @@ -213,4 +213,4 @@ The repository health workflow automatically verifies: For questions about license selection or compliance: - **Email**: legal@mokoconsulting.tech - **Documentation**: See [License Compliance Policy](../../docs/policy/license-compliance.md) -- **Issues**: Open an issue in mokoplatform repository +- **Issues**: Open an issue in mokocli repository diff --git a/templates/licenses/index.md b/templates/licenses/index.md index fb3e5c8..0139a89 100644 --- a/templates/licenses/index.md +++ b/templates/licenses/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Licenses -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/licenses/index.md BRIEF: License templates directory index --> diff --git a/templates/makefiles/README.md b/templates/makefiles/README.md index 7938cab..819d8f0 100644 --- a/templates/makefiles/README.md +++ b/templates/makefiles/README.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Makefiles -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/makefiles/README.md BRIEF: Makefile templates README --> @@ -98,6 +98,6 @@ Platform-specific templates may include additional targets relevant to their eco ## Support For questions or issues with Makefile templates: -- See main mokoplatform documentation +- See main mokocli documentation - Check the platform-specific guides (Joomla, Dolibarr) - Review the schema documentation for source/destination details diff --git a/templates/mokogitea/CLAUDE.dolibarr.md.template b/templates/mokogitea/CLAUDE.dolibarr.md.template index 145965e..708901d 100644 --- a/templates/mokogitea/CLAUDE.dolibarr.md.template +++ b/templates/mokogitea/CLAUDE.dolibarr.md.template @@ -8,7 +8,7 @@ SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION DEFGROUP: MokoPlatform.Templates.GitHub INGROUP: MokoPlatform.Templates -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/mokogitea/CLAUDE.dolibarr.md.template VERSION: XX.YY.ZZ BRIEF: Claude AI assistant context template for Dolibarr/MokoCRM module repositories @@ -20,7 +20,7 @@ NOTE: Synced to .gitea/CLAUDE.md in all Dolibarr/CRM repos via bulk sync. > [!IMPORTANT] > **🔧 AI Self-Update Required on First Use** > -> This file may contain unfilled `{{TOKEN}}` placeholders. The mokoplatform bulk-sync system +> This file may contain unfilled `{{TOKEN}}` placeholders. The mokocli bulk-sync system > replaces them automatically at sync time; if you can still see them, sync has not yet run for > this repository — or this is a brand-new repo. > @@ -41,7 +41,7 @@ NOTE: Synced to .gitea/CLAUDE.md in all Dolibarr/CRM repos via bulk sync. > | `{{REPO_DESCRIPTION}}` | First paragraph of `README.md` body, or the GitHub repo description | > | `{{MODULE_NAME}}` | The module name as used in Dolibarr (lowercase, e.g. `mymodule`) — from the `langs/en_US/*.lang` filename or `$this->rights_class` in the module descriptor | > | `{{MODULE_CLASS}}` | PascalCase module class name (e.g. `MyModule`) — from the `src/core/modules/mod*.class.php` filename | -> | `{{MODULE_ID}}` | The `$this->numero` value in `src/core/modules/mod*.class.php`; check [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/development/crm/module-registry.md) if creating a new module | +> | `{{MODULE_ID}}` | The `$this->numero` value in `src/core/modules/mod*.class.php`; check [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/development/crm/module-registry.md) if creating a new module | > > --- @@ -53,10 +53,10 @@ NOTE: Synced to .gitea/CLAUDE.md in all Dolibarr/CRM repos via bulk sync. Module name: **{{MODULE_NAME}}** Module class: **{{MODULE_CLASS}}** -Module ID: **{{MODULE_ID}}** *(unique, immutable — registered in [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/development/crm/module-registry.md))* +Module ID: **{{MODULE_ID}}** *(unique, immutable — registered in [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/development/crm/module-registry.md))* Repository URL: {{REPO_URL}} -This repository is governed by [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform) — the single source of truth for coding standards, file-header policies, GitHub Actions workflows, and Terraform configuration templates across all Moko Consulting repositories. +This repository is governed by [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli) — the single source of truth for coding standards, file-header policies, GitHub Actions workflows, and Terraform configuration templates across all Moko Consulting repositories. --- @@ -89,7 +89,7 @@ This repository is governed by [mokoplatform](https://git.mokoconsulting.tech/Mo │ ├── unit/ │ └── integration/ ├── .gitea/ -│ ├── workflows/ # CI/CD workflows (synced from mokoplatform) +│ ├── workflows/ # CI/CD workflows (synced from mokocli) │ ├── copilot-instructions.md │ └── CLAUDE.md # This file ├── README.md # Version source of truth @@ -155,7 +155,7 @@ public $numero = {{MODULE_ID}}; // IMMUTABLE — never change; registered public $version = 'XX.YY.ZZ'; // Must match README.md version exactly ``` -**`$numero` is permanent.** It was registered in [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/development/crm/module-registry.md) when this module was created. Changing it would break all Dolibarr installations that have this module activated. +**`$numero` is permanent.** It was registered in [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/development/crm/module-registry.md) when this module was created. Changing it would break all Dolibarr installations that have this module activated. Before creating a new module, always check the registry for the next available ID. @@ -282,15 +282,15 @@ Before opening a PR, verify: --- -# Key Policy Documents (mokoplatform) +# Key Policy Documents (mokocli) | Document | Purpose | |----------|---------| -| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | -| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | -| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | -| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR conventions | -| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | -| [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/development/crm/module-registry.md) | Dolibarr module ID registry — check before reserving a new ID | -| [crm/development-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/crm/development-standards.md) | MokoCRM Dolibarr module development standards | -| [dolibarr-development-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/guide/crm/dolibarr-development-guide.md) | MokoCRM full development guide | +| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | +| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | +| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | +| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR conventions | +| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | +| [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/development/crm/module-registry.md) | Dolibarr module ID registry — check before reserving a new ID | +| [crm/development-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/crm/development-standards.md) | MokoCRM Dolibarr module development standards | +| [dolibarr-development-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/guide/crm/dolibarr-development-guide.md) | MokoCRM full development guide | diff --git a/templates/mokogitea/CLAUDE.joomla.md.template b/templates/mokogitea/CLAUDE.joomla.md.template index 1e33a66..ac67dac 100644 --- a/templates/mokogitea/CLAUDE.joomla.md.template +++ b/templates/mokogitea/CLAUDE.joomla.md.template @@ -8,7 +8,7 @@ SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION DEFGROUP: MokoPlatform.Templates.GitHub INGROUP: MokoPlatform.Templates -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/mokogitea/CLAUDE.joomla.md.template VERSION: XX.YY.ZZ BRIEF: Claude AI assistant context template for Joomla/MokoWaaS governed repositories @@ -20,7 +20,7 @@ NOTE: Synced to .gitea/CLAUDE.md in all Joomla/WaaS repos via bulk sync. > [!IMPORTANT] > **🔧 AI Self-Update Required on First Use** > -> This file may contain unfilled `{{TOKEN}}` placeholders. The mokoplatform bulk-sync system +> This file may contain unfilled `{{TOKEN}}` placeholders. The mokocli bulk-sync system > replaces them automatically at sync time; if you can still see them, sync has not yet run for > this repository — or this is a brand-new repo. > @@ -55,7 +55,7 @@ Extension name: **{{EXTENSION_NAME}}** Extension type: **{{EXTENSION_TYPE}}** (`{{EXTENSION_ELEMENT}}`) Repository URL: {{REPO_URL}} -This repository is governed by [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform) — the single source of truth for coding standards, file-header policies, GitHub Actions workflows, and Terraform configuration templates across all Moko Consulting repositories. +This repository is governed by [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli) — the single source of truth for coding standards, file-header policies, GitHub Actions workflows, and Terraform configuration templates across all Moko Consulting repositories. --- @@ -81,7 +81,7 @@ This repository is governed by [mokoplatform](https://git.mokoconsulting.tech/Mo ├── docs/ # Technical documentation ├── tests/ # Test suite ├── .gitea/ -│ ├── workflows/ # CI/CD workflows (synced from mokoplatform) +│ ├── workflows/ # CI/CD workflows (synced from mokocli) │ ├── copilot-instructions.md │ └── CLAUDE.md # This file ├── README.md # Version source of truth @@ -284,16 +284,16 @@ Before opening a PR, verify: --- -# Key Policy Documents (mokoplatform) +# Key Policy Documents (mokocli) | Document | Purpose | |----------|---------| -| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | -| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | -| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | -| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR conventions | -| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | -| [joomla-development-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoWaaS Joomla extension development guide | +| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | +| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | +| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | +| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR conventions | +| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | +| [joomla-development-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoWaaS Joomla extension development guide | ### Update Server Priority diff --git a/templates/mokogitea/CLAUDE.md.template b/templates/mokogitea/CLAUDE.md.template index b275df9..94187df 100644 --- a/templates/mokogitea/CLAUDE.md.template +++ b/templates/mokogitea/CLAUDE.md.template @@ -31,4 +31,4 @@ make clean # Clean build artifacts - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files -- **Standards**: [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home) +- **Standards**: [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home) diff --git a/templates/mokogitea/ISSUE_TEMPLATE/config.yml b/templates/mokogitea/ISSUE_TEMPLATE/config.yml index d77a1bc..f392686 100644 --- a/templates/mokogitea/ISSUE_TEMPLATE/config.yml +++ b/templates/mokogitea/ISSUE_TEMPLATE/config.yml @@ -7,8 +7,8 @@ contact_links: - name: 💬 Ask a Question url: https://mokoconsulting.tech/ about: Get help or ask questions through our website - - name: 📚 mokoplatform Documentation - url: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + - name: 📚 mokocli Documentation + url: https://git.mokoconsulting.tech/MokoConsulting/mokocli about: View our coding standards and best practices - name: 🔒 Report a Security Vulnerability url: https://git.mokoconsulting.tech/mokoconsulting-tech/.github-private/security/advisories/new diff --git a/templates/mokogitea/ISSUE_TEMPLATE/documentation.md b/templates/mokogitea/ISSUE_TEMPLATE/documentation.md index 6269db7..43ad195 100644 --- a/templates/mokogitea/ISSUE_TEMPLATE/documentation.md +++ b/templates/mokogitea/ISSUE_TEMPLATE/documentation.md @@ -42,7 +42,7 @@ Suggested text here ## Standards Alignment -- [ ] Follows mokoplatform documentation guidelines +- [ ] Follows mokocli documentation guidelines - [ ] Uses en_US/en_GB localization - [ ] Includes proper SPDX headers where applicable diff --git a/templates/mokogitea/ISSUE_TEMPLATE/dolibarr_module_id_request.md b/templates/mokogitea/ISSUE_TEMPLATE/dolibarr_module_id_request.md index 3e76e2b..39dfe59 100644 --- a/templates/mokogitea/ISSUE_TEMPLATE/dolibarr_module_id_request.md +++ b/templates/mokogitea/ISSUE_TEMPLATE/dolibarr_module_id_request.md @@ -92,7 +92,7 @@ List Dolibarr hooks this module will use: ### ID Range Preference -Based on the [Dolibarr Module ID Policy](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/DOLIBARR_MODULE_ID_REQUEST.md): +Based on the [Dolibarr Module ID Policy](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/DOLIBARR_MODULE_ID_REQUEST.md): **Preferred Range** (will be assigned by coordinator): - [ ] Internal module (100000-109999) @@ -104,7 +104,7 @@ Based on the [Dolibarr Module ID Policy](https://git.mokoconsulting.tech/MokoCon ### Security and Compliance **For Public Modules** (required before external registration): -- [ ] Code follows mokoplatform +- [ ] Code follows mokocli - [ ] Security review completed - [ ] No sensitive data or credentials in code - [ ] License properly defined (GPL-3.0-or-later) @@ -143,7 +143,7 @@ If similar modules exist, explain why a new module is needed: ### Acknowledgments -- [ ] I have read the [Dolibarr Module ID Policy](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/DOLIBARR_MODULE_ID_REQUEST.md) +- [ ] I have read the [Dolibarr Module ID Policy](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/DOLIBARR_MODULE_ID_REQUEST.md) - [ ] I understand internal modules use range 100000-119999 - [ ] I understand public modules require external registration with Dolibarr Foundation - [ ] I understand module IDs are never reused once allocated diff --git a/templates/mokogitea/ISSUE_TEMPLATE/feature_request.md b/templates/mokogitea/ISSUE_TEMPLATE/feature_request.md index f7df007..2f7d663 100644 --- a/templates/mokogitea/ISSUE_TEMPLATE/feature_request.md +++ b/templates/mokogitea/ISSUE_TEMPLATE/feature_request.md @@ -37,7 +37,7 @@ If you have ideas about how this could be implemented, share them here: Add any other context, mockups, or screenshots about the feature request here. ## Relevant Standards -Does this relate to any standards in [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)? +Does this relate to any standards in [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli)? - [ ] Accessibility (WCAG 2.1 AA) - [ ] Localization (en_US/en_GB) - [ ] Security best practices diff --git a/templates/mokogitea/ISSUE_TEMPLATE/security.md b/templates/mokogitea/ISSUE_TEMPLATE/security.md index 7d290fb..ea85959 100644 --- a/templates/mokogitea/ISSUE_TEMPLATE/security.md +++ b/templates/mokogitea/ISSUE_TEMPLATE/security.md @@ -35,7 +35,7 @@ Use this template only for: ## Standards Reference -Does this relate to security standards in [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)? +Does this relate to security standards in [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli)? - [ ] SPDX license identifiers - [ ] Secret management - [ ] Dependency security diff --git a/templates/mokogitea/README.md b/templates/mokogitea/README.md index c4e1bcb..2566e09 100644 --- a/templates/mokogitea/README.md +++ b/templates/mokogitea/README.md @@ -21,7 +21,7 @@ along with this program. If not, see . # FILE INFORMATION DEFGROUP: MokoPlatform.Templates INGROUP: MokoPlatform.GitHub -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/mokogitea/README.md BRIEF: GitHub-specific templates including issues, PRs, and CODEOWNERS --> @@ -149,10 +149,10 @@ your-repository/ blank_issues_enabled: false contact_links: - name: "📚 Documentation" - url: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/docs + url: https://git.mokoconsulting.tech/MokoConsulting/mokocli/docs about: "Check the documentation first" - name: "💬 Discussions" - url: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/discussions + url: https://git.mokoconsulting.tech/MokoConsulting/mokocli/discussions about: "Ask questions and discuss ideas" ``` @@ -367,12 +367,12 @@ Require status checks that verify: - [GitHub Issue Templates Documentation](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository) - [GitHub PR Templates Documentation](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository) - [GitHub CODEOWNERS Documentation](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) -- [mokoplatform Repository](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform) +- [mokocli Repository](https://git.mokoconsulting.tech/MokoConsulting/mokocli) ## Metadata * **Document**: templates/mokogitea/README.md -* **Repository**: [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform) +* **Repository**: [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli) * **Owner**: Moko Consulting Engineering Team * **Scope**: GitHub templates and configuration * **Lifecycle**: Active diff --git a/templates/mokogitea/copilot-instructions.dolibarr.md.template b/templates/mokogitea/copilot-instructions.dolibarr.md.template index b5b522c..75611e7 100644 --- a/templates/mokogitea/copilot-instructions.dolibarr.md.template +++ b/templates/mokogitea/copilot-instructions.dolibarr.md.template @@ -8,7 +8,7 @@ SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION DEFGROUP: MokoPlatform.Templates.GitHub INGROUP: MokoPlatform.Templates -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/mokogitea/copilot-instructions.dolibarr.md.template VERSION: XX.YY.ZZ BRIEF: GitHub Copilot custom instructions template for Dolibarr/MokoCRM module repositories @@ -20,7 +20,7 @@ NOTE: Synced to .gitea/copilot-instructions.md in all Dolibarr/CRM module repos > [!IMPORTANT] > **🔧 AI Self-Update Required on First Use** > -> This file may contain unfilled `{{TOKEN}}` placeholders. The mokoplatform bulk-sync system +> This file may contain unfilled `{{TOKEN}}` placeholders. The mokocli bulk-sync system > replaces them automatically at sync time; if you can still see them, sync has not yet run for > this repository — or this is a brand-new repo. > @@ -40,7 +40,7 @@ NOTE: Synced to .gitea/copilot-instructions.md in all Dolibarr/CRM module repos > | `{{REPO_URL}}` | Full GitHub URL, e.g. `https://git.mokoconsulting.tech/mokoconsulting-tech/` | > | `{{MODULE_NAME}}` | The module name as used in Dolibarr (lowercase, e.g. `mymodule`) — from the `langs/en_US/*.lang` filename or `$this->rights_class` in the module descriptor | > | `{{MODULE_CLASS}}` | PascalCase module class name (e.g. `MyModule`) — from the `src/core/modules/mod*.class.php` filename | -> | `{{MODULE_ID}}` | The `$this->numero` value in `src/core/modules/mod*.class.php`; check [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/development/crm/module-registry.md) if creating a new module | +> | `{{MODULE_ID}}` | The `$this->numero` value in `src/core/modules/mod*.class.php`; check [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/development/crm/module-registry.md) if creating a new module | > | `{{PRIMARY_LANGUAGE}}` | Primary programming language (usually `PHP`) | > > --- @@ -49,7 +49,7 @@ NOTE: Synced to .gitea/copilot-instructions.md in all Dolibarr/CRM module repos ## What This Repo Is -This is a **Moko Consulting MokoCRM** (Dolibarr) module repository governed by [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform). All coding standards, workflows, and policies are defined there and enforced here via bulk sync. +This is a **Moko Consulting MokoCRM** (Dolibarr) module repository governed by [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli). All coding standards, workflows, and policies are defined there and enforced here via bulk sync. Repository URL: {{REPO_URL}} Module name: **{{MODULE_NAME}}** @@ -232,7 +232,7 @@ class mod{{MODULE_CLASS}} extends DolibarrModules ``` **Key rules for the module descriptor:** -- `$this->numero` is a globally unique ID registered in [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/development/crm/module-registry.md) — **never change it**. +- `$this->numero` is a globally unique ID registered in [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/development/crm/module-registry.md) — **never change it**. - `$this->version` must exactly match the version in `README.md`. - Register new modules in the module registry before using any ID. @@ -262,19 +262,19 @@ PHP scripts read the token with: `getenv('GH_TOKEN') ?: getenv('GITHUB_TOKEN')` --- -## mokoplatform Reference +## mokocli Reference -This repository is governed by [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform). Authoritative policies: +This repository is governed by [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli). Authoritative policies: | Document | Purpose | |----------|---------| -| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | -| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | -| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | -| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions | -| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | -| [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/development/crm/module-registry.md) | Dolibarr module ID registry — check before reserving a new ID | -| [crm-development-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/crm/development-standards.md) | MokoCRM Dolibarr module development standards | +| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | +| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | +| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | +| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions | +| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | +| [module-registry.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/development/crm/module-registry.md) | Dolibarr module ID registry — check before reserving a new ID | +| [crm-development-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/crm/development-standards.md) | MokoCRM Dolibarr module development standards | --- diff --git a/templates/mokogitea/copilot-instructions.joomla.md.template b/templates/mokogitea/copilot-instructions.joomla.md.template index fe44ef8..a9f213e 100644 --- a/templates/mokogitea/copilot-instructions.joomla.md.template +++ b/templates/mokogitea/copilot-instructions.joomla.md.template @@ -8,7 +8,7 @@ SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION DEFGROUP: MokoPlatform.Templates.GitHub INGROUP: MokoPlatform.Templates -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/mokogitea/copilot-instructions.joomla.md.template VERSION: XX.YY.ZZ BRIEF: GitHub Copilot custom instructions template for Joomla/MokoWaaS governed repositories @@ -20,7 +20,7 @@ NOTE: Synced to .gitea/copilot-instructions.md in all Joomla/WaaS repos via bulk > [!IMPORTANT] > **🔧 AI Self-Update Required on First Use** > -> This file may contain unfilled `{{TOKEN}}` placeholders. The mokoplatform bulk-sync system +> This file may contain unfilled `{{TOKEN}}` placeholders. The mokocli bulk-sync system > replaces them automatically at sync time; if you can still see them, sync has not yet run for > this repository — or this is a brand-new repo. > @@ -48,7 +48,7 @@ NOTE: Synced to .gitea/copilot-instructions.md in all Joomla/WaaS repos via bulk ## What This Repo Is -This is a **Moko Consulting MokoWaaS** (Joomla) repository governed by [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform). All coding standards, workflows, and policies are defined there and enforced here via bulk sync. +This is a **Moko Consulting MokoWaaS** (Joomla) repository governed by [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli). All coding standards, workflows, and policies are defined there and enforced here via bulk sync. Repository URL: {{REPO_URL}} Extension name: **{{EXTENSION_NAME}}** @@ -239,18 +239,18 @@ token: ${{ secrets.GITHUB_TOKEN }} --- -## mokoplatform Reference +## mokocli Reference -This repository is governed by [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform). Authoritative policies: +This repository is governed by [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli). Authoritative policies: | Document | Purpose | |----------|---------| -| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | -| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | -| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | -| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions | -| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | -| [joomla-development-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoWaaS Joomla extension development guide | +| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | +| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | +| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | +| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions | +| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | +| [joomla-development-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoWaaS Joomla extension development guide | --- diff --git a/templates/mokogitea/copilot-instructions.md.template b/templates/mokogitea/copilot-instructions.md.template index ea6d986..eaa2eac 100644 --- a/templates/mokogitea/copilot-instructions.md.template +++ b/templates/mokogitea/copilot-instructions.md.template @@ -8,7 +8,7 @@ SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION DEFGROUP: MokoPlatform.Templates.GitHub INGROUP: MokoPlatform.Templates -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/mokogitea/copilot-instructions.md.template VERSION: XX.YY.ZZ BRIEF: Standard GitHub Copilot custom instructions template for Moko Consulting governed repositories @@ -19,7 +19,7 @@ NOTE: Synced to .gitea/copilot-instructions.md in all governed repositories via > [!IMPORTANT] > **🔧 AI Self-Update Required on First Use** > -> This file may contain unfilled `{{TOKEN}}` placeholders. The mokoplatform bulk-sync system +> This file may contain unfilled `{{TOKEN}}` placeholders. The mokocli bulk-sync system > replaces them automatically at sync time; if you can still see them, sync has not yet run for > this repository — or this is a brand-new repo. > @@ -46,7 +46,7 @@ NOTE: Synced to .gitea/copilot-instructions.md in all governed repositories via ## What This Repo Is -This is a **Moko Consulting** repository governed by [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform). All coding standards, workflows, and policies are defined there and enforced here via bulk sync. +This is a **Moko Consulting** repository governed by [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli). All coding standards, workflows, and policies are defined there and enforced here via bulk sync. Repository URL: {{REPO_URL}} Primary language: **{{PRIMARY_LANGUAGE}}** @@ -56,7 +56,7 @@ Platform type: **{{PLATFORM_TYPE}}** ## Primary Language -**{{PRIMARY_LANGUAGE}} is the primary language for this repository.** Follow the conventions documented in [mokoplatform coding-style-guide](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/coding-style-guide.md). +**{{PRIMARY_LANGUAGE}} is the primary language for this repository.** Follow the conventions documented in [mokocli coding-style-guide](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/coding-style-guide.md). YAML uses 2-space indentation (spaces, not tabs). All other text files use tabs per `.editorconfig`. @@ -131,7 +131,7 @@ Each badge type has a designated color — no two types share the same color: | PHP | `777BB4` | `badge/PHP-8.2%2B-777BB4?logo=php` | | Joomla | `red` | `badge/Joomla-5.x-red?logo=joomla` | | Dolibarr | `red` | `badge/Dolibarr-20.x-red` | -| mokoplatform | `orange` | `badge/moko--platform-04.06.00-orange` | +| mokocli | `orange` | `badge/moko--platform-04.06.00-orange` | --- @@ -161,14 +161,14 @@ PHP scripts read the token with: `getenv('GH_TOKEN') ?: getenv('GITHUB_TOKEN')` ## Composer Package (PHP repositories) -This repository requires the mokoplatform enterprise library. The `composer.json` must include: +This repository requires the mokocli enterprise library. The `composer.json` must include: ```json { "repositories": [ { "type": "vcs", - "url": "https://git.mokoconsulting.tech/MokoConsulting/mokoplatform" + "url": "https://git.mokoconsulting.tech/MokoConsulting/mokocli" } ], "require": { @@ -177,7 +177,7 @@ This repository requires the mokoplatform enterprise library. The `composer.json } ``` -Run `composer install` after adding the dependency. See [package-installation.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/guide/package-installation.md) for full instructions. +Run `composer install` after adding the dependency. See [package-installation.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/guide/package-installation.md) for full instructions. --- @@ -313,16 +313,16 @@ If your code change makes any existing doc sentence false or incomplete, fix the --- -## mokoplatform Reference +## mokocli Reference -This repository is governed by [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform). Authoritative policies: +This repository is governed by [mokocli](https://git.mokoconsulting.tech/MokoConsulting/mokocli). Authoritative policies: | Document | Purpose | |----------|---------| -| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | -| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | -| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | -| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions | -| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | -| [scripting-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/policy/scripting-standards.md) | PHP script requirements and CliFramework usage | -| [package-installation.md](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/blob/main/docs/guide/package-installation.md) | Installing `mokoconsulting/mokostandards` via Composer | +| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type | +| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions | +| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | +| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions | +| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | +| [scripting-standards.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/policy/scripting-standards.md) | PHP script requirements and CliFramework usage | +| [package-installation.md](https://git.mokoconsulting.tech/MokoConsulting/mokocli/blob/main/docs/guide/package-installation.md) | Installing `mokoconsulting/mokostandards` via Composer | diff --git a/templates/mokogitea/dependabot.yml.template b/templates/mokogitea/dependabot.yml.template index 4b2c05e..6b7e0b2 100644 --- a/templates/mokogitea/dependabot.yml.template +++ b/templates/mokogitea/dependabot.yml.template @@ -7,7 +7,7 @@ # FILE INFORMATION # DEFGROUP: GitHub.Dependabot # INGROUP: MokoPlatform.Security -# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli # PATH: /templates/mokogitea/dependabot.yml.template # VERSION: XX.YY.ZZ # BRIEF: Template Dependabot configuration for governed repositories diff --git a/templates/mokogitea/override.tf.template b/templates/mokogitea/override.tf.template index 2ef9554..3f50b2b 100644 --- a/templates/mokogitea/override.tf.template +++ b/templates/mokogitea/override.tf.template @@ -2,9 +2,9 @@ # Location: .gitea/override.tf # # This file allows repository-specific customization of health checks. -# It overrides the default configuration from mokoplatform. +# It overrides the default configuration from mokocli. # -# AUTO-GENERATED: This file is automatically synced from mokoplatform +# AUTO-GENERATED: This file is automatically synced from mokocli # To customize: Edit this file and it will be preserved on future syncs locals { diff --git a/templates/required/README.md b/templates/required/README.md index 2010a6e..18e1faa 100644 --- a/templates/required/README.md +++ b/templates/required/README.md @@ -4,18 +4,18 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Required -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/required/README.md BRIEF: Required templates README --> # Required Templates -This directory contains **REQUIRED** files that must be present in all mokoplatform-compliant repositories. +This directory contains **REQUIRED** files that must be present in all mokocli-compliant repositories. ## Overview -Required templates are essential files that provide core functionality and ensure consistency across all repositories in the organization. These files must be copied to target repositories and kept synchronized with mokoplatform updates. +Required templates are essential files that provide core functionality and ensure consistency across all repositories in the organization. These files must be copied to target repositories and kept synchronized with mokocli updates. ## Required Files @@ -28,11 +28,11 @@ Required templates are essential files that provide core functionality and ensur **Installation**: ```bash # Quick install -curl -fsSL https://raw.githubusercontent.com/MokoConsulting/mokoplatform/main/templates/required/setup-labels.sh > scripts/maintenance/setup-labels.sh +curl -fsSL https://raw.githubusercontent.com/MokoConsulting/mokocli/main/templates/required/setup-labels.sh > scripts/maintenance/setup-labels.sh chmod +x scripts/maintenance/setup-labels.sh -# Or copy from mokoplatform -cp /path/to/mokoplatform/templates/required/setup-labels.sh scripts/maintenance/setup-labels.sh +# Or copy from mokocli +cp /path/to/mokocli/templates/required/setup-labels.sh scripts/maintenance/setup-labels.sh chmod +x scripts/maintenance/setup-labels.sh ``` @@ -50,7 +50,7 @@ chmod +x scripts/maintenance/setup-labels.sh - Project types (joomla, dolibarr, generic) - Languages (php, javascript, typescript, python, css, html) - Components (documentation, ci-cd, docker, tests, security, dependencies, config, build) -- Workflow (automation, mokoplatform, needs-review, work-in-progress, breaking-change) +- Workflow (automation, mokocli, needs-review, work-in-progress, breaking-change) - Priority (critical, high, medium, low) - Type (bug, feature, enhancement, refactor, chore) - Status (pending, in-progress, blocked, on-hold, wontfix) @@ -95,10 +95,10 @@ done ### Automated Compliance -Use the mokoplatform validation scripts: +Use the mokocli validation scripts: ```bash -# From mokoplatform repository +# From mokocli repository python3 scripts/validate/validate_repo_health.py --check-required-files # Or use bulk validation @@ -107,14 +107,14 @@ php scripts/automation/bulk_update_repos.php --validate-only ## Syncing Updates -Required files should be kept in sync with mokoplatform: +Required files should be kept in sync with mokocli: ```bash # Update single file -curl -fsSL https://raw.githubusercontent.com/MokoConsulting/mokoplatform/main/templates/required/setup-labels.sh > scripts/maintenance/setup-labels.sh +curl -fsSL https://raw.githubusercontent.com/MokoConsulting/mokocli/main/templates/required/setup-labels.sh > scripts/maintenance/setup-labels.sh # Or use bulk sync -cd /path/to/mokoplatform +cd /path/to/mokocli ./scripts/automation/bulk_update_repos.sh --org MokoConsulting --sync-required ``` @@ -123,26 +123,26 @@ cd /path/to/mokoplatform To deploy required files to a repository using GitHub Copilot: ```markdown -Deploy required mokoplatform files to this repository. +Deploy required mokocli files to this repository. Required files to deploy: 1. setup-labels.sh - Label deployment script Process: 1. Create scripts/maintenance/ directory if not exists -2. Download setup-labels.sh from MokoConsulting/mokoplatform +2. Download setup-labels.sh from MokoConsulting/mokocli 3. Copy to scripts/maintenance/setup-labels.sh 4. Make executable: chmod +x scripts/maintenance/setup-labels.sh 5. Test with dry-run: ./scripts/maintenance/setup-labels.sh --dry-run 6. Deploy labels: ./scripts/maintenance/setup-labels.sh 7. Verify labels in repository settings -Source: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/tree/main/templates/required +Source: https://git.mokoconsulting.tech/MokoConsulting/mokocli/tree/main/templates/required ``` ## Future Required Files -As mokoplatform evolves, additional required files may be added: +As mokocli evolves, additional required files may be added: - **PLANNED**: `.github/labeler.yml` - Auto-labeling configuration - **PLANNED**: `.editorconfig` - Editor configuration @@ -153,7 +153,7 @@ As mokoplatform evolves, additional required files may be added: - **Documentation**: [Copilot Sync Standards Guide](../../docs/guide/copilot-sync-standards.md) - **Label Guide**: [Label Deployment Guide](../../docs/guides/label-deployment.md) -- **Issues**: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/issues +- **Issues**: https://git.mokoconsulting.tech/MokoConsulting/mokocli/issues - **Contact**: hello@mokoconsulting.tech ## Related Documentation @@ -167,4 +167,4 @@ As mokoplatform evolves, additional required files may be added: **Last Updated**: 2026-01-28 **Version**: 03.01.00 -**Maintained By**: mokoplatform Team +**Maintained By**: mokocli Team diff --git a/templates/schemas/README.md b/templates/schemas/README.md index a910d6a..cabd2f5 100644 --- a/templates/schemas/README.md +++ b/templates/schemas/README.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Schemas -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/schemas/README.md BRIEF: Schema templates README --> diff --git a/templates/schemas/manifest-schema.xsd b/templates/schemas/manifest-schema.xsd index 64e38bb..dfe0ea1 100644 --- a/templates/schemas/manifest-schema.xsd +++ b/templates/schemas/manifest-schema.xsd @@ -3,19 +3,19 @@ Copyright (C) 2026 Moko Consulting SPDX-License-Identifier: GPL-3.0-or-later - mokoplatform Manifest Schema v09.01.00 + mokocli Manifest Schema v09.01.00 Defines the structure of .mokogitea/manifest.xml Validate: xmllint - -schema definitions/manifest-schema.xsd .mokogitea/manifest.xml --> - + diff --git a/templates/schemas/moko-platform-schema.xsd b/templates/schemas/moko-platform-schema.xsd index 675348d..5f74a0e 100644 --- a/templates/schemas/moko-platform-schema.xsd +++ b/templates/schemas/moko-platform-schema.xsd @@ -5,20 +5,20 @@ FILE INFORMATION DEFGROUP: MokoPlatform.Schema INGROUP: MokoPlatform.Governance - REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform - PATH: /templates/schemas/mokoplatform-schema.xsd + REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli + PATH: /templates/schemas/mokocli-schema.xsd BRIEF: XML Schema Definition for the manifest.xml repository manifest file --> - + Root element of the manifest.xml repository manifest. @@ -76,12 +76,12 @@ - Binds this repository to a mokoplatform platform definition and + Binds this repository to a mokocli platform definition and tracks the governance source and version. diff --git a/templates/schemas/mokostandards-schema.xsd b/templates/schemas/mokostandards-schema.xsd index 78d2626..b479ffe 100644 --- a/templates/schemas/mokostandards-schema.xsd +++ b/templates/schemas/mokostandards-schema.xsd @@ -5,20 +5,20 @@ FILE INFORMATION DEFGROUP: MokoPlatform.Schema INGROUP: MokoPlatform.Governance - REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /docs/standards/mokostandards-schema.xsd BRIEF: XML Schema Definition for the .mokostandards repository manifest file --> - + Root element of the .mokostandards repository manifest. @@ -76,12 +76,12 @@ - Binds this repository to a mokoplatform platform definition and + Binds this repository to a mokocli platform definition and tracks the governance source and version. diff --git a/templates/schemas/schemas/README.md b/templates/schemas/schemas/README.md index b88bf6c..a9dc953 100644 --- a/templates/schemas/schemas/README.md +++ b/templates/schemas/schemas/README.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Schemas -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/schemas/schemas/README.md BRIEF: Deprecated schema directory README --> diff --git a/templates/schemas/template-repository-structure.xml b/templates/schemas/template-repository-structure.xml index 41ba91c..0886802 100644 --- a/templates/schemas/template-repository-structure.xml +++ b/templates/schemas/template-repository-structure.xml @@ -22,7 +22,7 @@ along with this program. If not, see . FILE INFORMATION DEFGROUP: MokoPlatform.Templates.Schemas INGROUP: MokoPlatform.Templates -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/schemas/template-repository-structure.xml BRIEF: Template for defining custom repository structure schemas --> @@ -126,8 +126,8 @@ BRIEF: Template for defining custom repository structure schemas - mokoplatform.override.xml - mokoplatform sync override configuration + mokocli.override.xml + mokocli sync override configuration optional false @@ -150,7 +150,7 @@ BRIEF: Template for defining custom repository structure schemas standards-compliance.yml - mokoplatform compliance validation + mokocli compliance validation required diff --git a/templates/scripts/README.md b/templates/scripts/README.md index 37f0f36..d452737 100644 --- a/templates/scripts/README.md +++ b/templates/scripts/README.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Scripts -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/scripts/README.md BRIEF: Script templates README --> @@ -116,7 +116,7 @@ These are template scripts. Adapt them to your project's specific needs: ## Standards Compliance -All scripts follow mokoplatform requirements: +All scripts follow mokocli requirements: - SPDX license headers - GPL-3.0-or-later license diff --git a/templates/scripts/common/CliBase.template.php b/templates/scripts/common/CliBase.template.php index 7c5b611..015b2a1 100644 --- a/templates/scripts/common/CliBase.template.php +++ b/templates/scripts/common/CliBase.template.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Templates.Common * INGROUP: MokoPlatform.Templates - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/scripts/common/CliBase.template.php * BRIEF: PHP CLI script template — extends MokoCli\CliFramework * NOTE: Copy this file as a starting point for new PHP CLI scripts in governed repos. diff --git a/templates/scripts/fix/index.md b/templates/scripts/fix/index.md index c04b146..6d3d799 100644 --- a/templates/scripts/fix/index.md +++ b/templates/scripts/fix/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Scripts.Fix -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/scripts/fix/index.md BRIEF: Fix scripts directory index --> diff --git a/templates/scripts/index.md b/templates/scripts/index.md index 86aefc6..0b59cb8 100644 --- a/templates/scripts/index.md +++ b/templates/scripts/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Scripts -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/scripts/index.md BRIEF: Script templates directory index --> diff --git a/templates/scripts/release/index.md b/templates/scripts/release/index.md index 93e54d7..8c919a0 100644 --- a/templates/scripts/release/index.md +++ b/templates/scripts/release/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Scripts.Release -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/scripts/release/index.md BRIEF: Release scripts directory index --> diff --git a/templates/scripts/release/package_dolibarr.php b/templates/scripts/release/package_dolibarr.php index bd1c357..cd411ab 100644 --- a/templates/scripts/release/package_dolibarr.php +++ b/templates/scripts/release/package_dolibarr.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Templates.Scripts.Release * INGROUP: MokoPlatform.Templates - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/scripts/release/package_dolibarr.php * BRIEF: Build a distributable ZIP package for a Dolibarr module * NOTE: Deployed to bin/build_package.php in governed Dolibarr module repos. diff --git a/templates/scripts/release/package_joomla.php b/templates/scripts/release/package_joomla.php index 5190a23..ab47baa 100644 --- a/templates/scripts/release/package_joomla.php +++ b/templates/scripts/release/package_joomla.php @@ -10,7 +10,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Templates.Scripts.Release * INGROUP: MokoPlatform.Templates - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/scripts/release/package_joomla.php * BRIEF: Build a distributable ZIP package for a Joomla component * NOTE: Deployed to bin/build_package.php in governed WaaS component repos. diff --git a/templates/scripts/sftp-config/README.md b/templates/scripts/sftp-config/README.md index e586a18..21ab613 100644 --- a/templates/scripts/sftp-config/README.md +++ b/templates/scripts/sftp-config/README.md @@ -8,7 +8,7 @@ SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION DEFGROUP: MokoPlatform.Templates.Scripts INGROUP: MokoPlatform.Templates -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/scripts/sftp-config/README.md BRIEF: Setup guide for local SFTP deployment configuration files --> @@ -26,14 +26,14 @@ GitHub Actions workflows. ## Quick Setup -1. **Copy the example templates** from mokoplatform: +1. **Copy the example templates** from mokocli: ```bash # From your repo root mkdir -p scripts/sftp-config scripts/keys - cp path/to/mokoplatform/templates/scripts/deploy/sftp-config.dev.json.example \ + cp path/to/mokocli/templates/scripts/deploy/sftp-config.dev.json.example \ scripts/sftp-config/sftp-config.dev.json - cp path/to/mokoplatform/templates/scripts/deploy/sftp-config.rs.json.example \ + cp path/to/mokocli/templates/scripts/deploy/sftp-config.rs.json.example \ scripts/sftp-config/sftp-config.rs.json ``` @@ -76,21 +76,21 @@ GitHub Actions workflows. ```bash # Preview what would be uploaded (no connection made) -php path/to/mokoplatform/api/deploy/deploy-sftp.php \ +php path/to/mokocli/api/deploy/deploy-sftp.php \ --path . --env dev --dry-run --verbose # Deploy src/ to dev -php path/to/mokoplatform/api/deploy/deploy-sftp.php \ +php path/to/mokocli/api/deploy/deploy-sftp.php \ --path . --env dev # Deploy src/ to production -php path/to/mokoplatform/api/deploy/deploy-sftp.php \ +php path/to/mokocli/api/deploy/deploy-sftp.php \ --path . --env rs ``` For full option reference run: ```bash -php path/to/mokoplatform/api/deploy/deploy-sftp.php --help +php path/to/mokocli/api/deploy/deploy-sftp.php --help ``` --- diff --git a/templates/scripts/validate/dolibarr_module.php b/templates/scripts/validate/dolibarr_module.php index 8edcaa5..06749d5 100644 --- a/templates/scripts/validate/dolibarr_module.php +++ b/templates/scripts/validate/dolibarr_module.php @@ -10,9 +10,9 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Templates.Scripts.Validate * INGROUP: MokoPlatform.Templates - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/scripts/validate/dolibarr_module.php - * BRIEF: Validate a Dolibarr module repository against mokoplatform requirements + * BRIEF: Validate a Dolibarr module repository against mokocli requirements * NOTE: Deployed to bin/validate_module.php in governed Dolibarr module repos. * Run: php bin/validate_module.php [--path DIR] [--verbose] [--json] */ @@ -25,7 +25,7 @@ require_once __DIR__ . '/../vendor/autoload.php'; use MokoCli\CliFramework; /** - * Validates a Dolibarr module repository against mokoplatform requirements. + * Validates a Dolibarr module repository against mokocli requirements. * * Checks performed: * - Required directories (src/, src/core/modules/, langs/en_US/, img/) @@ -39,7 +39,7 @@ class ValidateDolibarrModule extends CliFramework { protected function configure(): void { - $this->setDescription('Validate a Dolibarr module repository against mokoplatform requirements'); + $this->setDescription('Validate a Dolibarr module repository against mokocli requirements'); $this->addArgument('--path', 'Repository root to validate', '.'); } @@ -173,5 +173,5 @@ class ValidateDolibarrModule extends CliFramework } } -$script = new ValidateDolibarrModule('validate_module', 'Validate a Dolibarr module repository against mokoplatform requirements'); +$script = new ValidateDolibarrModule('validate_module', 'Validate a Dolibarr module repository against mokocli requirements'); exit($script->execute()); diff --git a/templates/scripts/validate/index.md b/templates/scripts/validate/index.md index e0f0f0e..afb9cc7 100644 --- a/templates/scripts/validate/index.md +++ b/templates/scripts/validate/index.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Scripts.Validate -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/scripts/validate/index.md BRIEF: Validate scripts directory index --> diff --git a/templates/scripts/validate/validate_manifest.php b/templates/scripts/validate/validate_manifest.php index ab99c52..a99606c 100644 --- a/templates/scripts/validate/validate_manifest.php +++ b/templates/scripts/validate/validate_manifest.php @@ -10,9 +10,9 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Templates.Scripts.Validate * INGROUP: MokoPlatform.Templates - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/scripts/validate/validate_manifest.php - * BRIEF: Validate a Joomla component XML manifest against mokoplatform requirements + * BRIEF: Validate a Joomla component XML manifest against mokocli requirements * NOTE: Deployed to bin/validate_manifest.php in governed WaaS component repos. * Run: php bin/validate_manifest.php [--path DIR] [--verbose] */ @@ -25,7 +25,7 @@ require_once __DIR__ . '/../vendor/autoload.php'; use MokoCli\CliFramework; /** - * Validates a Joomla component XML manifest against mokoplatform requirements. + * Validates a Joomla component XML manifest against mokocli requirements. * * Checks performed: * - XML manifest exists and is well-formed @@ -41,7 +41,7 @@ class ValidateJoomlaManifest extends CliFramework { protected function configure(): void { - $this->setDescription('Validate a Joomla component XML manifest against mokoplatform requirements'); + $this->setDescription('Validate a Joomla component XML manifest against mokocli requirements'); $this->addArgument('--path', 'Repository root to validate', '.'); } @@ -188,5 +188,5 @@ class ValidateJoomlaManifest extends CliFramework } } -$script = new ValidateJoomlaManifest('validate_manifest', 'Validate a Joomla component XML manifest against mokoplatform requirements'); +$script = new ValidateJoomlaManifest('validate_manifest', 'Validate a Joomla component XML manifest against mokocli requirements'); exit($script->execute()); diff --git a/templates/scripts/validate/validate_structure.php b/templates/scripts/validate/validate_structure.php index 793de6d..7c978a7 100644 --- a/templates/scripts/validate/validate_structure.php +++ b/templates/scripts/validate/validate_structure.php @@ -10,9 +10,9 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Templates.Scripts.Validate * INGROUP: MokoPlatform.Templates - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/scripts/validate/validate_structure.php - * BRIEF: Validate a repository structure against mokoplatform requirements + * BRIEF: Validate a repository structure against mokocli requirements * NOTE: Deployed to bin/validate_structure.php in governed generic/default repos. * Run: php bin/validate_structure.php [--path DIR] [--verbose] */ @@ -25,7 +25,7 @@ require_once __DIR__ . '/../vendor/autoload.php'; use MokoCli\CliFramework; /** - * Validates a generic repository structure against mokoplatform requirements. + * Validates a generic repository structure against mokocli requirements. * * Checks performed: * - Required root files present (README.md, CHANGELOG.md, LICENSE, CONTRIBUTING.md, @@ -40,7 +40,7 @@ class ValidateStructure extends CliFramework { protected function configure(): void { - $this->setDescription('Validate a repository structure against mokoplatform requirements'); + $this->setDescription('Validate a repository structure against mokocli requirements'); $this->addArgument('--path', 'Repository root to validate', '.'); } @@ -72,7 +72,7 @@ class ValidateStructure extends CliFramework } // ── Governance attachment ───────────────────────────────────────── - $this->section('mokoplatform governance'); + $this->section('mokocli governance'); $mokoFile = file_exists("{$path}/.mokogitea/manifest.xml") || file_exists("{$path}/.github/.mokostandards") || file_exists("{$path}/.mokostandards"); @@ -87,7 +87,7 @@ class ValidateStructure extends CliFramework ? "{$path}/.github/.mokostandards" : "{$path}/.mokostandards"); $manifestContent = file_get_contents($manifestPath); - $isXml = str_contains($manifestContent, 'status($isXml, 'manifest.xml uses XML format'); $isXml ? $passed++ : $failed++; } @@ -172,5 +172,5 @@ class ValidateStructure extends CliFramework } } -$script = new ValidateStructure('validate_structure', 'Validate a repository structure against mokoplatform requirements'); +$script = new ValidateStructure('validate_structure', 'Validate a repository structure against mokocli requirements'); exit($script->execute()); diff --git a/templates/security/README.md b/templates/security/README.md index 5b5dd81..71c26ab 100644 --- a/templates/security/README.md +++ b/templates/security/README.md @@ -4,14 +4,14 @@ SPDX-License-Identifier: GPL-3.0-or-later FILE INFORMATION DEFGROUP: MokoPlatform.Index INGROUP: MokoPlatform.Templates.Security -REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform +REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli PATH: /templates/security/README.md BRIEF: Security templates README --> # Security Templates -This directory contains security-related templates for mokoplatform repositories. +This directory contains security-related templates for mokocli repositories. ## index.html - Directory Listing Prevention (Static) diff --git a/templates/security/index.php b/templates/security/index.php index 05334ac..02cd321 100644 --- a/templates/security/index.php +++ b/templates/security/index.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Templates.Security * INGROUP: MokoPlatform.Templates - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/security/index.php * BRIEF: Directory listing prevention script * diff --git a/templates/stubs/dolibarr.php b/templates/stubs/dolibarr.php index 815aae1..ab75ac0 100644 --- a/templates/stubs/dolibarr.php +++ b/templates/stubs/dolibarr.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Stubs * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/stubs/dolibarr.php * BRIEF: PHPStan stub declarations for Dolibarr core classes * diff --git a/templates/stubs/joomla.php b/templates/stubs/joomla.php index 4f8668d..abf59c0 100644 --- a/templates/stubs/joomla.php +++ b/templates/stubs/joomla.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: MokoPlatform.Stubs * INGROUP: MokoPlatform - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/stubs/joomla.php * BRIEF: PHPStan stub declarations for Joomla framework classes * diff --git a/templates/web/assets/css/app.css b/templates/web/assets/css/app.css index 879a0c7..e3547c0 100644 --- a/templates/web/assets/css/app.css +++ b/templates/web/assets/css/app.css @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: MokoCli.Templates.Web * INGROUP: MokoCli.Templates - * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /templates/web/assets/css/app.css * BRIEF: Material Design 3 web interface stylesheet * diff --git a/templates/web/index.php b/templates/web/index.php index d6f8764..ae50859 100644 --- a/templates/web/index.php +++ b/templates/web/index.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * Web Application Entry Point * - * This is the main entry point for the mokoplatform web-based management system. + * This is the main entry point for the mokocli web-based management system. * Handles all HTTP requests and routes them to appropriate controllers. * * Copyright (C) 2026 Moko Consulting @@ -90,7 +90,7 @@ function handleDashboard(): Response - mokoplatform - Repository Management + mokocli - Repository Management