#!/usr/bin/env php * * 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 * PATH: /cli/version_read.php * BRIEF: Read version from README.md or manifest XML — outputs the higher of the two */ declare(strict_types=1); $path = '.'; foreach ($argv as $i => $arg) { if ($arg === '--path' && isset($argv[$i + 1])) { $path = $argv[$i + 1]; } } $root = realpath($path) ?: $path; // ── Read from README.md ────────────────────────────────────────────────────── $readmeVersion = null; $readme = "{$root}/README.md"; if (file_exists($readme)) { $content = file_get_contents($readme); if (preg_match('/VERSION:\s*(\d{2}\.\d{2}\.\d{2})/m', $content, $m)) { $readmeVersion = $m[1]; } } // ── Read from Joomla manifest XML ──────────────────────────────────────────── $manifestVersion = null; $manifestFiles = array_merge( glob("{$root}/src/pkg_*.xml") ?: [], glob("{$root}/src/*.xml") ?: [], glob("{$root}/src/packages/*/*.xml") ?: [], glob("{$root}/*.xml") ?: [] ); foreach ($manifestFiles as $xmlFile) { $xmlContent = file_get_contents($xmlFile); if (strpos($xmlContent, '') === false) { continue; } if (preg_match('|(\d{2}\.\d{2}\.\d{2})(?:-[a-z]+)?|', $xmlContent, $xm)) { $candidate = $xm[1]; if ($manifestVersion === null || version_compare($candidate, $manifestVersion, '>')) { $manifestVersion = $candidate; } } } // ── Output the higher version ──────────────────────────────────────────────── $version = null; if ($readmeVersion !== null && $manifestVersion !== null) { $version = version_compare($manifestVersion, $readmeVersion, '>') ? $manifestVersion : $readmeVersion; } elseif ($manifestVersion !== null) { $version = $manifestVersion; } elseif ($readmeVersion !== null) { $version = $readmeVersion; } if ($version === null) { fwrite(STDERR, "No version found in README.md or manifest XML\n"); exit(1); } echo $version . "\n"; exit(0);