diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 75a6963..82ef6a3 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 01.00.00 +# VERSION: 09.36.01 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/README.md b/README.md index 38b7a71..2485b2d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DEFGROUP: MokoPlatform.Root INGROUP: MokoPlatform REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform PATH: /README.md -VERSION: 09.36.00 +VERSION: 09.36.01 BRIEF: Project overview and documentation --> diff --git a/automation/update_dependencies.php b/automation/update_dependencies.php index e5f67d7..5d4240f 100644 --- a/automation/update_dependencies.php +++ b/automation/update_dependencies.php @@ -13,7 +13,7 @@ * INGROUP: MokoPlatform.Scripts * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /automation/update_dependencies.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Cross-repo dependency update automation — scan, update, PR, auto-merge */ diff --git a/bin/moko b/bin/moko index dd449b8..d484dff 100644 --- a/bin/moko +++ b/bin/moko @@ -178,6 +178,7 @@ const COMMAND_MAP = [ 'repo:archive' => 'cli/archive_repo.php', 'repo:scaffold-client' => 'cli/scaffold_client.php', 'repo:provision' => 'cli/client_provision.php', + 'repo:wizard' => 'cli/repo_wizard.php', 'repo:rename-branch' => 'cli/branch_rename.php', 'repo:reset-dev' => 'cli/dev_branch_reset.php', diff --git a/cli/branch_rename.php b/cli/branch_rename.php index 4fb60c0..7234af4 100644 --- a/cli/branch_rename.php +++ b/cli/branch_rename.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/branch_rename.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old) */ diff --git a/cli/bulk_workflow_push.php b/cli/bulk_workflow_push.php index eb3b4f1..439e652 100644 --- a/cli/bulk_workflow_push.php +++ b/cli/bulk_workflow_push.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_push.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Push a workflow file to all governed repos via the Gitea Contents API */ diff --git a/cli/bulk_workflow_trigger.php b/cli/bulk_workflow_trigger.php index 49db5e2..4557f42 100644 --- a/cli/bulk_workflow_trigger.php +++ b/cli/bulk_workflow_trigger.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/bulk_workflow_trigger.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Trigger a workflow across multiple repos at once */ diff --git a/cli/client_dashboard.php b/cli/client_dashboard.php index 0c72460..faf9112 100644 --- a/cli/client_dashboard.php +++ b/cli/client_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_dashboard.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Generate unified client dashboard HTML */ diff --git a/cli/client_inventory.php b/cli/client_inventory.php index 665fb7d..081f3b9 100644 --- a/cli/client_inventory.php +++ b/cli/client_inventory.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_inventory.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Discover and list all client-waas repos with their server configuration status */ diff --git a/cli/client_provision.php b/cli/client_provision.php index 8a5e95e..7f208a2 100644 --- a/cli/client_provision.php +++ b/cli/client_provision.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/client_provision.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Provision a new client environment end-to-end */ diff --git a/cli/grafana_dashboard.php b/cli/grafana_dashboard.php index e71c7dc..0b0d812 100644 --- a/cli/grafana_dashboard.php +++ b/cli/grafana_dashboard.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/grafana_dashboard.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Manage Grafana dashboards via API */ diff --git a/cli/joomla_build.php b/cli/joomla_build.php index ad00fe2..a65e1c3 100644 --- a/cli/joomla_build.php +++ b/cli/joomla_build.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_build.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Build a Joomla extension ZIP from manifest — all types supported * NOTE: Called by pre-release and auto-release workflows. */ diff --git a/cli/joomla_metadata_validate.php b/cli/joomla_metadata_validate.php index 4fdc442..0cf8cc5 100644 --- a/cli/joomla_metadata_validate.php +++ b/cli/joomla_metadata_validate.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/joomla_metadata_validate.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML */ diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index 76c37ec..ce5e3e4 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_detect.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Auto-detect manifest fields from source files and optionally push to API */ diff --git a/cli/manifest_integrity.php b/cli/manifest_integrity.php index 4bfc0df..72dde92 100644 --- a/cli/manifest_integrity.php +++ b/cli/manifest_integrity.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_integrity.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Cross-check manifest API fields against repo contents across the org */ diff --git a/cli/manifest_licensing.php b/cli/manifest_licensing.php index 832db1e..cf01795 100644 --- a/cli/manifest_licensing.php +++ b/cli/manifest_licensing.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/manifest_licensing.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests */ diff --git a/cli/manifest_read.php b/cli/manifest_read.php index 18f89c9..7386bdb 100644 --- a/cli/manifest_read.php +++ b/cli/manifest_read.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/manifest_read.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest */ diff --git a/cli/platform_detect.php b/cli/platform_detect.php index d97e562..5fb6877 100644 --- a/cli/platform_detect.php +++ b/cli/platform_detect.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/platform_detect.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Auto-detect repository platform type and optionally update manifest */ diff --git a/cli/release_cascade.php b/cli/release_cascade.php index e3cca4f..5d5055e 100644 --- a/cli/release_cascade.php +++ b/cli/release_cascade.php @@ -10,7 +10,7 @@ * INGROUP: mokocli * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli * PATH: /cli/release_cascade.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Cascade release zip to all lower stability channels */ diff --git a/cli/release_publish.php b/cli/release_publish.php index ae5fe9f..84766a4 100644 --- a/cli/release_publish.php +++ b/cli/release_publish.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/release_publish.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Publish a release and create copies for all lesser stability streams. */ diff --git a/cli/repo_wizard.php b/cli/repo_wizard.php new file mode 100644 index 0000000..9268f48 --- /dev/null +++ b/cli/repo_wizard.php @@ -0,0 +1,429 @@ +#!/usr/bin/env php + + * SPDX-License-Identifier: GPL-3.0-or-later + * FILE INFORMATION + * DEFGROUP: mokocli.CLI + * INGROUP: mokocli + * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli + * PATH: /cli/repo_wizard.php + * BRIEF: Interactive configuration wizard for new repositories + */ + +declare(strict_types=1); + +require_once __DIR__ . '/../vendor/autoload.php'; +require_once __DIR__ . '/../lib/Enterprise/CliFramework.php'; + +use MokoCli\{CliFramework, Config, PlatformAdapterFactory}; + +/** + * Interactive repo setup wizard. + * + * Walks through platform selection, generates config files, workflows, + * and optionally creates the repo on Gitea via API. + * + * @see https://git.mokoconsulting.tech/MokoConsulting/mokocli/issues/145 + */ +class RepoWizard extends CliFramework +{ + private const PLATFORMS = [ + 'joomla' => 'Joomla extension (component, module, plugin, package)', + 'dolibarr' => 'Dolibarr ERP module', + 'nodejs' => 'Node.js / TypeScript project', + 'python' => 'Python project', + 'mcp-server' => 'MCP server (Model Context Protocol)', + 'generic' => 'Generic PHP or multi-language project', + ]; + + private const LICENSES = [ + 'GPL-3.0-or-later' => 'GNU General Public License v3', + 'MIT' => 'MIT License', + 'Apache-2.0' => 'Apache License 2.0', + 'proprietary' => 'Proprietary / All rights reserved', + ]; + + /** Collected wizard answers. */ + private array $answers = []; + + /** When true, skip all interactive prompts and use defaults. */ + private bool $nonInteractive = false; + + protected function configure(): void + { + $this->setDescription('Interactive configuration wizard for new repositories'); + $this->addArgument('--path', 'Directory to generate files in', '.'); + $this->addArgument('--create-remote', 'Create repo on Gitea via API', false); + $this->addArgument('--non-interactive', 'Use defaults (no prompts)', false); + } + + protected function run(): int + { + $rawPath = $this->getArgument('--path', '.'); + $targetPath = realpath($rawPath) ?: $rawPath; + $this->nonInteractive = (bool) $this->getArgument('--non-interactive', false); + + // Validate target path + if (!is_dir($targetPath) && !@mkdir($targetPath, 0755, true)) { + $this->log('ERROR', "Target path does not exist and cannot be created: {$targetPath}"); + return self::EXIT_USAGE; + } + $targetPath = realpath($targetPath) ?: $targetPath; + + $this->section('MokoCli Repository Wizard'); + + // ── Gather info ────────────────────────────────────────────── + $this->answers['name'] = $this->ask('Repository name', basename($targetPath)); + $this->answers['platform'] = $this->choose('Platform type', self::PLATFORMS, 'generic'); + $this->answers['org'] = $this->ask('Organization', 'MokoConsulting'); + $this->answers['description'] = $this->ask('Description', ''); + $this->answers['license'] = $this->choose('License', self::LICENSES, 'GPL-3.0-or-later'); + + // ── Confirm ────────────────────────────────────────────────── + $this->section('Configuration Summary'); + foreach ($this->answers as $key => $value) { + $this->log('INFO', sprintf(' %-12s %s', $key . ':', $value)); + } + + if (!$this->confirm('Proceed with these settings?', true)) { + $this->log('INFO', 'Wizard cancelled'); + return 0; + } + + // ── Generate files ─────────────────────────────────────────── + $this->section('Generating files'); + $generated = $this->generateFiles($targetPath); + + foreach ($generated as $file) { + $this->status(true, $file); + } + + // ── Create remote repo ─────────────────────────────────────── + if ($this->getArgument('--create-remote', false)) { + $this->section('Creating remote repository'); + $this->createRemoteRepo(); + } + + $this->log('INFO', ''); + $this->log('INFO', 'Generated ' . count($generated) . " files in {$targetPath}"); + $this->log('INFO', 'Next: git init && git add -A && git commit -m "chore: initial scaffold"'); + + return 0; + } + + // ── File generation ────────────────────────────────────────────── + + private function generateFiles(string $path): array + { + $platform = $this->answers['platform']; + $name = $this->answers['name']; + $generated = []; + + // .editorconfig + $generated[] = $this->writeFile($path, '.editorconfig', $this->editorconfig()); + + // README.md + $generated[] = $this->writeFile($path, 'README.md', $this->readme()); + + // CHANGELOG.md + $generated[] = $this->writeFile($path, 'CHANGELOG.md', $this->changelog()); + + // LICENSE + if ($this->answers['license'] !== 'proprietary') { + $generated[] = $this->writeFile($path, 'LICENSE', "See SPDX: {$this->answers['license']}"); + } + + // Platform-specific configs + switch ($platform) { + case 'joomla': + case 'dolibarr': + case 'generic': + $generated[] = $this->writeFile($path, 'phpcs.xml', $this->phpcsXml()); + $generated[] = $this->writeFile($path, 'phpstan.neon', $this->phpstanNeon()); + $generated[] = $this->writeFile($path, 'composer.json', $this->composerJson()); + break; + case 'nodejs': + case 'mcp-server': + $generated[] = $this->writeFile($path, 'package.json', $this->packageJson()); + $generated[] = $this->writeFile($path, 'tsconfig.json', $this->tsconfigJson()); + $generated[] = $this->writeFile($path, '.eslintrc.json', $this->eslintrc()); + break; + case 'python': + $generated[] = $this->writeFile($path, 'pyproject.toml', $this->pyprojectToml()); + $generated[] = $this->writeFile($path, 'requirements.txt', ''); + break; + } + + // .mokogitea/workflows + $generated[] = $this->writeFile($path, '.mokogitea/workflows/pr-check.yml', + "# PR check workflow — synced from mokocli templates\n# Run: moko sync to update\n"); + + // .gitignore + $generated[] = $this->writeFile($path, '.gitignore', $this->gitignore($platform)); + + // Source directory + $srcDir = in_array($platform, ['joomla', 'dolibarr', 'generic']) ? 'source' : 'src'; + if (!is_dir("{$path}/{$srcDir}")) { + @mkdir("{$path}/{$srcDir}", 0755, true); + $generated[] = "{$srcDir}/"; + } + + return array_filter($generated); + } + + private function writeFile(string $basePath, string $relativePath, string $content): ?string + { + $fullPath = $basePath . '/' . $relativePath; + $dir = dirname($fullPath); + + if (file_exists($fullPath)) { + $this->log('DEBUG', " SKIP {$relativePath} (already exists)"); + return null; + } + + if ($this->dryRun) { + $this->log('INFO', "[dry-run] Would create {$relativePath}"); + return $relativePath; + } + + if (!is_dir($dir)) { + @mkdir($dir, 0755, true); + } + + file_put_contents($fullPath, $content); + return $relativePath; + } + + // ── Remote repo creation ───────────────────────────────────────── + + private function createRemoteRepo(): void + { + try { + $config = Config::load(); + $adapter = PlatformAdapterFactory::create($config); + $org = $this->answers['org']; + + if ($this->dryRun) { + $this->log('INFO', "[dry-run] Would create {$org}/{$this->answers['name']} on Gitea"); + return; + } + + $result = $adapter->createRepository($org, $this->answers['name'], [ + 'description' => $this->answers['description'], + 'private' => false, + ]); + + $url = $result['html_url'] ?? "{$org}/{$this->answers['name']}"; + $this->log('INFO', "Created: {$url}"); + } catch (\Exception $e) { + $this->log('ERROR', "Failed to create remote repo: {$e->getMessage()}"); + } + } + + // ── Interactive helpers (respect --non-interactive) ───────────── + + private function ask(string $prompt, string $default): string + { + if ($this->nonInteractive) { + return $default; + } + return $this->input($prompt, $default); + } + + private function choose(string $prompt, array $options, string $default): string + { + if ($this->nonInteractive) { + return $default; + } + $keys = array_keys($options); + $labels = []; + foreach ($options as $key => $desc) { + $labels[] = "{$key} — {$desc}"; + } + $chosen = $this->select($prompt, $labels); + // Extract the key from "key — description" + $chosenKey = explode(' — ', $chosen, 2)[0] ?? $default; + return in_array($chosenKey, $keys, true) ? $chosenKey : $default; + } + + // ── Template content ───────────────────────────────────────────── + + private function editorconfig(): string + { + return <<<'CONF' +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = tab +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{yml,yaml}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false +CONF; + } + + private function readme(): string + { + $name = $this->answers['name']; + $desc = $this->answers['description'] ?: 'A Moko Consulting project.'; + $license = $this->answers['license']; + + return << 'mokoconsulting/' . strtolower($this->answers['name']), + 'description' => $this->answers['description'] ?: $this->answers['name'], + 'type' => 'library', + 'license' => $this->answers['license'], + 'require' => ['php' => '>=8.1'], + 'autoload' => ['psr-4' => new \stdClass()], + ]; + return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n"; + } + + private function phpcsXml(): string + { + return <<<'XML' + + + + source/ + vendor/* + +XML; + } + + private function phpstanNeon(): string + { + return <<<'NEON' +parameters: + level: 6 + paths: + - source/ +NEON; + } + + private function packageJson(): string + { + $data = [ + 'name' => '@mokoconsulting/' . strtolower($this->answers['name']), + 'version' => '0.1.0', + 'description' => $this->answers['description'] ?: $this->answers['name'], + 'type' => 'module', + 'scripts' => ['build' => 'tsc', 'start' => 'node dist/index.js'], + 'devDependencies' => ['typescript' => '^5.0'], + ]; + return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n"; + } + + private function tsconfigJson(): string + { + return <<<'JSON' +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "declaration": true + }, + "include": ["src/**/*"] +} +JSON; + } + + private function eslintrc(): string + { + return <<<'JSON' +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"] +} +JSON; + } + + private function pyprojectToml(): string + { + $name = strtolower($this->answers['name']); + $desc = str_replace(['\\', '"'], ['\\\\', '\\"'], $this->answers['description'] ?: $this->answers['name']); + + return <<=68.0"] +build-backend = "setuptools.build_meta" +TOML; + } + + private function gitignore(string $platform): string + { + $common = <<<'GI' +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db +desktop.ini + +# Logs +*.log +GI; + + $extra = match ($platform) { + 'joomla', 'dolibarr', 'generic' => "\n# PHP\nvendor/\n.phpunit.result.cache\n", + 'nodejs', 'mcp-server' => "\n# Node\nnode_modules/\ndist/\n*.tsbuildinfo\n", + 'python' => "\n# Python\n__pycache__/\n*.pyc\n.venv/\n*.egg-info/\n", + default => '', + }; + + return $common . $extra; + } +} + +$app = new RepoWizard('repo_wizard'); +exit($app->execute()); diff --git a/cli/scaffold_client.php b/cli/scaffold_client.php index df03377..34bb055 100644 --- a/cli/scaffold_client.php +++ b/cli/scaffold_client.php @@ -12,7 +12,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/scaffold_client.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings */ diff --git a/cli/updates_xml_sync.php b/cli/updates_xml_sync.php index d4cae46..f6f88a4 100644 --- a/cli/updates_xml_sync.php +++ b/cli/updates_xml_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/updates_xml_sync.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Sync updates.xml to target branches via Gitea API * NOTE: Called by pre-release and auto-release workflows after updates.xml * is modified on the current branch. Pushes the file to other branches diff --git a/cli/version_auto_bump.php b/cli/version_auto_bump.php index 87a5e09..5301250 100644 --- a/cli/version_auto_bump.php +++ b/cli/version_auto_bump.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_auto_bump.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash */ diff --git a/cli/version_bump.php b/cli/version_bump.php index 64e9b94..9efc410 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -370,7 +370,7 @@ class VersionBumpCli extends CliFramework /** * Scan git release tags for the highest version across all channels. * - * Checks release names like "MokoSuiteClient (VERSION: 09.36.00)" in + * Checks release names like "MokoSuiteClient (VERSION: 09.36.01)" in * git tags (stable, release-candidate, development, etc.) to find the * highest version that has been released on any channel. */ diff --git a/cli/version_check.php b/cli/version_check.php index e162b57..1b9af54 100644 --- a/cli/version_check.php +++ b/cli/version_check.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/version_check.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Validate version consistency across README, manifests, and sub-packages */ diff --git a/cli/wiki_sync.php b/cli/wiki_sync.php index efcc6de..e0d2023 100644 --- a/cli/wiki_sync.php +++ b/cli/wiki_sync.php @@ -10,7 +10,7 @@ * INGROUP: mokoplatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /cli/wiki_sync.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Sync select wiki pages from mokoplatform to all template repos */ diff --git a/cli/workflow_sync.php b/cli/workflow_sync.php index 126299a..f819bf9 100644 --- a/cli/workflow_sync.php +++ b/cli/workflow_sync.php @@ -10,7 +10,7 @@ * INGROUP: moko-platform * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/workflow_sync.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform */ diff --git a/deploy/backup-before-deploy.php b/deploy/backup-before-deploy.php index c6fc865..4cb6a95 100644 --- a/deploy/backup-before-deploy.php +++ b/deploy/backup-before-deploy.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/backup-before-deploy.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Snapshot Joomla directories before deployment for rollback capability */ diff --git a/deploy/deploy-dolibarr.php b/deploy/deploy-dolibarr.php index a84a34b..44332eb 100644 --- a/deploy/deploy-dolibarr.php +++ b/deploy/deploy-dolibarr.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/deploy-dolibarr.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync */ diff --git a/deploy/health-check.php b/deploy/health-check.php index 82d0c20..621a06e 100644 --- a/deploy/health-check.php +++ b/deploy/health-check.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/health-check.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Post-deploy health check — verify a Joomla site is responding correctly */ diff --git a/deploy/rollback-joomla.php b/deploy/rollback-joomla.php index 1d6df71..56726ca 100644 --- a/deploy/rollback-joomla.php +++ b/deploy/rollback-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/rollback-joomla.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot */ diff --git a/deploy/sync-joomla.php b/deploy/sync-joomla.php index 716cca7..d04d785 100644 --- a/deploy/sync-joomla.php +++ b/deploy/sync-joomla.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /deploy/sync-joomla.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Sync Joomla site directories between two servers via rsync over SSH */ diff --git a/mcp/servers/mokocrm_api/CONTRIBUTING.md b/mcp/servers/mokocrm_api/CONTRIBUTING.md index 39695d4..d153bfb 100644 --- a/mcp/servers/mokocrm_api/CONTRIBUTING.md +++ b/mcp/servers/mokocrm_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp - VERSION: 09.36.00 + VERSION: 09.36.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokocrm_api/SECURITY.md b/mcp/servers/mokocrm_api/SECURITY.md index b078206..1512566 100644 --- a/mcp/servers/mokocrm_api/SECURITY.md +++ b/mcp/servers/mokocrm_api/SECURITY.md @@ -10,7 +10,7 @@ DEFGROUP: dolibarr-api-mcp.Documentation INGROUP: dolibarr-api-mcp REPO: https://git.mokoconsulting.tech/MokoConsulting/dolibarr-api-mcp PATH: /SECURITY.md -VERSION: 09.36.00 +VERSION: 09.36.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/mcp/servers/mokosuite_api/CONTRIBUTING.md b/mcp/servers/mokosuite_api/CONTRIBUTING.md index ba615f3..8249a15 100644 --- a/mcp/servers/mokosuite_api/CONTRIBUTING.md +++ b/mcp/servers/mokosuite_api/CONTRIBUTING.md @@ -14,7 +14,7 @@ DEFGROUP: INGROUP: Project.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCli-Template-Generic - VERSION: 09.36.00 + VERSION: 09.36.01 PATH: ./CONTRIBUTING.md BRIEF: Contribution guidelines for the project --> diff --git a/mcp/servers/mokosuite_api/SECURITY.md b/mcp/servers/mokosuite_api/SECURITY.md index 2cfc703..785a90a 100644 --- a/mcp/servers/mokosuite_api/SECURITY.md +++ b/mcp/servers/mokosuite_api/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 09.36.00 +VERSION: 09.36.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/tests/Unit/VersionBumpTest.php b/tests/Unit/VersionBumpTest.php index 309f91d..dde2bfc 100644 --- a/tests/Unit/VersionBumpTest.php +++ b/tests/Unit/VersionBumpTest.php @@ -63,7 +63,7 @@ class VersionBumpTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\nSome content\n" + "\nSome content\n" ); $this->execute(); diff --git a/tests/Unit/VersionReadTest.php b/tests/Unit/VersionReadTest.php index 13b910a..9b405cc 100644 --- a/tests/Unit/VersionReadTest.php +++ b/tests/Unit/VersionReadTest.php @@ -34,7 +34,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "# Test\n\n" + "# Test\n\n" ); $this->assertSame('02.03.04', trim($this->runScript())); @@ -68,7 +68,7 @@ class VersionReadTest extends TestCase { file_put_contents( "{$this->tmpDir}/README.md", - "\n" + "\n" ); mkdir("{$this->tmpDir}/src", 0755, true); file_put_contents( diff --git a/validate/check_file_integrity.php b/validate/check_file_integrity.php index 7f499c6..47e3ba4 100644 --- a/validate/check_file_integrity.php +++ b/validate/check_file_integrity.php @@ -12,7 +12,7 @@ * INGROUP: MokoPlatform * REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform * PATH: /validate/check_file_integrity.php - * VERSION: 09.36.00 + * VERSION: 09.36.01 * BRIEF: Compare deployed files on a remote server against the local repository to detect drift */