diff --git a/.github/workflows/scripts/check_woocommerce_memberships_versions.php b/.github/workflows/scripts/check_woocommerce_memberships_versions.php index 53a163cfea..33cdc39aab 100644 --- a/.github/workflows/scripts/check_woocommerce_memberships_versions.php +++ b/.github/workflows/scripts/check_woocommerce_memberships_versions.php @@ -7,4 +7,4 @@ $downloadCommand = 'download:woo-commerce-memberships-zip'; $configParameterName = 'woo_memberships_version'; $versionsFilename = 'woocommerce_memberships_versions.txt'; -replacePrivatePluginVersion($repository, $downloadCommand, $configParameterName); +replacePrivatePluginVersion($repository, $downloadCommand, $configParameterName, $versionsFilename); diff --git a/.github/workflows/scripts/check_woocommerce_versions.php b/.github/workflows/scripts/check_woocommerce_versions.php index 068632b392..e3b0c49c31 100644 --- a/.github/workflows/scripts/check_woocommerce_versions.php +++ b/.github/workflows/scripts/check_woocommerce_versions.php @@ -2,6 +2,10 @@ require_once __DIR__ . '/helpers.php'; +$downloadCommand = 'download:woo-commerce-zip'; +$configParameterName = 'woo_core_version'; +$versionsFilename = 'woocommerce_versions.txt'; + /** * We get the official WooCommerce versions from the WordPress API. */ @@ -17,22 +21,6 @@ function getWooCommerceVersions(): array { return array_keys($data['versions']); } -function replaceLatestVersion($latestVersion): void { - replaceVersionInFile( - __DIR__ . './../../../.circleci/config.yml', - '/(.\/do download:woo-commerce-zip )\d+\.\d+\.\d+/', - '${1}' . $latestVersion - ); -} - -function replacePreviousVersion($previousVersion): void { - replaceVersionInFile( - __DIR__ . './../../../.circleci/config.yml', - '/(woo_core_version: )\d+\.\d+\.?\d*/', - '${1}' . $previousVersion - ); -} - $allVersions = getWooCommerceVersions(); $stableVersions = filterStableVersions($allVersions); [$latestVersion, $previousVersion] = getLatestAndPreviousMinorMajorVersions($stableVersions); @@ -42,16 +30,16 @@ echo "Previous WooCommerce version: $previousVersion\n"; if ($latestVersion) { echo "Replacing the latest version in the config file...\n"; - replaceLatestVersion($latestVersion); + replaceLatestVersion($latestVersion, $downloadCommand); } else { echo "No latest version found.\n"; } if ($previousVersion) { echo "Replacing the previous version in the config file...\n"; - replacePreviousVersion($previousVersion); + replacePreviousVersion($previousVersion, $configParameterName); } else { echo "No previous version found.\n"; } -saveVersionsToFile($latestVersion, $previousVersion, 'woocommerce_versions.txt'); +saveVersionsToFile($latestVersion, $previousVersion, $versionsFilename); diff --git a/.github/workflows/scripts/check_wordpress_versions.php b/.github/workflows/scripts/check_wordpress_versions.php index 416207f19d..59b65e60a7 100644 --- a/.github/workflows/scripts/check_wordpress_versions.php +++ b/.github/workflows/scripts/check_wordpress_versions.php @@ -5,7 +5,7 @@ require_once __DIR__ . '/helpers.php'; /** * We try to get the current available official Docker images for WordPress. */ -function getWordpressVersions($page = 1, $pageSize = 100): array { +function getWordpressVersions(int $page = 1, int $pageSize = 100): array { $url = "https://registry.hub.docker.com/v2/repositories/library/wordpress/tags?page_size={$pageSize}&page={$page}"; $response = file_get_contents($url); $data = json_decode($response, true); @@ -16,7 +16,7 @@ function getWordpressVersions($page = 1, $pageSize = 100): array { * We prefer the latest patch versions of WordPress with specified PHP versions. * For example: 6.5.4-php8.3 */ -function filterVersions($versions): array { +function filterVersions(array $versions): array { return array_filter($versions, fn($version) => preg_match('/^\d+\.\d+\.\d+-php\d+\.\d+$/', $version)); } @@ -42,7 +42,7 @@ function sortVersions(&$versions) { * This function group docker tags by the WordPress version and returns the latest with the higher PHP version * abd the previous with the lower PHP version. */ -function getLatestAndPreviousVersions($sortedVersions): array { +function getLatestAndPreviousVersions(array $sortedVersions): array { $uniqueVersions = []; foreach ($sortedVersions as $version) { [$wpVersion] = explode('-php', $version); @@ -54,17 +54,16 @@ function getLatestAndPreviousVersions($sortedVersions): array { $latestVersionGroup = reset($uniqueVersions); $previousVersionGroup = next($uniqueVersions); - if ($previousVersionGroup === false) { - return [$latestVersionGroup[0], null]; - } + $latestVersion = $latestVersionGroup === false ? null : reset($latestVersionGroup); + $previousVersion = $previousVersionGroup === false ? null : end($previousVersionGroup); - return [reset($latestVersionGroup), end($previousVersionGroup)]; + return [$latestVersion, $previousVersion]; } /** * We specify the latest WordPress version only in the docker-compose file for the tests. */ -function replaceLatestVersion($latestVersion): void { +function replaceLatestWordPressVersion(string $latestVersion): void { replaceVersionInFile( __DIR__ . './../../../mailpoet/tests/docker/docker-compose.yml', '/(wordpress:\${WORDPRESS_IMAGE_VERSION:-\s*)\d+\.\d+\.?\d*-php\d+\.\d+(})/', @@ -75,7 +74,7 @@ function replaceLatestVersion($latestVersion): void { /** * We use the previous WordPress version only in the CircleCI config file. */ -function replacePreviousVersion($previousVersion): void { +function replacePreviousWordPressVersion(string $previousVersion): void { replaceVersionInFile( __DIR__ . './../../../.circleci/config.yml', '/(wordpress_image_version: )\d+\.\d+\.?\d*-php\d+\.\d+/', @@ -106,14 +105,14 @@ echo "Previous version: $previousVersion\n"; if ($latestVersion) { echo "Replacing the latest version in the docker file...\n"; - replaceLatestVersion($latestVersion); + replaceLatestWordPressVersion($latestVersion); } else { echo "No latest version found.\n"; } if ($previousVersion) { echo "Replacing the previous version in the config file...\n"; - replacePreviousVersion($previousVersion); + replacePreviousWordPressVersion($previousVersion); } else { echo "No previous version found.\n"; } diff --git a/.github/workflows/scripts/helpers.php b/.github/workflows/scripts/helpers.php index 15a2f122f7..c017c0e44a 100644 --- a/.github/workflows/scripts/helpers.php +++ b/.github/workflows/scripts/helpers.php @@ -3,7 +3,7 @@ /** * Function replacing versions in a file by the regex pattern. */ -function replaceVersionInFile($filePath, $pattern, $replacement): void { +function replaceVersionInFile(string $filePath, string $pattern, string $replacement): void { $content = file_get_contents($filePath); if ($content === false) { @@ -25,7 +25,7 @@ function replaceVersionInFile($filePath, $pattern, $replacement): void { /** * Function to filter stable versions from a list of versions. */ -function filterStableVersions($versions): array { +function filterStableVersions(array $versions): array { return array_filter($versions, function($version) { // Only include stable versions (exclude versions with -rc, -beta, -alpha, etc.) return preg_match('/^\d+\.\d+\.\d+$/', $version); @@ -35,7 +35,7 @@ function filterStableVersions($versions): array { /** * Function to get the latest and previous minor/major versions from a list of versions. */ -function getLatestAndPreviousMinorMajorVersions($versions): array { +function getLatestAndPreviousMinorMajorVersions(array $versions): array { usort($versions, 'version_compare'); $currentVersion = end($versions); @@ -50,7 +50,7 @@ function getLatestAndPreviousMinorMajorVersions($versions): array { return [$currentVersion, $previousVersion]; } -function getMinorMajorVersion($version): string { +function getMinorMajorVersion(string $version): string { $parts = explode('.', $version); return $parts[0] . '.' . $parts[1]; } @@ -58,7 +58,7 @@ function getMinorMajorVersion($version): string { /** * Function to fetch tags from a GitHub repository. */ -function fetchGitHubTags($repo, $token): array { +function fetchGitHubTags(string $repo, string $token): array { $url = "https://api.github.com/repos/$repo/tags"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @@ -85,7 +85,7 @@ function fetchGitHubTags($repo, $token): array { /** * Function saving versions to a temporary file. */ -function saveVersionsToFile($latestVersion, $previousVersion, $fileName): void { +function saveVersionsToFile(string $latestVersion, string $previousVersion, string $fileName): void { $value = ""; if ($latestVersion) { $value .= "- latest version: {$latestVersion}\n"; @@ -96,7 +96,7 @@ function saveVersionsToFile($latestVersion, $previousVersion, $fileName): void { file_put_contents("/tmp/{$fileName}", $value); } -function replaceLatestVersion($latestVersion, $downloadCommand): void { +function replaceLatestVersion(string $latestVersion, string $downloadCommand): void { replaceVersionInFile( __DIR__ . '/../../../.circleci/config.yml', '/(.\/do ' . $downloadCommand . ' )\d+\.\d+\.\d+/', @@ -104,7 +104,7 @@ function replaceLatestVersion($latestVersion, $downloadCommand): void { ); } -function replacePreviousVersion($previousVersion, $configParameterName): void { +function replacePreviousVersion(string $previousVersion, string $configParameterName): void { replaceVersionInFile( __DIR__ . '/../../../.circleci/config.yml', '/(' . $configParameterName . ': )\d+\.\d+\.\d+/', @@ -117,7 +117,12 @@ function replacePreviousVersion($previousVersion, $configParameterName): void { * The function fetches the tags from the GitHub repository, filters stable versions, * gets the latest and previous minor/major versions, and replaces the versions in the CircleCI config file. */ -function replacePrivatePluginVersion($repository, $downloadCommand, $configParameterName, $versionsFilename): void { +function replacePrivatePluginVersion( + string $repository, + string $downloadCommand, + string $configParameterName, + string $versionsFilename +): void { // Read the GitHub token from environment variable $token = getenv('GH_TOKEN'); if (!$token) {