Skip to content

Conversation

mgascam
Copy link
Contributor

@mgascam mgascam commented Aug 8, 2025

Fixes #WOOPMNT-5249

After reviewing the state of E2E testing (pcreKM-3yi-p2) we identified some version coverage gaps:

  • PHP versions: PHP 8.2+ not covered
  • WC versions: No specific 8.8.x or 9.9.x version testing

This change aims to cover those gaps by introducing new test jobs, while keeping in mind the impact to the time it takes to run the workflows.

PHP versions

The current E2E testing strategy is updated to address PHP version coverage gaps:

  • PHP 7.3: Minimum version in the plugin header and used for WC 7.7.0 compatibility
  • PHP 8.3: Used for L-1, latest, and beta versions. Current stable version (released 2023-11-23)
  • PHP 8.4: Used for RC versions (latest, catch future compatibility issues early)

Please note that we won't be testing each WC version using every PHP version because that would introduce too many jobs, hindering the time it takes to run them. Instead I'm using a "smart" approach to keep the number of jobs to a minimal without sacrificing too much testing coverage.

WooCommerce versions

I'm adding new jobs to test with L-1 WooCommerce version, to align with this recent announcement pcShBQ-3pc-p2#comment-5118. This is the only change affecting the WC versions used in the tests.

About "beta" and "rc" versions

Please note that "beta" and "rc" versions are only included in the matrix when available. While working with the script to fetch the versions from https://api.wordpress.org/plugins/info/1.0/woocommerce.json I noticed there is no "beta" version currently available for the next version 10.1.0. I believe this is expected but thought it was worth mentioning it. Also I realized that the current workflow is using a 9.9.0-beta.1 but I think the correct beta to use should be 10.1.0-beta.x (if it exists). This inconsistency would be fixed by this PR.

Job matrix comparison

Scenario Before After Change
Pull Request Testing 4 jobs (WC Latest only) 8 jobs (WC L-1 and Latest) +4 jobs added. Execution time increased from ~22 min to ~41 min
Main Branch Testing 20 jobs (WC 7.7.0, Latest, Beta, RC) 24 jobs (WC 7.7.0, L-1, Latest, Beta, RC) +4 jobs added. Execution time is similar
PHP Version Coverage 7.3 7.3 (WC 7.7.0), 8.3 (WC L-1, Beta, Latest), 8.4 (WC RC) +2 versions
WC Version Coverage 7.7.0, Latest, Beta, RC 7.7.0, L-1, Latest, Beta, RC +1 version (L-1)

Changes proposed in this Pull Request

  • .github/workflows/e2e-pull-request.yml: Added L-1 testing to PR workflow
  • .github/actions/setup-php/action.yml: Added PHP version override capability
  • .github/scripts/generate-wc-matrix.sh: New dynamic version resolution script. This is heavily inspired by @marcinbot's E2E - fix pulling non-latest WC versions, set up tests with rc #10990
  • .github/workflows/e2e-test.yml: The main branch workflow is updated to:
    • Uses the new version resolution script
    • L-1 testing
    • PHP versions

Testing instructions


  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@botwoo
Copy link
Collaborator

botwoo commented Aug 8, 2025

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 11002 or branch name dev/woopmnt-5249-e2e-ensure-version-coverage-for-woocommerce-and-php in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: 8eb1d88
  • Build time: 2025-08-14 13:36:25 UTC

Note: the build is updated when a new commit is pushed to this PR.

Copy link
Contributor

github-actions bot commented Aug 8, 2025

Size Change: 0 B

Total Size: 868 kB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.45 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.45 kB
release/woocommerce-payments/assets/css/success.css 1.06 kB
release/woocommerce-payments/assets/css/success.rtl.css 1.06 kB
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.77 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.77 kB
release/woocommerce-payments/dist/blocks-checkout.js 53.8 kB
release/woocommerce-payments/dist/cart-block-rtl.css 113 B
release/woocommerce-payments/dist/cart-block.css 112 B
release/woocommerce-payments/dist/cart-block.js 16.7 kB
release/woocommerce-payments/dist/cart.js 5.27 kB
release/woocommerce-payments/dist/checkout-rtl.css 1.08 kB
release/woocommerce-payments/dist/checkout.css 1.08 kB
release/woocommerce-payments/dist/checkout.js 33.9 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 367 B
release/woocommerce-payments/dist/express-checkout.css 367 B
release/woocommerce-payments/dist/express-checkout.js 16.8 kB
release/woocommerce-payments/dist/frontend-tracks.js 833 B
release/woocommerce-payments/dist/index-rtl.css 21 kB
release/woocommerce-payments/dist/index.css 21 kB
release/woocommerce-payments/dist/index.js 150 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.82 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 18.1 kB
release/woocommerce-payments/dist/multi-currency.css 3.83 kB
release/woocommerce-payments/dist/multi-currency.js 24.6 kB
release/woocommerce-payments/dist/order-rtl.css 740 B
release/woocommerce-payments/dist/order.css 740 B
release/woocommerce-payments/dist/order.js 21.2 kB
release/woocommerce-payments/dist/plugins-page-rtl.css 484 B
release/woocommerce-payments/dist/plugins-page.css 484 B
release/woocommerce-payments/dist/plugins-page.js 2.64 kB
release/woocommerce-payments/dist/product-details-rtl.css 433 B
release/woocommerce-payments/dist/product-details.css 436 B
release/woocommerce-payments/dist/product-details.js 12.3 kB
release/woocommerce-payments/dist/settings-rtl.css 11.7 kB
release/woocommerce-payments/dist/settings.css 11.6 kB
release/woocommerce-payments/dist/settings.js 140 kB
release/woocommerce-payments/dist/subscription-edit-page.js 703 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 1.98 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 730 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 1.9 kB
release/woocommerce-payments/dist/success.js 6.03 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 235 B
release/woocommerce-payments/dist/tos.js 3 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 5.68 kB
release/woocommerce-payments/dist/woopay-express-button.js 22.8 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.3 kB
release/woocommerce-payments/dist/woopay.css 4.27 kB
release/woocommerce-payments/dist/woopay.js 70.8 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 625 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 814 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.46 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/jetpack-script-data.js 957 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.02 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/script-data.js 69 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/babel.config.js 163 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.css 2.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.js 14.3 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.rtl.css 2.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.css 10.1 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.js 29.7 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.rtl.css 10.1 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.js 280 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.rtl.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.css 625 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.js 333 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.rtl.css 626 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-users.js 417 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-users-connection.js 161 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 585 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.css 215 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.css 721 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.js 412 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-users.js 625 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.04 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 294 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 408 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.59 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 301 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 746 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 574 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 414 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 543 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.78 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.84 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 545 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.2 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.7 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 507 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 358 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 428 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 782 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.09 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.26 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 391 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.04 kB

compressed-size-action

@mgascam mgascam marked this pull request as ready for review August 8, 2025 12:10
@mgascam mgascam changed the title Dev/woopmnt 5249 e2e ensure version coverage for woocommerce and php [E2E] Ensure version coverage for WooCommerce and PHP Aug 8, 2025
@mgascam mgascam requested review from a team and adimoldovan August 8, 2025 12:12
@mgascam
Copy link
Contributor Author

mgascam commented Aug 8, 2025

Hi @adimoldovan I'd appreciate your review when you have a moment. Any feedback is welcomed, but I'm specially interested on your thoughts about the WooCommerce and PHP versions. Also, I don't have much experience working with the Github Actions so I may be doing something wierd 😅 Thanks in advance!

@mgascam mgascam requested a review from Copilot August 8, 2025 13:53
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR enhances E2E testing coverage by addressing gaps in PHP and WooCommerce version testing while introducing a dynamic version resolution strategy.

  • Adds support for PHP 8.3 and 8.4 testing alongside existing PHP 7.3 support
  • Introduces L-1 WooCommerce version testing to align with the L-1 support policy
  • Implements dynamic version resolution using a new script that fetches current versions from WordPress.org API

Reviewed Changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
.github/workflows/e2e-test.yml Updated to use dynamic matrix generation with selective PHP version testing strategy
.github/workflows/e2e-pull-request.yml Enhanced to test both L-1 and latest WC versions with matrix generation
.github/scripts/generate-wc-matrix.sh New script for dynamic WooCommerce version resolution and matrix generation
.github/scripts/README.md Documentation for the new matrix generation strategy and scripts
.github/actions/setup-php/action.yml Added support for PHP version override via E2E_PHP_VERSION environment variable
tests/e2e/env/setup.sh Removed inline beta/RC version resolution logic (moved to dedicated script)
changelog/dev-woopmnt-5249-e2e-ensure-version-coverage-for-woocommerce-and-php Added changelog entry

Copy link
Member

@rtio rtio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code lgtm

@dmvrtx
Copy link
Contributor

dmvrtx commented Aug 8, 2025

Code looks good, but I'm curious that there is a mention of WooCommerce 7.7.0 in the script that generates the matrix, but I don't see this version in the list of the E2E tests for this pull request.

Copy link
Member

@adimoldovan adimoldovan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for addressing the coverage gaps @mgascam.
I do have some suggestions on the entire approach, but this is something that could be addressed down the line in follow-ups, none of these should block this PR.

  • I'm not seeing a good reason to have more e2e-test* yml files. Everything could be consolidated in a single workflow. In the end, they set up an environment and run some tests based on some env variables.
  • I liked that you extracted part of bash logic into a script. This script could be extended though, and return a full matrix with all the required information for the test jobs to run.
  • It's hard and confusing to figure out what runs and when. I suggest having a json config for all jobs that should, either separate in .github, or in package.json. This config should be parsed and the matrix should be generated from it. Here's an example for WooCommerce monorepo using package.json, and one in Jetpack monorepo, using a single config. Both offer a good view of what should run, and an easy way to maintain the matrix.

I'll be happy to help with all of the above, please reach out if you need.

@mgascam mgascam force-pushed the dev/woopmnt-5249-e2e-ensure-version-coverage-for-woocommerce-and-php branch from 7dce5fd to 7140523 Compare August 13, 2025 09:40
@mgascam
Copy link
Contributor Author

mgascam commented Aug 13, 2025

Thanks for the review, @adimoldovan! You’ve raised some great points, and I appreciate the iterative approach you’re suggesting. With limited resources, it’s important to take a pragmatic path that delivers improvements for the most immediate needs.

I'm not seeing a good reason to have more e2e-test* yml files. Everything could be consolidated in a single workflow.
I liked that you extracted part of bash logic into a script. This script could be extended though, and return a full matrix with all the required information for the test jobs to run.
It’s hard and confusing to figure out what runs and when. I suggest having a JSON config for all jobs…

I agree on consolidating the workflows, though I’d prefer to address it in a separate follow-up. That change would also be a good opportunity to revisit how the job matrix is defined. I’ve already made some adjustments (commit) to move certain validations into the matrix generation script, but your suggestion to use a JSON config (like the package.json example you linked) would make the setup clearer and easier to maintain. I’ll keep the current script for now and create a Linear issue to track the refactor.

I also looked into the Playwright retries mentioned in this comment pcreKM-3yi-p2#comment-4534. I initially refactored the setup to use the --last-failed flag (commit), which simplified retries but introduced some instability: fixing certain failing tests would lead to new failures elsewhere, and in some cases, tests that had just been fixed started failing again. Since we plan to migrate to QIT, and the issues appear to be related to the current test environment, it seems more pragmatic to revisit the retry approach once we’re running on QIT.

@mgascam mgascam force-pushed the dev/woopmnt-5249-e2e-ensure-version-coverage-for-woocommerce-and-php branch from c2bacae to 07164d3 Compare August 13, 2025 16:44
@htdat
Copy link
Member

htdat commented Aug 14, 2025

I initially refactored the setup to use the --last-failed flag (commit).

Also commented in pcreKM-3yi-p2#comment-4535 to expand why we should keep the current manual inspection of failed test files, and rerun the failed test files.

Additionally, I think we should still remove this playwright config based on the convo at pcreKM-3yi-p2#comment-4534

retries: process.env.CI ? 2 : 0,

@mgascam
Copy link
Contributor Author

mgascam commented Aug 14, 2025

Additionally, I think we should still remove this playwright config based on the convo

Thanks @htdat, I removed the playwright retries on c7374d7.

About retries, I noticed an issue with the current retry mechanism. It is supposed to run only the failed test files, but turns out the npm run test:e2e-ci does not accept arguments. So it is running the whole suite. I attempted to fix it, but parsing the JSON with the results was a bit tricky.

In addition to that, I noticed the E2E tests are more unstable in this branch. I'd like to find a solution before going ahead with these changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants