1*9a383d51SJohann Duscher#!/usr/bin/env php 2*9a383d51SJohann Duscher<?php 3*9a383d51SJohann Duscher/** 4*9a383d51SJohann Duscher * Version Update Script for Delete Page Guard Plugin 5*9a383d51SJohann Duscher * 6*9a383d51SJohann Duscher * Updates version information across all plugin files. 7*9a383d51SJohann Duscher * Usage: php build/update-version.php [new-version] [new-date] 8*9a383d51SJohann Duscher * 9*9a383d51SJohann Duscher * @license GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html) - see LICENSE.md 10*9a383d51SJohann Duscher * @author Johann Duscher <jonny.dee@posteo.net> 11*9a383d51SJohann Duscher * @copyright 2025 Johann Duscher 12*9a383d51SJohann Duscher */ 13*9a383d51SJohann Duscher 14*9a383d51SJohann Duscher$baseDir = dirname(__DIR__); 15*9a383d51SJohann Duscher$versionFile = $baseDir . '/version.php'; 16*9a383d51SJohann Duscher 17*9a383d51SJohann Duscher// Load current version info 18*9a383d51SJohann Duscherif (!file_exists($versionFile)) { 19*9a383d51SJohann Duscher die("Error: version.php not found\n"); 20*9a383d51SJohann Duscher} 21*9a383d51SJohann Duscher 22*9a383d51SJohann Duscher$versionInfo = include $versionFile; 23*9a383d51SJohann Duscher$currentVersion = $versionInfo['version']; 24*9a383d51SJohann Duscher$currentDate = $versionInfo['date']; 25*9a383d51SJohann Duscher 26*9a383d51SJohann Duscher// Parse command line arguments 27*9a383d51SJohann Duscher$newVersion = $argv[1] ?? null; 28*9a383d51SJohann Duscher$newDate = $argv[2] ?? date('Y-m-d'); 29*9a383d51SJohann Duscher 30*9a383d51SJohann Duscherif (!$newVersion) { 31*9a383d51SJohann Duscher echo "Delete Page Guard Plugin - Version Update Script\n"; 32*9a383d51SJohann Duscher echo "Current version: {$currentVersion} ({$currentDate})\n\n"; 33*9a383d51SJohann Duscher echo "Usage: php build/update-version.php <new-version> [new-date]\n"; 34*9a383d51SJohann Duscher echo "Example: php build/update-version.php 1.1.0 2025-02-01\n"; 35*9a383d51SJohann Duscher exit(1); 36*9a383d51SJohann Duscher} 37*9a383d51SJohann Duscher 38*9a383d51SJohann Duscher// Validate version format (semantic versioning) 39*9a383d51SJohann Duscherif (!preg_match('/^\d+\.\d+\.\d+(-[a-zA-Z0-9\-\.]+)?$/', $newVersion)) { 40*9a383d51SJohann Duscher die("Error: Invalid version format. Use semantic versioning (e.g., 1.0.0)\n"); 41*9a383d51SJohann Duscher} 42*9a383d51SJohann Duscher 43*9a383d51SJohann Duscher// Validate date format 44*9a383d51SJohann Duscherif (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $newDate)) { 45*9a383d51SJohann Duscher die("Error: Invalid date format. Use YYYY-MM-DD\n"); 46*9a383d51SJohann Duscher} 47*9a383d51SJohann Duscher 48*9a383d51SJohann Duscherecho "Updating version from {$currentVersion} to {$newVersion}\n"; 49*9a383d51SJohann Duscherecho "Updating date from {$currentDate} to {$newDate}\n\n"; 50*9a383d51SJohann Duscher 51*9a383d51SJohann Duscher// Update version.php 52*9a383d51SJohann Duscher$newVersionInfo = $versionInfo; 53*9a383d51SJohann Duscher$newVersionInfo['version'] = $newVersion; 54*9a383d51SJohann Duscher$newVersionInfo['date'] = $newDate; 55*9a383d51SJohann Duscher 56*9a383d51SJohann Duscher$versionContent = "<?php\n/**\n * Delete Page Guard Plugin - Version Information\n *\n * Centralized version management for the plugin.\n * This file is used by build scripts to maintain consistent versioning.\n *\n * @license GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html) - see LICENSE.md\n * @author Johann Duscher <jonny.dee@posteo.net>\n * @copyright 2025 Johann Duscher\n */\n\n// Protect against direct call, but allow build scripts\nif (!defined('DOKU_INC') && php_sapi_name() !== 'cli') die();\n\nreturn " . var_export($newVersionInfo, true) . ";\n"; 57*9a383d51SJohann Duscher 58*9a383d51SJohann Duscherfile_put_contents($versionFile, $versionContent); 59*9a383d51SJohann Duscherecho "✓ Updated version.php\n"; 60*9a383d51SJohann Duscher 61*9a383d51SJohann Duscher// Update plugin.info.txt 62*9a383d51SJohann Duscher$pluginInfoFile = $baseDir . '/plugin.info.txt'; 63*9a383d51SJohann Duscherif (file_exists($pluginInfoFile)) { 64*9a383d51SJohann Duscher $content = file_get_contents($pluginInfoFile); 65*9a383d51SJohann Duscher $content = preg_replace('/^version\s+.*$/m', "version {$newVersion}", $content); 66*9a383d51SJohann Duscher $content = preg_replace('/^date\s+.*$/m', "date {$newDate}", $content); 67*9a383d51SJohann Duscher file_put_contents($pluginInfoFile, $content); 68*9a383d51SJohann Duscher echo "✓ Updated plugin.info.txt\n"; 69*9a383d51SJohann Duscher} 70*9a383d51SJohann Duscher 71*9a383d51SJohann Duscher// Update CHANGELOG.md header (if it exists and is unreleased) 72*9a383d51SJohann Duscher$changelogFile = $baseDir . '/CHANGELOG.md'; 73*9a383d51SJohann Duscherif (file_exists($changelogFile)) { 74*9a383d51SJohann Duscher $content = file_get_contents($changelogFile); 75*9a383d51SJohann Duscher // Replace [Unreleased] with actual version 76*9a383d51SJohann Duscher if (strpos($content, '## [Unreleased]') !== false) { 77*9a383d51SJohann Duscher $content = str_replace('## [Unreleased]', "## [{$newVersion}] - {$newDate}", $content); 78*9a383d51SJohann Duscher file_put_contents($changelogFile, $content); 79*9a383d51SJohann Duscher echo "✓ Updated CHANGELOG.md (marked release)\n"; 80*9a383d51SJohann Duscher } else { 81*9a383d51SJohann Duscher echo "ℹ CHANGELOG.md - no [Unreleased] section found\n"; 82*9a383d51SJohann Duscher } 83*9a383d51SJohann Duscher} 84*9a383d51SJohann Duscher 85*9a383d51SJohann Duscher// Update dokuwiki-plugin-page.txt (plugin template) 86*9a383d51SJohann Duscher$pluginPageFile = $baseDir . '/dokuwiki-plugin-page.txt'; 87*9a383d51SJohann Duscherif (file_exists($pluginPageFile)) { 88*9a383d51SJohann Duscher $content = file_get_contents($pluginPageFile); 89*9a383d51SJohann Duscher 90*9a383d51SJohann Duscher // Update lastupdate date 91*9a383d51SJohann Duscher $content = preg_replace('/^lastupdate\s*:\s*\d{4}-\d{2}-\d{2}\s*$/m', "lastupdate : {$newDate}", $content); 92*9a383d51SJohann Duscher 93*9a383d51SJohann Duscher // Update downloadurl with new version (more robust pattern) 94*9a383d51SJohann Duscher $content = preg_replace( 95*9a383d51SJohann Duscher '#downloadurl:\s*https://github\.com/jonnydee/deletepageguard/releases/download/v\d+\.\d+\.\d+/deletepageguard-\d+\.\d+\.\d+\.zip#', 96*9a383d51SJohann Duscher "downloadurl: https://github.com/jonnydee/deletepageguard/releases/download/v{$newVersion}/deletepageguard-{$newVersion}.zip", 97*9a383d51SJohann Duscher $content 98*9a383d51SJohann Duscher ); 99*9a383d51SJohann Duscher 100*9a383d51SJohann Duscher // Update changelog section with new version entry (add at top of changelog) 101*9a383d51SJohann Duscher $changelogEntry = " * **{$newDate}**\n * Release v{$newVersion}\n * "; 102*9a383d51SJohann Duscher if (strpos($content, "Release v{$newVersion}") === false) { 103*9a383d51SJohann Duscher // Find the changelog section and add new entry 104*9a383d51SJohann Duscher $content = preg_replace( 105*9a383d51SJohann Duscher '/(===== Changelog =====.*?)( \* \*\*\d{4}-\d{2}-\d{2}\*\*)/s', 106*9a383d51SJohann Duscher "\$1{$changelogEntry}See CHANGELOG.md for details\n\n\$2", 107*9a383d51SJohann Duscher $content 108*9a383d51SJohann Duscher ); 109*9a383d51SJohann Duscher } 110*9a383d51SJohann Duscher 111*9a383d51SJohann Duscher file_put_contents($pluginPageFile, $content); 112*9a383d51SJohann Duscher echo "✓ Updated dokuwiki-plugin-page.txt (download URL and date)\n"; 113*9a383d51SJohann Duscher} 114*9a383d51SJohann Duscher 115*9a383d51SJohann Duscherecho "\n✅ Version update completed successfully!\n"; 116*9a383d51SJohann Duscherecho "\nNext steps:\n"; 117*9a383d51SJohann Duscherecho "1. Review the changes\n"; 118*9a383d51SJohann Duscherecho "2. Update CHANGELOG.md if needed\n"; 119*9a383d51SJohann Duscherecho "3. Run 'make dist' to create distribution package\n"; 120*9a383d51SJohann Duscherecho "4. Commit and tag the release\n";