-
Notifications
You must be signed in to change notification settings - Fork 21
133 lines (116 loc) · 4.89 KB
/
unit-tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
name: Unit Tests
on:
# Run on all pushes and on all pull requests.
# Prevent the build from running when there are only irrelevant changes.
push:
paths-ignore:
- "**.md"
- "**.txt"
pull_request:
paths-ignore:
- "**.md"
- "**.txt"
# Allow manually triggering the workflow.
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Notes regarding supported versions in WP:
# The base matrix only contains the PHP versions which are supported on all supported WP versions.
php: ["7.2", "7.3", "7.4", "8.0"]
wp: ["latest"]
experimental: [false]
include:
- php: "8.1"
wp: "trunk"
experimental: true
- php: "8.2"
wp: "trunk"
experimental: true
- php: "8.0"
wp: "5.6"
experimental: true
- php: "7.4"
wp: "5.5"
experimental: true
- php: "7.4"
wp: "latest"
experimental: true
name: "PHP ${{ matrix.php }} - WP ${{ matrix.wp }}"
continue-on-error: ${{ matrix.experimental }}
services:
mysql:
# WP 5.4 is the first WP version which largely supports MySQL 8.0.
# See: https://core.trac.wordpress.org/ticket/49344
# During the setting up of these tests, it became clear that MySQL 8.0
# in combination with PHP < 7.4 is not properly/sufficiently supported
# within WP Core.
# See: https://core.trac.wordpress.org/ticket/52496
image: mysql:${{ ( matrix.wp == 5.3 && '5.6' ) || ( (matrix.wp < 5.4 || matrix.php < 7.4) && '5.7' ) || '8.0' }}
env:
MYSQL_ALLOW_EMPTY_PASSWORD: false
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=10s --health-retries=10
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
coverage: none
extensions: mysqli
- name: Set up WordPress
run: phpunit/install.sh wordpress_test root '' 127.0.0.1:3306 ${{ matrix.wp }}
# Determine the type of Composer install which is needed.
# 1. WP 5.9 or higher - all PHPUnit versions needed are supported, use the most appropriate one.
# 2. WP 5.9 or higher with PHP 8.2 (RC) - not all dependencies of PHPUnit have declared PHP 8.2 compatibility, so needs ignore platform.
# 3. WP < 5.9 with PHP < 8.0 - PHPUnit 5 - 7 supported, use the most appropriate one.
# 4. WP < 5.9 with PHP 8.0 or higher - PHPUnit 5 - 7 supported, needs ignore platform reqs to install PHPUnit 7 for PHP >= 8.0.
- name: Determine the type of Composer install to use
id: composer_toggle
run: |
if [[ "${{ matrix.wp }}" =~ ^(trunk|latest|5\.9|[6789]\.[0-9])$ ]]; then
if [[ "${{ matrix.php }}" != "8.2" ]]; then
echo '::set-output name=TYPE::1'
else
echo '::set-output name=TYPE::2'
fi
elif [[ "${{ matrix.php }}" > "7.4" ]]; then
echo '::set-output name=TYPE::4'
else
echo '::set-output name=TYPE::3'
fi
# Remove the PHPUnit requirement for WP 5.9 and higher in favour of letting the Polyfills manage it.
# The Composer command will exit with error code 2 as the package is not removed, so ignore "failure" of this step.
- name: Conditionally remove PHPUnit requirement
if: ${{ steps.composer_toggle.outputs.TYPE == '1' || steps.composer_toggle.outputs.TYPE == '2' }}
continue-on-error: true
run: composer remove --dev phpunit/phpunit --no-update --no-interaction || true
# Install dependencies and handle caching in one go.
# @link https://github.com/marketplace/actions/install-composer-dependencies
- name: Install Composer dependencies - normal
if: ${{ steps.composer_toggle.outputs.TYPE == '1' || steps.composer_toggle.outputs.TYPE == '3' }}
uses: "ramsey/composer-install@v2"
# For PHP 8.0 and above on WP 5.2 - 5.8, we need to install with ignore platform reqs as not all dependencies allow it.
- name: Install Composer dependencies with ignore platform reqs
if: ${{ steps.composer_toggle.outputs.TYPE == '2' || steps.composer_toggle.outputs.TYPE == '4' }}
uses: "ramsey/composer-install@v2"
with:
composer-options: --ignore-platform-req=php
- name: Tool versions
continue-on-error: true
run: |
php --version
composer --version
vendor/bin/phpunit --version
- name: Run the unit tests - single site
run: vendor/bin/phpunit
- name: Run the unit tests - multisite
run: vendor/bin/phpunit
env:
WP_MULTISITE: 1