Add GitHub workflows for CI, coding standards, and analysis #1
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: Continuous Integration | |
on: | |
push: | |
paths-ignore: | |
- '**.md' | |
pull_request: | |
workflow_dispatch: | |
workflow_call: | |
inputs: | |
old_stable: | |
description: Old stable php version matrix | |
required: true | |
type: string | |
default: '8.1, 8.2' | |
current_stable: | |
description: Current stable php version | |
required: true | |
type: string | |
default: '8.3' | |
script: | |
description: Additional scripts to run | |
required: false | |
type: string | |
env: | |
COMPOSER_FLAGS: "--ansi --no-interaction --no-progress --prefer-dist" | |
COMPOSER_UPDATE_FLAGS: "" | |
jobs: | |
phpunit: | |
name: PHPUnit | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
php-version: ${{ fromJson(inputs.old_stable) }} | |
dependencies: [highest, lowest] | |
os: [ubuntu-latest] | |
include: | |
- php-version: ${{ inputs.current_stable }} | |
os: windows-latest | |
experimental: false | |
- php-version: ${{ inputs.current_stable }} | |
os: ubuntu-latest | |
experimental: false | |
- php-version: ${{ inputs.current_stable }} | |
os: ubuntu-lowest | |
experimental: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Setup PHP ${{ matrix.php-version }} | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php-version }} | |
coverage: pcov | |
ini-values: zend.assertions=1 | |
- name: Get composer cache directory | |
id: composer-cache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.composer-cache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Handle lowest dependencies update | |
if: contains(matrix.dependencies, 'lowest') | |
run: echo COMPOSER_UPDATE_FLAGS=$COMPOSER_UPDATE_FLAGS --prefer-lowest >> $GITHUB_ENV | |
- name: Handle ignore-platform-reqs dependencies update | |
if: contains(matrix.dependencies, 'ignore') | |
run: echo COMPOSER_FLAGS=$COMPOSER_FLAGS --ignore-platform-req=php >> $GITHUB_ENV | |
- name: Remove platform config to get latest dependencies for current PHP version | |
if: contains(matrix.dependencies, 'highest') || contains(matrix.dependencies, 'lowest') | |
run: composer config platform --unset | |
- name: Allow alpha releases for latest-deps builds to catch problems earlier | |
if: contains(matrix.dependencies, 'ignore') | |
run: composer config minimum-stability alpha | |
- name: Update dependencies | |
run: composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_FLAGS }} | |
- name: Run test suite | |
run: ./vendor/bin/phpunit --coverage-clover=coverage.xml | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
- name: Run additional script | |
if: ${{ inputs.script }} | |
run: php ${{ inputs.script }} |