From 925dfc41e26abca3eef4e8450c1ead2295d23e3f Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sun, 21 Jun 2026 00:43:06 -0500 Subject: [PATCH] =?UTF-8?q?chore:=20complete=20namespace=20cleanup=20?= =?UTF-8?q?=E2=80=94=20remove=20all=20mokoplatform/MokoStandards/MokoEnter?= =?UTF-8?q?prise=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 | 2 +- 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, 2451 insertions(+), 2451 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 ead62df..7faa8d4 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "mokoconsulting-tech/enterprise", - "description": "mokoplatform Enterprise API \u2014 PHP implementation", + "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