From a3bd11826a220dfe77ca2e867f8fcba91a9eb16e Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Wed, 28 Oct 2020 19:01:19 +0000 Subject: [PATCH] Build/Test Tools: Allow the desired version of PHPUnit to be passed to the local Docker environment. This change introduces the `LOCAL_PHPUNIT` environment variable that allows the desired version of PHPUnit to be specified when running the PHP tests within the local Docker environment. Because support for newer versions of PHPUnit is not backported, some versions of PHP need the ability to run multiple versions of PHPUnit for different branches. This adds the flexibility needed to use the Docker environment within those older branches to run the PHP tests. Props johnbillion. Fixes #50042. git-svn-id: https://develop.svn.wordpress.org/trunk@49358 602fd350-edb4-49c9-b593-d223f7449a82 --- .env | 28 ++++++++++++++++++++++++++-- docker-compose.yml | 2 +- package-lock.json | 22 ++++++++++++++-------- package.json | 2 +- tools/local-env/scripts/docker.js | 6 ++++-- tools/local-env/scripts/install.js | 5 +++-- tools/local-env/scripts/start.js | 5 +++-- 7 files changed, 52 insertions(+), 18 deletions(-) diff --git a/.env b/.env index f6c05b695b..955eecd127 100644 --- a/.env +++ b/.env @@ -3,6 +3,10 @@ # # All of these options can be overridden by setting them as environment variables before starting # the environment. You will need to restart your environment when changing any of these. +# +# Below, the following substitutions can be made: +# - '{version}': any major.minor PHP version from 5.2 onwards. +# - '{phpunit_version}': any major PHPUnit version starting with 4. ## # The site will be available at http://localhost:LOCAL_PORT @@ -11,10 +15,30 @@ LOCAL_PORT=8889 # Where to run WordPress from. Valid options are 'src' and 'build'. LOCAL_DIR=src -# The PHP version to use. Valid options are 'latest', and '{version}-fpm', where '{version}' is any -# x.y PHP version from 5.2 onwards. +# The PHP version to use. Valid options are 'latest', and '{version}-fpm'. LOCAL_PHP=latest +## +# The PHPUnit version to use when running tests. +# +# Support for new PHPUnit versions is not backported to past versions, so some old WordPress branches require an older +# version to run tests. +# +# Valid versions are: +# - 'latest' for the highest version of PHPUnit supported on the highest version of PHP supported. +# - '{version}-fpm' for the highest version of PHPUnit supported on the specified version of PHP. +# - '{phpunit_version}-php-{version}-fpm' for a specific version of PHPUnit on the specified version of PHP. This format +# is only available for PHP versions 5.6 and higher. +# +# For the full list of available options, see https://hub.docker.com/r/wordpressdevelop/phpunit/tags. +# +# For full documentation on PHPUnit compatibility and WordPress versions, see +# https://make.wordpress.org/core/handbook/references/phpunit-compatibility-and-wordpress-versions/. +# +# This defaults to the value assigned to the value of LOCAL_PHP. +## +LOCAL_PHPUNIT=${LOCAL_PHP} + # Whether or not to enable XDebug. LOCAL_PHP_XDEBUG=false diff --git a/docker-compose.yml b/docker-compose.yml index eddc4a5670..56c994337f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -96,7 +96,7 @@ services: # The PHPUnit container. ## phpunit: - image: wordpressdevelop/phpunit:${LOCAL_PHP-latest} + image: wordpressdevelop/phpunit:${LOCAL_PHPUNIT-latest} networks: - wpdevnet diff --git a/package-lock.json b/package-lock.json index 00ac47685a..f6d60fd964 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9135,9 +9135,9 @@ } }, "dotenv": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz", - "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", "dev": true }, "dotenv-expand": { @@ -25201,6 +25201,12 @@ "tar-stream": "^2.0.0" }, "dependencies": { + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, "bl": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", @@ -25213,13 +25219,13 @@ } }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.0.tgz", + "integrity": "sha512-cd+5r1VLBwUqTrmnzW+D7ABkJUM6mr7uv1dv+6jRw4Rcl7tFIFHDqHPL98LhpGFn3dbAt3gtLxtrWp4m1kFrqg==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "readable-stream": { diff --git a/package.json b/package.json index 41eb962fbb..651d71b9e5 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "check-node-version": "4.0.1", "copy-webpack-plugin": "^5.1.1", "cssnano": "4.1.10", - "dotenv": "8.1.0", + "dotenv": "8.2.0", "dotenv-expand": "5.1.0", "grunt": "~1.1.0", "grunt-banner": "^0.6.0", diff --git a/tools/local-env/scripts/docker.js b/tools/local-env/scripts/docker.js index 99eabbf620..60cb305b7f 100644 --- a/tools/local-env/scripts/docker.js +++ b/tools/local-env/scripts/docker.js @@ -1,6 +1,8 @@ -const dotenv = require( 'dotenv' ); +const dotenv = require( 'dotenv' ); +const dotenvExpand = require( 'dotenv-expand' ); const { execSync } = require( 'child_process' ); -dotenv.config(); + +dotenvExpand( dotenv.config() ); // Execute any docker-compose command passed to this script. execSync( 'docker-compose ' + process.argv.slice( 2 ).join( ' ' ), { stdio: 'inherit' } ); diff --git a/tools/local-env/scripts/install.js b/tools/local-env/scripts/install.js index a0a7914ca6..32371ee190 100644 --- a/tools/local-env/scripts/install.js +++ b/tools/local-env/scripts/install.js @@ -1,9 +1,10 @@ -const dotenv = require( 'dotenv' ); +const dotenv = require( 'dotenv' ); +const dotenvExpand = require( 'dotenv-expand' ); const wait_on = require( 'wait-on' ); const { execSync } = require( 'child_process' ); const { renameSync, readFileSync, writeFileSync } = require( 'fs' ); -dotenv.config(); +dotenvExpand( dotenv.config() ); // Create wp-config.php. wp_cli( 'config create --dbname=wordpress_develop --dbuser=root --dbpass=password --dbhost=mysql --path=/var/www/src --force' ); diff --git a/tools/local-env/scripts/start.js b/tools/local-env/scripts/start.js index ed065b021c..cf18435450 100644 --- a/tools/local-env/scripts/start.js +++ b/tools/local-env/scripts/start.js @@ -1,7 +1,8 @@ -const dotenv = require( 'dotenv' ); +const dotenv = require( 'dotenv' ); +const dotenvExpand = require( 'dotenv-expand' ); const { execSync } = require( 'child_process' ); -dotenv.config(); +dotenvExpand( dotenv.config() ); // Start the local-env containers. execSync( 'docker-compose up -d wordpress-develop', { stdio: 'inherit' } );