preg_match('/^\d+\.\d+\.\d+-php\d+\.\d+$/', $version)); } function sortVersions(&$versions) { usort($versions, function($a, $b) { [$wpA, $phpA] = explode('-php', $a); [$wpB, $phpB] = explode('-php', $b); $wpCompare = version_compare($wpB, $wpA); return $wpCompare !== 0 ? $wpCompare : version_compare($phpB, $phpA); }); } function getLatestAndPreviousVersions($sortedVersions) { $uniqueVersions = []; foreach ($sortedVersions as $version) { [$wpVersion] = explode('-php', $version); $majorMinorVersion = preg_replace('/\.\d+$/', '', $wpVersion); $uniqueVersions[$majorMinorVersion][] = $version; } krsort($uniqueVersions); $latestVersionGroup = reset($uniqueVersions); $previousVersionGroup = next($uniqueVersions); if ($previousVersionGroup === false) { return [$latestVersionGroup[0], null]; } return [reset($latestVersionGroup), end($previousVersionGroup)]; } function replaceLatestVersion($latestVersion) { replaceVersionInFile( __DIR__ . './../../../mailpoet/tests/docker/docker-compose.yml', '/(wordpress:\${WORDPRESS_IMAGE_VERSION:-\s*)\d+\.\d+\.?\d*-php\d+\.\d+(})/', '${1}' . $latestVersion . '${2}' ); } function replacePreviousVersion($previousVersion) { replaceVersionInFile( __DIR__ . './../../../.circleci/config.yml', '/(wordpress_image_version: )\d+\.\d+\.?\d*-php\d+\.\d+/', '${1}' . $previousVersion ); } $allVersions = []; $page = 1; $maxPages = 4; $latestVersion = null; $previousVersion = null; echo "Fetching WordPress versions...\n"; while (($latestVersion === null || $previousVersion === null) && $page <= $maxPages) { $versions = getWordpressVersions($page); $allVersions = array_merge($allVersions, $versions); $allVersions = filterVersions($allVersions); sortVersions($allVersions); [$latestVersion, $previousVersion] = getLatestAndPreviousVersions($allVersions); $page++; } echo "Latest version: $latestVersion\n"; echo "Previous version: $previousVersion\n"; echo "Replacing the latest version in the docker file...\n"; replaceLatestVersion($latestVersion); echo "Replacing the previous version in the config file...\n"; replacePreviousVersion($previousVersion);