Skip to content

Continuous Integration (CI) #1257

Continuous Integration (CI)

Continuous Integration (CI) #1257

name: 'Continuous Integration (CI)'
on:
push:
branches:
- 'main'
- '[0-9]+.*'
paths-ignore:
- '.ddev/**'
- '.github/ISSUE_TEMPLATE/*'
- '.vscode/*'
- '**.md'
- '**.rst'
pull_request:
paths-ignore:
- '.ddev/**'
- '.github/ISSUE_TEMPLATE/*'
- '.vscode/*'
- '**.md'
- '**.rst'
schedule:
- cron: '33 3 * * *'
env:
COMPOSER_FLAGS: --ansi --no-interaction --no-progress
COMPOSER_INSTALL_FLAGS: --prefer-dist
COMPOSER_UPDATE_FLAGS: ''
jobs:
validation:
name: Composer validation
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
coverage: none
extensions: intl, zip
ini-values: memory_limit=-1, error_reporting=E_ALL, display_errors=On
php-version: latest
tools: composer
- name: Composer Cache Vars
id: composer-cache-vars
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
echo "timestamp=$(date +"%s")" >> $GITHUB_OUTPUT
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache-vars.outputs.dir }}
key: ${{ runner.os }}-composer-2-latest-${{ steps.composer-cache-vars.outputs.timestamp }}
restore-keys: |
${{ runner.os }}-composer-2-latest-
${{ runner.os }}-composer-2-
${{ runner.os }}-composer-
- name: Install dependencies
run: composer install ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
- name: Validate composer.json
run: composer ci:composer:validate
- name: Normalize composer.json
run: composer ci:composer:normalize
- name: Check dependencies
run: composer ci:composer:require-checker
php_lint:
name: PHP Lint
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
php-version:
- '8.1'
- 'latest'
experimental:
- false
include:
- php-version: 'nightly'
experimental: true
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
coverage: none
extensions: intl, zip
ini-values: memory_limit=-1, error_reporting=E_ALL, display_errors=On
php-version: ${{ matrix.php-version }}
- name: Composer Cache Vars
id: composer-cache-vars
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
echo "timestamp=$(date +"%s")" >> $GITHUB_OUTPUT
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache-vars.outputs.dir }}
key: ${{ runner.os }}-composer-2-${{ matrix.php-version }}-${{ steps.composer-cache-vars.outputs.timestamp }}
restore-keys: |
${{ runner.os }}-composer-2-${{ matrix.php-version }}-
${{ runner.os }}-composer-2-
${{ runner.os }}-composer-
- name: Ignore platfrom requirements for nightly
if: ${{ matrix.php-version == 'nightly' }}
run: echo "COMPOSER_UPDATE_FLAGS=$COMPOSER_UPDATE_FLAGS --ignore-platform-reqs" >> $GITHUB_ENV
- name: Install dependencies
run: composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
- name: Lint PHP files
run: composer ci:php:lint
php_coding_standards:
name: PHP Coding Standards
needs:
- php_lint
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
php-version:
- '8.1'
- '8.2'
- '8.3'
dependencies:
- 'lowest'
- 'stable'
- 'highest'
experimental:
- false
include:
- php-version: 'latest'
dependencies: 'lowest'
experimental: true
- php-version: 'latest'
dependencies: 'stable'
experimental: true
- php-version: 'latest'
dependencies: 'highest'
experimental: true
- php-version: 'nightly'
dependencies: 'lowest'
experimental: true
- php-version: 'nightly'
dependencies: 'stable'
experimental: true
- php-version: 'nightly'
dependencies: 'highest'
experimental: true
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
coverage: none
extensions: intl, zip
ini-values: memory_limit=-1, error_reporting=E_ALL, display_errors=On
php-version: ${{ matrix.php-version }}
- name: Composer Cache Vars
id: composer-cache-vars
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
echo "timestamp=$(date +"%s")" >> $GITHUB_OUTPUT
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache-vars.outputs.dir }}
key: ${{ runner.os }}-composer-2-${{ matrix.php-version }}-${{ matrix.dependencies }}-${{ steps.composer-cache-vars.outputs.timestamp }}
restore-keys: |
${{ runner.os }}-composer-2-${{ matrix.php-version }}-${{ matrix.dependencies }}-
${{ runner.os }}-composer-2-${{ matrix.php-version }}-
${{ runner.os }}-composer-2-
${{ 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: Allow alpha releases for latest-deps builds to catch problems earlier
if: contains(matrix.dependencies, 'highest')
run: composer config minimum-stability alpha
- name: Ignore platfrom requirements for nightly
if: ${{ matrix.php-version == 'nightly' }}
run: echo "COMPOSER_UPDATE_FLAGS=$COMPOSER_UPDATE_FLAGS --ignore-platform-reqs" >> $GITHUB_ENV
- name: Install dependencies
run: composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
- name: Validation of coding standards for PHP files
env:
PHP_CS_FIXER_IGNORE_ENV: 1
continue-on-error: ${{ matrix.experimental }}
run: composer ci:php:cs
php_stan:
name: PHP Stan
needs:
- php_lint
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
php-version:
- '8.1'
- '8.2'
- '8.3'
dependencies:
- 'lowest'
- 'stable'
- 'highest'
experimental:
- false
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
coverage: none
extensions: intl, zip
ini-values: memory_limit=-1
php-version: ${{ matrix.php-version }}
- name: Composer Cache Vars
id: composer-cache-vars
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
echo "timestamp=$(date +"%s")" >> $GITHUB_OUTPUT
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache-vars.outputs.dir }}
key: ${{ runner.os }}-composer-2-${{ matrix.php-version }}-${{ matrix.dependencies }}-${{ steps.composer-cache-vars.outputs.timestamp }}
restore-keys: |
${{ runner.os }}-composer-2-${{ matrix.php-version }}-${{ matrix.dependencies }}-
${{ runner.os }}-composer-2-${{ matrix.php-version }}-
${{ runner.os }}-composer-2-
${{ 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: Allow alpha releases for latest-deps builds to catch problems earlier
if: contains(matrix.dependencies, 'highest')
run: composer config minimum-stability alpha
- name: Install dependencies without deprecation rules
run: |
composer remove --dev phpstan/phpstan-deprecation-rules --no-update ${{ env.COMPOSER_FLAGS }}
composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
- name: Run PHPStan
run: composer ci:php:stan
- name: Install dependencies with deprecation rules
run: |
composer require --dev phpstan/phpstan-deprecation-rules --no-update ${{ env.COMPOSER_FLAGS }}
composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
- name: Run PHPStan with deprecation rules
continue-on-error: true
run: composer ci:php:stan
tests:
name: Tests
needs:
- php_lint
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
php-version:
- '8.1'
- '8.2'
- '8.3'
- 'latest'
composer-version:
- '2'
dependencies:
- 'lowest'
- 'stable'
- 'highest'
experimental: [false]
include:
- os: ubuntu-latest
php-version: 'nightly'
composer-version: '2'
dependencies: 'lowest'
experimental: true
- os: ubuntu-latest
php-version: 'nightly'
composer-version: '2'
dependencies: 'stable'
experimental: true
- os: ubuntu-latest
php-version: 'nightly'
composer-version: '2'
dependencies: 'highest'
experimental: true
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
coverage: xdebug
extensions: mbstring, json
ini-values: memory_limit=-1, error_reporting=-1, log_errors_max_len=0, zend.assertions=1, assert.exception=1, xdebug.show_exception_trace=0
php-version: ${{ matrix.php-version }}
tools: composer:${{ matrix.composer-version }}
- name: Composer Cache Vars
id: composer-cache-vars
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
echo "timestamp=$(date +"%s")" >> $GITHUB_OUTPUT
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache-vars.outputs.dir }}
key: ${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.php-version }}-${{ matrix.dependencies }}-${{ steps.composer-cache-vars.outputs.timestamp }}
restore-keys: |
${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.php-version }}-${{ matrix.dependencies }}-
${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.php-version }}-
${{ runner.os }}-composer-${{ matrix.composer-version }}-
${{ runner.os }}-composer-
- name: Handle lowest dependencies update
if: ${{ matrix.dependencies == 'lowest' }}
run: echo "COMPOSER_UPDATE_FLAGS=$COMPOSER_UPDATE_FLAGS --prefer-lowest" >> $GITHUB_ENV
- name: Allow alpha releases for latest-deps builds to catch problems earlier
if: ${{ matrix.dependencies == 'highest' }}
run: composer config minimum-stability alpha
- name: Ignore platform requirements for nightly
if: ${{ matrix.php-version == 'nightly' }}
run: echo "COMPOSER_UPDATE_FLAGS=$COMPOSER_UPDATE_FLAGS --ignore-platform-reqs" >> $GITHUB_ENV
#- name: Set platform.php for nightly
# if: ${{ matrix.php-version == 'nightly' }}
# run: composer config platform.php 8.2.99
- name: Install dependencies
run: composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
- name: Unit Tests
env:
EXPERIMENTAL: ${{ matrix.experimental }}
continue-on-error: ${{ matrix.experimental }}
if: always()
run: composer ci:php:unit
- name: Upload coverage results to Coveralls
env:
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COVERALLS_PARALLEL: true
COVERALLS_FLAG_NAME: ${{ matrix.composer-version }}-${{ matrix.php-version }}-${{ matrix.dependencies }}
if: ${{ github.event.repository.fork == false }}
run: |
composer global require ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }} php-coveralls/php-coveralls
composer global exec php-coveralls -- --coverage_clover=var/log/coverage/clover.xml -vvv --json_path=var/log/coverage/coveralls-upload.json
- name: Upload Logs
uses: actions/upload-artifact@v3
if: always()
with:
name: logs-${{ matrix.composer-version }}-${{ matrix.php-version }}-${{ matrix.dependencies }}
path: var/log
retention-days: 7
coveralls-finish:
name: Finish Coveralls
needs:
- tests
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@master
if: ${{ github.event.repository.fork == false }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true