.github/workflows/phpunits.yaml
name: phpunits
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
env:
MEMCACHED_HOST: localhost
REDIS_HOST: localhost
REDIS_PORT: 6379
MEMCACHED_PORT: 11211
jobs:
units:
runs-on: ubuntu-latest
strategy:
matrix:
php-versions: [8.2, 8.3]
databases: [testing, pgsql, mysql, mariadb]
caches: [array, redis, memcached, database]
locks: [redis, memcached]
services:
redis:
image: redis
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 10
ports:
- 6379:6379
memcached:
image: memcached
options: >-
--health-cmd "timeout 5 bash -c 'cat < /dev/null > /dev/udp/127.0.0.1/11211'"
--health-interval 10s
--health-timeout 5s
--health-retries 10
ports:
- 11211:11211
pgsql:
image: postgres
env:
POSTGRES_USER: root
POSTGRES_PASSWORD: wallet
POSTGRES_DB: wallet
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 10
ports:
- 5432:5432
mysql:
image: bitnami/mysql:8.0
env:
MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
MYSQL_ROOT_PASSWORD: wallet
MYSQL_DATABASE: wallet
options: >-
--health-cmd="mysqladmin ping"
--health-interval 10s
--health-timeout 5s
--health-retries 10
ports:
- 3306:3306
mariadb:
image: mariadb:10.10 # https://github.com/laravel/framework/pull/48455
env:
MYSQL_ROOT_PASSWORD: wallet
MYSQL_DATABASE: wallet
options: >-
--health-cmd="mysqladmin ping"
--health-interval 10s
--health-timeout 5s
--health-retries 10
ports:
- 3307:3306
steps:
- name: Checkout
id: git-checkout
uses: actions/checkout@v4
- name: Setup PHP
id: php-install
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, pgsql, mysql, sqlite, redis, memcached, bcmath
coverage: pcov
env:
runner: self-hosted
- name: Validate composer.json and composer.lock
id: composer-validate
run: composer validate --strict
- name: Cache Composer packages
id: composer-cache
uses: actions/cache@v4
with:
path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
- name: Install dependencies
id: composer-dependencies
run: composer install --prefer-dist --no-progress
- name: Check codeclimate
id: codeclimate-check
run: echo "execute=${{ matrix.php-versions == '8.3' && matrix.caches == 'array' && matrix.locks == 'redis' && matrix.databases == 'testing' }}" >> $GITHUB_OUTPUT
- name: Prepare codeclimate
id: codeclimate-prepare
run: |
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
chmod +x ./cc-test-reporter
./cc-test-reporter before-build
if: ${{ steps.codeclimate-check.outputs.execute == 'true' }}
- name: Prepare run test suite
id: unit-prepare
run: |
mkdir build
- name: Run test suite
id: unit-run
run: |
composer parabench
env:
WALLET_CACHE_DRIVER: ${{ matrix.caches }}
WALLET_LOCK_DRIVER: ${{ matrix.locks }}
DB_CONNECTION: ${{ matrix.databases }}
- name: Run mutation test suite
id: infect-run
run: composer infect
env:
WALLET_CACHE_DRIVER: ${{ matrix.caches }}
WALLET_LOCK_DRIVER: ${{ matrix.locks }}
DB_CONNECTION: ${{ matrix.databases }}
STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }}
if: ${{ steps.codeclimate-check.outputs.execute == 'true' }}
- name: Send coverage
id: codeclimate-send
uses: nick-fields/retry@v3
with:
timeout_seconds: 15
max_attempts: 3
command: >-
./cc-test-reporter after-build --coverage-input-type clover --exit-code 0
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
if: ${{ steps.codeclimate-check.outputs.execute == 'true' }}
- uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
if: ${{ steps.codeclimate-check.outputs.execute == 'true' }}