Make WordPress Core

Changeset 58165


Ignore:
Timestamp:
05/17/2024 05:41:40 PM (5 months ago)
Author:
desrosj
Message:

Build/Test Tools: Convert GitHub action workflows into reusable ones.

With a few exceptions, GitHub Actions workflows run using the version of the workflow file present in the commit SHA or Git ref for the triggering event. This is useful for maintaining different versions of a workflow file.

In the case of WordPress where there are currently 25+ branches that could potentially receive a security fix, it creates a huge maintenance burden. When 3rd party actions are updated or features are deprecated on GitHub Actions, the required changes need to be backported to all of those branches. This takes considerable time and effort.

This change converts Core’s workflow files to reusable ones. This allows the same workflow to be used for all (or most) branches, allowing the described maintenance updates to be made once in trunk.

To keep track of which files are reusable vs. those that are responsible for holding the strategy matrix for that branch, reusable workflows are now prefixed with reusable-.

Props johnbillion, swissspidy, jorbin, desrosj.
Fixes #61213.

Location:
trunk/.github/workflows
Files:
6 added
8 edited
4 moved

Legend:

Unmodified
Added
Removed
  • trunk/.github/workflows/coding-standards.yml

    r57757 r58165  
    4646
    4747jobs:
    48   # Runs PHP coding standards checks.
    49   #
    50   # Violations are reported inline with annotations.
    51   #
    52   # Performs the following steps:
    53   # - Checks out the repository.
    54   # - Sets up PHP.
    55   # - Configures caching for PHPCS scans.
    56   # - Installs Composer dependencies.
    57   # - Make Composer packages available globally.
    58   # - Runs PHPCS on the full codebase with warnings suppressed.
    59   # - Generate a report for displaying issues as pull request annotations.
    60   # - Runs PHPCS on the `tests` directory without warnings suppressed.
    61   # - Generate a report for displaying `test` directory issues as pull request annotations.
    62   # - Ensures version-controlled files are not modified or deleted.
     48  # Runs the PHP coding standards checks.
    6349  phpcs:
    6450    name: PHP coding standards
    65     runs-on: ubuntu-latest
     51    uses: WordPress/wordpress-develop/.github/workflows/reusable-coding-standards-php.yml@trunk
    6652    permissions:
    6753      contents: read
    68     timeout-minutes: 20
    6954    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    7055
    71     steps:
    72       - name: Checkout repository
    73         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
    74         with:
    75           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
    76 
    77       - name: Set up PHP
    78         uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2.30.0
    79         with:
    80           php-version: 'latest'
    81           coverage: none
    82           tools: cs2pr
    83 
    84       # This date is used to ensure that the PHPCS cache is cleared at least once every week.
    85       # http://man7.org/linux/man-pages/man1/date.1.html
    86       - name: "Get last Monday's date"
    87         id: get-date
    88         run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT
    89 
    90       - name: Cache PHPCS scan cache
    91         uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
    92         with:
    93           path: |
    94             .cache/phpcs-src.json
    95             .cache/phpcs-tests.json
    96           key: ${{ runner.os }}-date-${{ steps.get-date.outputs.date }}-phpcs-cache-${{ hashFiles('**/composer.json', 'phpcs.xml.dist') }}
    97 
    98       # Since Composer dependencies are installed using `composer update` and no lock file is in version control,
    99       # passing a custom cache suffix ensures that the cache is flushed at least once per week.
    100       - name: Install Composer dependencies
    101         uses: ramsey/composer-install@57532f8be5bda426838819c5ee9afb8af389d51a # v3.0.0
    102         with:
    103           custom-cache-suffix: ${{ steps.get-date.outputs.date }}
    104 
    105       - name: Make Composer packages available globally
    106         run: echo "${PWD}/vendor/bin" >> $GITHUB_PATH
    107 
    108       - name: Run PHPCS on all Core files
    109         id: phpcs-core
    110         run: phpcs -n --report-full --cache=./.cache/phpcs-src.json --report-checkstyle=./.cache/phpcs-report.xml
    111 
    112       - name: Show PHPCS results in PR
    113         if: ${{ always() && steps.phpcs-core.outcome == 'failure' }}
    114         run: cs2pr ./.cache/phpcs-report.xml
    115 
    116       - name: Check test suite files for warnings
    117         id: phpcs-tests
    118         run: phpcs tests --report-full --cache=./.cache/phpcs-tests.json --report-checkstyle=./.cache/phpcs-tests-report.xml
    119 
    120       - name: Show test suite scan results in PR
    121         if: ${{ always() && steps.phpcs-tests.outcome == 'failure' }}
    122         run: cs2pr ./.cache/phpcs-tests-report.xml
    123 
    124       - name: Ensure version-controlled files are not modified during the tests
    125         run: git diff --exit-code
    126 
    12756  # Runs the JavaScript coding standards checks.
    128   #
    129   # JSHint violations are not currently reported inline with annotations.
    130   #
    131   # Performs the following steps:
    132   # - Checks out the repository.
    133   # - Sets up Node.js.
    134   # - Logs debug information about the GitHub Action runner.
    135   # - Installs npm dependencies.
    136   # - Run the WordPress JSHint checks.
    137   # - Ensures version-controlled files are not modified or deleted.
    13857  jshint:
    13958    name: JavaScript coding standards
    140     runs-on: ubuntu-latest
     59    uses: WordPress/wordpress-develop/.github/workflows/reusable-coding-standards-javascript.yml@trunk
    14160    permissions:
    14261      contents: read
    143     timeout-minutes: 20
    14462    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    145     env:
    146       PUPPETEER_SKIP_DOWNLOAD: ${{ true }}
    147 
    148     steps:
    149       - name: Checkout repository
    150         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
    151         with:
    152           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
    153 
    154       - name: Set up Node.js
    155         uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
    156         with:
    157           node-version-file: '.nvmrc'
    158           cache: npm
    159 
    160       - name: Log debug information
    161         run: |
    162           npm --version
    163           node --version
    164           git --version
    165 
    166       - name: Install npm Dependencies
    167         run: npm ci
    168 
    169       - name: Run JSHint
    170         run: npm run grunt jshint
    171 
    172       - name: Ensure version-controlled files are not modified or deleted
    173         run: git diff --exit-code
    17463
    17564  slack-notifications:
  • trunk/.github/workflows/end-to-end-tests.yml

    r57918 r58165  
    3737jobs:
    3838  # Runs the end-to-end test suite.
    39   #
    40   # Performs the following steps:
    41   # - Sets environment variables.
    42   # - Checks out the repository.
    43   # - Sets up Node.js.
    44   # - Logs debug information about the GitHub Action runner.
    45   # - Installs npm dependencies.
    46   # - Install Playwright browsers.
    47   # - Builds WordPress to run from the `build` directory.
    48   # - Starts the WordPress Docker container.
    49   # - Logs the running Docker containers.
    50   # - Logs Docker debug information (about both the Docker installation within the runner and the WordPress container).
    51   # - Install WordPress within the Docker container.
    52   # - Install Gutenberg.
    53   # - Run the E2E tests.
    54   # - Ensures version-controlled files are not modified or deleted.
    5539  e2e-tests:
    56     name: E2E Tests with SCRIPT_DEBUG ${{ matrix.LOCAL_SCRIPT_DEBUG && 'enabled' || 'disabled' }}
    57     runs-on: ubuntu-latest
     40    name: Test with SCRIPT_DEBUG ${{ matrix.LOCAL_SCRIPT_DEBUG && 'enabled' || 'disabled' }}
     41    uses: WordPress/wordpress-develop/.github/workflows/reusable-end-to-end-tests.yml@trunk
    5842    permissions:
    5943      contents: read
    60     timeout-minutes: 20
    6144    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    6245    strategy:
     
    6447      matrix:
    6548        LOCAL_SCRIPT_DEBUG: [ true, false ]
    66 
    67     steps:
    68       - name: Configure environment variables
    69         run: |
    70           echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
    71           echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
    72 
    73       - name: Checkout repository
    74         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
    75         with:
    76           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
    77 
    78       - name: Set up Node.js
    79         uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
    80         with:
    81           node-version-file: '.nvmrc'
    82           cache: npm
    83 
    84       - name: Log debug information
    85         run: |
    86           npm --version
    87           node --version
    88           curl --version
    89           git --version
    90           locale -a
    91 
    92       - name: Install npm Dependencies
    93         run: npm ci
    94 
    95       - name: Install Playwright browsers
    96         run: npx playwright install --with-deps
    97 
    98       - name: Build WordPress
    99         run: npm run build
    100 
    101       - name: Start Docker environment
    102         run: |
    103           npm run env:start
    104 
    105       - name: Log running Docker containers
    106         run: docker ps -a
    107 
    108       - name: Docker debug information
    109         run: |
    110           docker -v
    111           docker compose run --rm mysql mysql --version
    112           docker compose run --rm php php --version
    113           docker compose run --rm php php -m
    114           docker compose run --rm php php -i
    115           docker compose run --rm php locale -a
    116 
    117       - name: Install WordPress
    118         env:
    119           LOCAL_SCRIPT_DEBUG: ${{ matrix.LOCAL_SCRIPT_DEBUG }}
    120         run: npm run env:install
    121 
    122       - name: Install Gutenberg
    123         run: npm run env:cli -- plugin install gutenberg --path=/var/www/${{ env.LOCAL_DIR }}
    124 
    125       - name: Run E2E tests
    126         run: npm run test:e2e
    127 
    128       - name: Archive debug artifacts (screenshots, HTML snapshots)
    129         uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
    130         if: always()
    131         with:
    132             name: failures-artifacts${{ matrix.LOCAL_SCRIPT_DEBUG && '-SCRIPT_DEBUG' || '' }}-${{ github.run_id }}
    133             path: artifacts
    134             if-no-files-found: ignore
    135 
    136       - name: Ensure version-controlled files are not modified or deleted
    137         run: git diff --exit-code
     49    with:
     50      LOCAL_SCRIPT_DEBUG: ${{ matrix.LOCAL_SCRIPT_DEBUG }}
    13851
    13952  slack-notifications:
  • trunk/.github/workflows/javascript-tests.yml

    r57655 r58165  
    4444
    4545jobs:
    46   # Runs the QUnit tests for WordPress.
    47   #
    48   # Performs the following steps:
    49   # - Checks out the repository.
    50   # - Sets up Node.js.
    51   # - Logs debug information about the GitHub Action runner.
    52   # - Installs npm dependencies.
    53   # - Run the WordPress QUnit tests.
    54   # - Ensures version-controlled files are not modified or deleted.
     46  # Runs the WordPress Core JavaScript tests.
    5547  test-js:
    5648    name: QUnit Tests
    57     runs-on: ubuntu-latest
     49    uses: WordPress/wordpress-develop/.github/workflows/reusable-javascript-tests.yml@trunk
    5850    permissions:
    5951      contents: read
    60     timeout-minutes: 20
    6152    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    62 
    63     steps:
    64       - name: Checkout repository
    65         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
    66         with:
    67           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
    68 
    69       - name: Set up Node.js
    70         uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
    71         with:
    72           node-version-file: '.nvmrc'
    73           cache: npm
    74 
    75       - name: Log debug information
    76         run: |
    77           npm --version
    78           node --version
    79           git --version
    80 
    81       - name: Install npm Dependencies
    82         run: npm ci
    83 
    84       - name: Run QUnit tests
    85         run: npm run grunt qunit:compiled
    86 
    87       - name: Ensure version-controlled files are not modified or deleted
    88         run: git diff --exit-code
    8953
    9054  slack-notifications:
  • trunk/.github/workflows/performance.yml

    r58076 r58165  
    3030permissions: {}
    3131
    32 env:
    33   PUPPETEER_SKIP_DOWNLOAD: ${{ true }}
    34 
    35   # Performance testing should be performed in an environment reflecting a standard production environment.
    36   LOCAL_WP_DEBUG: false
    37   LOCAL_SCRIPT_DEBUG: false
    38   LOCAL_SAVEQUERIES: false
    39   LOCAL_WP_DEVELOPMENT_MODE: "''"
    40 
    41   # This workflow takes two sets of measurements — one for the current commit,
    42   # and another against a consistent version that is used as a baseline measurement.
    43   # This is done to isolate variance in measurements caused by the GitHub runners
    44   # from differences caused by code changes between commits. The BASE_TAG value here
    45   # represents the version being used for baseline measurements. It should only be
    46   # changed if we want to normalize results against a different baseline.
    47   BASE_TAG: '6.1.1'
    48   LOCAL_DIR: build
    49   TARGET_REF: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || '' }}
    50   TARGET_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
    51 
    5232jobs:
    5333  # Runs the performance test suite.
    54   #
    55   # Performs the following steps:
    56   # - Configure environment variables.
    57   # - Checkout repository.
    58   # - Set up Node.js.
    59   # - Log debug information.
    60   # - Install npm dependencies.
    61   # - Install Playwright browsers.
    62   # - Build WordPress.
    63   # - Start Docker environment.
    64   # - Log running Docker containers.
    65   # - Docker debug information.
    66   # - Install WordPress.
    67   # - Install WordPress Importer plugin.
    68   # - Import mock data.
    69   # - Deactivate WordPress Importer plugin.
    70   # - Update permalink structure.
    71   # - Install additional languages.
    72   # - Disable external HTTP requests.
    73   # - Disable cron.
    74   # - List defined constants.
    75   # - Install MU plugin.
    76   # - Run performance tests (current commit).
    77   # - Download previous build artifact (target branch or previous commit).
    78   # - Download artifact.
    79   # - Unzip the build.
    80   # - Run any database upgrades.
    81   # - Flush cache.
    82   # - Delete expired transients.
    83   # - Run performance tests (previous/target commit).
    84   # - Set the environment to the baseline version.
    85   # - Run any database upgrades.
    86   # - Flush cache.
    87   # - Delete expired transients.
    88   # - Run baseline performance tests.
    89   # - Archive artifacts.
    90   # - Compare results.
    91   # - Add workflow summary.
    92   # - Set the base sha.
    93   # - Set commit details.
    94   # - Publish performance results.
    95   # - Ensure version-controlled files are not modified or deleted.
    9634  performance:
    97     name: Run performance tests ${{ matrix.memcached && '(with memcached)' || '' }}
    98     runs-on: ubuntu-latest
     35    name: Performance tests ${{ matrix.memcached && '(with memcached)' || '' }}
     36    uses: WordPress/wordpress-develop/.github/workflows/reusable-performance.yml@trunk
    9937    permissions:
    10038      contents: read
     
    10442      matrix:
    10543        memcached: [ true, false ]
    106     env:
    107       LOCAL_PHP_MEMCACHED: ${{ matrix.memcached }}
    108     steps:
    109       - name: Configure environment variables
    110         run: |
    111           echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
    112           echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
    113 
    114       - name: Checkout repository
    115         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
    116         with:
    117           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
    118 
    119       - name: Set up Node.js
    120         uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
    121         with:
    122           node-version-file: '.nvmrc'
    123           cache: npm
    124 
    125       - name: Log debug information
    126         run: |
    127           npm --version
    128           node --version
    129           curl --version
    130           git --version
    131           locale -a
    132 
    133       - name: Install npm dependencies
    134         run: npm ci
    135 
    136       - name: Install Playwright browsers
    137         run: npx playwright install --with-deps chromium
    138 
    139       - name: Build WordPress
    140         run: npm run build
    141 
    142       - name: Start Docker environment
    143         run: npm run env:start
    144 
    145       - name: Install object cache drop-in
    146         if: ${{ matrix.memcached }}
    147         run: cp src/wp-content/object-cache.php build/wp-content/object-cache.php
    148 
    149       - name: Log running Docker containers
    150         run: docker ps -a
    151 
    152       - name: Docker debug information
    153         run: |
    154           docker -v
    155           docker compose run --rm mysql mysql --version
    156           docker compose run --rm php php --version
    157           docker compose run --rm php php -m
    158           docker compose run --rm php php -i
    159           docker compose run --rm php locale -a
    160 
    161       - name: Install WordPress
    162         run: npm run env:install
    163 
    164       - name: Install WordPress Importer plugin
    165         run: npm run env:cli -- plugin install wordpress-importer --activate --path=/var/www/${{ env.LOCAL_DIR }}
    166 
    167       - name: Import mock data
    168         run: |
    169           curl -O https://raw.githubusercontent.com/WordPress/theme-test-data/b9752e0533a5acbb876951a8cbb5bcc69a56474c/themeunittestdata.wordpress.xml
    170           npm run env:cli -- import themeunittestdata.wordpress.xml --authors=create --path=/var/www/${{ env.LOCAL_DIR }}
    171           rm themeunittestdata.wordpress.xml
    172 
    173       - name: Deactivate WordPress Importer plugin
    174         run: npm run env:cli -- plugin deactivate wordpress-importer --path=/var/www/${{ env.LOCAL_DIR }}
    175 
    176       - name: Update permalink structure
    177         run: npm run env:cli -- rewrite structure '/%year%/%monthnum%/%postname%/' --path=/var/www/${{ env.LOCAL_DIR }}
    178 
    179       - name: Install additional languages
    180         run: |
    181           npm run env:cli -- language core install de_DE --path=/var/www/${{ env.LOCAL_DIR }}
    182           npm run env:cli -- language plugin install de_DE --all --path=/var/www/${{ env.LOCAL_DIR }}
    183           npm run env:cli -- language theme install de_DE --all --path=/var/www/${{ env.LOCAL_DIR }}
    184 
    185       # Prevent background update checks from impacting test stability.
    186       - name: Disable external HTTP requests
    187         run: npm run env:cli -- config set WP_HTTP_BLOCK_EXTERNAL true --raw --type=constant --path=/var/www/${{ env.LOCAL_DIR }}
    188 
    189       # Prevent background tasks from impacting test stability.
    190       - name: Disable cron
    191         run: npm run env:cli -- config set DISABLE_WP_CRON true --raw --type=constant --path=/var/www/${{ env.LOCAL_DIR }}
    192 
    193       - name: List defined constants
    194         run: npm run env:cli -- config list --path=/var/www/${{ env.LOCAL_DIR }}
    195 
    196       - name: Install MU plugin
    197         run: |
    198           mkdir ./${{ env.LOCAL_DIR }}/wp-content/mu-plugins
    199           cp ./tests/performance/wp-content/mu-plugins/server-timing.php ./${{ env.LOCAL_DIR }}/wp-content/mu-plugins/server-timing.php
    200 
    201       - name: Run performance tests (current commit)
    202         run: npm run test:performance
    203 
    204       - name: Download previous build artifact (target branch or previous commit)
    205         uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
    206         id: get-previous-build
    207         with:
    208           script: |
    209             const artifacts = await github.rest.actions.listArtifactsForRepo({
    210               owner: context.repo.owner,
    211               repo: context.repo.repo,
    212               name: 'wordpress-build-' + process.env.TARGET_SHA,
    213             });
    214 
    215             const matchArtifact = artifacts.data.artifacts[0];
    216 
    217             if ( ! matchArtifact ) {
    218               core.setFailed( 'No artifact found!' );
    219               return false;
    220             }
    221 
    222             const download = await github.rest.actions.downloadArtifact( {
    223               owner: context.repo.owner,
    224               repo: context.repo.repo,
    225               artifact_id: matchArtifact.id,
    226               archive_format: 'zip',
    227             } );
    228 
    229             const fs = require( 'fs' );
    230             fs.writeFileSync( '${{ github.workspace }}/before.zip', Buffer.from( download.data ) )
    231 
    232             return true;
    233 
    234       - name: Unzip the build
    235         if: ${{ steps.get-previous-build.outputs.result }}
    236         run: |
    237           unzip ${{ github.workspace }}/before.zip
    238           unzip -o ${{ github.workspace }}/wordpress.zip
    239 
    240       - name: Run any database upgrades
    241         if: ${{ steps.get-previous-build.outputs.result }}
    242         run: npm run env:cli -- core update-db --path=/var/www/${{ env.LOCAL_DIR }}
    243 
    244       - name: Flush cache
    245         if: ${{ steps.get-previous-build.outputs.result }}
    246         run: npm run env:cli -- cache flush --path=/var/www/${{ env.LOCAL_DIR }}
    247 
    248       - name: Delete expired transients
    249         if: ${{ steps.get-previous-build.outputs.result }}
    250         run: npm run env:cli -- transient delete --expired --path=/var/www/${{ env.LOCAL_DIR }}
    251 
    252       - name: Run target performance tests (previous/target commit)
    253         if: ${{ steps.get-previous-build.outputs.result }}
    254         env:
    255           TEST_RESULTS_PREFIX: before
    256         run: npm run test:performance
    257 
    258       - name: Set the environment to the baseline version
    259         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
    260         run: |
    261           npm run env:cli -- core update --version=${{ env.BASE_TAG }} --force --path=/var/www/${{ env.LOCAL_DIR }}
    262           npm run env:cli -- core version --path=/var/www/${{ env.LOCAL_DIR }}
    263 
    264       - name: Run any database upgrades
    265         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
    266         run: npm run env:cli -- core update-db --path=/var/www/${{ env.LOCAL_DIR }}
    267 
    268       - name: Flush cache
    269         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
    270         run: npm run env:cli -- cache flush --path=/var/www/${{ env.LOCAL_DIR }}
    271 
    272       - name: Delete expired transients
    273         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
    274         run: npm run env:cli -- transient delete --expired --path=/var/www/${{ env.LOCAL_DIR }}
    275 
    276       - name: Run baseline performance tests
    277         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
    278         env:
    279           TEST_RESULTS_PREFIX: base
    280         run: npm run test:performance
    281 
    282       - name: Archive artifacts
    283         uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
    284         if: always()
    285         with:
    286           name: performance-artifacts${{ matrix.memcached && '-memcached' || '' }}-${{ github.run_id }}
    287           path: artifacts
    288           if-no-files-found: ignore
    289 
    290       - name: Compare results
    291         run: node ./tests/performance/compare-results.js ${{ runner.temp }}/summary.md
    292 
    293       - name: Add workflow summary
    294         run: cat ${{ runner.temp }}/summary.md >> $GITHUB_STEP_SUMMARY
    295 
    296       - name: Set the base sha
    297         # Only needed when publishing results.
    298         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! matrix.memcached }}
    299         uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
    300         id: base-sha
    301         with:
    302             github-token: ${{ secrets.GITHUB_TOKEN }}
    303             script: |
    304                 const baseRef = await github.rest.git.getRef({ owner: context.repo.owner, repo: context.repo.repo, ref: 'tags/${{ env.BASE_TAG }}' });
    305                 return baseRef.data.object.sha;
    306 
    307       - name: Set commit details
    308         # Only needed when publishing results.
    309         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! matrix.memcached }}
    310         uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
    311         id: commit-timestamp
    312         with:
    313             github-token: ${{ secrets.GITHUB_TOKEN }}
    314             script: |
    315                 const commit_details = await github.rest.git.getCommit({ owner: context.repo.owner, repo: context.repo.repo, commit_sha: context.sha });
    316                 return parseInt((new Date( commit_details.data.author.date ).getTime() / 1000).toFixed(0))
    317 
    318       - name: Publish performance results
    319         # Only publish results on pushes to trunk.
    320         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! matrix.memcached }}
    321         env:
    322             BASE_SHA: ${{ steps.base-sha.outputs.result }}
    323             COMMITTED_AT: ${{ steps.commit-timestamp.outputs.result }}
    324             CODEVITALS_PROJECT_TOKEN: ${{ secrets.CODEVITALS_PROJECT_TOKEN }}
    325             HOST_NAME: "www.codevitals.run"
    326         run: node ./tests/performance/log-results.js $CODEVITALS_PROJECT_TOKEN trunk $GITHUB_SHA $BASE_SHA $COMMITTED_AT $HOST_NAME
    327 
    328       - name: Ensure version-controlled files are not modified or deleted
    329         run: git diff --exit-code
     44    with:
     45      memcached: ${{ matrix.memcached }}
    33046
    33147  slack-notifications:
  • trunk/.github/workflows/php-compatibility.yml

    r57757 r58165  
    4141
    4242jobs:
    43 
    4443  # Runs PHP compatibility testing.
    45   #
    46   # Violations are reported inline with annotations.
    47   #
    48   # Performs the following steps:
    49   # - Checks out the repository.
    50   # - Sets up PHP.
    51   # - Logs debug information.
    52   # - Configures caching for PHP compatibility scans.
    53   # - Installs Composer dependencies.
    54   # - Make Composer packages available globally.
    55   # - Runs the PHP compatibility tests.
    56   # - Generate a report for displaying issues as pull request annotations.
    57   # - Ensures version-controlled files are not modified or deleted.
    5844  php-compatibility:
    5945    name: Check PHP compatibility
    60     runs-on: ubuntu-latest
     46    uses: WordPress/wordpress-develop/.github/workflows/reusable-php-compatibility.yml@trunk
    6147    permissions:
    6248      contents: read
    63     timeout-minutes: 20
    6449    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    65 
    66     steps:
    67       - name: Checkout repository
    68         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
    69         with:
    70           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
    71 
    72       - name: Set up PHP
    73         uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2.30.0
    74         with:
    75           php-version: '7.4'
    76           coverage: none
    77           tools: cs2pr
    78 
    79       - name: Log debug information
    80         run: |
    81           composer --version
    82 
    83       # This date is used to ensure that the PHP compatibility cache is cleared at least once every week.
    84       # http://man7.org/linux/man-pages/man1/date.1.html
    85       - name: "Get last Monday's date"
    86         id: get-date
    87         run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT
    88 
    89       - name: Cache PHP compatibility scan cache
    90         uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1
    91         with:
    92           path: .cache/phpcompat.json
    93           key: ${{ runner.os }}-date-${{ steps.get-date.outputs.date }}-phpcompat-cache-${{ hashFiles('**/composer.json', 'phpcompat.xml.dist') }}
    94 
    95       # Since Composer dependencies are installed using `composer update` and no lock file is in version control,
    96       # passing a custom cache suffix ensures that the cache is flushed at least once per week.
    97       - name: Install Composer dependencies
    98         uses: ramsey/composer-install@57532f8be5bda426838819c5ee9afb8af389d51a # v3.0.0
    99         with:
    100           custom-cache-suffix: ${{ steps.get-date.outputs.date }}
    101 
    102       - name: Make Composer packages available globally
    103         run: echo "${PWD}/vendor/bin" >> $GITHUB_PATH
    104 
    105       - name: Run PHP compatibility tests
    106         id: phpcs
    107         run: phpcs --standard=phpcompat.xml.dist --report-full --report-checkstyle=./.cache/phpcs-compat-report.xml
    108 
    109       - name: Show PHPCompatibility results in PR
    110         if: ${{ always() && steps.phpcs.outcome == 'failure' }}
    111         run: cs2pr ./.cache/phpcs-compat-report.xml
    112 
    113       - name: Ensure version-controlled files are not modified or deleted
    114         run: git diff --exit-code
    11550
    11651  slack-notifications:
  • trunk/.github/workflows/phpunit-tests.yml

    r58097 r58165  
    3737  test-with-mysql:
    3838    name: PHP ${{ matrix.php }}
    39     uses: WordPress/wordpress-develop/.github/workflows/phpunit-tests-run.yml@trunk
     39    uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests.yml@trunk
    4040    permissions:
    4141      contents: read
     
    109109  test-with-mariadb:
    110110    name: PHP ${{ matrix.php }}
    111     uses: WordPress/wordpress-develop/.github/workflows/phpunit-tests-run.yml@trunk
     111    uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests.yml@trunk
    112112    permissions:
    113113      contents: read
  • trunk/.github/workflows/reusable-phpunit-tests.yml

    r58164 r58165  
    11##
    2 # A callable workflow that runs the PHPUnit test suite with the specified configuration.
     2# A reusable workflow that runs the PHPUnit test suite with the specified configuration.
    33##
    44name: Run PHPUnit tests
  • trunk/.github/workflows/reusable-test-core-build-process.yml

    r58164 r58165  
    11##
    2 # A callable workflow that tests the WordPress Core build process.
     2# A reusable workflow that tests the WordPress Core build process.
    33##
    44name: Test the WordPress Build Process
     
    1717        type: 'string'
    1818        default: 'src'
     19      test-emoji:
     20        description: 'Whether to run the grunt precommit:emoji script.'
     21        required: false
     22        type: 'boolean'
     23        default: true
    1924
    2025env:
     
    6368
    6469      - name: Run Emoji precommit task
     70        if: ${{ inputs.test-emoji }}
    6571        run: npm run grunt precommit:emoji
    6672        env:
  • trunk/.github/workflows/reusable-test-gutenberg-build-process.yml

    r58164 r58165  
    11##
    2 # A callable workflow that tests the Gutenberg plugin build process when run within a wordpress-develop checkout.
     2# A reusable workflow that tests the Gutenberg plugin build process when run within a wordpress-develop checkout.
    33##
    44name: Test the Gutenberg plugin Build Process
  • trunk/.github/workflows/reusable-upgrade-testing.yml

    r58164 r58165  
    1 # A callable workflow that runs WordPress upgrade testing under the conditions provided.
     1# A reusable workflow that runs WordPress upgrade testing under the conditions provided.
    22name: Upgrade Tests
    33
  • trunk/.github/workflows/test-build-processes.yml

    r57655 r58165  
    3232  test-core-build-process:
    3333    name: Core running from ${{ matrix.directory }}
    34     uses: WordPress/wordpress-develop/.github/workflows/callable-test-core-build-process.yml@trunk
     34    uses: WordPress/wordpress-develop/.github/workflows/reusable-test-core-build-process.yml@trunk
    3535    permissions:
    3636      contents: read
     
    5555  test-core-build-process-macos:
    5656    name: Core running from ${{ matrix.directory }}
    57     uses: WordPress/wordpress-develop/.github/workflows/callable-test-core-build-process.yml@trunk
     57    uses: WordPress/wordpress-develop/.github/workflows/reusable-test-core-build-process.yml@trunk
    5858    permissions:
    5959      contents: read
     
    7171  test-gutenberg-build-process:
    7272    name: Gutenberg running from ${{ matrix.directory }}
    73     uses: WordPress/wordpress-develop/.github/workflows/callable-test-gutenberg-build-process.yml@trunk
     73    uses: WordPress/wordpress-develop/.github/workflows/reusable-test-gutenberg-build-process.yml@trunk
    7474    permissions:
    7575      contents: read
     
    9494  test-gutenberg-build-process-macos:
    9595    name: Gutenberg running from ${{ matrix.directory }}
    96     uses: WordPress/wordpress-develop/.github/workflows/callable-test-gutenberg-build-process.yml@trunk
     96    uses: WordPress/wordpress-develop/.github/workflows/reusable-test-gutenberg-build-process.yml@trunk
    9797    permissions:
    9898      contents: read
  • trunk/.github/workflows/upgrade-testing.yml

    r57985 r58165  
    3636  upgrade-tests-wp-6x-mysql:
    3737    name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }}
    38     uses: WordPress/wordpress-develop/.github/workflows/upgrade-testing-run.yml@trunk
     38    uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk
    3939    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    4040    permissions:
     
    6161  upgrade-tests-wp-5x-php-7x-mysql:
    6262    name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }}
    63     uses: WordPress/wordpress-develop/.github/workflows/upgrade-testing-run.yml@trunk
     63    uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk
    6464    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    6565    strategy:
     
    8888  upgrade-tests-wp-5x-php-8x-mysql:
    8989    name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }}
    90     uses: WordPress/wordpress-develop/.github/workflows/upgrade-testing-run.yml@trunk
     90    uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk
    9191    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    9292    strategy:
     
    111111  upgrade-tests-wp-4x-php-7x-mysql:
    112112    name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }}
    113     uses: WordPress/wordpress-develop/.github/workflows/upgrade-testing-run.yml@trunk
     113    uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk
    114114    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    115115    strategy:
     
    138138  upgrade-tests-wp-4x-php-8x-mysql:
    139139    name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }}
    140     uses: WordPress/wordpress-develop/.github/workflows/upgrade-testing-run.yml@trunk
     140    uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk
    141141    if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
    142142    strategy:
Note: See TracChangeset for help on using the changeset viewer.