8989 # - custom_ini: Whether to run with specific custom ini settings to hit very specific
9090 # code conditions.
9191 matrix :
92+ os : ['ubuntu-latest', 'windows-latest']
9293 php : ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5']
9394 custom_ini : [false]
9495
@@ -102,9 +103,11 @@ jobs:
102103
103104 # Extra builds running only the unit tests with different PHP ini settings.
104105 - php : ' 7.4'
106+ os : ' ubuntu-latest'
105107 custom_ini : true
106108
107- name : " PHP: ${{ matrix.php }} ${{ matrix.custom_ini && ' with custom ini settings' || '' }}"
109+ # yamllint disable-line rule:line-length
110+ name : " PHP: ${{ matrix.php }} ${{ matrix.custom_ini && ' with custom ini settings' || '' }} (${{ matrix.os == 'ubuntu-latest' && 'Linux' || 'Win' }})"
108111
109112 continue-on-error : ${{ matrix.php == '8.5' }}
110113
@@ -114,6 +117,7 @@ jobs:
114117
115118 - name : Setup ini config
116119 id : set_ini
120+ shell : bash
117121 run : |
118122 # Set the "short_open_tag" ini to make sure specific conditions are tested.
119123 # Also turn on error_reporting to ensure all notices are shown.
@@ -142,20 +146,20 @@ jobs:
142146 # Note: The code style check is run multiple times against every PHP version
143147 # as it also acts as an integration test.
144148 - name : ' PHPCS: set the path to PHP'
145- run : php bin/phpcs --config-set php_path php
149+ run : php " bin/phpcs" --config-set php_path php
146150
147- - name : ' PHPUnit: run the tests without code coverage'
151+ - name : ' PHPUnit: run the full test suite without code coverage'
148152 if : ${{ matrix.skip_tests != true }}
149- run : vendor/bin/phpunit --no-coverage
153+ run : php " vendor/bin/phpunit" --no-coverage
150154
151155 - name : ' PHPCS: check code style without cache, no parallel'
152156 if : ${{ matrix.custom_ini == false && matrix.php != '7.4' }}
153- run : php bin/phpcs --no-cache --parallel=1
157+ run : php " bin/phpcs" --no-cache --parallel=1
154158
155159 - name : ' PHPCS: check code style to show results in PR'
156160 if : ${{ matrix.custom_ini == false && matrix.php == '7.4' }}
157161 id : phpcs
158- run : php bin/phpcs --no-cache --parallel=1 --report-full --report-checkstyle=./phpcs-report.xml
162+ run : php " bin/phpcs" --no-cache --parallel=1 --report-full --report-checkstyle=./phpcs-report.xml
159163
160164 - name : Show PHPCS results in PR
161165 if : ${{ always() && steps.phpcs.outcome == 'failure' && matrix.php == '7.4' }}
@@ -173,40 +177,42 @@ jobs:
173177 run : php phpcs.phar
174178
175179 coverage :
176- runs-on : ubuntu-latest
180+ runs-on : ${{ matrix.os }}
177181
178182 strategy :
179183 matrix :
184+ os : ['ubuntu-latest', 'windows-latest']
185+ php : ['7.2', '8.4']
186+ custom_ini : [false]
187+
180188 include :
181- - php : ' 7.2'
182- custom_ini : false
189+ # Also run one coverage build with custom ini settings.
183190 - php : ' 8.1'
191+ os : ' ubuntu-latest'
184192 custom_ini : true
185- - php : ' 8.4'
186- custom_ini : false
187193
188- name : " Coverage: ${{ matrix.php }} ${{ matrix.custom_ini && ' with custom ini settings' || '' }}"
194+ # yamllint disable-line rule:line-length
195+ name : " Coverage: ${{ matrix.php }} ${{ matrix.custom_ini && ' with custom ini settings' || '' }} (${{ matrix.os == 'ubuntu-latest' && 'Linux' || 'Win' }})"
189196
190197 steps :
191198 - name : Checkout code
192199 uses : actions/checkout@v4
193200
194201 - name : Setup ini config
202+ if : ${{ matrix.os != 'windows-latest' }}
195203 id : set_ini
204+ shell : bash
196205 run : |
197206 # Set the "short_open_tag" ini to make sure specific conditions are tested.
198- # Also turn on error_reporting to ensure all notices are shown.
199207 if [[ ${{ matrix.custom_ini }} == true ]]; then
200- echo 'PHP_INI=error_reporting=-1, display_errors=On, date.timezone=Australia/Sydney, short_open_tag=On' >> "$GITHUB_OUTPUT"
201- else
202- echo 'PHP_INI=error_reporting=-1, display_errors=On' >> "$GITHUB_OUTPUT"
208+ echo 'PHP_INI=, date.timezone=Australia/Sydney, short_open_tag=On' >> "$GITHUB_OUTPUT"
203209 fi
204210
205211 - name : Install PHP
206212 uses : shivammathur/setup-php@v2
207213 with :
208214 php-version : ${{ matrix.php }}
209- ini-values : ${{ steps.set_ini.outputs.PHP_INI }}
215+ ini-values : error_reporting=-1, display_errors=On ${{ steps.set_ini.outputs.PHP_INI }}
210216 coverage : xdebug
211217
212218 # Install dependencies and handle caching in one go.
@@ -219,38 +225,47 @@ jobs:
219225
220226 - name : Grab PHPUnit version
221227 id : phpunit_version
228+ shell : bash
222229 # yamllint disable-line rule:line-length
223- run : echo "VERSION=$(vendor/bin/phpunit --version | grep --only-matching --max-count=1 --extended-regexp '\b[0-9]+\.[0-9]+')" >> "$GITHUB_OUTPUT"
230+ run : echo "VERSION=$(php " vendor/bin/phpunit" --version | grep --only-matching --max-count=1 --extended-regexp '\b[0-9]+\.[0-9]+')" >> "$GITHUB_OUTPUT"
224231
225232 - name : " DEBUG: Show grabbed version"
226233 run : echo ${{ steps.phpunit_version.outputs.VERSION }}
227234
228235 - name : ' PHPCS: set the path to PHP'
229- run : php bin/phpcs --config-set php_path php
236+ run : php " bin/phpcs" --config-set php_path php
230237
231238 # PHPUnit 9.3 started using PHP-Parser for code coverage, which can cause issues due to Parser
232239 # also polyfilling PHP tokens.
233240 # As of PHPUnit 9.3.4, a cache warming option is available.
234241 # Using that option prevents issues with PHP-Parser backfilling PHP tokens during our test runs.
235242 - name : " Warm the PHPUnit cache (PHPUnit 9.3+)"
236243 if : ${{ steps.phpunit_version.outputs.VERSION >= '9.3' }}
237- run : vendor/bin/phpunit --coverage-cache ./build/phpunit-cache --warm-coverage-cache
244+ run : php " vendor/bin/phpunit" --coverage-cache ./build/phpunit-cache --warm-coverage-cache
238245
239246 - name : " Run the unit tests with code coverage (PHPUnit < 9.3)"
240- if : ${{ steps.phpunit_version.outputs.VERSION < '9.3' }}
241- run : vendor/bin/phpunit
247+ if : ${{ matrix.os != 'windows-latest' && steps.phpunit_version.outputs.VERSION < '9.3' }}
248+ run : php " vendor/bin/phpunit"
242249
243250 - name : " Run the unit tests with code coverage (PHPUnit 9.3+)"
244- if : ${{ steps.phpunit_version.outputs.VERSION >= '9.3' }}
245- run : vendor/bin/phpunit --coverage-cache ./build/phpunit-cache
251+ if : ${{ matrix.os != 'windows-latest' && steps.phpunit_version.outputs.VERSION >= '9.3' }}
252+ run : php "vendor/bin/phpunit" --coverage-cache ./build/phpunit-cache
253+
254+ - name : " Run the unit tests which may have different outcomes on Windows with code coverage (PHPUnit < 9.3)"
255+ if : ${{ matrix.os == 'windows-latest' && steps.phpunit_version.outputs.VERSION < '9.3' }}
256+ run : php "vendor/bin/phpunit" --group Windows
257+
258+ - name : " Run the unit tests which may have different outcomes on Windows with code coverage (PHPUnit 9.3+)"
259+ if : ${{ matrix.os == 'windows-latest' && steps.phpunit_version.outputs.VERSION >= '9.3' }}
260+ run : php "vendor/bin/phpunit" --group Windows --coverage-cache ./build/phpunit-cache
246261
247262 - name : Upload coverage results to Coveralls
248263 if : ${{ success() }}
249264 uses : coverallsapp/github-action@v2
250265 with :
251266 format : clover
252267 file : build/logs/clover.xml
253- flag-name : php-${{ matrix.php }}-custom-ini-${{ matrix.custom_ini }}
268+ flag-name : os-${{ matrix.os }}- php-${{ matrix.php }}-custom-ini-${{ matrix.custom_ini }}
254269 parallel : true
255270
256271 coveralls-finish :
0 commit comments