Make WordPress Core


Ignore:
Timestamp:
07/03/2024 03:33:59 PM (5 months ago)
Author:
desrosj
Message:

Build/Test Tools: Make use of new reusable workflows for 4.2.

This updates the 4.2 branch to utilize the new reusable workflows in trunk introduced in [58165].

This also includes backports for a some additional improvements and bug fixes that are necessary for the local development environment to continue working long term:

  • The image and platform properties for the mysql container have been updated to always prefer amd64 containers (#60822).
  • macos-13 is now pinned for MacOS jobs instead of macos-latest (#61340).
  • Migrating to Docker Compose V2 (#60901).
  • Removing the version property from docker-compose.yml (#59416).
  • Improvements to how artifacts and comments for Playground testing are generated.
  • Removing SVN related commands causing failures (#61216).
  • Updating the actions/github-scripts action to the latest version.
  • Improvements to the healthcheck command for the mysql container (#58867).

Merges [51673], [53552], [56464], [57918], [58157], [57124], [57125], [57249] to the 4.2 branch.

Props johnbillion, joemcgill, swissspidy, thelovekesh, narenin, mukesh27, JeffPaul, peterwilsoncc, zieladam, ockham, SergeyBiryukov, jorbin, Clorith, afragen, jrf.
See #58867, #61340, #60822, #61216, #60901, #61101, #59416, #59805, #61213.

Location:
branches/4.2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.2

  • branches/4.2/.github/workflows/phpunit-tests.yml

    r55534 r58643  
    2222# Cancels all previous workflow runs for pull requests that have not completed.
    2323concurrency:
    24     # The concurrency group contains the workflow name and the branch name for pull requests
    25     # or the commit hash for any other events.
     24  # The concurrency group contains the workflow name and the branch name for pull requests
     25  # or the commit hash for any other events.
    2626  group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
    2727  cancel-in-progress: true
    2828
    29 env:
    30   LOCAL_DIR: build
    31   PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: ${{ true }}
    32   COMPOSER_INSTALL: ${{ false }}
    33   # Controls which npm script to use for running PHPUnit tests. Options ar `php` and `php-composer`.
    34   PHPUNIT_SCRIPT: php
    35   LOCAL_PHP_MEMCACHED: ${{ false }}
    36   SLOW_TESTS: 'external-http,media'
     29# Disable permissions for all available scopes by default.
     30# Any needed permissions should be configured at the job level.
     31permissions: {}
    3732
    3833jobs:
    39   # Sets up WordPress for testing or development use.
    4034  #
    41   # Performs the following steps:
    42   # - Cancels all previous workflow runs for pull requests that have not completed.
    43   # - Checks out the repository.
    44   # - Logs debug information about the GitHub Action runner.
    45   # - Installs NodeJS.
    46   # _ Installs npm dependencies.
    47   # - Builds WordPress to run from the `build` directory.
    48   # - Creates a ZIP file of compiled WordPress.
    49   # - Uploads ZIP file as an artifact.
    50   setup-wordpress:
    51     name: Setup WordPress
    52     runs-on: ubuntu-latest
     35  # Creates a PHPUnit test job for each PHP combination.
     36  #
     37  test-php:
     38    name: PHP ${{ matrix.php }}
     39    uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests-v1.yml@trunk
     40    permissions:
     41      contents: read
     42    secrets: inherit
    5343    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    54 
    55     steps:
    56       - name: Checkout repository
    57         uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
    58 
    59       - name: Log debug information
    60         run: |
    61           echo "$GITHUB_REF"
    62           echo "$GITHUB_EVENT_NAME"
    63           npm --version
    64           node --version
    65           curl --version
    66           git --version
    67           svn --version
    68           php --version
    69           php -i
    70           locale -a
    71 
    72       - name: Set up Node.js
    73         uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
    74         with:
    75           node-version-file: '.nvmrc'
    76           cache: npm
    77 
    78       - name: Install Dependencies
    79         run: npm ci
    80 
    81       - name: Build WordPress
    82         run: npm run build
    83 
    84       - name: Create ZIP artifact
    85         uses: thedoctor0/zip-release@a24011d8d445e4da5935a7e73c1f98e22a439464 # v0.7.1
    86         with:
    87           filename: built-wp-${{ github.sha }}.zip
    88           exclusions: '*.git* /*node_modules/* packagehash.txt'
    89 
    90       - name: Upload build artifact
    91         uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
    92         with:
    93           name: built-wp-${{ github.sha }}
    94           path: built-wp-${{ github.sha }}.zip
    95           if-no-files-found: error
    96 
    97   # Runs the PHPUnit tests for WordPress.
    98   #
    99   # Performs the following steps:
    100   # - Sets environment variables.
    101   # - Sets up the environment variables needed for testing with memcached (if desired).
    102   # - Downloads the built WordPress artifact from the previous job.
    103   # - Unzips the artifact.
    104   # - Installs NodeJS.
    105   # _ Installs npm dependencies.
    106   # - Configures caching for Composer.
    107   # _ Installs Composer dependencies (if desired).
    108   # - Logs Docker debug information (about the Docker installation within the runner).
    109   # - Starts the WordPress Docker container.
    110   # - Starts the Memcached server after the Docker network has been created (if desired).
    111   # - Logs general debug information about the runner.
    112   # - Logs the running Docker containers.
    113   # - Logs debug information from inside the WordPress Docker container.
    114   # - Logs debug information about what's installed within the WordPress Docker containers.
    115   # - Install WordPress within the Docker container.
    116   # - Run the PHPUnit tests.
    117   # - Checks out the WordPress Test reporter repository.
    118   # - Reconnect the directory to the Git repository.
    119   # - Submit the test results to the WordPress.org host test results.
    120   test-php:
    121     name: ${{ matrix.php }}${{ matrix.multisite && ' multisite' || '' }}${{ matrix.split_slow && ' slow tests' || '' }}${{ matrix.memcached && ' with memcached' || '' }} on ${{ matrix.os }}
    122     needs: setup-wordpress
    123     runs-on: ${{ matrix.os }}
    124     timeout-minutes: 20
    12544    strategy:
    12645      fail-fast: false
    12746      matrix:
     47        os: [ ubuntu-latest ]
    12848        php: [ '5.3', '5.4', '5.5' ]
    129         os: [ ubuntu-latest ]
    130         memcached: [ false ]
    13149        split_slow: [ false, true ]
    13250        multisite: [ false, true ]
     51        memcached: [ false ]
    13352        include:
    134           # Additional "slow" jobs for PHP 5.6.
     53          # Include jobs for specific PHPUnit versions with slow tests split.
    13554          - php: '5.6'
    13655            phpunit: '4-php-5.6'
    13756            os: ubuntu-latest
     57            split_slow: false
     58            multisite: false
    13859            memcached: false
    139             multisite: false
    140             split_slow: true
    14160          - php: '5.6'
    14261            phpunit: '4-php-5.6'
    14362            os: ubuntu-latest
     63            split_slow: false
     64            multisite: true
    14465            memcached: false
    145             multisite: true
    146             split_slow: true
    147           # Include job for specific PHPUnit versions.
    14866          - php: '5.6'
    14967            phpunit: '4-php-5.6'
    15068            os: ubuntu-latest
     69            split_slow: true
     70            multisite: false
    15171            memcached: false
    152             multisite: false
    153             split_slow: false
    15472          - php: '5.6'
    15573            phpunit: '4-php-5.6'
    15674            os: ubuntu-latest
     75            split_slow: true
     76            multisite: true
    15777            memcached: false
    158             multisite: true
    159             split_slow: false
    160 
    161     env:
    162       LOCAL_PHP: ${{ matrix.php }}-fpm
    163       LOCAL_PHPUNIT: ${{ matrix.phpunit && matrix.phpunit || matrix.php }}-fpm
    164       LOCAL_PHP_MEMCACHED: ${{ matrix.memcached }}
    165       PHPUNIT_CONFIG: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }}
    166 
    167     steps:
    168       - name: Configure environment variables
    169         run: |
    170           echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
    171           echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
    172 
    173       - name: Download the built WordPress artifact
    174         uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
    175         with:
    176           name: built-wp-${{ github.sha }}
    177 
    178       - name: Unzip built artifact
    179         run: unzip built-wp-${{ github.sha }}.zip
    180 
    181       - name: Set up Node.js
    182         uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
    183         with:
    184           node-version-file: '.nvmrc'
    185           cache: npm
    186 
    187       - name: Install Dependencies
    188         run: npm ci
    189 
    190       - name: Cache Composer dependencies
    191         if: ${{ env.COMPOSER_INSTALL == true }}
    192         uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6
    193         env:
    194           cache-name: cache-composer-dependencies
    195         with:
    196           path: ${{ steps.composer-cache.outputs.dir }}
    197           key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }}
    198 
    199       - name: Install Composer dependencies
    200         if: ${{ env.COMPOSER_INSTALL == true }}
    201         run: |
    202           docker-compose run --rm php composer --version
    203           docker-compose run --rm php composer install
    204 
    205       - name: Docker debug information
    206         run: |
    207           docker -v
    208           docker-compose -v
    209 
    210       - name: Start Docker environment
    211         run: |
    212           npm run env:start
    213 
    214       # The memcached server needs to start after the Docker network has been set up with `npm run env:start`.
    215       - name: Start the Memcached server.
    216         if: ${{ matrix.memcached }}
    217         run: |
    218           cp tests/phpunit/includes/object-cache.php build/wp-content/object-cache.php
    219           docker run --name memcached --net $(basename "$PWD")_wpdevnet -d memcached
    220 
    221       - name: General debug information
    222         run: |
    223           npm --version
    224           node --version
    225           curl --version
    226           git --version
    227           svn --version
    228 
    229       - name: Log running Docker containers
    230         run: docker ps -a
    231 
    232       - name: WordPress Docker container debug information
    233         run: |
    234           docker-compose run --rm mysql mysql --version
    235           docker-compose run --rm php php --version
    236           docker-compose run --rm php php -m
    237           docker-compose run --rm php php -i
    238           docker-compose run --rm php locale -a
    239 
    240       - name: Install WordPress
    241         run: npm run env:install
    242 
    243       - name: Run slow PHPUnit tests
    244         if: ${{ matrix.split_slow }}
    245         run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ${{ env.SLOW_TESTS }}
    246 
    247       - name: Run PHPUnit tests for single site excluding slow tests
    248         if: ${{ matrix.php < '7.0' && ! matrix.split_slow && ! matrix.multisite }}
    249         run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-required
    250 
    251       - name: Run PHPUnit tests for Multisite excluding slow tests
    252         if: ${{ matrix.php < '7.0' && ! matrix.split_slow && matrix.multisite }}
    253         run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-excluded,oembed-headers
    254 
    255       - name: Run PHPUnit tests
    256         if: ${{ matrix.php >= '7.0' }}
    257         run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }}
    258 
    259       - name: Run AJAX tests
    260         if: ${{ ! matrix.multisite && ! matrix.split_slow }}
    261         run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax
    262 
    263       - name: Run ms-files tests as a multisite install
    264         if: ${{ matrix.multisite && ! matrix.split_slow }}
    265         run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c tests/phpunit/multisite.xml --group ms-files
    266 
    267       - name: Run external HTTP tests
    268         if: ${{ ! matrix.multisite && ! matrix.split_slow }}
    269         run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c phpunit.xml.dist --group external-http
    270 
    271       - name: Checkout the WordPress Test Reporter
    272         if: ${{ github.repository == 'WordPress/wordpress-develop' && github.ref == 'refs/heads/trunk' && matrix.report }}
    273         uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
    274         with:
    275           repository: 'WordPress/phpunit-test-runner'
    276           path: 'test-runner'
    277 
    278       - name: Set up the Git repository
    279         if: ${{ github.repository == 'WordPress/wordpress-develop' && github.ref == 'refs/heads/trunk' && matrix.report }}
    280         run: |
    281           git init
    282           git remote add origin https://github.com/WordPress/wordpress-develop.git
    283           git fetch
    284           git reset origin/trunk
    285 
    286       - name: Submit test results to the WordPress.org host test results
    287         if: ${{ github.repository == 'WordPress/wordpress-develop' && github.ref == 'refs/heads/trunk' && matrix.report }}
    288         env:
    289           WPT_REPORT_API_KEY: "${{ secrets.WPT_REPORT_API_KEY }}"
    290         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
     78    with:
     79      os: ${{ matrix.os }}
     80      php: ${{ matrix.php }}
     81      phpunit: ${{ matrix.phpunit && matrix.phpunit || matrix.php }}
     82      multisite: ${{ matrix.multisite }}
     83      split_slow: ${{ matrix.split_slow }}
     84      memcached: ${{ matrix.memcached }}
     85      phpunit-config: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }}
    29186
    29287  slack-notifications:
    29388    name: Slack Notifications
    29489    uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk
    295     needs: [ setup-wordpress, test-php ]
     90    permissions:
     91      actions: read
     92      contents: read
     93    needs: [ test-php ]
    29694    if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }}
    29795    with:
     
    306104    name: Failed workflow tasks
    307105    runs-on: ubuntu-latest
     106    permissions:
     107      actions: write
    308108    needs: [ test-php, slack-notifications ]
    309109    if: |
     
    318118    steps:
    319119      - name: Dispatch workflow run
    320         uses: actions/github-script@98814c53be79b1d30f795b907e553d8679345975 # v6.4.0
     120        uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
    321121        with:
    322122          retries: 2
Note: See TracChangeset for help on using the changeset viewer.