From 906c49e12ca2a051ff7932bc489d13ec87ab96c7 Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:31:50 +0200 Subject: [PATCH 01/14] fix: back off after transient 408 and 425 responses --- includes/class-codegenie-pulse-client.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/includes/class-codegenie-pulse-client.php b/includes/class-codegenie-pulse-client.php index c165dde..0734b05 100644 --- a/includes/class-codegenie-pulse-client.php +++ b/includes/class-codegenie-pulse-client.php @@ -116,7 +116,7 @@ private function send( $endpoint, $payload, $kind, $bypass_backoff ) { return $this->record_success( $kind, $status ); } - if ( 429 === $status ) { + if ( in_array( $status, array( 408, 425, 429 ), true ) ) { $this->start_backoff( $kind, MINUTE_IN_SECONDS ); } elseif ( in_array( $status, array( 401, 403, 404, 410 ), true ) ) { $this->start_backoff( $kind, 15 * MINUTE_IN_SECONDS ); @@ -236,6 +236,8 @@ private function http_error_message( $status ) { return __( 'Het account of plan laat deze koppeling niet toe.', 'codegenie-pulse-connector' ); case 404: return __( 'Het ingestie-endpoint of de token werd niet gevonden.', 'codegenie-pulse-connector' ); + case 408: + return __( 'De aanvraag is tijdelijk verlopen. De connector probeert later opnieuw.', 'codegenie-pulse-connector' ); case 410: return __( 'De gekoppelde website of foutbron is gearchiveerd.', 'codegenie-pulse-connector' ); case 411: @@ -244,6 +246,8 @@ private function http_error_message( $status ) { return __( 'De gebeurtenis is groter dan de toegestane platformlimiet.', 'codegenie-pulse-connector' ); case 422: return __( 'Het platform heeft de gebeurtenis inhoudelijk geweigerd.', 'codegenie-pulse-connector' ); + case 425: + return __( 'Het platform heeft de aanvraag tijdelijk uitgesteld. De connector probeert later opnieuw.', 'codegenie-pulse-connector' ); case 429: return __( 'De ingestie- of maandlimiet is bereikt. De connector probeert later opnieuw.', 'codegenie-pulse-connector' ); default: From 8e41ac5ec397a4d2bf1d4aa1acabc381a333296f Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:33:53 +0200 Subject: [PATCH 02/14] test: cover transient HTTP response backoff --- tests/unit/ClientTransientBackoffTest.php | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 tests/unit/ClientTransientBackoffTest.php diff --git a/tests/unit/ClientTransientBackoffTest.php b/tests/unit/ClientTransientBackoffTest.php new file mode 100644 index 0000000..adc8c7b --- /dev/null +++ b/tests/unit/ClientTransientBackoffTest.php @@ -0,0 +1,24 @@ +configuredOptions(); + $client = new Codegenie_Pulse_Client( $options ); + $GLOBALS['codegenie_test']['remote_result'] = array( + 'response' => array( 'code' => $status ), + 'body' => '{}', + ); + + $result = $client->send_error( array( 'message' => 'synthetic' ) ); + $key = Codegenie_Pulse_Options::BACKOFF_KEY . '_error'; + + $this->assertSame( 'http_' . $status, $result['code'] ); + $this->assertArrayHasKey( $key, $GLOBALS['codegenie_test']['transients'] ); + $this->assertSame( MINUTE_IN_SECONDS, $GLOBALS['codegenie_test']['transients'][ $key ]['expiration'] ); + $this->assertSame( 'backoff', $client->send_error( array( 'message' => 'followup' ) )['code'] ); + $this->assertCount( 1, $GLOBALS['codegenie_test']['remote_calls'] ); + } + } +} From 7f28062a2cd814960624d225bf6d7b14e489463c Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:35:04 +0200 Subject: [PATCH 03/14] chore: bump connector version to 1.2.2 --- codegenie-pulse-connector.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/codegenie-pulse-connector.php b/codegenie-pulse-connector.php index b2c9671..352aa0c 100644 --- a/codegenie-pulse-connector.php +++ b/codegenie-pulse-connector.php @@ -2,7 +2,7 @@ /** * Plugin Name: Codegenie Pulse Connector * Description: Verbind WordPress veilig met Codegenie Pulse voor foutmonitoring, websiteverificatie en deployment tracking. - * Version: 1.2.1 + * Version: 1.2.2 * Requires at least: 6.2 * Requires PHP: 7.4 * Author: Codegenie @@ -16,7 +16,7 @@ exit; } -define( 'CODEGENIE_PULSE_CONNECTOR_VERSION', '1.2.1' ); +define( 'CODEGENIE_PULSE_CONNECTOR_VERSION', '1.2.2' ); define( 'CODEGENIE_PULSE_CONNECTOR_FILE', __FILE__ ); define( 'CODEGENIE_PULSE_CONNECTOR_DIR', plugin_dir_path( __FILE__ ) ); From 1e397b31ca37ce1dd37d4e17292f76ad57d3d6ac Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:35:48 +0200 Subject: [PATCH 04/14] chore: build release artifacts for 1.2.2 --- scripts/build-release.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-release.php b/scripts/build-release.php index a5332a4..2a0c4c1 100644 --- a/scripts/build-release.php +++ b/scripts/build-release.php @@ -7,7 +7,7 @@ $root = dirname( __DIR__ ); $allow_dirty = in_array( '--allow-dirty', $argv, true ); -$version = '1.2.1'; +$version = '1.2.2'; $slug = 'codegenie-pulse-connector'; $source_slug = 'codegenie-pulse-connector-wordpress-' . $version . '-source'; $dist = $root . '/dist'; From e15eac5234b5a764e269fbc2b34befbbd41ccd5a Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:36:11 +0200 Subject: [PATCH 05/14] docs: prepare WordPress metadata for 1.2.2 --- readme.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/readme.txt b/readme.txt index 76a27f0..7fe5c8b 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: monitoring, error monitoring, uptime, fatal errors, deployment tracking Requires at least: 6.2 Tested up to: 7.0 Requires PHP: 7.4 -Stable tag: 1.2.1 +Stable tag: 1.2.2 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -71,7 +71,7 @@ The DSN can no longer be decrypted. Paste the DSN into the connector settings ag = Are events retried? = -The plugin has no queue and does not automatically retry events. It applies a short local backoff after network, rate-limit, or token failures to prevent an error storm. +The plugin has no queue and does not automatically retry events. It applies a short local backoff after network, temporary HTTP, rate-limit, or token failures to prevent an error storm. = Which PHP error capture mode should I use? = @@ -95,6 +95,10 @@ The public discovery endpoint returns only connector information and a one-time == Upgrade Notice == += 1.2.2 = + +Adds bounded local backoff for temporary HTTP 408 and 425 responses so error bursts do not repeatedly hit an endpoint that has asked the connector to wait. + = 1.2.1 = Clarifies the actual data transfer and makes one-time provisioning and multisite network activation more fault tolerant without changing the connector protocol. @@ -109,6 +113,12 @@ Adds safe optional capture of PHP warnings, notices, and deprecated messages. Ex == Changelog == += 1.2.2 = + +* Treats HTTP 408 Request Timeout and HTTP 425 Too Early as temporary delivery failures. +* Applies the existing one-minute local backoff after those responses. +* Adds regression coverage proving that follow-up events are suppressed during the bounded backoff window. + = 1.2.1 = * Corrected consent copy without a claim about an inventory of installed plugin versions. From bb6f258720cd9e857d4a0afa6ac8f93612f0a958 Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:36:30 +0200 Subject: [PATCH 06/14] chore: align release contract checks with 1.2.2 --- scripts/check-versions.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/check-versions.php b/scripts/check-versions.php index bff6304..979f1a6 100644 --- a/scripts/check-versions.php +++ b/scripts/check-versions.php @@ -11,12 +11,12 @@ $checks = array( 'plugin name' => array( $main, '/^ \* Plugin Name:\s+Codegenie Pulse Connector\s*$/m' ), - 'plugin version' => array( $main, '/^ \* Version:\s+1\.2\.1\s*$/m' ), - 'version constant' => array( $main, "/define\( 'CODEGENIE_PULSE_CONNECTOR_VERSION', '1\.2\.1' \);/" ), + 'plugin version' => array( $main, '/^ \* Version:\s+1\.2\.2\s*$/m' ), + 'version constant' => array( $main, "/define\( 'CODEGENIE_PULSE_CONNECTOR_VERSION', '1\.2\.2' \);/" ), 'minimum WordPress' => array( $main, '/^ \* Requires at least:\s+6\.2\s*$/m' ), 'minimum PHP' => array( $main, '/^ \* Requires PHP:\s+7\.4\s*$/m' ), 'text domain' => array( $main, '/^ \* Text Domain:\s+codegenie-pulse-connector\s*$/m' ), - 'stable tag' => array( $readme, '/^Stable tag:\s+1\.2\.1\s*$/m' ), + 'stable tag' => array( $readme, '/^Stable tag:\s+1\.2\.2\s*$/m' ), 'readme WordPress' => array( $readme, '/^Requires at least:\s+6\.2\s*$/m' ), 'readme PHP' => array( $readme, '/^Requires PHP:\s+7\.4\s*$/m' ), 'tested WordPress' => array( $readme, '/^Tested up to:\s+7\.0\s*$/m' ), @@ -41,4 +41,4 @@ exit( 1 ); } -echo "Version contracts OK: 1.2.1, WordPress 6.2-7.0.2, PHP 7.4+, connector ID unchanged.\n"; +echo "Version contracts OK: 1.2.2, WordPress 6.2-7.0.2, PHP 7.4+, connector ID unchanged.\n"; From ffd5f32363d28988b022d65896859be5b3132d8b Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:36:42 +0200 Subject: [PATCH 07/14] docs: add 1.2.2 release notes --- docs/releases/1.2.2.md | 53 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 docs/releases/1.2.2.md diff --git a/docs/releases/1.2.2.md b/docs/releases/1.2.2.md new file mode 100644 index 0000000..ce3db2e --- /dev/null +++ b/docs/releases/1.2.2.md @@ -0,0 +1,53 @@ +# Codegenie Pulse Connector 1.2.2 + +## Summary + +Codegenie Pulse Connector 1.2.2 is a focused delivery-reliability maintenance release. It treats HTTP 408 Request Timeout and HTTP 425 Too Early as temporary responses and applies the connector's existing bounded one-minute local backoff before another automatic delivery attempt. + +## Changes + +- Added local backoff after HTTP 408 responses. +- Added local backoff after HTTP 425 responses. +- Added specific privacy-safe administrator messages for both temporary response classes. +- Added regression coverage proving that the next automatic event is suppressed during the backoff window. + +## Compatibility + +- WordPress 6.2 or newer. +- Tested by the repository matrix with WordPress 6.2.0 and 7.0.2. +- PHP 7.4 or newer, including the repository's PHP 7.4, 8.3 and 8.5 quality matrix. +- Requires PHP OpenSSL support for AES-256-GCM. +- Plugin directory, installation slug and text domain: `codegenie-pulse-connector`. +- Connector ID: `codegenie-pulse-connector-wordpress`; protocol version 1. + +## Upgrade behaviour + +There is no database-schema migration and there are no option-name changes. Existing encrypted DSN, verification, plan capability and capture-mode settings remain unchanged. The release only extends the existing local delivery backoff classification. + +## Security and privacy + +- No additional data is collected, persisted or transmitted. +- No payload format, endpoint or authentication contract changes. +- Backoff state remains local, short-lived and separated by event kind. +- Result messages remain bounded and do not expose remote response bodies, DSNs, tokens or event content. + +## Known limitations + +- The plugin has no queue and does not replay an event that was rejected or lost. +- Backoff protects the local site and remote endpoint from repeated delivery attempts, but it does not guarantee eventual delivery. +- WordPress.org publication still requires the approved human-created brand assets and synthetic screenshots documented by the repository asset manifest. + +## Artifacts + +The tag-triggered release preparation workflow builds deterministic installation and reviewable source ZIP files, verifies both archives, records SHA-256 sidecars and proves reproducibility before uploading the prepared artifacts. + +Expected filenames: + +- `codegenie-pulse-connector-1.2.2.zip` +- `codegenie-pulse-connector-wordpress-1.2.2-source.zip` + +## Rollback and support + +For rollback, deactivate 1.2.2 and reinstall the reviewed 1.2.1 package without uninstalling first. Uninstall deliberately removes settings and secrets and is therefore not a rollback mechanism. + +Use the repository's normal support channel for non-sensitive issues. Report vulnerabilities through GitHub private vulnerability reporting as described in `SECURITY.md`; never post DSNs, tokens, personal data or private logs publicly. From c2ebc32350343331fa4f2fa543e3fd46524a62f3 Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:37:05 +0200 Subject: [PATCH 08/14] chore: align WordPress.org asset manifest with 1.2.2 --- wordpress-org/assets/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wordpress-org/assets/manifest.json b/wordpress-org/assets/manifest.json index 73df3a6..be1c2c5 100644 --- a/wordpress-org/assets/manifest.json +++ b/wordpress-org/assets/manifest.json @@ -1,7 +1,7 @@ { "schema_version": 1, "plugin_slug": "codegenie-pulse-connector", - "plugin_version": "1.2.1", + "plugin_version": "1.2.2", "assets": [ { "filename": "icon-128x128.png", From dfe0478ea4e744c1ddd3392e4c2ce931cfcf9df3 Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:37:56 +0200 Subject: [PATCH 09/14] ci: gate and publish the 1.2.2 release --- .github/workflows/qa.yml | 104 +++++++++++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 14 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 405d70f..f19891e 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -95,19 +95,19 @@ jobs: run: php scripts/build-release.php - name: Test ZIP integrity run: | - unzip -t dist/codegenie-pulse-connector-1.2.1.zip - unzip -t dist/codegenie-pulse-connector-wordpress-1.2.1-source.zip + unzip -t dist/codegenie-pulse-connector-1.2.2.zip + unzip -t dist/codegenie-pulse-connector-wordpress-1.2.2-source.zip - name: Verify reproducibility run: | - first_install="$(sha256sum dist/codegenie-pulse-connector-1.2.1.zip | cut -d ' ' -f 1)" - first_source="$(sha256sum dist/codegenie-pulse-connector-wordpress-1.2.1-source.zip | cut -d ' ' -f 1)" + first_install="$(sha256sum dist/codegenie-pulse-connector-1.2.2.zip | cut -d ' ' -f 1)" + first_source="$(sha256sum dist/codegenie-pulse-connector-wordpress-1.2.2-source.zip | cut -d ' ' -f 1)" php scripts/build-release.php - second_install="$(sha256sum dist/codegenie-pulse-connector-1.2.1.zip | cut -d ' ' -f 1)" - second_source="$(sha256sum dist/codegenie-pulse-connector-wordpress-1.2.1-source.zip | cut -d ' ' -f 1)" + second_install="$(sha256sum dist/codegenie-pulse-connector-1.2.2.zip | cut -d ' ' -f 1)" + second_source="$(sha256sum dist/codegenie-pulse-connector-wordpress-1.2.2-source.zip | cut -d ' ' -f 1)" test "$first_install" = "$second_install" test "$first_source" = "$second_source" - name: Extract built package for Plugin Check - run: unzip -q dist/codegenie-pulse-connector-1.2.1.zip -d plugin-build + run: unzip -q dist/codegenie-pulse-connector-1.2.2.zip -d plugin-build - name: Run official Plugin Check against built package uses: wordpress/plugin-check-action@v1 with: @@ -118,13 +118,89 @@ jobs: - name: Upload reviewed installation artifact uses: actions/upload-artifact@v4 with: - name: codegenie-pulse-connector-1.2.1-release-candidate + name: codegenie-pulse-connector-1.2.2-release-candidate path: | - dist/codegenie-pulse-connector-1.2.1.zip - dist/codegenie-pulse-connector-1.2.1.files.txt - dist/codegenie-pulse-connector-1.2.1.sha256 - dist/codegenie-pulse-connector-wordpress-1.2.1-source.zip - dist/codegenie-pulse-connector-wordpress-1.2.1-source.files.txt - dist/codegenie-pulse-connector-wordpress-1.2.1-source.sha256 + dist/codegenie-pulse-connector-1.2.2.zip + dist/codegenie-pulse-connector-1.2.2.files.txt + dist/codegenie-pulse-connector-1.2.2.sha256 + dist/codegenie-pulse-connector-wordpress-1.2.2-source.zip + dist/codegenie-pulse-connector-wordpress-1.2.2-source.files.txt + dist/codegenie-pulse-connector-wordpress-1.2.2-source.sha256 if-no-files-found: error retention-days: 14 + + release: + name: Publish GitHub release + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + needs: package + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Check out source + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + extensions: zip + coverage: none + tools: none + - name: Resolve release identity + id: release + env: + VERSION: '1.2.2' + run: | + set -euo pipefail + php scripts/check-release-version.php "$VERSION" + tag="v$VERSION" + git fetch --tags --force + + if git rev-parse "$tag" >/dev/null 2>&1; then + tagged_commit="$(git rev-list --max-count=1 "$tag")" + + if [[ "$tagged_commit" != "$GITHUB_SHA" ]]; then + echo "Version $tag is already released at $tagged_commit; no new release is required for this commit." + echo "publish=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + else + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git tag -a "$tag" "$GITHUB_SHA" -m "$tag" + git push origin "$tag" + fi + + echo "tag=$tag" >> "$GITHUB_OUTPUT" + echo "publish=true" >> "$GITHUB_OUTPUT" + - name: Rebuild reviewed release artifacts + if: steps.release.outputs.publish == 'true' + run: php scripts/build-release.php + - name: Create or repair GitHub release + if: steps.release.outputs.publish == 'true' + env: + GH_TOKEN: ${{ github.token }} + TAG: ${{ steps.release.outputs.tag }} + run: | + set -euo pipefail + assets=( + dist/codegenie-pulse-connector-1.2.2.zip + dist/codegenie-pulse-connector-1.2.2.files.txt + dist/codegenie-pulse-connector-1.2.2.sha256 + dist/codegenie-pulse-connector-wordpress-1.2.2-source.zip + dist/codegenie-pulse-connector-wordpress-1.2.2-source.files.txt + dist/codegenie-pulse-connector-wordpress-1.2.2-source.sha256 + ) + + if gh release view "$TAG" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then + gh release upload "$TAG" "${assets[@]}" --repo "$GITHUB_REPOSITORY" --clobber + exit 0 + fi + + gh release create "$TAG" "${assets[@]}" \ + --repo "$GITHUB_REPOSITORY" \ + --target "$TAG" \ + --title "$TAG" \ + --notes-file docs/releases/1.2.2.md From 1fbb59e5294f5cd61945c609df631fdb910a6669 Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:38:46 +0200 Subject: [PATCH 10/14] test: align asset manifest contracts with 1.2.2 --- tests/unit/WordPressOrgAssetManifestTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/unit/WordPressOrgAssetManifestTest.php b/tests/unit/WordPressOrgAssetManifestTest.php index 977d9ad..c61c1ac 100644 --- a/tests/unit/WordPressOrgAssetManifestTest.php +++ b/tests/unit/WordPressOrgAssetManifestTest.php @@ -18,12 +18,12 @@ public function test_tracked_manifest_is_valid_and_matches_plugin_contracts() { $manifest = Codegenie_WordPress_Org_Asset_Manifest::from_directory( $root . '/wordpress-org/assets/manifest.json', $root . '/wordpress-org/assets', - '1.2.1' + '1.2.2' ); $this->assertSame( 1, $manifest['schema_version'] ); $this->assertSame( 'codegenie-pulse-connector', $manifest['plugin_slug'] ); - $this->assertSame( '1.2.1', $manifest['plugin_version'] ); + $this->assertSame( '1.2.2', $manifest['plugin_version'] ); $this->assertCount( 7, $manifest['assets'] ); $this->assertCount( 7, $manifest['publication_blockers'] ); @@ -120,18 +120,18 @@ public function test_directory_and_source_zip_readers_interpret_the_same_fixture $from_directory = Codegenie_WordPress_Org_Asset_Manifest::from_directory( $directory . '/manifest.json', $directory, - '1.2.1' + '1.2.2' ); $zip_path = $directory . '/source.zip'; $zip = new ZipArchive(); $this->assertTrue( $zip->open( $zip_path, ZipArchive::CREATE | ZipArchive::OVERWRITE ) ); - $root = 'codegenie-pulse-connector-wordpress-1.2.1-source/'; + $root = 'codegenie-pulse-connector-wordpress-1.2.2-source/'; $zip->addFromString( $root . 'wordpress-org/assets/manifest.json', $manifest_json ); $zip->close(); $this->assertTrue( $zip->open( $zip_path, ZipArchive::CHECKCONS ) ); - $from_zip = Codegenie_WordPress_Org_Asset_Manifest::from_zip( $zip, $root, '1.2.1' ); + $from_zip = Codegenie_WordPress_Org_Asset_Manifest::from_zip( $zip, $root, '1.2.2' ); $zip->close(); $this->assertSame( $from_directory, $from_zip ); @@ -153,7 +153,7 @@ private function validateData( $data, $asset_reader = null ) { }; } - return Codegenie_WordPress_Org_Asset_Manifest::validate( json_encode( $data ), $asset_reader, '1.2.1' ); + return Codegenie_WordPress_Org_Asset_Manifest::validate( json_encode( $data ), $asset_reader, '1.2.2' ); } private function manifestData() { From 66e22192f0d06a5cd9d18c52230ccbfb8a9bedcb Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:39:07 +0200 Subject: [PATCH 11/14] ci: update release preparation default to 1.2.2 --- .github/workflows/release-prepare.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-prepare.yml b/.github/workflows/release-prepare.yml index 1868f8f..e464dd8 100644 --- a/.github/workflows/release-prepare.yml +++ b/.github/workflows/release-prepare.yml @@ -9,7 +9,7 @@ on: version: description: Exact release version without the v prefix required: true - default: '1.2.1' + default: '1.2.2' type: string permissions: From e69ae4d3d95d817709fd95b25f17bbe009e72007 Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:49:03 +0200 Subject: [PATCH 12/14] test: align activation contract with 1.2.2 --- tests/unit/DeploymentUninstallTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/DeploymentUninstallTest.php b/tests/unit/DeploymentUninstallTest.php index 51f646f..778b738 100644 --- a/tests/unit/DeploymentUninstallTest.php +++ b/tests/unit/DeploymentUninstallTest.php @@ -7,7 +7,7 @@ public function test_main_plugin_file_loads_and_activation_has_no_fatal_error() exec( escapeshellarg( PHP_BINARY ) . ' ' . escapeshellarg( dirname( __DIR__ ) . '/fixtures/plugin-activation-runner.php' ) . ' 2>&1', $output, $status ); $this->assertSame( 0, $status, implode( "\n", $output ) ); $result = json_decode( implode( "\n", $output ), true ); - $this->assertSame( '1.2.1', $result['version'] ); + $this->assertSame( '1.2.2', $result['version'] ); $this->assertSame( 'no', $result['settings_autoload'] ); $this->assertSame( 'no', $result['state_autoload'] ); } From 37324816c3a221d9cb3cdee49d0250e6b6c7718d Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:49:28 +0200 Subject: [PATCH 13/14] test: make legacy strict-level coverage independent of php.ini --- tests/unit/ClientReporterTest.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/unit/ClientReporterTest.php b/tests/unit/ClientReporterTest.php index d53ab0b..bc36cfb 100644 --- a/tests/unit/ClientReporterTest.php +++ b/tests/unit/ClientReporterTest.php @@ -96,7 +96,13 @@ public function test_previous_error_handler_exception_is_not_swallowed() { public function test_removed_strict_level_is_not_registered_on_php_84_or_newer() { $options = $this->configuredOptions( array( 'error_capture_mode' => Codegenie_Pulse_Options::CAPTURE_DEBUG ) ); $reporter = new Codegenie_Pulse_Reporter( new Codegenie_Pulse_Client( $options ), $options, new Codegenie_Pulse_Redactor() ); - $reporter->capture_php_error( 2048, 'legacy strict level', __FILE__, 1 ); + $previous_error_reporting = error_reporting( E_ALL ); + + try { + $reporter->capture_php_error( 2048, 'legacy strict level', __FILE__, 1 ); + } finally { + error_reporting( $previous_error_reporting ); + } if ( PHP_VERSION_ID >= 80400 ) { $this->assertCount( 0, $GLOBALS['codegenie_test']['remote_calls'] ); From 41e877e02848dfc62bc6f47f6fdb231f96008cd2 Mon Sep 17 00:00:00 2001 From: Jordy Loeuille <32570668+jordyloeuille@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:49:53 +0200 Subject: [PATCH 14/14] ci: remove the Subversion dependency from WordPress tests --- scripts/install-wp-tests.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/scripts/install-wp-tests.sh b/scripts/install-wp-tests.sh index 80cfa55..8684b9b 100644 --- a/scripts/install-wp-tests.sh +++ b/scripts/install-wp-tests.sh @@ -28,14 +28,19 @@ if [[ ! -d "$WP_CORE_DIR/wp-admin" ]]; then rm -f "$tmp_archive" fi -if [[ ! -d "$WP_TESTS_DIR/includes" ]]; then +if [[ ! -d "$WP_TESTS_DIR/includes" || ! -d "$WP_TESTS_DIR/data" || ! -f "$WP_TESTS_DIR/wp-tests-config-sample.php" ]]; then + tmp_develop_archive="$(mktemp)" + tmp_develop_dir="$(mktemp -d)" + download "https://github.com/WordPress/wordpress-develop/archive/refs/tags/${WP_VERSION}.tar.gz" "$tmp_develop_archive" + tar --strip-components=1 -xzf "$tmp_develop_archive" -C "$tmp_develop_dir" mkdir -p "$WP_TESTS_DIR" - svn export --quiet --force "https://develop.svn.wordpress.org/tags/${WP_VERSION}/tests/phpunit/includes/" "$WP_TESTS_DIR/includes" - svn export --quiet --force "https://develop.svn.wordpress.org/tags/${WP_VERSION}/tests/phpunit/data/" "$WP_TESTS_DIR/data" + rm -rf "$WP_TESTS_DIR/includes" "$WP_TESTS_DIR/data" + cp -R "$tmp_develop_dir/tests/phpunit/includes" "$WP_TESTS_DIR/includes" + cp -R "$tmp_develop_dir/tests/phpunit/data" "$WP_TESTS_DIR/data" + cp "$tmp_develop_dir/wp-tests-config-sample.php" "$WP_TESTS_DIR/wp-tests-config-sample.php" + rm -rf "$tmp_develop_archive" "$tmp_develop_dir" fi -svn export --quiet --force "https://develop.svn.wordpress.org/tags/${WP_VERSION}/wp-tests-config-sample.php" "$WP_TESTS_DIR/wp-tests-config-sample.php" - sed \ -e "s/youremptytestdbnamehere/${DB_NAME}/" \ -e "s/yourusernamehere/${DB_USER}/" \