#!/usr/bin/env php * * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION * DEFGROUP: MokoStandards.CLI * INGROUP: MokoStandards * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /cli/version_set_platform.php * BRIEF: Set version in platform-specific files (Dolibarr $this->version, Joomla ) */ declare(strict_types=1); $path = '.'; $version = null; $branch = null; foreach ($argv as $i => $arg) { if ($arg === '--path' && isset($argv[$i + 1])) $path = $argv[$i + 1]; if ($arg === '--version' && isset($argv[$i + 1])) $version = $argv[$i + 1]; if ($arg === '--branch' && isset($argv[$i + 1])) $branch = $argv[$i + 1]; } // Auto-detect branch from git or GitHub env if ($branch === null) { $branch = trim((string) @shell_exec('git rev-parse --abbrev-ref HEAD 2>/dev/null')); if (empty($branch) || $branch === 'HEAD') { $branch = getenv('GITHUB_REF_NAME') ?: 'main'; } } if ($version === null) { fwrite(STDERR, "Usage: version_set_platform.php --path . --version development\n"); exit(1); } $root = realpath($path) ?: $path; // Detect platform $platform = ''; $mokoStandards = "{$root}/.github/.mokostandards"; if (!file_exists($mokoStandards)) { $mokoStandards = "{$root}/.mokostandards"; } if (file_exists($mokoStandards)) { $content = file_get_contents($mokoStandards); if (preg_match('/^platform:\s*(.+)/m', $content, $m)) { $platform = trim($m[1], " \t\n\r\"'"); } } $changed = 0; // Dolibarr: $this->version + $this->url_last_version in mod*.class.php if ($platform === 'crm-module') { $pattern = "{$root}/src/core/modules/mod*.class.php"; foreach (glob($pattern) ?: [] as $file) { $content = file_get_contents($file); // Set $this->version $updated = preg_replace( '/(\$this->version\s*=\s*)[\'"][^\'"]*[\'"]/', "\${1}'{$version}'", $content ); // Rewrite $this->url_last_version to point to current branch if (preg_match('/\$this->url_last_version\s*=\s*[\'"]([^\'"]+)[\'"]/', $updated, $urlMatch)) { $oldUrl = $urlMatch[1]; // Replace the branch segment: .../BRANCH/update.txt $newUrl = preg_replace( '#(raw\.githubusercontent\.com/[^/]+/[^/]+/)[^/]+(/update\.json)#', "\${1}{$branch}\${2}", $oldUrl ); if ($newUrl !== $oldUrl) { $updated = str_replace($oldUrl, $newUrl, $updated); echo "Dolibarr: url_last_version → {$branch}/update.txt\n"; } } if ($updated !== $content) { file_put_contents($file, $updated); echo "Dolibarr: " . basename($file) . " → version={$version}, branch={$branch}\n"; $changed++; } } } // Joomla: in XML manifests if ($platform === 'waas-component') { foreach (glob("{$root}/src/*.xml") ?: glob("{$root}/*.xml") ?: [] as $file) { $content = file_get_contents($file); if (!str_contains($content, '[^<]*|', "{$version}", $content ); if ($updated !== $content) { file_put_contents($file, $updated); echo "Joomla: " . basename($file) . " → {$version}\n"; $changed++; } } } if ($changed === 0) { if (empty($platform)) { echo "No .mokostandards file — skipping platform version set\n"; } else { echo "No platform-specific version files found for {$platform}\n"; } } exit(0);