Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update phpcompatibility to develop version to get sniffs for PHP 8 #9697

Merged
merged 7 commits into from
Nov 26, 2024

Conversation

alopezari
Copy link
Contributor

@alopezari alopezari commented Nov 11, 2024

Closes 370-gh-Automattic/woocommerce-payments-meta

Changes proposed in this Pull Request

We use a PHPCS extension - PHPCompatibility - to check the compatibility of our plugin with multiple PHP versions.

We were using the latest stable version 9.3.5. However, this version was released in 2019 and it doesn't cover rules for PHP 8.

This PR adds the following changes:

  • Switch to the dev-develop version of PHPCompatibility to include sniffs for all PHP 8 versions, including new sniffs for PHP 8.4 - yet to be released.
  • This dev-develop version was tagged as fake 9.3.5 to keep compatibility with other dependencies.
  • PHP versions to be checked in the standard phpcs.xml.dist config file are 7.3-7.4. This is because our code is fully compatible with these versions but there are some warnings and errors for PHP 8, which would break our pipelines since phpcs.xml.dist rules are required for PRs to be merged.
  • There is another PHP Compatibility workflow that was updated to cover from PHP 8.0 to 8.4 - latest. This one is not required, so if it fails, it won't block pipelines.

This way, we will be able to spot potential incompatibilities with PHP 8.4 before this PHP version is out.

Note

A follow up task will be created to fix the PHP 8 warnings and errors.

Testing instructions

  • Apply the changes from this branch.
  • Run npm run lint:php -- --no-cache and check that no errors appear.
  • Run ./vendor/bin/phpcs --standard=phpcs-compat.xml.dist $(git ls-files | grep .php$) and check that multiple errors and warnings appear, most of all of them related to PHP 8 incompatibilities (you can see in the log the PHP version each error/warning is related to).
  • Check that all checks pass on this PR except PR Compatibility, that should fail due to PHP 8 errors and warnings.

  • 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

… as the latest stable one only covers up to PHP 7.4.
@alopezari alopezari added the focus: devops Release processes, monitoring, automations, dev tools, CI/CD pipeline label Nov 11, 2024
@alopezari alopezari self-assigned this Nov 11, 2024
@botwoo
Copy link
Collaborator

botwoo commented Nov 11, 2024

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 9697 or branch name update/phpcompatibility-latest 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: 953bc3c
  • Build time: 2024-11-26 11:13:46 UTC

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

Copy link
Contributor

github-actions bot commented Nov 11, 2024

Size Change: 0 B

Total Size: 1.34 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.37 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.37 kB
release/woocommerce-payments/assets/css/success.css 182 B
release/woocommerce-payments/assets/css/success.rtl.css 184 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.66 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.66 kB
release/woocommerce-payments/dist/blocks-checkout.js 54.3 kB
release/woocommerce-payments/dist/cart-block.js 16.8 kB
release/woocommerce-payments/dist/cart.js 5.73 kB
release/woocommerce-payments/dist/checkout-rtl.css 939 B
release/woocommerce-payments/dist/checkout.css 939 B
release/woocommerce-payments/dist/checkout.js 33 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 229 B
release/woocommerce-payments/dist/express-checkout.css 229 B
release/woocommerce-payments/dist/express-checkout.js 14.9 kB
release/woocommerce-payments/dist/frontend-tracks.js 854 B
release/woocommerce-payments/dist/index-rtl.css 52.6 kB
release/woocommerce-payments/dist/index.css 52.5 kB
release/woocommerce-payments/dist/index.js 302 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 4.46 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.6 kB
release/woocommerce-payments/dist/multi-currency.css 4.46 kB
release/woocommerce-payments/dist/multi-currency.js 57.3 kB
release/woocommerce-payments/dist/order-rtl.css 730 B
release/woocommerce-payments/dist/order.css 730 B
release/woocommerce-payments/dist/order.js 42 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.32 kB
release/woocommerce-payments/dist/payment-gateways.css 1.32 kB
release/woocommerce-payments/dist/payment-gateways.js 38.4 kB
release/woocommerce-payments/dist/plugins-page-rtl.css 386 B
release/woocommerce-payments/dist/plugins-page.css 386 B
release/woocommerce-payments/dist/plugins-page.js 20.1 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.1 kB
release/woocommerce-payments/dist/settings-rtl.css 11.6 kB
release/woocommerce-payments/dist/settings.css 11.5 kB
release/woocommerce-payments/dist/settings.js 224 kB
release/woocommerce-payments/dist/subscription-edit-page.js 703 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.2 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 19.3 kB
release/woocommerce-payments/dist/tokenized-express-checkout-rtl.css 229 B
release/woocommerce-payments/dist/tokenized-express-checkout.css 229 B
release/woocommerce-payments/dist/tokenized-express-checkout.js 16.1 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 235 B
release/woocommerce-payments/dist/tos.js 21.8 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 6.13 kB
release/woocommerce-payments/dist/woopay-express-button.js 24.5 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.52 kB
release/woocommerce-payments/dist/woopay.css 4.49 kB
release/woocommerce-payments/dist/woopay.js 71.6 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 767 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/react-jsx-runtime.js 553 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.45 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.js 14.2 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.rtl.css 2.45 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/tracks-ajax.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 584 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 621 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

Copy link
Contributor

@achyuthajoy achyuthajoy left a comment

Choose a reason for hiding this comment

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

@alopezari The current changes in this PR looks good.

However, looking at the PHP compatibility workflow, we're using a different config file for compatibility tests - https://github.com/Automattic/woocommerce-payments/blob/develop/phpcs-compat.xml.dist

You'll need to update the above config to test PHP versions 7.3 to 8.4.

Also, it would be great to have an npm script for running compatibility tests locally. Can you add that as well?

Copy link
Contributor

@achyuthajoy achyuthajoy left a comment

Choose a reason for hiding this comment

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

@alopezari Looking at the compatibility test result of this PR, I noticed this error:

The function str_starts_with() is not present in PHP version 7.4 or earlier

I don't think it's an actual issue because our code works as expected on PHP 7.3 and above. If this was an actual issue, we would've received fatal errors. May be we're using some polyfills. Can you look into this as well?

@alopezari
Copy link
Contributor Author

Thanks for the review @achyuthajoy!

However, looking at the PHP compatibility workflow, we're using a different config file for compatibility tests - https://github.com/Automattic/woocommerce-payments/blob/develop/phpcs-compat.xml.dist
You'll need to update the above config to test PHP versions 7.3 to 8.4.

Yes! I'm aware of that. I left it as it is because it is 7.3- covers between 7.3 until the latest PHP version we have sniffs for. Right now it's 8.4, but once PHPCompatibility is updated with sniffs for PHP 8.5, the current configuration will also include these ones. I think this is the behaviour we want to achieve, that's why I didn't update it.

Also, it would be great to have an npm script for running compatibility tests locally. Can you add that as well?

Sure thing!

I don't think it's an actual issue because our code works as expected on PHP 7.3 and above. If this was an actual issue, we would've received fatal errors. May be we're using some polyfills. Can you look into this as well?

Interesting, will check it!

@alopezari
Copy link
Contributor Author

alopezari commented Nov 26, 2024

Also, it would be great to have an npm script for running compatibility tests locally. Can you add that as well?

Added in e6f4ccb!

The function str_starts_with() is not present in PHP version 7.4 or earlier

Okay, this error was found only on jetpack code. Our current php-compat.xml.dist excludes the vendor path to run checks only on our code and not on dependencies. But then in the PHP Compatibility workflow we run the script phpcs-compat.sh that installs prod dependencies in a vendor-dir path. The errors related to PHP 7.4 was found only on code from this vendor-dir path.

It makes sense to me to focus our tests and checks on the code we build, not dependencies, so - in addition to vendor - I've added another exclusion for the vendor-dir folder in phpcs-compat.xml.dist. This was also done in e6f4ccb.

@achyuthajoy achyuthajoy self-requested a review November 26, 2024 07:58
Copy link
Contributor

@achyuthajoy achyuthajoy left a comment

Choose a reason for hiding this comment

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

LGTM 🚢

@alopezari alopezari requested a review from a team as a code owner November 26, 2024 11:10
@alopezari alopezari added this pull request to the merge queue Nov 26, 2024
Merged via the queue into develop with commit c0c4c4f Nov 26, 2024
24 checks passed
@alopezari alopezari deleted the update/phpcompatibility-latest branch November 26, 2024 11:51
jaclync added a commit that referenced this pull request Nov 27, 2024
* develop:
  Wait for Stripe js to load before using it (#9770)
  Remove redundant stripe payment elements mount for pay for order (#9813)
  Enforce proper return types for methods get_order_from_event_body (#9761)
  Update phpcompatibility to develop version to get sniffs for PHP 8 (#9697)
  Enable ECE Tracks Events when WooPay is disabled (#9793)
  chore: rename PRB constants to ECE (#9768)
  Amend changelog entries for release 8.5.1
  fix: remove 'test mode' badge from shortcode checkout (#9800)
  Update version and add changelog entries for release 8.5.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
focus: devops Release processes, monitoring, automations, dev tools, CI/CD pipeline
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants