name: Testing Spout on: [push, pull_request] jobs: tests: strategy: matrix: operating-system: [ubuntu-latest, windows-latest, macos-latest] php-versions: ['7.2', '7.3', '7.4', '8.0'] runs-on: ${{ matrix.operating-system }} name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }} env: extensions: zip, xmlreader, dom cache-key: cache-matrix-v1 # can be any string, change to clear the extension cache. steps: - name: Checkout uses: actions/checkout@v2 - name: Setup cache environment id: extcache uses: shivammathur/cache-extensions@v1 with: php-version: ${{ matrix.php-versions }} extensions: ${{ env.extensions }} key: ${{ env.cache-key }} - name: Cache extensions uses: actions/cache@v2 with: path: ${{ steps.extcache.outputs.dir }} key: ${{ steps.extcache.outputs.key }} restore-keys: ${{ steps.extcache.outputs.key }} - name: Setup PHP uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php with: php-version: ${{ matrix.php-versions }} extensions: ${{ env.extensions }} - name: Get composer cache directory id: composer-cache run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache composer dependencies uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} # Use composer.json for key, if composer.lock is not committed. # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Install dependencies run: composer install --no-progress --prefer-dist --optimize-autoloader - name: Test with phpunit run: vendor/bin/phpunit --no-coverage code-coverage: name: Code coverage runs-on: ubuntu-latest env: extensions: zip, xmlreader, dom cache-key: cache-single-v1 # can be any string, change to clear the extension cache. steps: - name: Checkout uses: actions/checkout@v2 - name: Setup cache environment id: extcache uses: shivammathur/cache-extensions@v1 with: php-version: '7.4' extensions: ${{ env.extensions }} key: ${{ env.cache-key }} - name: Cache extensions uses: actions/cache@v2 with: path: ${{ steps.extcache.outputs.dir }} key: ${{ steps.extcache.outputs.key }} restore-keys: ${{ steps.extcache.outputs.key }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' extensions: ${{ env.extensions }} - name: Get composer cache directory id: composer-cache run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache composer dependencies uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} # Use composer.json for key, if composer.lock is not committed. # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Install dependencies run: composer install --no-progress --prefer-dist --optimize-autoloader - name: Run Tests with Code Coverage run: vendor/bin/phpunit --coverage-clover=build/logs/coverage.clover - name: Send to Scrutinizer run: | wget https://scrutinizer-ci.com/ocular.phar php ocular.phar code-coverage:upload --format=php-clover build/logs/coverage.clover coding-style: name: Coding Style runs-on: ubuntu-latest env: extensions: zip, xmlreader, dom cache-key: cache-single-v1 # can be any string, change to clear the extension cache. steps: - name: Checkout uses: actions/checkout@v2 - name: Setup cache environment id: extcache uses: shivammathur/cache-extensions@v1 with: php-version: '7.4' extensions: ${{ env.extensions }} key: ${{ env.cache-key }} - name: Cache extensions uses: actions/cache@v2 with: path: ${{ steps.extcache.outputs.dir }} key: ${{ steps.extcache.outputs.key }} restore-keys: ${{ steps.extcache.outputs.key }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' extensions: ${{ env.extensions }} - name: Get composer cache directory id: composer-cache run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache composer dependencies uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} # Use composer.json for key, if composer.lock is not committed. # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Install dependencies run: composer install --no-progress --prefer-dist --optimize-autoloader - name: Run PHP-CS-Fixer run: vendor/bin/php-cs-fixer fix --verbose --diff --dry-run --diff-format=udiff static-analysis: name: Static Analysis runs-on: ubuntu-latest env: extensions: zip, xmlreader, dom cache-key: cache-single-v1 # can be any string, change to clear the extension cache. steps: - name: Checkout uses: actions/checkout@v2 - name: Setup cache environment id: extcache uses: shivammathur/cache-extensions@v1 with: php-version: '7.4' extensions: ${{ env.extensions }} key: ${{ env.cache-key }} - name: Cache extensions uses: actions/cache@v2 with: path: ${{ steps.extcache.outputs.dir }} key: ${{ steps.extcache.outputs.key }} restore-keys: ${{ steps.extcache.outputs.key }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' extensions: ${{ env.extensions }} tools: phpstan - name: Get composer cache directory id: composer-cache run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache composer dependencies uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} # Use composer.json for key, if composer.lock is not committed. # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Install dependencies run: composer install --no-progress --prefer-dist --optimize-autoloader - name: Static Analysis using PHPStan run: phpstan analyse --no-progress src/