137 lines
4.3 KiB
PHP
137 lines
4.3 KiB
PHP
<?php
|
|
|
|
function versionToInfix($versionNumber) {
|
|
if ( !isValidVersion($versionNumber) ) {
|
|
throw new InvalidArgumentException("Invalid version number: $versionNumber");
|
|
}
|
|
|
|
$parts = explode('.', $versionNumber);
|
|
return 'v' . $parts[0] . 'p' . $parts[1];
|
|
}
|
|
|
|
function infixToVersion($infix) {
|
|
$parts = explode('p', substr($infix, 1));
|
|
$version = $parts[0] . '.' . $parts[1];
|
|
if ( !isValidVersion($version) ) {
|
|
throw new InvalidArgumentException("Invalid version infix: $infix");
|
|
}
|
|
return $version;
|
|
}
|
|
|
|
function isValidVersion($version) {
|
|
return preg_match('/^\d+\.\d+$/', $version);
|
|
}
|
|
|
|
//Switch to the parent directory so that we can use relative paths where needed.
|
|
$oldDir = getcwd();
|
|
$repositoryRoot = __DIR__ . '/..';
|
|
chdir($repositoryRoot);
|
|
|
|
function updateVersionNumbers($filePath, $oldVersion, $newVersion) {
|
|
$content = file_get_contents($filePath);
|
|
if ( $content === false ) {
|
|
echo "Failed to read file: $filePath\n";
|
|
exit(1);
|
|
}
|
|
|
|
$content = preg_replace("/\b" . preg_quote($oldVersion, '/') . "\b/", $newVersion, $content);
|
|
$content = preg_replace(
|
|
"/\b" . preg_quote(versionToInfix($oldVersion), '/') . "\b/",
|
|
versionToInfix($newVersion),
|
|
$content
|
|
);
|
|
file_put_contents($filePath, $content);
|
|
}
|
|
|
|
//Check for uncommitted changes.
|
|
exec('git status --porcelain', $output, $returnCode);
|
|
if ( $returnCode !== 0 ) {
|
|
echo "Failed to check for uncommitted changes. Git not installed or not in a Git repository?\n";
|
|
chdir($oldDir);
|
|
exit(1);
|
|
}
|
|
if ( !empty($output) ) {
|
|
echo "You have uncommitted changes. Please commit or stash them before running this script.\n";
|
|
chdir($oldDir);
|
|
exit(1);
|
|
}
|
|
|
|
//Get the current version.
|
|
$currentVersionDir = glob($repositoryRoot . '/Puc/v*p*')[0];
|
|
if ( !is_dir($currentVersionDir) ) {
|
|
echo "Failed to find the current version's subdirectory.\n";
|
|
chdir($oldDir);
|
|
exit(1);
|
|
}
|
|
$currentVersion = infixToVersion(basename($currentVersionDir));
|
|
|
|
//Ask the user for the new version number
|
|
echo "Current version is $currentVersion. Enter new version number: ";
|
|
$newVersion = trim(fgets(STDIN));
|
|
if ( !isValidVersion($newVersion) ) {
|
|
echo "Invalid version number: $newVersion\n";
|
|
chdir($oldDir);
|
|
exit(1);
|
|
}
|
|
|
|
//Get the old and new version in vXpY and X.Y formats.
|
|
$oldVersionInfix = basename($currentVersionDir);
|
|
$newVersionInfix = versionToInfix($newVersion);
|
|
$oldVersion = $currentVersion;
|
|
|
|
//Create a new branch for the version update.
|
|
exec("git checkout -b \"version-bump-$newVersion\"");
|
|
|
|
//Rename the Puc/vXpY directory using Git.
|
|
exec("git mv \"Puc/$oldVersionInfix\" \"Puc/$newVersionInfix\"");
|
|
|
|
//Define the list of directories to search
|
|
$directoriesToSearch = ['css', 'js', 'Puc'];
|
|
|
|
//Replace old version infix and old version number in the source code
|
|
foreach ($directoriesToSearch as $dir) {
|
|
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
|
|
foreach ($iterator as $file) {
|
|
if ( $file->isFile() ) {
|
|
updateVersionNumbers($file->getPathname(), $oldVersion, $newVersion);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Update version numbers in certain files that are not in the above subdirectories.
|
|
$standaloneFiles = [
|
|
'plugin-update-checker.php',
|
|
'README.md',
|
|
'languages/plugin-update-checker.pot',
|
|
];
|
|
foreach ($standaloneFiles as $standaloneFile) {
|
|
updateVersionNumbers($repositoryRoot . '/' . $standaloneFile, $oldVersion, $newVersion);
|
|
}
|
|
|
|
//Rename the loader file and update the version numbers.
|
|
$oldLoaderFileName = "load-$oldVersionInfix.php";
|
|
$newLoaderFileName = "load-$newVersionInfix.php";
|
|
exec("git mv \"$oldLoaderFileName\" \"$newLoaderFileName\"");
|
|
updateVersionNumbers($repositoryRoot . '/' . $newLoaderFileName, $oldVersion, $newVersion);
|
|
|
|
//Replace the old loader file name with new one in files that use it.
|
|
//plugin-update-checker.php was already updated by the previous step, but we'll
|
|
//include it here anyway in case the code order or loader naming scheme changes.
|
|
$filesUsingLoader = ['plugin-update-checker.php', 'composer.json'];
|
|
foreach ($filesUsingLoader as $fileName) {
|
|
$fullFileName = $repositoryRoot . '/' . $fileName;
|
|
$content = file_get_contents($fullFileName);
|
|
$content = str_replace($oldLoaderFileName, $newLoaderFileName, $content);
|
|
file_put_contents($fullFileName, $content);
|
|
}
|
|
|
|
//Commit the changes.
|
|
exec('git add .');
|
|
exec("git commit -m \"Bump version number to $newVersion\"");
|
|
|
|
echo "Version number bumped to $newVersion.\n";
|
|
|
|
//Switch back to the original directory.
|
|
chdir($oldDir);
|
|
|