Skip to content

Commit fe3bc4a

Browse files
committed
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. git-svn-id: https://develop.svn.wordpress.org/trunk@58165 602fd350-edb4-49c9-b593-d223f7449a82
1 parent 236a7e0 commit fe3bc4a

18 files changed

+759
-612
lines changed

.github/workflows/coding-standards.yml

Lines changed: 3 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -45,132 +45,21 @@ concurrency:
4545
permissions: {}
4646

4747
jobs:
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:
17665
name: Slack Notifications

.github/workflows/end-to-end-tests.yml

Lines changed: 4 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -36,105 +36,18 @@ env:
3636

3737
jobs:
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:
6346
fail-fast: false
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:
14053
name: Slack Notifications

.github/workflows/javascript-tests.yml

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -43,50 +43,14 @@ concurrency:
4343
permissions: {}
4444

4545
jobs:
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' }}
6253

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
89-
9054
slack-notifications:
9155
name: Slack Notifications
9256
uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk

0 commit comments

Comments
 (0)