123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- name: CI
- on:
- - pull_request
- - push
- jobs:
- tests:
- strategy:
- fail-fast: false
- matrix:
- include:
- - operating-system: 'ubuntu-20.04'
- php-version: '7.4'
- job-description: 'with lowest deps'
- composer-flags: '--prefer-stable --prefer-lowest' # should be checked on lowest supported PHP version
- - operating-system: 'ubuntu-20.04'
- php-version: '7.4'
- - operating-system: 'ubuntu-20.04'
- php-version: '7.4'
- job-description: 'with Sf ^5'
- execute-flex-with-symfony-version: '^5' # Explicit check for Sf 5.x compatibility
- - operating-system: 'ubuntu-20.04'
- php-version: '8.0'
- job-description: 'with Sf ^6'
- execute-flex-with-symfony-version: '^6' # Explicit check for Sf 6.x compatibility
- - operating-system: 'ubuntu-20.04'
- php-version: '8.1'
- job-description: 'with migration rules'
- execute-migration-rules: 'yes' # should be checked on highest supported PHP version
- - operating-system: 'ubuntu-20.04'
- php-version: '8.1'
- job-description: 'with calculating code coverage'
- calculate-code-coverage: 'yes'
- phpunit-flags: '--testsuite coverage --exclude-group covers-nothing --coverage-clover build/logs/clover.xml'
- - operating-system: 'ubuntu-20.04'
- php-version: '8.1'
- job-description: 'with deployment'
- execute-deployment: 'yes'
- - operating-system: 'windows-latest'
- php-version: '8.1'
- job-description: 'on Windows'
- FAST_LINT_TEST_CASES: 1
- - operating-system: 'macos-latest'
- php-version: '8.1'
- job-description: 'on macOS'
- name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
- runs-on: ${{ matrix.operating-system }}
- steps:
- - name: Checkout code
- uses: actions/checkout@v2
- - name: Get code coverage driver
- uses: actions/github-script@v3.1
- id: code-coverage-driver
- with:
- script: 'return "${{ matrix.calculate-code-coverage }}" == "yes" ? "pcov" : "none"'
- result-encoding: string
- - name: Setup PHP
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php-version }}
- coverage: ${{ steps.code-coverage-driver.outputs.result }}
- tools: flex
- env:
- fail-fast: false # disabled as old PHP version cannot run flex
- update: ${{ matrix.php-version == '8.0' }} # force update to 8.0.1+, ref https://github.com/shivammathur/setup-php/issues/394#issuecomment-760461251
- - name: Get Composer cache directory
- id: composer-cache
- run: echo "::set-output name=dir::$(composer config cache-dir)"
- - name: Cache dependencies
- uses: actions/cache@v2
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
- restore-keys: |
- composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
- composer-${{ runner.os }}-${{ matrix.php-version }}-
- composer-${{ runner.os }}-
- composer-
- - name: Configure Symfony Flex
- if: matrix.execute-flex-with-symfony-version
- run: composer config extra.symfony.require ${{ matrix.execute-flex-with-symfony-version }}
- - name: Install dependencies
- uses: nick-invision/retry@v2
- with:
- timeout_minutes: 5
- max_attempts: 5
- retry_wait_seconds: 30
- command: |
- composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
- composer info -D
- - name: Execute migration rules # we want to execute migration rules BEFORE we gonna run tests and self-fixing, so we know that our codebase is future-ready
- if: matrix.execute-migration-rules == 'yes'
- run: php php-cs-fixer fix --config .php-cs-fixer.php-highest.php -q
- - name: Disable time limit for tests when collecting coverage
- if: matrix.calculate-code-coverage == 'yes'
- run: sed 's/enforceTimeLimit="true"/enforceTimeLimit="false"/g' phpunit.xml.dist > phpunit.xml
- - name: Run tests
- env:
- PHP_CS_FIXER_IGNORE_ENV: ${{ matrix.PHP_CS_FIXER_IGNORE_ENV }}
- FAST_LINT_TEST_CASES: ${{ matrix.FAST_LINT_TEST_CASES }}
- run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
- - name: Upload coverage results to Coveralls
- if: matrix.calculate-code-coverage == 'yes'
- env:
- COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: php vendor/bin/php-coveralls --verbose
- - name: Run PHP CS Fixer for PHP 7.2 types
- if: matrix.php-version == '7.2' # we run on lowest supported version, running it on higher would falsy expect more changes, eg `mixed` type on PHP 8
- run: php php-cs-fixer fix --diff --dry-run -v --config .php-cs-fixer.php-lowest.php
- - name: Run PHP CS Fixer
- env:
- PHP_CS_FIXER_IGNORE_ENV: ${{ matrix.PHP_CS_FIXER_IGNORE_ENV }}
- PHP_CS_FIXER_FUTURE_MODE: 1
- run: php php-cs-fixer fix --diff --dry-run -v
- - name: Execute deployment checks
- if: matrix.execute-deployment == 'yes'
- run: |
- ./dev-tools/build.sh
- PHP_CS_FIXER_TEST_ALLOW_SKIPPING_SMOKE_TESTS=0 vendor/bin/phpunit tests/Smoke/
- - name: Execute deployment post-hook
- if: matrix.execute-deployment == 'yes' && startsWith(github.ref, 'refs/tags/v')
- env:
- TRAVIS_TOKEN: ${{ secrets.TRAVIS_TOKEN }}
- run: |
- # ensure that deployment is happening only if tag matches version of PHP CS Fixer
- test $(php dev-tools/info-extractor.php | jq -r .version.vnumber) == "${GITHUB_REF#refs/tags/}"
- # trigger website update
- ./dev-tools/trigger-website.sh ${TRAVIS_TOKEN} ${GITHUB_REF#refs/tags/}
|