From 8fe428be3d25949056f5c57ff48c424af0f98817 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 10 Jun 2024 18:18:27 -0400 Subject: [PATCH 01/10] Make 5.6 workflows reusable. --- .cache/.gitkeep | 0 .github/workflows/coding-standards.yml | 108 ++-------- .github/workflows/javascript-tests.yml | 52 ++--- .github/workflows/php-compatibility.yml | 62 ++---- .github/workflows/phpunit-tests.yml | 185 +++--------------- ...{test-npm.yml => test-build-processes.yml} | 0 .gitignore | 1 + docker-compose.yml | 93 ++++++--- phpcompat.xml.dist | 2 +- phpcs.xml.dist | 2 +- tools/local-env/scripts/docker.js | 4 +- tools/local-env/scripts/install.js | 4 +- tools/local-env/scripts/start.js | 5 +- 13 files changed, 152 insertions(+), 366 deletions(-) create mode 100644 .cache/.gitkeep rename .github/workflows/{test-npm.yml => test-build-processes.yml} (100%) diff --git a/.cache/.gitkeep b/.cache/.gitkeep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/.github/workflows/coding-standards.yml b/.github/workflows/coding-standards.yml index 36b0135d41e8e..9c56f359446e2 100644 --- a/.github/workflows/coding-standards.yml +++ b/.github/workflows/coding-standards.yml @@ -40,109 +40,35 @@ concurrency: group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} cancel-in-progress: true +# Disable permissions for all available scopes by default. +# Any needed permissions should be configured at the job level. +permissions: {} + jobs: # Runs PHP coding standards checks. - # - # Violations are reported inline with annotations. - # - # Performs the following steps: - # - Checks out the repository. - # - Sets up PHP. - # - Logs debug information. - # - Installs Composer dependencies (use cache if possible). - # - Make Composer packages available globally. - # - Logs PHP_CodeSniffer debug information. - # - Runs PHPCS on the full codebase with warnings suppressed. - # - Runs PHPCS on the `tests` directory without warnings suppressed. phpcs: name: PHP coding standards - runs-on: ubuntu-latest - timeout-minutes: 20 + uses: WordPress/wordpress-develop/.github/workflows/reusable-coding-standards-php.yml@trunk + permissions: + contents: read if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} - - steps: - - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - - - name: Set up PHP - uses: shivammathur/setup-php@d30ad8b1843ace22e6698ab99bbafaa747b6bd0d # v2.24.0 - with: - php-version: '7.4' - coverage: none - tools: composer, cs2pr - - - name: Log debug information - run: | - php --version - composer --version - - - name: Install Composer dependencies - uses: ramsey/composer-install@83af392bf5f031813d25e6fe4cd626cdba9a2df6 # v2.2.0 - with: - composer-options: "--no-progress --no-ansi" - - - name: Make Composer packages available globally - run: echo "${PWD}/vendor/bin" >> $GITHUB_PATH - - - name: Log PHPCS debug information - run: phpcs -i - - - name: Run PHPCS on all Core files - run: phpcs -q -n --report=checkstyle | cs2pr - - - name: Check test suite files for warnings - run: phpcs tests -q --report=checkstyle | cs2pr + with: + php-version: '7.4' # Runs the JavaScript coding standards checks. - # - # JSHint violations are not currently reported inline with annotations. - # - # Performs the following steps: - # - Checks out the repository. - # - Logs debug information about the GitHub Action runner. - # - Installs Node.js. - # - Logs updated debug information. - # _ Installs npm dependencies. - # - Run the WordPress JSHint checks. jshint: name: JavaScript coding standards - runs-on: ubuntu-latest - timeout-minutes: 20 + uses: WordPress/wordpress-develop/.github/workflows/reusable-coding-standards-javascript.yml@trunk + permissions: + contents: read if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} - env: - PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: ${{ true }} - - steps: - - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - - - name: Log debug information - run: | - npm --version - node --version - git --version - svn --version - - - name: Install Node.js - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 - with: - node-version-file: '.nvmrc' - cache: npm - - - name: Log debug information - run: | - npm --version - node --version - - - name: Install Dependencies - run: npm ci - - - name: Run JSHint - run: npm run grunt jshint slack-notifications: name: Slack Notifications uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk + permissions: + actions: read + contents: read needs: [ phpcs, jshint ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: @@ -156,6 +82,8 @@ jobs: failed-workflow: name: Failed workflow tasks runs-on: ubuntu-latest + permissions: + actions: write needs: [ phpcs, jshint, slack-notifications ] if: | always() && @@ -169,7 +97,7 @@ jobs: steps: - name: Dispatch workflow run - uses: actions/github-script@98814c53be79b1d30f795b907e553d8679345975 # v6.4.0 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: retries: 2 retry-exempt-status-codes: 418 diff --git a/.github/workflows/javascript-tests.yml b/.github/workflows/javascript-tests.yml index cde2a884ab843..76040d9f511ed 100644 --- a/.github/workflows/javascript-tests.yml +++ b/.github/workflows/javascript-tests.yml @@ -38,53 +38,25 @@ concurrency: group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} cancel-in-progress: true +# Disable permissions for all available scopes by default. +# Any needed permissions should be configured at the job level. +permissions: {} + jobs: # Runs the QUnit tests for WordPress. - # - # Performs the following steps: - # - Checks out the repository. - # - Logs debug information about the GitHub Action runner. - # - Installs Node.js. - # - Logs updated debug information. - # _ Installs npm dependencies. - # - Run the WordPress QUnit tests. test-js: name: QUnit Tests - runs-on: ubuntu-latest - timeout-minutes: 20 + uses: WordPress/wordpress-develop/.github/workflows/reusable-javascript-tests.yml@trunk + permissions: + contents: read if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} - steps: - - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - - - name: Log debug information - run: | - npm --version - node --version - git --version - svn --version - - - name: Set up Node.js - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 - with: - node-version-file: '.nvmrc' - cache: npm - - - name: Log debug information - run: | - npm --version - node --version - - - name: Install Dependencies - run: npm ci - - - name: Run QUnit tests - run: npm run grunt qunit:compiled - slack-notifications: name: Slack Notifications uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk + permissions: + actions: read + contents: read needs: [ test-js ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: @@ -98,6 +70,8 @@ jobs: failed-workflow: name: Failed workflow tasks runs-on: ubuntu-latest + permissions: + actions: write needs: [ test-js, slack-notifications ] if: | always() && @@ -110,7 +84,7 @@ jobs: steps: - name: Dispatch workflow run - uses: actions/github-script@98814c53be79b1d30f795b907e553d8679345975 # v6.4.0 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: retries: 2 retry-exempt-status-codes: 418 diff --git a/.github/workflows/php-compatibility.yml b/.github/workflows/php-compatibility.yml index 792c14d7251a6..6f9354118a4ef 100644 --- a/.github/workflows/php-compatibility.yml +++ b/.github/workflows/php-compatibility.yml @@ -22,7 +22,7 @@ on: - '**.php' # These files configure Composer. Changes could affect the outcome. - 'composer.*' - # This file configures PHP Compatibility scanning. Changes could affect the outcome. + # This file configures PHP compatibility scanning. Changes could affect the outcome. - 'phpcompat.xml.dist' # Changes to workflow files should always verify all workflows are successful. - '.github/workflows/*.yml' @@ -35,59 +35,27 @@ concurrency: group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} cancel-in-progress: true -jobs: +# Disable permissions for all available scopes by default. +# Any needed permissions should be configured at the job level. +permissions: {} +jobs: # Runs PHP compatibility testing. - # - # Violations are reported inline with annotations. - # - # Performs the following steps: - # - Checks out the repository. - # - Sets up PHP. - # - Logs debug information about the GitHub Action runner. - # - Installs Composer dependencies (use cache if possible). - # - Make Composer packages available globally. - # - Logs PHP_CodeSniffer debug information. - # - Runs the PHP compatibility tests. php-compatibility: name: Check PHP compatibility - runs-on: ubuntu-latest - timeout-minutes: 20 + uses: WordPress/wordpress-develop/.github/workflows/reusable-php-compatibility.yml@trunk + permissions: + contents: read if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} - - steps: - - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - - - name: Set up PHP - uses: shivammathur/setup-php@d30ad8b1843ace22e6698ab99bbafaa747b6bd0d # v2.24.0 - with: - php-version: '7.4' - coverage: none - tools: composer, cs2pr - - - name: Log debug information - run: | - php --version - composer --version - - - name: Install Composer dependencies - uses: ramsey/composer-install@83af392bf5f031813d25e6fe4cd626cdba9a2df6 # v2.2.0 - with: - composer-options: "--no-progress --no-ansi" - - - name: Make Composer packages available globally - run: echo "${PWD}/vendor/bin" >> $GITHUB_PATH - - - name: Log PHPCS debug information - run: phpcs -i - - - name: Run PHP compatibility tests - run: phpcs --standard=phpcompat.xml.dist -q --report=checkstyle | cs2pr + with: + php-version: '7.4' slack-notifications: name: Slack Notifications uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk + permissions: + actions: read + contents: read needs: [ php-compatibility ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: @@ -101,6 +69,8 @@ jobs: failed-workflow: name: Failed workflow tasks runs-on: ubuntu-latest + permissions: + actions: write needs: [ php-compatibility, slack-notifications ] if: | always() && @@ -113,7 +83,7 @@ jobs: steps: - name: Dispatch workflow run - uses: actions/github-script@98814c53be79b1d30f795b907e553d8679345975 # v6.4.0 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: retries: 2 retry-exempt-status-codes: 418 diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index 65ac1be2af3bb..3d0f9a5040124 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -52,34 +52,26 @@ jobs: # - Logs debug information about what's installed within the WordPress Docker containers. # - Install WordPress within the Docker container. # - Run the PHPUnit tests. + # - Ensures version-controlled files are not modified or deleted. # - Checks out the WordPress Test reporter repository. # - Reconnect the directory to the Git repository. # - Submit the test results to the WordPress.org host test results. test-php: - name: ${{ matrix.php }}${{ matrix.multisite && ' multisite' || '' }}${{ matrix.split_slow && ' slow tests' || '' }}${{ matrix.memcached && ' with memcached' || '' }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - timeout-minutes: 20 + name: PHP ${{ matrix.php }} + uses: desrosj/wordpress-develop/.github/workflows/reusable-phpunit-tests.yml@try/5.8-make-workflows-callable + permissions: + contents: read + secrets: + inherit if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} strategy: fail-fast: false matrix: - php: [ '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0' ] os: [ ubuntu-latest ] - memcached: [ false ] - split_slow: [ false ] + php: [ '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0' ] multisite: [ false, true ] + memcached: [ false ] include: - # Additional "slow" jobs for PHP 5.6. - - php: '5.6' - os: ubuntu-latest - memcached: false - multisite: false - split_slow: true - - php: '5.6' - os: ubuntu-latest - memcached: false - multisite: true - split_slow: true # Include jobs for PHP 7.4 with memcached. - php: '7.4' os: ubuntu-latest @@ -95,152 +87,24 @@ jobs: memcached: false multisite: false report: true - env: - LOCAL_PHP: ${{ matrix.php }}-fpm - LOCAL_PHP_MEMCACHED: ${{ matrix.memcached }} - PHPUNIT_CONFIG: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }} - - steps: - - name: Configure environment variables - run: | - echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV - echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV - - - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - - - name: Install Node.js - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 - with: - node-version-file: '.nvmrc' - cache: npm - - - name: Install npm dependencies - run: npm ci - - - name: Get Composer cache directory - id: composer-cache - run: echo "composer_dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - - name: Cache Composer dependencies - uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 # v3.2.3 - env: - cache-name: cache-composer-dependencies - with: - path: ${{ steps.composer-cache.outputs.composer_dir }} - key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} - - - name: Install Composer dependencies - run: | - docker-compose run --rm php composer --version - - # The PHPUnit 7.x phar is not compatible with PHP 8 and won't be updated, - # as PHPUnit 7 is no longer supported. The Composer-installed PHPUnit should be - # used for PHP 8 testing instead. - if [ ${{ env.LOCAL_PHP }} == '8.0-fpm' ]; then - docker-compose run --rm php composer install --ignore-platform-reqs - echo "PHPUNIT_SCRIPT=php-composer" >> $GITHUB_ENV - elif [ ${{ env.LOCAL_PHP }} == '7.1-fpm' ]; then - docker-compose run --rm php composer update - git checkout -- composer.lock - elif [[ ${{ env.LOCAL_PHP }} == '5.6-fpm' || ${{ env.LOCAL_PHP }} == '7.0-fpm' ]]; then - docker-compose run --rm php composer require --dev phpunit/phpunit:"^5.7" --update-with-dependencies - git checkout -- composer.lock composer.json - else - docker-compose run --rm php composer install - fi - - - name: Docker debug information - run: | - docker -v - docker-compose -v - - - name: Start Docker environment - run: | - npm run env:start - - # The memcached server needs to start after the Docker network has been set up with `npm run env:start`. - - name: Start the Memcached server. - if: ${{ matrix.memcached }} - run: | - cp tests/phpunit/includes/object-cache.php src/wp-content/object-cache.php - docker run --name memcached --net $(basename "$PWD")_wpdevnet -d memcached - - - name: General debug information - run: | - npm --version - node --version - curl --version - git --version - svn --version - - - name: Log running Docker containers - run: docker ps -a - - - name: WordPress Docker container debug information - run: | - docker-compose run --rm mysql mysql --version - docker-compose run --rm php php --version - docker-compose run --rm php php -m - docker-compose run --rm php php -i - docker-compose run --rm php locale -a - - - name: Install WordPress - run: npm run env:install - - - name: Run slow PHPUnit tests - if: ${{ matrix.split_slow }} - run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ${{ env.SLOW_TESTS }} - - - name: Run PHPUnit tests for single site excluding slow tests - if: ${{ matrix.php < '7.0' && ! matrix.split_slow && ! matrix.multisite }} - run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-required - - - name: Run PHPUnit tests for Multisite excluding slow tests - if: ${{ matrix.php < '7.0' && ! matrix.split_slow && matrix.multisite }} - run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-excluded,oembed-headers - - - name: Run PHPUnit tests - if: ${{ matrix.php >= '7.0' }} - run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} - - - name: Run AJAX tests - if: ${{ ! matrix.split_slow && ! matrix.multisite }} - run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax - - - name: Run ms-files tests as a multisite install - if: ${{ matrix.multisite && ! matrix.split_slow }} - run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c tests/phpunit/multisite.xml --group ms-files - - - name: Run external HTTP tests - if: ${{ ! matrix.multisite && ! matrix.split_slow }} - run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c phpunit.xml.dist --group external-http - - # __fakegroup__ is excluded to force PHPUnit to ignore the settings in phpunit.xml.dist. - - name: Run (xDebug) tests - if: ${{ ! matrix.split_slow }} - run: LOCAL_PHP_XDEBUG=true npm run test:${{ env.PHPUNIT_SCRIPT }} -- -v --group xdebug --exclude-group __fakegroup__ - - - name: Checkout the WordPress Test Reporter - if: ${{ github.repository == 'WordPress/wordpress-develop' && github.ref == 'refs/heads/trunk' && matrix.report }} - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - with: - repository: 'WordPress/phpunit-test-runner' - path: 'test-runner' - - - name: Submit test results to the WordPress.org host test results - if: ${{ github.repository == 'WordPress/wordpress-develop' && github.ref == 'refs/heads/trunk' && matrix.report }} - env: - WPT_REPORT_API_KEY: "${{ secrets.WPT_REPORT_API_KEY }}" - run: docker-compose run --rm -e WPT_REPORT_API_KEY -e WPT_PREPARE_DIR=/var/www -e WPT_TEST_DIR=/var/www php php test-runner/report.php + with: + os: ${{ matrix.os }} + php: ${{ matrix.php }} + multisite: ${{ matrix.multisite }} + memcached: ${{ matrix.memcached }} + phpunit-config: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }} + report: ${{ matrix.report || false }} slack-notifications: name: Slack Notifications uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk + permissions: + actions: read + contents: read needs: [ test-php ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: - calling_status: ${{ needs.test-php.result == 'success' && 'success' || needs.test-php.result == 'cancelled' && 'cancelled' || 'failure' }} + calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }} secrets: SLACK_GHA_SUCCESS_WEBHOOK: ${{ secrets.SLACK_GHA_SUCCESS_WEBHOOK }} SLACK_GHA_CANCELLED_WEBHOOK: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }} @@ -250,19 +114,22 @@ jobs: failed-workflow: name: Failed workflow tasks runs-on: ubuntu-latest - needs: [ test-php, slack-notifications ] + permissions: + actions: write + needs: [ slack-notifications ] if: | always() && github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && github.run_attempt < 2 && ( - needs.test-php.result == 'cancelled' || needs.test-php.result == 'failure' + contains( needs.*.result, 'cancelled' ) || + contains( needs.*.result, 'failure' ) ) steps: - name: Dispatch workflow run - uses: actions/github-script@98814c53be79b1d30f795b907e553d8679345975 # v6.4.0 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: retries: 2 retry-exempt-status-codes: 418 diff --git a/.github/workflows/test-npm.yml b/.github/workflows/test-build-processes.yml similarity index 100% rename from .github/workflows/test-npm.yml rename to .github/workflows/test-build-processes.yml diff --git a/.gitignore b/.gitignore index 88215353f9723..0e5e19e825ed9 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ wp-tests-config.php /phpunit.xml /.phpcs.xml /phpcs.xml +.cache/* /tests/phpunit/data/plugins/wordpress-importer /tests/phpunit/data/.trac-ticket-cache* /tests/qunit/compiled.html diff --git a/docker-compose.yml b/docker-compose.yml index ec1e85c28be8b..66c25b20a30f9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.7' - services: ## @@ -25,7 +23,10 @@ services: command: /bin/sh -c "envsubst '$$LOCAL_DIR' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'" depends_on: - - php + php: + condition: service_started + mysql: + condition: service_healthy ## # The PHP container. @@ -37,23 +38,33 @@ services: - wpdevnet environment: - LOCAL_PHP_XDEBUG: ${LOCAL_PHP_XDEBUG-false} - LOCAL_PHP_MEMCACHED: ${LOCAL_PHP_MEMCACHED-false} - PHP_FPM_UID: ${PHP_FPM_UID-1000} - PHP_FPM_GID: ${PHP_FPM_GID-1000} + - LOCAL_PHP_XDEBUG=${LOCAL_PHP_XDEBUG-false} + - XDEBUG_MODE=${LOCAL_PHP_XDEBUG_MODE-develop,debug} + - LOCAL_PHP_MEMCACHED=${LOCAL_PHP_MEMCACHED-false} + - PHP_FPM_UID=${PHP_FPM_UID-1000} + - PHP_FPM_GID=${PHP_FPM_GID-1000} + - GITHUB_REF=${GITHUB_REF-false} + - GITHUB_EVENT_NAME=${GITHUB_EVENT_NAME-false} volumes: - ./tools/local-env/php-config.ini:/usr/local/etc/php/conf.d/php-config.ini - ./:/var/www - depends_on: - - mysql + # Copy or delete the Memcached dropin plugin file as appropriate. + command: /bin/sh -c "if [ $LOCAL_PHP_MEMCACHED = true ]; then cp -n /var/www/tests/phpunit/includes/object-cache.php /var/www/src/wp-content/object-cache.php; else rm -f /var/www/src/wp-content/object-cache.php; fi && exec php-fpm" + + # The init directive ensures the command runs with a PID > 1, so Ctrl+C works correctly. + init: true + + extra_hosts: + - localhost:host-gateway ## # The MySQL container. ## mysql: - image: amd64/${LOCAL_DB_TYPE-mysql}:${LOCAL_DB_VERSION-latest} + image: ${LOCAL_DB_TYPE-mysql}:${LOCAL_DB_VERSION-latest} + platform: linux/amd64 networks: - wpdevnet @@ -71,6 +82,12 @@ services: # For compatibility with PHP versions that don't support the caching_sha2_password auth plugin used in MySQL 8.0. command: --default-authentication-plugin=mysql_native_password + healthcheck: + test: [ "CMD-SHELL", "if [ \"$LOCAL_DB_TYPE\" = \"mariadb\" ]; then mariadb-admin ping -h localhost; else mysqladmin ping -h localhost; fi" ] + timeout: 5s + interval: 5s + retries: 10 + ## # The WP CLI container. ## @@ -81,10 +98,10 @@ services: - wpdevnet environment: - LOCAL_PHP_XDEBUG: ${LOCAL_PHP_XDEBUG-false} - LOCAL_PHP_MEMCACHED: ${LOCAL_PHP_MEMCACHED-false} - PHP_FPM_UID: ${PHP_FPM_UID-1000} - PHP_FPM_GID: ${PHP_FPM_GID-1000} + - LOCAL_PHP_XDEBUG=${LOCAL_PHP_XDEBUG-false} + - LOCAL_PHP_MEMCACHED=${LOCAL_PHP_MEMCACHED-false} + - PHP_FPM_UID=${PHP_FPM_UID-1000} + - PHP_FPM_GID=${PHP_FPM_GID-1000} volumes: - ./:/var/www @@ -92,6 +109,15 @@ services: # The init directive ensures the command runs with a PID > 1, so Ctrl+C works correctly. init: true + extra_hosts: + - localhost:host-gateway + + depends_on: + php: + condition: service_started + mysql: + condition: service_healthy + ## # The PHPUnit container. ## @@ -102,16 +128,14 @@ services: - wpdevnet environment: - LOCAL_PHP_XDEBUG: ${LOCAL_PHP_XDEBUG-false} - LOCAL_PHP_MEMCACHED: ${LOCAL_PHP_MEMCACHED-false} - LOCAL_DIR: ${LOCAL_DIR-src} - WP_MULTISITE: ${WP_MULTISITE-false} - PHP_FPM_UID: ${PHP_FPM_UID-1000} - PHP_FPM_GID: ${PHP_FPM_GID-1000} - TRAVIS_BRANCH: ${TRAVIS_BRANCH-false} - TRAVIS_PULL_REQUEST: ${TRAVIS_PULL_REQUEST-false} - GITHUB_REF: ${GITHUB_REF-false} - GITHUB_EVENT_NAME: ${GITHUB_EVENT_NAME-false} + - LOCAL_PHP_XDEBUG=${LOCAL_PHP_XDEBUG-false} + - LOCAL_PHP_MEMCACHED=${LOCAL_PHP_MEMCACHED-false} + - PHP_FPM_UID=${PHP_FPM_UID-1000} + - PHP_FPM_GID=${PHP_FPM_GID-1000} + - LOCAL_DIR=${LOCAL_DIR-src} + - WP_MULTISITE=${WP_MULTISITE-false} + - GITHUB_REF=${GITHUB_REF-false} + - GITHUB_EVENT_NAME=${GITHUB_EVENT_NAME-false} volumes: - ./tools/local-env/phpunit-config.ini:/usr/local/etc/php/conf.d/phpunit-config.ini @@ -122,7 +146,26 @@ services: init: true depends_on: - - mysql + php: + condition: service_started + mysql: + condition: service_healthy + + ## + # The Memcached container. + ## + memcached: + image: memcached + + networks: + - wpdevnet + + ports: + - 11211:11211 + + depends_on: + php: + condition: service_started volumes: # So that sites aren't wiped every time containers are restarted, MySQL uses a persistent volume. diff --git a/phpcompat.xml.dist b/phpcompat.xml.dist index 5af8e2a5039ae..47760305a9676 100644 --- a/phpcompat.xml.dist +++ b/phpcompat.xml.dist @@ -11,7 +11,7 @@ - + - +