Skip to content

Workflow file for this run

name: Static analysis
on:
push:
branches:
- main
pull_request:
jobs:
phpstan:
name: PHPStan
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php-version:
- "8.0"
- "8.1"
- "8.2"
db-image:
- "mysql:8.0"
- "mariadb:latest"
reflector:
- "mysqli"
mode:
- "recording"
include:
- db-image: "mysql:8.0"
db-options: '--health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3'
- db-image: "mariadb:latest"
db-options: '--health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=1s --health-timeout=10s --health-retries=60'
# PHPStan development version
- php-version: "8.0"
db-image: "mysql:8.0"
db-options: '--health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3'
reflector: "pdo-mysql"
mode: "recording"
phpstan-version: "dev"
# PDO MySQL reflector
- php-version: "8.0"
db-image: "mysql:8.0"
db-options: '--health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3'
reflector: "pdo-mysql"
mode: "recording"
# Replay and Recording mode
- php-version: "8.1"
db-image: "mysql:8.0"
db-options: '--health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3'
reflector: "mysqli"
mode: "replay-and-recording"
env:
DBA_REFLECTOR: ${{ matrix.reflector }}
DBA_MODE: ${{ matrix.mode }}
# https://docs.github.com/en/free-pro-team@latest/actions/guides/about-service-containers
services:
database:
image: ${{ matrix.db-image }}
env:
MYSQL_ROOT_PASSWORD: root
ports:
- 3306:3306
options: ${{ matrix.db-options }}
steps:
- uses: actions/checkout@v4
with:
repository: ${{ github.event.client_payload.pull_request.head.repo.full_name }}
ref: ${{ github.event.client_payload.pull_request.head.ref }}
- name: Setup PHP
id: setup-php
uses: shivammathur/setup-php@v2
with:
php-version: "${{ matrix.php-version }}"
coverage: none
- uses: "ramsey/composer-install@v3"
with:
composer-options: "--prefer-dist --no-progress"
- name: Install sqlftw/sqlftw (optional dependency)
run: composer require sqlftw/sqlftw --ignore-platform-req=php+
- name: Install doctrine/dbal (optional dependency)
run: composer require doctrine/dbal:^3 --ignore-platform-req=php+
- name: Enable phpstan@dev
if: "${{matrix.phpstan-version != ''}}"
run: |
composer update phpstan/phpstan:@dev
- name: Setup mysql
run: |
mysql -uroot -h127.0.0.1 -proot < tests/schema.sql
- run: composer phpstan
replay:
name: PHPStan (reflection replay)
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- php-version: "8.1"
reflector: "mysqli"
mode: "replay"
- php-version: "8.1"
reflector: "pdo-mysql"
mode: "replay"
env:
DBA_REFLECTOR: ${{ matrix.reflector }}
DBA_MODE: ${{ matrix.mode }}
steps:
- uses: actions/checkout@v4
with:
repository: ${{ github.event.client_payload.pull_request.head.repo.full_name }}
ref: ${{ github.event.client_payload.pull_request.head.ref }}
- name: Setup PHP
id: setup-php
uses: shivammathur/setup-php@v2
with:
php-version: "${{ matrix.php-version }}"
coverage: none
- uses: "ramsey/composer-install@v3"
with:
composer-options: "--prefer-dist --no-progress"
- name: Install sqlftw/sqlftw (optional dependency)
run: composer require sqlftw/sqlftw --ignore-platform-req=php+
- name: Install doctrine/dbal (optional dependency)
run: composer require doctrine/dbal:^3 --ignore-platform-req=php+
- run: composer phpstan