diff --git a/.circleci/config.yml b/.circleci/config.yml index ab7dece..8397ee6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,5 @@ -version: 2 +version: 2.1 workflows: - version: 2 main: jobs: - lint @@ -16,9 +15,48 @@ workflows: filters: branches: only: - - master + - release jobs: - test-behat + +commands: + install-extras: + steps: + - run: + name: "Install Extra Dependencies" + command: | + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B + sudo apt-get update + sudo apt-get install subversion + sudo apt-get install -y libmagickwand-dev --no-install-recommends + yes '' | sudo pecl install imagick || true + sudo docker-php-ext-enable imagick + sudo docker-php-ext-install mysqli + install-mariadb-10-5: + steps: + - run: sudo apt-get install mariadb-client-10.5 + install-mariadb-10-6: + steps: + - run: sudo apt-get install mariadb-client-10.6 + install-redis-extras: + steps: + - run: + name: "Install Redis Extras" + command: | + yes '' | sudo pecl install redis || true + sudo docker-php-ext-enable redis + run-phpunit-tests: + steps: + - run: + name: "Run Tests" + command: | + bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest + composer phpunit + WP_MULTISITE=1 composer phpunit + WP_REDIS_USE_CACHE_GROUPS=1 composer phpunit + rm -rf $WP_TESTS_DIR $WP_CORE_DIR + bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true + composer phpunit jobs: lint: working_directory: ~/pantheon-systems/wp-redis @@ -38,6 +76,7 @@ jobs: name: "Run PHP Lint" command: | composer phpcs + test-behat: working_directory: ~/pantheon-systems/wp-redis parallelism: 1 @@ -102,27 +141,9 @@ jobs: key: test-phpunit-74-dependencies-{{ checksum "composer.json" }} paths: - vendor - - run: - name: "Install Extras" - command: | - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B - sudo apt-get update - sudo apt-get install subversion - sudo apt-get install -y libmagickwand-dev --no-install-recommends - yes '' | sudo pecl install imagick || true - sudo docker-php-ext-enable imagick - sudo docker-php-ext-install mysqli - sudo apt-get install mariadb-client-10.5 - - run: - name: "Run Tests" - command: | - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest - composer phpunit - WP_MULTISITE=1 composer phpunit - WP_REDIS_USE_CACHE_GROUPS=1 composer phpunit - rm -rf $WP_TESTS_DIR $WP_CORE_DIR - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true - composer phpunit + - install-extras + - install-mariadb-10-5 + - run-phpunit-tests test-phpunit-redis-enabled-74: working_directory: ~/pantheon-systems/wp-redis docker: @@ -143,29 +164,10 @@ jobs: key: test-phpunit-74-dependencies-{{ checksum "composer.json" }} paths: - vendor - - run: - name: "Install Extras" - command: | - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B - sudo apt-get update - sudo apt-get install subversion - sudo apt-get install -y libmagickwand-dev --no-install-recommends - yes '' | sudo pecl install imagick || true - sudo docker-php-ext-enable imagick - sudo docker-php-ext-install mysqli - sudo apt-get install mariadb-client-10.5 - yes '' | sudo pecl install redis || true - sudo docker-php-ext-enable redis - - run: - name: "Run Tests" - command: | - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest - composer phpunit - WP_MULTISITE=1 composer phpunit - WP_REDIS_USE_CACHE_GROUPS=1 composer phpunit - rm -rf $WP_TESTS_DIR $WP_CORE_DIR - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true - composer phpunit + - install-extras + - install-mariadb-10-5 + - install-redis-extras + - run-phpunit-tests test-phpunit-redis-disabled-82: working_directory: ~/pantheon-systems/wp-redis docker: @@ -184,27 +186,9 @@ jobs: key: test-phpunit-82-dependencies-{{ checksum "composer.json" }} paths: - vendor - - run: - name: "Install Extras" - command: | - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B - sudo apt-get update - sudo apt-get install subversion - sudo apt-get install -y libmagickwand-dev --no-install-recommends - yes '' | sudo pecl install imagick || true - sudo docker-php-ext-enable imagick - sudo docker-php-ext-install mysqli - sudo apt-get install mariadb-client-10.6 - - run: - name: "Run Tests" - command: | - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest - composer phpunit - WP_MULTISITE=1 composer phpunit - WP_REDIS_USE_CACHE_GROUPS=1 composer phpunit - rm -rf $WP_TESTS_DIR $WP_CORE_DIR - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true - composer phpunit + - install-extras + - install-mariadb-10-6 + - run-phpunit-tests test-phpunit-redis-enabled-82: working_directory: ~/pantheon-systems/wp-redis docker: @@ -224,26 +208,7 @@ jobs: key: test-phpunit-82-dependencies-{{ checksum "composer.json" }} paths: - vendor - - run: - name: "Install Extras" - command: | - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B - sudo apt-get update - sudo apt-get install subversion - sudo apt-get install -y libmagickwand-dev --no-install-recommends - yes '' | sudo pecl install imagick || true - sudo docker-php-ext-enable imagick - sudo docker-php-ext-install mysqli - sudo apt-get install mariadb-client-10.6 - yes '' | sudo pecl install redis || true - sudo docker-php-ext-enable redis - - run: - name: "Run Tests" - command: | - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest - composer phpunit - WP_MULTISITE=1 composer phpunit - WP_REDIS_USE_CACHE_GROUPS=1 composer phpunit - rm -rf $WP_TESTS_DIR $WP_CORE_DIR - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true - composer phpunit + - install-extras + - install-mariadb-10-6 + - install-redis-extras + - run-phpunit-tests diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 92041ae..4dc459f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,7 +6,7 @@ updates: interval: weekly timezone: America/Los_Angeles day: tuesday - target-branch: "develop" + target-branch: "default" open-pull-requests-limit: 99 ignore: - dependency-name: phpunit/phpunit @@ -16,12 +16,4 @@ updates: - dependency-name: phpunit/phpunit versions: - ">= 9.a" - - "< 10" -- package-ecosystem: npm - directory: "/" - schedule: - interval: weekly - timezone: America/Los_Angeles - day: tuesday - target-branch: "develop" - open-pull-requests-limit: 99 + - "< 10" \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b37b90f..9383386 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,13 +8,13 @@ Pull requests and issues are welcome! ## Workflow -Development and releases are structured around two branches, `develop` and `master`. The `develop` branch is the default branch for the repository, and is the source and destination for feature branches. +Development and releases are structured around two branches, `default` and `release`. The `default` branch is the default branch for the repository, and is the source and destination for feature branches. -We prefer to squash commits (i.e. avoid merge PRs) from a feature branch into `develop` when merging, and to include the PR # in the commit message. PRs to `develop` should also include any relevent updates to the changelog in readme.txt. For example, if a feature constitutes a minor or major version bump, that version update should be discussed and made as part of approving and merging the feature into `develop`. +We prefer to squash commits (i.e. avoid merge PRs) from a feature branch into `default` when merging, and to include the PR # in the commit message. PRs to `default` should also include any relevent updates to the changelog in readme.txt. For example, if a feature constitutes a minor or major version bump, that version update should be discussed and made as part of approving and merging the feature into `default`. -`develop` should be stable and usable, though possibly a few commits ahead of the public release on wp.org. +`default` should be stable and usable, though possibly a few commits ahead of the public release on wp.org. -The `master` branch matches the latest stable release deployed to [wp.org](wp.org). +The `release` branch matches the latest stable release deployed to [wp.org](wp.org). ## Testing @@ -27,19 +27,21 @@ Both of these test suites can be run locally, with a varying amount of setup. PHPUnit requires the [WordPress PHPUnit test suite](https://make.wordpress.org/core/handbook/testing/automated-testing/phpunit/), and access to a database with name `wordpress_test`. If you haven't already configured the test suite locally, you can run `bash bin/install-wp-tests.sh wordpress_test root '' localhost`. You'll also need to enable Redis and the PHPRedis extension in order to run the test suite against Redis. -Behat requires a Pantheon site with Redis enabled. Once you've created the site, you'll need [install Terminus](https://github.com/pantheon-systems/terminus#installation), and set the `TERMINUS_TOKEN`, `TERMINUS_SITE`, and `TERMINUS_ENV` environment variables. Then, you can run `./bin/behat-prepare.sh` to prepare the site for the test suite. +The behat tests require a Pantheon site with Redis enabled. Once you've created the site, you'll need [install Terminus](https://github.com/pantheon-systems/terminus#installation), and set the `TERMINUS_TOKEN`, `TERMINUS_SITE`, and `TERMINUS_ENV` environment variables. Then, you can run `./bin/behat-prepare.sh` to prepare the site for the test suite. ## Release Process -1. From `develop`, checkout a new branch `release_X.Y.Z`. +1. From `default`, checkout a new branch `release_X.Y.Z`. 1. Make a release commit: * Drop the `-dev` from the version number in `README.md`, `readme.txt`, and `wp-redis.php`. * Update the "Latest" heading in the changelog to the new version number with the date * Commit these changes with the message `Release X.Y.Z` * Push the release branch up. -1. Open a Pull Request to merge `release_X.Y.Z` into `master`. Your PR should consist of all commits to `develop` since the last release, and one commit to update the version number. The PR name should also be `Release X.Y.Z`. -1. After all tests pass and you have received approval from a [CODEOWNER](./CODEOWNERS), merge the PR into `master`. "Rebase and merge" is preferred in this case. _Never_ squash to `master`. -1. Pull `master` locally, create a new tag (based on version number from previous steps), and push up. The tag should _only_ be the version number. It _should not_ be prefixed `v` (i.e. `X.Y.Z`, not `vX.Y.X`). +1. Open a Pull Request to merge `release_X.Y.Z` into `release`. Your PR should consist of all commits to `default` since the last release, and one commit to update the version number. The PR name should also be `Release X.Y.Z`. +1. After all tests pass and you have received approval from a [CODEOWNER](./CODEOWNERS), merge the PR into `release`. "Rebase and merge" is preferred in this case. _Never_ squash to `release`. +1. Pull `release` locally, create a new tag (based on version number from previous steps), and push up. The tag should _only_ be the version number. It _should not_ be prefixed `v` (i.e. `X.Y.Z`, not `vX.Y.X`). + * `git tag X.Y.Z` + * `git push --tags` 1. Confirm that the necessary assets are present in the newly created tag, and test on a WP install if desired. 1. Create a [new release](https://github.com/pantheon-systems/wp-redis/releases/new) using the tag created in the previous steps, naming the release with the new version number, and targeting the tag created in the previous step. Paste the release changelog from the `Changelog` section of [the readme](readme.txt) into the body of the release, including the links to the closed issues if applicable. 1. Wait for the [_Release wp-redis plugin to wp.org_ action](https://github.com/pantheon-systems/wp-redis/actions/workflows/wordpress-plugin-deploy.yml) to finish deploying to the WordPress.org plugin repository. If all goes well, users with SVN commit access for that plugin will receive an emailed diff of changes. diff --git a/README.md b/README.md index 944c176..4fd8a53 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ **Tags:** cache, plugin, redis **Requires at least:** 3.0.1 **Tested up to:** 6.2 -**Stable tag:** 1.4.1 +**Stable tag:** 1.4.2 **License:** GPLv2 or later **License URI:** http://www.gnu.org/licenses/gpl-2.0.html @@ -13,7 +13,7 @@ Back your WP Object Cache with Redis, a high-performance in-memory storage backe ## Description ## -[![CircleCI](https://circleci.com/gh/pantheon-systems/wp-redis/tree/master.svg?style=svg)](https://circleci.com/gh/pantheon-systems/wp-redis/tree/master) +[![CircleCI](https://circleci.com/gh/pantheon-systems/wp-redis/tree/release.svg?style=svg)](https://circleci.com/gh/pantheon-systems/wp-redis/tree/release) For sites concerned with high traffic, speed for logged-in users, or dynamic pageloads, a high-speed and persistent object cache is a must. You also need something that can scale across multiple instances of your application, so using local file caches or APC are out. @@ -78,7 +78,7 @@ Use `wp help redis ` to learn more about each command. ## Contributing ## -See [CONTRIBUTING.md](https://github.com/pantheon-systems/wp-redis/blob/master/CONTRIBUTING.md) for information on contributing. +See [CONTRIBUTING.md](https://github.com/pantheon-systems/wp-redis/blob/default/CONTRIBUTING.md) for information on contributing. ## Frequently Asked Questions ## @@ -104,6 +104,9 @@ There's a known issue with WordPress `alloptions` cache design. Specifically, a ## Changelog ## +### 1.4.2 (May 15, 2023) ### +* Bug fix: Removes exception loop caused by `esc_html` in `_exception_handler()` [[421](https://github.com/pantheon-systems/wp-redis/pull/421)] + ### 1.4.1 (May 11, 2023) ### * Bug fix: `wp_cache_flush_runtime` should only clear the local cache [[413](https://github.com/pantheon-systems/wp-redis/pull/413)] diff --git a/object-cache.php b/object-cache.php index c607bd1..05c6526 100644 --- a/object-cache.php +++ b/object-cache.php @@ -1470,7 +1470,9 @@ protected function _exception_handler( $exception ) { try { $this->last_triggered_error = 'WP Redis: ' . $exception->getMessage(); // Be friendly to developers debugging production servers by triggering an error. - trigger_error( esc_html( $this->last_triggered_error ), E_USER_WARNING ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error + + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error,WordPress.Security.EscapeOutput.OutputNotEscaped + trigger_error( $this->last_triggered_error, E_USER_WARNING ); } catch ( PHPUnit_Framework_Error_Warning $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch // PHPUnit throws an Exception when `trigger_error()` is called. To ensure our tests (which expect Exceptions to be caught) continue to run, we catch the PHPUnit exception and inspect the RedisException message. } diff --git a/readme.txt b/readme.txt index 8f92257..b71c011 100644 --- a/readme.txt +++ b/readme.txt @@ -3,7 +3,7 @@ Contributors: getpantheon, danielbachhuber, mboynes, Outlandish Josh, jspellman, Tags: cache, plugin, redis Requires at least: 3.0.1 Tested up to: 6.2 -Stable tag: 1.4.1 +Stable tag: 1.4.2 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -102,6 +102,9 @@ There's a known issue with WordPress `alloptions` cache design. Specifically, a == Changelog == += 1.4.2 (May 15, 2023) = +* Bug fix: Removes exception loop caused by `esc_html` in `_exception_handler()` [[421](https://github.com/pantheon-systems/wp-redis/pull/421)] + = 1.4.1 (May 11, 2023) = * Bug fix: `wp_cache_flush_runtime` should only clear the local cache [[413](https://github.com/pantheon-systems/wp-redis/pull/413)] diff --git a/wp-redis.php b/wp-redis.php index 78df819..58f3d1c 100644 --- a/wp-redis.php +++ b/wp-redis.php @@ -3,7 +3,7 @@ * Plugin Name: WP Redis * Plugin URI: http://github.com/pantheon-systems/wp-redis/ * Description: WordPress Object Cache using Redis. Requires the PhpRedis extension (https://github.com/phpredis/phpredis). - * Version: 1.4.1 + * Version: 1.4.2 * Author: Pantheon, Josh Koenig, Matthew Boynes, Daniel Bachhuber, Alley Interactive * Author URI: https://pantheon.io/ */