From 65c8bc5886e70f2d001110100f6a58bee889b28b Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 10:57:33 -0400 Subject: [PATCH 01/19] Try PHPUnit testing outside of Docker --- .github/workflows/phpunit-tests.yml | 10 +- .../workflows/reusable-phpunit-tests-v4.yml | 274 ++++++++++++++++++ 2 files changed, 279 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/reusable-phpunit-tests-v4.yml diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index 420506d42265c..cafb62f4f26c4 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -61,7 +61,7 @@ jobs: # test-with-mysql: name: PHP ${{ matrix.php }} - uses: ./.github/workflows/reusable-phpunit-tests-v3.yml + uses: ./.github/workflows/reusable-phpunit-tests-v4.yml permissions: contents: read secrets: inherit @@ -138,7 +138,7 @@ jobs: # test-with-mariadb: name: PHP ${{ matrix.php }} - uses: ./.github/workflows/reusable-phpunit-tests-v3.yml + uses: ./.github/workflows/reusable-phpunit-tests-v4.yml permissions: contents: read secrets: inherit @@ -190,7 +190,7 @@ jobs: # test-innovation-releases: name: PHP ${{ matrix.php }} - uses: ./.github/workflows/reusable-phpunit-tests-v3.yml + uses: ./.github/workflows/reusable-phpunit-tests-v4.yml permissions: contents: read secrets: inherit @@ -233,7 +233,7 @@ jobs: # html-api-test-groups: name: ${{ matrix.label }} - uses: ./.github/workflows/reusable-phpunit-tests-v3.yml + uses: ./.github/workflows/reusable-phpunit-tests-v4.yml permissions: contents: read secrets: inherit @@ -262,7 +262,7 @@ jobs: # limited-matrix-for-forks: name: PHP ${{ matrix.php }} - uses: ./.github/workflows/reusable-phpunit-tests-v3.yml + uses: ./.github/workflows/reusable-phpunit-tests-v4.yml permissions: contents: read secrets: inherit diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml new file mode 100644 index 0000000000000..bae7dd436f5a3 --- /dev/null +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -0,0 +1,274 @@ +## +# A reusable workflow that runs the PHPUnit test suite with the specified configuration. +# +# This workflow is used by `trunk` and branches >= 5.9. +## +name: Run PHPUnit tests + +on: + workflow_call: + inputs: + os: + description: 'Operating system to run tests on' + required: false + type: 'string' + default: 'ubuntu-24.04' + php: + description: 'The version of PHP to use, in the format of X.Y' + required: true + type: 'string' + db-type: + description: 'Database type. Valid types are mysql and mariadb' + required: false + type: 'string' + default: 'mysql' + db-version: + description: 'Database version' + required: false + type: 'string' + default: '8.4' + db-innovation: + description: 'Whether a database software innovation release is being tested.' + required: false + type: 'boolean' + default: false + multisite: + description: 'Whether to run tests as multisite' + required: false + type: 'boolean' + default: false + memcached: + description: 'Whether to test with memcached enabled' + required: false + type: 'boolean' + default: false + phpunit-config: + description: 'The PHPUnit configuration file to use' + required: false + type: 'string' + default: 'phpunit.xml.dist' + phpunit-test-groups: + description: 'A list of test groups to run.' + required: false + type: 'string' + default: '' + tests-domain: + description: 'The domain to use for the tests' + required: false + type: 'string' + default: 'example.org' + coverage-report: + description: 'Whether to generate a code coverage report.' + required: false + type: boolean + default: false + report: + description: 'Whether to report results to WordPress.org Hosting Tests' + required: false + type: 'boolean' + default: false + allow-errors: + description: 'Whether to continue when test errors occur.' + required: false + type: boolean + default: false + secrets: + CODECOV_TOKEN: + description: 'The Codecov token required for uploading reports.' + required: false + WPT_REPORT_API_KEY: + description: 'The WordPress.org Hosting Tests API key.' + required: false + +env: + LOCAL_PHP: ${{ inputs.php }}-fpm + LOCAL_PHP_XDEBUG: ${{ inputs.coverage-report || false }} + LOCAL_PHP_XDEBUG_MODE: ${{ inputs.coverage-report && 'coverage' || 'develop,debug' }} + LOCAL_DB_TYPE: ${{ inputs.db-type }} + LOCAL_DB_VERSION: ${{ inputs.db-version }} + LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} + LOCAL_WP_TESTS_DOMAIN: ${{ inputs.tests-domain }} + PHPUNIT_CONFIG: ${{ inputs.phpunit-config }} + PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + +# Disable permissions for all available scopes by default. +# Any needed permissions should be configured at the job level. +permissions: {} + +jobs: + # Runs the PHPUnit tests for WordPress. + # + # Performs the following steps: + # - Sets environment variables. + # - Checks out the repository. + # - Sets up Node.js. + # - Sets up PHP. + # - Installs Composer dependencies. + # - Installs npm dependencies + # - Logs general debug information about the runner. + # - Logs Docker debug information (about the Docker installation within the runner). + # - Starts the WordPress Docker container. + # - Logs the running Docker containers. + # - Logs debug information about what's installed within the WordPress Docker containers. + # - Install WordPress within the Docker container. + # - Run the PHPUnit tests. + # - Upload the code coverage report to Codecov.io. + # - Upload the HTML code coverage report as an artifact. + # - Ensures version-controlled files are not modified or deleted. + # - Checks out the WordPress Test reporter repository. + # - Submit the test results to the WordPress.org host test results. + phpunit-tests: + name: ${{ ( inputs.phpunit-test-groups || inputs.coverage-report ) && format( 'PHP {0} with ', inputs.php ) || '' }} ${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.db-innovation && ' (innovation release)' || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} + runs-on: ${{ inputs.os }} + timeout-minutes: ${{ inputs.coverage-report && 120 || inputs.php == '8.4' && 30 || 20 }} + permissions: + contents: read + + 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + persist-credentials: false + + - name: Create a Docker override file + if: ${{ contains( fromJSON('["8.3", "8.4"]'), inputs.php ) }} + env: + PHP_VERSION: ${{ inputs.php }} + run: cp "tools/local-env/php-${{ env.PHP_VERSION }}-docker-compose.override.yml" docker-compose.override.yml + + - name: Set up Node.js + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 + with: + node-version-file: '.nvmrc' + cache: npm + + ## + # This allows Composer dependencies to be installed using a single step. + # + # Since the tests are currently run within the Docker containers where the PHP version varies, + # the same PHP version needs to be configured for the action runner machine so that the correct + # dependency versions are installed and cached. + ## + - name: Set up PHP + uses: shivammathur/setup-php@20529878ed81ef8e78ddf08b480401e6101a850f # v2.35.3 + with: + php-version: '${{ inputs.php }}' + coverage: none + + # Since Composer dependencies are installed using `composer update` and no lock file is in version control, + # passing a custom cache suffix ensures that the cache is flushed at least once per week. + - name: Install Composer dependencies + uses: ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520 # v3.1.1 + with: + custom-cache-suffix: $(/bin/date -u --date='last Mon' "+%F") + + - name: Install npm dependencies + run: npm ci + + - name: General debug information + run: | + npm --version + node --version + curl --version + git --version + composer --version + locale -a + + - name: Docker debug information + run: | + docker -v + + - name: Start Docker environment + run: | + npm run env:start + + - name: Log running Docker containers + run: docker ps -a + + - name: WordPress Docker container debug information + run: | + docker compose run --rm mysql "${LOCAL_DB_CMD}" --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 + env: + LOCAL_DB_CMD: ${{ env.LOCAL_DB_TYPE == 'mariadb' && contains( fromJSON('["5.5", "10.0", "10.1", "10.2", "10.3"]'), env.LOCAL_DB_VERSION ) && 'mysql' || env.LOCAL_DB_TYPE }} + + - name: Install WordPress + run: npm run env:install + + - name: Run PHPUnit tests${{ inputs.phpunit-test-groups && format( ' ({0} groups)', inputs.phpunit-test-groups ) || '' }}${{ inputs.coverage-report && ' with coverage report' || '' }} + continue-on-error: ${{ inputs.allow-errors }} + run: | + node ./tools/local-env/scripts/docker.js run \ + php ./vendor/bin/phpunit \ + --verbose \ + -c "${PHPUNIT_CONFIG}" \ + ${{ inputs.phpunit-test-groups && '--group "${TEST_GROUPS}"' || '' }} \ + ${{ inputs.coverage-report && '--coverage-clover "wp-code-coverage-${MULTISITE_FLAG}-${GITHUB_SHA}.xml" --coverage-html "wp-code-coverage-${MULTISITE_FLAG}-${GITHUB_SHA}"' || '' }} + env: + TEST_GROUPS: ${{ inputs.phpunit-test-groups }} + MULTISITE_FLAG: ${{ inputs.multisite && 'multisite' || 'single' }} + + - name: Run AJAX tests + if: ${{ ! inputs.phpunit-test-groups && ! inputs.coverage-report }} + continue-on-error: ${{ inputs.allow-errors }} + run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group ajax + + - name: Run ms-files tests as a multisite install + if: ${{ inputs.multisite && ! inputs.phpunit-test-groups && ! inputs.coverage-report }} + continue-on-error: ${{ inputs.allow-errors }} + run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group ms-files + + - name: Run external HTTP tests + if: ${{ ! inputs.multisite && ! inputs.phpunit-test-groups && ! inputs.coverage-report }} + continue-on-error: ${{ inputs.allow-errors }} + run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group external-http + + # __fakegroup__ is excluded to force PHPUnit to ignore the settings in phpunit.xml.dist. + - name: Run (Xdebug) tests + if: ${{ inputs.php != '8.4' && ! inputs.phpunit-test-groups && ! inputs.coverage-report }} + continue-on-error: ${{ inputs.allow-errors }} + run: LOCAL_PHP_XDEBUG=true node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit -v --group xdebug --exclude-group __fakegroup__ + + - name: Upload test coverage report to Codecov + if: ${{ inputs.coverage-report }} + uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }}.xml + flags: ${{ inputs.multisite && 'multisite' || 'single' }},php + fail_ci_if_error: true + + - name: Upload HTML coverage report as artifact + if: ${{ inputs.coverage-report }} + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }} + path: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }} + overwrite: true + + - name: Ensure version-controlled files are not modified or deleted + run: git diff --exit-code + + - name: Checkout the WordPress Test Reporter + if: ${{ github.ref == 'refs/heads/trunk' && inputs.report }} + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + repository: 'WordPress/phpunit-test-runner' + path: 'test-runner' + show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + persist-credentials: false + + - name: Submit test results to the WordPress.org host test results + if: ${{ github.ref == 'refs/heads/trunk' && inputs.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 From aa6bd9f1a39c20eeedfbbefb5debbc286a3ab6c1 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 11:03:05 -0400 Subject: [PATCH 02/19] Change the reusable workflow to eliminate Docker --- .../workflows/reusable-phpunit-tests-v4.yml | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index bae7dd436f5a3..2777b073de6d2 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -1,7 +1,7 @@ ## # A reusable workflow that runs the PHPUnit test suite with the specified configuration. # -# This workflow is used by `trunk` and branches >= 5.9. +# This workflow is used by `trunk` and branches >= 6.9. ## name: Run PHPUnit tests @@ -81,20 +81,10 @@ on: required: false env: - LOCAL_PHP: ${{ inputs.php }}-fpm - LOCAL_PHP_XDEBUG: ${{ inputs.coverage-report || false }} - LOCAL_PHP_XDEBUG_MODE: ${{ inputs.coverage-report && 'coverage' || 'develop,debug' }} - LOCAL_DB_TYPE: ${{ inputs.db-type }} - LOCAL_DB_VERSION: ${{ inputs.db-version }} LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} - LOCAL_WP_TESTS_DOMAIN: ${{ inputs.tests-domain }} PHPUNIT_CONFIG: ${{ inputs.phpunit-config }} PUPPETEER_SKIP_DOWNLOAD: ${{ true }} -# Disable permissions for all available scopes by default. -# Any needed permissions should be configured at the job level. -permissions: {} - jobs: # Runs the PHPUnit tests for WordPress. # @@ -118,48 +108,44 @@ jobs: # - Checks out the WordPress Test reporter repository. # - Submit the test results to the WordPress.org host test results. phpunit-tests: - name: ${{ ( inputs.phpunit-test-groups || inputs.coverage-report ) && format( 'PHP {0} with ', inputs.php ) || '' }} ${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.db-innovation && ' (innovation release)' || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} + name: ${{ inputs.phpunit-test-groups && format( '{0} / ', inputs.phpunit-test-groups ) || '' }}PHP ${{ inputs.php }} ${{ ! inputs.phpunit-test-groups && ! inputs.coverage-report && '/ ' || 'with ' }}${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} runs-on: ${{ inputs.os }} - timeout-minutes: ${{ inputs.coverage-report && 120 || inputs.php == '8.4' && 30 || 20 }} - permissions: - contents: read + timeout-minutes: ${{ inputs.coverage-report && 120 || 20 }} + + services: + database: + image: ${{ inputs.db-type }}:${{ inputs.db-version }} + ports: + - 3306 + options: >- + --health-cmd="mysqladmin ping" + --health-interval="30s" + --health-timeout="10s" + --health-retries="5" + -e MYSQL_ROOT_PASSWORD="password" + -e MYSQL_DATABASE="wordpress_develop_tests" + --entrypoint sh ${{ inputs.db-type }}:${{ inputs.db-version }} + -c "exec docker-entrypoint.sh mysqld${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && ' --default-authentication-plugin=mysql_native_password' || '' }}" 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - - name: Create a Docker override file - if: ${{ contains( fromJSON('["8.3", "8.4"]'), inputs.php ) }} - env: - PHP_VERSION: ${{ inputs.php }} - run: cp "tools/local-env/php-${{ env.PHP_VERSION }}-docker-compose.override.yml" docker-compose.override.yml - - name: Set up Node.js uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 with: node-version-file: '.nvmrc' cache: npm - ## - # This allows Composer dependencies to be installed using a single step. - # - # Since the tests are currently run within the Docker containers where the PHP version varies, - # the same PHP version needs to be configured for the action runner machine so that the correct - # dependency versions are installed and cached. - ## - name: Set up PHP uses: shivammathur/setup-php@20529878ed81ef8e78ddf08b480401e6101a850f # v2.35.3 with: php-version: '${{ inputs.php }}' - coverage: none + coverage: ${{ inputs.coverage-report && 'xdebug' || '' }} + tools: wp-cli # Since Composer dependencies are installed using `composer update` and no lock file is in version control, # passing a custom cache suffix ensures that the cache is flushed at least once per week. @@ -180,57 +166,39 @@ jobs: composer --version locale -a - - name: Docker debug information - run: | - docker -v + - name: Create wp-tests-config.php file + run: cp wp-tests-config-sample.php wp-tests-config.php - - name: Start Docker environment - run: | - npm run env:start + - name: Change DB_NAME value + run: wp config set DB_NAME wordpress_develop_tests --config-file=wp-tests-config.php - - name: Log running Docker containers - run: docker ps -a + - name: Change DB_USER value + run: wp config set DB_USER 127.0.0.1:${{ job.services.database.ports['3306'] }} --config-file=wp-tests-config.php - - name: WordPress Docker container debug information - run: | - docker compose run --rm mysql "${LOCAL_DB_CMD}" --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 - env: - LOCAL_DB_CMD: ${{ env.LOCAL_DB_TYPE == 'mariadb' && contains( fromJSON('["5.5", "10.0", "10.1", "10.2", "10.3"]'), env.LOCAL_DB_VERSION ) && 'mysql' || env.LOCAL_DB_TYPE }} + - name: Change DB_PASSWORD value + run: wp config set DB_PASSWORD password --config-file=wp-tests-config.php - - name: Install WordPress - run: npm run env:install + - name: Change DB_HOST value + run: wp config set DB_HOST 127.0.0.1:${{ job.services.database.ports['3306'] }} --config-file=wp-tests-config.php - name: Run PHPUnit tests${{ inputs.phpunit-test-groups && format( ' ({0} groups)', inputs.phpunit-test-groups ) || '' }}${{ inputs.coverage-report && ' with coverage report' || '' }} continue-on-error: ${{ inputs.allow-errors }} - run: | - node ./tools/local-env/scripts/docker.js run \ - php ./vendor/bin/phpunit \ - --verbose \ - -c "${PHPUNIT_CONFIG}" \ - ${{ inputs.phpunit-test-groups && '--group "${TEST_GROUPS}"' || '' }} \ - ${{ inputs.coverage-report && '--coverage-clover "wp-code-coverage-${MULTISITE_FLAG}-${GITHUB_SHA}.xml" --coverage-html "wp-code-coverage-${MULTISITE_FLAG}-${GITHUB_SHA}"' || '' }} - env: - TEST_GROUPS: ${{ inputs.phpunit-test-groups }} - MULTISITE_FLAG: ${{ inputs.multisite && 'multisite' || 'single' }} + run: ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }}${{ inputs.phpunit-test-groups && format( ' --group {0}', inputs.phpunit-test-groups ) || '' }}${{ inputs.coverage-report && format( ' --coverage-clover wp-code-coverage-{0}-{1}.xml --coverage-html wp-code-coverage-{0}-{1}', ( inputs.multisite && 'multisite' || 'single' ), github.sha ) || '' }} - name: Run AJAX tests if: ${{ ! inputs.phpunit-test-groups && ! inputs.coverage-report }} continue-on-error: ${{ inputs.allow-errors }} - run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group ajax + run: ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax - name: Run ms-files tests as a multisite install if: ${{ inputs.multisite && ! inputs.phpunit-test-groups && ! inputs.coverage-report }} continue-on-error: ${{ inputs.allow-errors }} - run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group ms-files + run: ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ms-files - name: Run external HTTP tests if: ${{ ! inputs.multisite && ! inputs.phpunit-test-groups && ! inputs.coverage-report }} continue-on-error: ${{ inputs.allow-errors }} - run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group external-http + run: ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group external-http # __fakegroup__ is excluded to force PHPUnit to ignore the settings in phpunit.xml.dist. - name: Run (Xdebug) tests @@ -243,7 +211,7 @@ jobs: uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 with: token: ${{ secrets.CODECOV_TOKEN }} - files: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }}.xml + file: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }}.xml flags: ${{ inputs.multisite && 'multisite' || 'single' }},php fail_ci_if_error: true From ebbc723771c9b0d5d272f643c095e7c896abcf40 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 11:47:49 -0400 Subject: [PATCH 03/19] Properly set database user in `wp-config.php` --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 2777b073de6d2..cfd27ba221fd2 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -173,7 +173,7 @@ jobs: run: wp config set DB_NAME wordpress_develop_tests --config-file=wp-tests-config.php - name: Change DB_USER value - run: wp config set DB_USER 127.0.0.1:${{ job.services.database.ports['3306'] }} --config-file=wp-tests-config.php + run: wp config set DB_USER root --config-file=wp-tests-config.php - name: Change DB_PASSWORD value run: wp config set DB_PASSWORD password --config-file=wp-tests-config.php From b92a038f891b11712b35d5c6bb5dedeec309147b Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 11:48:01 -0400 Subject: [PATCH 04/19] Use correct healthcheck commands. --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index cfd27ba221fd2..9017d536e6527 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -118,7 +118,7 @@ jobs: ports: - 3306 options: >- - --health-cmd="mysqladmin ping" + --health-cmd="${{ inputs.db-type == 'mariadb' && ! contains( fromJSON( '["5.5", "10.0", "10.1", "10.2", "10.3"]' ), inputs.db-version ) && 'mariadb-admin ping -h 127.0.0.1' || 'mysqladmin ping -h 127.0.0.1' }} --health-interval="30s" --health-timeout="10s" --health-retries="5" From 2be3360efe4c7ae87bf737721fd645790bb05a11 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 11:50:07 -0400 Subject: [PATCH 05/19] Try removing host. --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 9017d536e6527..19d6a97546330 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -118,7 +118,7 @@ jobs: ports: - 3306 options: >- - --health-cmd="${{ inputs.db-type == 'mariadb' && ! contains( fromJSON( '["5.5", "10.0", "10.1", "10.2", "10.3"]' ), inputs.db-version ) && 'mariadb-admin ping -h 127.0.0.1' || 'mysqladmin ping -h 127.0.0.1' }} + --health-cmd="${{ inputs.db-type == 'mariadb' && ! contains( fromJSON( '["5.5", "10.0", "10.1", "10.2", "10.3"]' ), inputs.db-version ) && 'mariadb-admin ping' || 'mysqladmin ping' }} --health-interval="30s" --health-timeout="10s" --health-retries="5" From e1347800fb3ab7512fca40013f2fdff97ddc3104 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 11:53:21 -0400 Subject: [PATCH 06/19] Add missing quotation mark --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 19d6a97546330..d4b724463c191 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -118,7 +118,7 @@ jobs: ports: - 3306 options: >- - --health-cmd="${{ inputs.db-type == 'mariadb' && ! contains( fromJSON( '["5.5", "10.0", "10.1", "10.2", "10.3"]' ), inputs.db-version ) && 'mariadb-admin ping' || 'mysqladmin ping' }} + --health-cmd="${{ inputs.db-type == 'mariadb' && ! contains( fromJSON( '["5.5", "10.0", "10.1", "10.2", "10.3"]' ), inputs.db-version ) && 'mariadb-admin ping' || 'mysqladmin ping' }}" --health-interval="30s" --health-timeout="10s" --health-retries="5" From ad8fc6070f58b556a380bdb3ebfe183120a44c43 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:01:55 -0400 Subject: [PATCH 07/19] More adjustments --- .github/workflows/reusable-phpunit-tests-v4.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index d4b724463c191..97762eb0c40a8 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -124,8 +124,7 @@ jobs: --health-retries="5" -e MYSQL_ROOT_PASSWORD="password" -e MYSQL_DATABASE="wordpress_develop_tests" - --entrypoint sh ${{ inputs.db-type }}:${{ inputs.db-version }} - -c "exec docker-entrypoint.sh mysqld${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && ' --default-authentication-plugin=mysql_native_password' || '' }}" + ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && '--entrypoint "sh" --command "-c \"exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password\""' || '' }} steps: - name: Checkout repository From 62f2edf7856056a5df0b3f97e3fbc097c242069a Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:05:43 -0400 Subject: [PATCH 08/19] More adjustments. --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 97762eb0c40a8..fed8a7671453c 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -124,7 +124,7 @@ jobs: --health-retries="5" -e MYSQL_ROOT_PASSWORD="password" -e MYSQL_DATABASE="wordpress_develop_tests" - ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && '--entrypoint "sh" --command "-c \"exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password\""' || '' }} + ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && '--entrypoint="sh -c \"exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password\""' || '' }} steps: - name: Checkout repository From f180f0063e6583e9278e7dbcb3fb84ff81c7c87e Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:08:09 -0400 Subject: [PATCH 09/19] Change excaping --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index fed8a7671453c..87b0a0a29e36d 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -124,7 +124,7 @@ jobs: --health-retries="5" -e MYSQL_ROOT_PASSWORD="password" -e MYSQL_DATABASE="wordpress_develop_tests" - ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && '--entrypoint="sh -c \"exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password\""' || '' }} + ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && '--entrypoint sh -- -c "exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password"' || '' }} steps: - name: Checkout repository From 8d38254c6a93bdea31d9fd17ff097c1b3cb3477e Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:12:40 -0400 Subject: [PATCH 10/19] Move env variables to `env:` --- .github/workflows/reusable-phpunit-tests-v4.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 87b0a0a29e36d..9f8bde8f5457f 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -117,13 +117,14 @@ jobs: image: ${{ inputs.db-type }}:${{ inputs.db-version }} ports: - 3306 + env: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: wordpress_develop_tests options: >- --health-cmd="${{ inputs.db-type == 'mariadb' && ! contains( fromJSON( '["5.5", "10.0", "10.1", "10.2", "10.3"]' ), inputs.db-version ) && 'mariadb-admin ping' || 'mysqladmin ping' }}" --health-interval="30s" --health-timeout="10s" --health-retries="5" - -e MYSQL_ROOT_PASSWORD="password" - -e MYSQL_DATABASE="wordpress_develop_tests" ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && '--entrypoint sh -- -c "exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password"' || '' }} steps: From c772cbb431e3205eeb8a79ca042c974741b142b1 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:12:57 -0400 Subject: [PATCH 11/19] Remove entrypoint for now. --- .github/workflows/reusable-phpunit-tests-v4.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 9f8bde8f5457f..69b54ed67a884 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -125,7 +125,6 @@ jobs: --health-interval="30s" --health-timeout="10s" --health-retries="5" - ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && '--entrypoint sh -- -c "exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password"' || '' }} steps: - name: Checkout repository From 1c5c3d67e5e7cb11c37c3243d73f914e68e35df9 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:14:09 -0400 Subject: [PATCH 12/19] Update job names with latest from `trunk` --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 69b54ed67a884..f432281154113 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -108,7 +108,7 @@ jobs: # - Checks out the WordPress Test reporter repository. # - Submit the test results to the WordPress.org host test results. phpunit-tests: - name: ${{ inputs.phpunit-test-groups && format( '{0} / ', inputs.phpunit-test-groups ) || '' }}PHP ${{ inputs.php }} ${{ ! inputs.phpunit-test-groups && ! inputs.coverage-report && '/ ' || 'with ' }}${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} + name: ${{ ( inputs.phpunit-test-groups || inputs.coverage-report ) && format( 'PHP {0} with ', inputs.php ) || '' }} ${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.db-innovation && ' (innovation release)' || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} runs-on: ${{ inputs.os }} timeout-minutes: ${{ inputs.coverage-report && 120 || 20 }} From a422f6f891deb753bafcb14b5cee84a73d9183f6 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:16:09 -0400 Subject: [PATCH 13/19] More adjustments from upstream. --- .github/workflows/reusable-phpunit-tests-v4.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index f432281154113..3770b590e38cd 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -110,7 +110,9 @@ jobs: phpunit-tests: name: ${{ ( inputs.phpunit-test-groups || inputs.coverage-report ) && format( 'PHP {0} with ', inputs.php ) || '' }} ${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.db-innovation && ' (innovation release)' || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} runs-on: ${{ inputs.os }} - timeout-minutes: ${{ inputs.coverage-report && 120 || 20 }} + timeout-minutes: ${{ inputs.coverage-report && 120 || inputs.php == '8.4' && 30 || 20 }} + permissions: + contents: read services: database: @@ -210,7 +212,7 @@ jobs: uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 with: token: ${{ secrets.CODECOV_TOKEN }} - file: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }}.xml + files: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }}.xml flags: ${{ inputs.multisite && 'multisite' || 'single' }},php fail_ci_if_error: true From 6a67168dce5a2f2c10bcd12db65cb847913e4c3e Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:22:07 -0400 Subject: [PATCH 14/19] Try to better account for authentication plugins --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 3770b590e38cd..4d8fc82c46dd4 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -127,6 +127,8 @@ jobs: --health-interval="30s" --health-timeout="10s" --health-retries="5" + ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && inputs.db-version == '8.4' && '--authentication-policy=mysql_native_password' || '' }} + ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && inputs.db-version != '8.4' && '--default-authentication-plugin=mysql_native_password' || '' }} steps: - name: Checkout repository From bc020f46779fb281f7955ac8e671606d507c2449 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:37:17 -0400 Subject: [PATCH 15/19] Disable coverage instead of a blank string --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 4d8fc82c46dd4..2f4d1c4339cfc 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -147,7 +147,7 @@ jobs: uses: shivammathur/setup-php@20529878ed81ef8e78ddf08b480401e6101a850f # v2.35.3 with: php-version: '${{ inputs.php }}' - coverage: ${{ inputs.coverage-report && 'xdebug' || '' }} + coverage: ${{ inputs.coverage-report && 'xdebug' || 'none' }} tools: wp-cli # Since Composer dependencies are installed using `composer update` and no lock file is in version control, From e2b8d938f0cc2083bad9c17fb829f5581e346d55 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 12:41:16 -0400 Subject: [PATCH 16/19] Add some PHP debug logging --- .github/workflows/reusable-phpunit-tests-v4.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 2f4d1c4339cfc..1a6acecfb5279 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -131,6 +131,9 @@ jobs: ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && inputs.db-version != '8.4' && '--default-authentication-plugin=mysql_native_password' || '' }} steps: + - name: Log PHP debugging information + run: php -i + - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: From e6fa4ab60f03f7e300ef74f85e205ec4ef948a54 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 14:45:59 -0400 Subject: [PATCH 17/19] Install ImageMagic --- .github/workflows/reusable-phpunit-tests-v4.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 1a6acecfb5279..fb2eb953dc224 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -72,6 +72,11 @@ on: required: false type: boolean default: false + install-imagemagick: + description: 'Whether to install ImageMagick.' + required: false + type: boolean + default: true secrets: CODECOV_TOKEN: description: 'The Codecov token required for uploading reports.' @@ -131,6 +136,10 @@ jobs: ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && inputs.db-version != '8.4' && '--default-authentication-plugin=mysql_native_password' || '' }} steps: + - name: Install ImageMagick + if: ${{ inputs.install-imagemagick }} + run: sudo apt-get update && sudo apt-get install -y imagemagick + - name: Log PHP debugging information run: php -i From 0c9d10c8e02959861c633412bbd65ebc6a83ce28 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 14:50:01 -0400 Subject: [PATCH 18/19] For now, just test media. --- .github/workflows/reusable-phpunit-tests-v4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index fb2eb953dc224..57eef422691c0 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -51,7 +51,7 @@ on: description: 'A list of test groups to run.' required: false type: 'string' - default: '' + default: 'media' tests-domain: description: 'The domain to use for the tests' required: false From 2de1c699031e830e90261119fed5492c7077bd0a Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 8 Sep 2025 14:55:14 -0400 Subject: [PATCH 19/19] More ImageMagick testing --- .../workflows/reusable-phpunit-tests-v4.yml | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/.github/workflows/reusable-phpunit-tests-v4.yml b/.github/workflows/reusable-phpunit-tests-v4.yml index 57eef422691c0..59f1ae213a297 100644 --- a/.github/workflows/reusable-phpunit-tests-v4.yml +++ b/.github/workflows/reusable-phpunit-tests-v4.yml @@ -136,9 +136,29 @@ jobs: ${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && inputs.db-version != '8.4' && '--default-authentication-plugin=mysql_native_password' || '' }} steps: - - name: Install ImageMagick + - name: Install ImageMagick with AVIF support if: ${{ inputs.install-imagemagick }} - run: sudo apt-get update && sudo apt-get install -y imagemagick + run: | + sudo apt-get remove --purge -y imagemagick imagemagick-6-common libmagickcore-6* libmagickwand-6* + sudo apt-get autoremove -y + which magick || echo "ImageMagick removed" + sudo apt-get update + sudo apt-get install -y \ + build-essential pkg-config autoconf automake libtool \ + libjpeg-dev libpng-dev libtiff-dev zlib1g-dev \ + libheif-dev libaom-dev libdav1d-dev libde265-dev + curl -fsSL https://imagemagick.org/archive/ImageMagick.tar.gz | tar xz + cd ImageMagick-* + ./configure --with-heic=yes + make -j"$(nproc)" + sudo make install + sudo ldconfig + + - name: Confirm AVIF support + run: magick -version | grep Delegates + + - name: Confirm image format support + run: magick -list format - name: Log PHP debugging information run: php -i