Skip to content

Setup mutation testing #1506

Setup mutation testing

Setup mutation testing #1506

Workflow file for this run

# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
name: "Build"
on:
pull_request:
push:
branches:
- "2.0.x"
jobs:
lint:
name: "Lint"
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
matrix:
php-version:
- "7.4"
- "8.0"
- "8.1"
- "8.2"
- "8.3"
- "8.4"
steps:
- name: "Checkout"
uses: actions/checkout@v5
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "none"
php-version: "${{ matrix.php-version }}"
ini-file: development
extensions: "mongodb"
- name: "Validate Composer"
run: "composer validate"
- name: "Allow installing on PHP 8.4"
if: matrix.php-version == '8.4'
run: "composer config platform.php 8.3.99"
- name: "Install dependencies"
run: "composer install --no-interaction --no-progress"
- name: "Lint"
run: "make lint"
coding-standard:
name: "Coding Standard"
runs-on: "ubuntu-latest"
steps:
- name: "Checkout"
uses: actions/checkout@v5
- name: "Checkout build-cs"
uses: actions/checkout@v5
with:
repository: "phpstan/build-cs"
path: "build-cs"
ref: "2.x"
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "none"
php-version: "8.2"
ini-file: development
extensions: "mongodb"
- name: "Validate Composer"
run: "composer validate"
- name: "Install dependencies"
run: "composer install --no-interaction --no-progress"
- name: "Install build-cs dependencies"
working-directory: "build-cs"
run: "composer install --no-interaction --no-progress"
- name: "Lint"
run: "make lint"
- name: "Coding Standard"
run: "make cs"
tests:
name: "Tests"
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
matrix:
php-version:
- "7.4"
- "8.0"
- "8.1"
- "8.2"
- "8.3"
- "8.4"
dependencies:
- "lowest"
- "highest"
update-packages:
- ""
include:
- php-version: "8.3"
dependencies: "highest"
update-packages: |
composer config extra.patches.doctrine/orm --json --merge '["compatibility/patches/Column.patch", "compatibility/patches/DiscriminatorColumn.patch", "compatibility/patches/DiscriminatorMap.patch", "compatibility/patches/Embeddable.patch", "compatibility/patches/Embedded.patch", "compatibility/patches/Entity.patch", "compatibility/patches/GeneratedValue.patch", "compatibility/patches/Id.patch", "compatibility/patches/InheritanceType.patch", "compatibility/patches/JoinColumn.patch", "compatibility/patches/JoinColumns.patch", "compatibility/patches/ManyToMany.patch", "compatibility/patches/ManyToOne.patch", "compatibility/patches/MappedSuperclass.patch", "compatibility/patches/OneToMany.patch", "compatibility/patches/OneToOne.patch", "compatibility/patches/OrderBy.patch", "compatibility/patches/UniqueConstraint.patch", "compatibility/patches/Version.patch"]'
composer require --dev doctrine/orm:^3.0 doctrine/dbal:^4.0 carbonphp/carbon-doctrine-types:^3 gedmo/doctrine-extensions:^3 -W
steps:
- name: "Checkout"
uses: actions/checkout@v5
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "none"
php-version: "${{ matrix.php-version }}"
ini-file: development
extensions: "mongodb"
- name: "Allow installing on PHP 8.4"
if: matrix.php-version == '8.4'
run: "composer config platform.php 8.3.99"
- name: "Install lowest dependencies"
if: ${{ matrix.dependencies == 'lowest' }}
run: "composer update --prefer-lowest --no-interaction --no-progress"
- name: "Install highest dependencies"
if: ${{ matrix.dependencies == 'highest' }}
run: "composer update --no-interaction --no-progress"
- name: "Update packages"
run: ${{ matrix.update-packages }}
- name: "Tests"
run: "make tests"
mutation-testing:
name: "Mutation Testing"
runs-on: "ubuntu-latest"
needs: ["tests", "static-analysis"]
strategy:
fail-fast: false
matrix:
php-version:
- "8.2"
- "8.3"
- "8.4"
steps:
- name: "Checkout"
uses: actions/checkout@v5
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "pcov"
php-version: "${{ matrix.php-version }}"
ini-file: development
extensions: pdo, mysqli, pgsql, pdo_mysql, pdo_pgsql, pdo_sqlite, mongodb
tools: infection:0.31.3
- name: "Allow installing on PHP 8.4"
if: matrix.php-version == '8.4'
run: "composer config platform.php 8.3.99"
- name: "Install dependencies"
run: "composer install --no-interaction --no-progress"
- uses: "actions/download-artifact@v4"
with:
name: "result-cache-${{ matrix.php-version }}"
path: "tmp/"
- name: "Run infection"
run: |
git fetch --depth=1 origin $GITHUB_BASE_REF
infection --git-diff-base=origin/$GITHUB_BASE_REF --git-diff-lines --ignore-msi-with-no-mutations --min-msi=100 --min-covered-msi=100 --log-verbosity=all --debug
- uses: "actions/upload-artifact@v4"
with:
name: "infection-log-${{ matrix.php-version }}"
path: "tmp/infection.log"
static-analysis:
name: "PHPStan"
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
matrix:
php-version:
- "7.4"
- "8.0"
- "8.1"
- "8.2"
- "8.3"
- "8.4"
update-packages:
- ""
include:
- php-version: "8.3"
update-packages: "composer require --dev doctrine/orm:^3.0 doctrine/dbal:^4.0 carbonphp/carbon-doctrine-types:^3 gedmo/doctrine-extensions:^3 -W"
steps:
- name: "Checkout"
uses: actions/checkout@v5
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "none"
php-version: "${{ matrix.php-version }}"
extensions: "mongodb"
ini-file: development
- name: "Allow installing on PHP 8.4"
if: matrix.php-version == '8.4'
run: "composer config platform.php 8.3.99"
- name: "Install dependencies"
run: "composer update --no-interaction --no-progress"
- name: "Update packages"
run: ${{ matrix.update-packages }}
- name: "PHPStan"
run: "make phpstan"
- uses: "actions/upload-artifact@v4"
with:
# "update-packages" is not relevant for the download-artifact counterpart, but we need it here to get unique artifact names across all jobs
name: "result-cache-${{ matrix.php-version }}${{ matrix.update-packages && '-packages-updated' || '' }}"
path: "tmp/resultCache.php"