From bc47944d8f99ccc387c2683256dd0b399a8b2e33 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Mon, 25 May 2026 00:13:50 -0500 Subject: [PATCH] fix: version_read/bump handle suffixed versions and HTML-comment VERSION Two bugs caused release-candidate pre-release builds to fail after a development pre-release had been built: 1. XML regex only matched bare XX.YY.ZZ but not XX.YY.ZZ-dev/-rc etc. After a development pre-release wrote -dev suffix to manifests, the next pre-release could not read the version back. 2. README regex required VERSION: at line start (^\s*VERSION:) which does not match format used by some repos. Fixes: version_read.php, version_bump.php Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- CHANGELOG.md | 3 +++ cli/version_bump.php | 6 +++--- cli/version_read.php | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d795d7..3d7f109 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ Version format: `XX.YY.ZZ` (zero-padded semver). - `cli/bulk_workflow_push.php` — push a workflow file to all governed repos via Gitea Contents API (closes #52) ### Fixed +- `version_read.php` / `version_bump.php`: handle suffixed versions in XML manifests (e.g. `01.00.00-dev`) +- `version_read.php` / `version_bump.php`: match `VERSION:` inside HTML comments (``) +- Pre-release RC builds now work after a development pre-release has been built - auto-release workflow: switch trigger from `pull_request closed` to `push` on main (closes #54) - CI Gate 1: add ondrej/php PPA + composer package for PHP 8.2 on runners - CI repo-health: use `.mokogitea/workflows/` instead of `.gitea/workflows/` diff --git a/cli/version_bump.php b/cli/version_bump.php index 805e0a4..40438f9 100644 --- a/cli/version_bump.php +++ b/cli/version_bump.php @@ -30,7 +30,7 @@ $readme = "{$root}/README.md"; $readmeContent = ''; if (file_exists($readme)) { $readmeContent = file_get_contents($readme); - if (preg_match('/^\s*VERSION:\s*(\d{2}\.\d{2}\.\d{2})/m', $readmeContent, $m)) { + if (preg_match('/VERSION:\s*(\d{2}\.\d{2}\.\d{2})/m', $readmeContent, $m)) { $readmeVersion = $m[1]; } } @@ -52,7 +52,7 @@ foreach ($manifestFiles as $xmlFile) { if (strpos($xmlContent, '') === false) { continue; } - if (preg_match('|(\d{2}\.\d{2}\.\d{2})|', $xmlContent, $xm)) { + 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; @@ -102,7 +102,7 @@ $new = sprintf('%02d.%02d.%02d', $major, $minor, $patch); // ── Update README.md ───────────────────────────────────────────────────────── if (file_exists($readme) && !empty($readmeContent)) { $updated = preg_replace( - '/^(\s*VERSION:\s*)\d{2}\.\d{2}\.\d{2}/m', + '/(VERSION:\s*)\d{2}\.\d{2}\.\d{2}/m', '${1}' . $new, $readmeContent, 1 diff --git a/cli/version_read.php b/cli/version_read.php index 16ae9da..2746755 100644 --- a/cli/version_read.php +++ b/cli/version_read.php @@ -28,7 +28,7 @@ $readmeVersion = null; $readme = "{$root}/README.md"; if (file_exists($readme)) { $content = file_get_contents($readme); - if (preg_match('/^\s*VERSION:\s*(\d{2}\.\d{2}\.\d{2})/m', $content, $m)) { + if (preg_match('/VERSION:\s*(\d{2}\.\d{2}\.\d{2})/m', $content, $m)) { $readmeVersion = $m[1]; } } @@ -47,7 +47,7 @@ foreach ($manifestFiles as $xmlFile) { if (strpos($xmlContent, '') === false) { continue; } - if (preg_match('|(\d{2}\.\d{2}\.\d{2})|', $xmlContent, $xm)) { + 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; -- 2.52.0