Unit Tests #2012
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Unit Tests | |
on: | |
push: | |
branches: [ main ] | |
pull_request: ~ | |
schedule: | |
# Do not make it the first of the month and/or midnight since it is a very busy time | |
- cron: "* 10 5 * *" | |
release: | |
types: [ created ] | |
# See https://stackoverflow.com/a/72408109 | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
TERM: xterm | |
jobs: | |
unit-tests: | |
runs-on: ubuntu-latest | |
name: Unit-Tests (PHP ${{ matrix.php.version }}, ${{ matrix.php.dependency }}, ${{ matrix.tools }}) - PHAR ${{ matrix.phar-readonly && 'readonly' || 'writeable' }}${{ matrix.label }} | |
strategy: | |
fail-fast: false | |
matrix: | |
php: | |
- version: '8.2' | |
dependency: locked | |
composer-options: '' | |
- version: '8.2' | |
dependency: lowest | |
composer-options: '' | |
- version: '8.2' | |
dependency: highest | |
composer-options: '' | |
- version: '8.3' | |
dependency: highest | |
composer-options: --ignore-platform-req=php+ | |
tools: | |
- 'composer:2.2' | |
- 'composer:2.3' | |
- 'composer:2.4' | |
- 'composer' | |
phar-readonly: [ true, false ] | |
php-extra-extensions: [ '' ] | |
label: [ '' ] | |
include: | |
- label: '; bz2 disabled' | |
php: | |
version: '8.2' | |
dependency: locked | |
composer-options: '' | |
tools: composer | |
phar-readonly: false | |
php-extra-extensions: ', :bz2' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php.version }} | |
ini-values: ${{ matrix.phar-readonly && 'phar.readonly=1' || 'phar.readonly=0' }}, display_errors=On, error_reporting=-1 | |
tools: ${{ matrix.tools }} | |
coverage: none | |
extensions: ctype, iconv, xml${{ matrix.php-extra-extensions }} | |
- name: Remove the configured platform on non-locked dependencies | |
if: ${{ matrix.php.dependency != 'locked' }} | |
run: composer config platform.php --unset | |
- name: Install Composer dependencies | |
uses: ramsey/composer-install@v3 | |
with: | |
dependency-versions: ${{ matrix.php.dependency }} | |
composer-options: ${{ matrix.php.composer-options }} | |
- name: Ensure that the make target is up to date | |
run: make _vendor_install | |
- run: make phpunit | |
infection: | |
runs-on: ubuntu-latest | |
name: Infection (PHP ${{ matrix.php }}) | |
strategy: | |
fail-fast: false | |
matrix: | |
php: [ '8.2' ] | |
if: github.event_name == 'pull_request' || github.event_name == 'push' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
# The phar.readonly value is adjusted in the Makefile command for | |
# better portability. | |
ini-values: phar.readonly=0, display_errors=On, error_reporting=-1 | |
tools: composer | |
coverage: pcov | |
extensions: ctype, iconv, xml | |
- name: Configure the base ref (pull request) | |
if: github.event_name == 'pull_request' | |
run: echo "INFECTION_BASE_REF=$GITHUB_BASE_REF" >> $GITHUB_ENV | |
- name: Configure the base ref (push/release event) | |
if: github.event_name == 'push' | |
run: echo "INFECTION_BASE_REF=${{ github.event.before }}" >> $GITHUB_ENV | |
# Do this before using the Makefile just to avoid accidentally resolving the deferred variables using | |
# INFECTION_FLAGS. | |
- name: Configure Infection for the CI | |
run: | | |
git fetch origin $INFECTION_BASE_REF | |
echo "INFECTION_FLAGS=--git-diff-lines --git-diff-base=origin/$INFECTION_BASE_REF --ignore-msi-with-no-mutations --logger-github" >> "$GITHUB_ENV" | |
- name: Install Composer dependencies | |
uses: ramsey/composer-install@v3 | |
- name: Ensure that the make target is up to date | |
run: make _vendor_install | |
- name: Install Infection | |
uses: ramsey/composer-install@v3 | |
- name: Ensure that the Infection make target is up to date | |
run: make infection_install | |
- name: Run tests with coverage | |
run: make phpunit_coverage_infection --debug | |
- run: make _infection_ci --debug | |
# This is a "trick", a meta task which does not change, and we can use in | |
# the protected branch rules as opposed to the tests one above which | |
# may change regularly. | |
validate-tests: | |
name: Unit tests status | |
runs-on: ubuntu-latest | |
needs: | |
- unit-tests | |
- infection | |
if: always() | |
steps: | |
- name: Successful run | |
if: ${{ !(contains(needs.*.result, 'failure')) }} | |
run: exit 0 | |
- name: Failing run | |
if: ${{ contains(needs.*.result, 'failure') }} | |
run: exit 1 |