Enhance CI with coding style and coverage jobs #662
Workflow file for this run
This file contains hidden or 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: build | |
| on: | |
| push: | |
| branches: [ master ] | |
| pull_request: | |
| branches: [ master ] | |
| jobs: | |
| coding-style: | |
| name: Coding Style | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: 8.3 | |
| coverage: none | |
| - name: Cache Composer packages | |
| uses: actions/cache@v3 | |
| with: | |
| path: vendor | |
| key: ${{ runner.os }}-php-8.3-composer-${{ hashFiles('**/composer.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-php-8.3-composer- | |
| - name: Install dependencies | |
| run: composer install --prefer-dist --no-progress | |
| - name: Check coding style via ECS | |
| run: vendor/bin/ecs check | |
| static-analysis: | |
| name: Static Analysis | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: 8.3 | |
| coverage: none | |
| - name: Cache Composer packages | |
| uses: actions/cache@v3 | |
| with: | |
| path: vendor | |
| key: ${{ runner.os }}-php-8.3-composer-${{ hashFiles('**/composer.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-php-8.3-composer- | |
| - name: Install dependencies | |
| run: composer install --prefer-dist --no-progress | |
| - name: Run static analysis via PHPStan | |
| run: vendor/bin/phpstan analyse src tests | |
| tests: | |
| name: PHP ${{ matrix.php }} / Laravel ${{ matrix.laravel }} / ${{ matrix.dependency-version }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| php: [8.1, 8.2, 8.3, 8.4] | |
| laravel: [9.*, 10.*, 11.*, 12.*] | |
| dependency-version: [prefer-lowest, prefer-stable] | |
| include: | |
| # Laravel 9 supports PHP 8.1-8.2 | |
| - laravel: 9.* | |
| testbench: ^7.0 | |
| # Laravel 10 supports PHP 8.1-8.2 | |
| - laravel: 10.* | |
| testbench: ^8.0 | |
| # Laravel 11 supports PHP 8.2-8.3 | |
| - laravel: 11.* | |
| testbench: ^9.0 | |
| # Laravel 12 supports PHP 8.3-8.4 | |
| - laravel: 12.* | |
| testbench: ^10.0 | |
| exclude: | |
| # Laravel 9: exclude PHP 8.3, 8.4 | |
| - laravel: 9.* | |
| php: 8.3 | |
| - laravel: 9.* | |
| php: 8.4 | |
| # Laravel 10: exclude PHP 8.3, 8.4 | |
| - laravel: 10.* | |
| php: 8.3 | |
| - laravel: 10.* | |
| php: 8.4 | |
| # Laravel 11: exclude PHP 8.1, 8.4 | |
| - laravel: 11.* | |
| php: 8.1 | |
| - laravel: 11.* | |
| php: 8.4 | |
| # Laravel 12: exclude PHP 8.1, 8.2 | |
| - laravel: 12.* | |
| php: 8.1 | |
| - laravel: 12.* | |
| php: 8.2 | |
| services: | |
| mysql: | |
| image: mysql:8.0 | |
| env: | |
| MYSQL_ROOT_PASSWORD: password | |
| MYSQL_DATABASE: testbench | |
| ports: | |
| - 3306:3306 | |
| options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
| postgres: | |
| image: postgres:14 | |
| env: | |
| POSTGRES_USER: root | |
| POSTGRES_PASSWORD: password | |
| POSTGRES_DB: testbench | |
| ports: | |
| - 5432:5432 | |
| options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3 | |
| redis: | |
| image: redis:7 | |
| ports: | |
| - 6379:6379 | |
| options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| with: | |
| fetch-depth: 10 | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: ${{ matrix.php }} | |
| extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv | |
| coverage: none | |
| - name: Validate composer.json and composer.lock | |
| run: composer validate --strict | |
| - name: Cache Composer packages | |
| uses: actions/cache@v3 | |
| with: | |
| path: vendor | |
| key: ${{ runner.os }}-php-${{ matrix.php }}-${{ matrix.dependency-version }}-laravel-${{ matrix.laravel }}-${{ hashFiles('**/composer.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-php-${{ matrix.php }}-${{ matrix.dependency-version }}-laravel-${{ matrix.laravel }}- | |
| - name: Install dependencies | |
| run: | | |
| composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update --dev | |
| composer update --${{ matrix.dependency-version }} --prefer-dist --no-progress --no-interaction --with-all-dependencies | |
| - name: Create SQLite database | |
| run: touch testbench.sqlite | |
| - name: Create MySQL database | |
| run: mysql -e 'CREATE DATABASE IF NOT EXISTS testbench' -h127.0.0.1 -uroot -ppassword -P 3306 | |
| - name: Run test suite (MySQL) | |
| run: vendor/bin/phpunit --testdox --testsuite feature | |
| env: | |
| APP_KEY: base64:i3g6f+dV8FfsIkcxqd7gbiPn2oXk5r00sTmdD6V5utI= | |
| DB_CONNECTION: mysql | |
| DB_DATABASE: testbench | |
| DB_HOST: 127.0.0.1 | |
| DB_PORT: 3306 | |
| DB_USERNAME: root | |
| DB_PASSWORD: password | |
| QUEUE_CONNECTION: redis | |
| QUEUE_FAILED_DRIVER: "null" | |
| REDIS_HOST: 127.0.0.1 | |
| REDIS_PASSWORD: | |
| REDIS_PORT: 6379 | |
| - name: Run test suite (PostgreSQL) | |
| run: vendor/bin/phpunit --testdox --testsuite feature | |
| env: | |
| APP_KEY: base64:i3g6f+dV8FfsIkcxqd7gbiPn2oXk5r00sTmdD6V5utI= | |
| DB_CONNECTION: pgsql | |
| DB_DATABASE: testbench | |
| DB_HOST: 127.0.0.1 | |
| DB_PORT: 5432 | |
| DB_USERNAME: root | |
| DB_PASSWORD: password | |
| QUEUE_CONNECTION: redis | |
| QUEUE_FAILED_DRIVER: "null" | |
| REDIS_HOST: 127.0.0.1 | |
| REDIS_PASSWORD: | |
| REDIS_PORT: 6379 | |
| - name: Run test suite (SQLite - all platforms) | |
| run: vendor/bin/phpunit --testdox | |
| env: | |
| APP_KEY: base64:i3g6f+dV8FfsIkcxqd7gbiPn2oXk5r00sTmdD6V5utI= | |
| DB_CONNECTION: sqlite | |
| DB_DATABASE: testbench.sqlite | |
| QUEUE_CONNECTION: sync | |
| - name: Upload laravel.log if tests fail | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: laravel-log-php-${{ matrix.php }}-laravel-${{ matrix.laravel }}-${{ matrix.dependency-version }} | |
| path: vendor/orchestra/testbench-core/laravel/storage/logs/laravel.log | |
| if-no-files-found: ignore | |
| coverage: | |
| name: Code Coverage | |
| runs-on: ubuntu-latest | |
| services: | |
| redis: | |
| image: redis:7 | |
| ports: | |
| - 6379:6379 | |
| options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: 8.3 | |
| coverage: xdebug | |
| - name: Cache Composer packages | |
| uses: actions/cache@v3 | |
| with: | |
| path: vendor | |
| key: ${{ runner.os }}-php-8.3-composer-${{ hashFiles('**/composer.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-php-8.3-composer- | |
| - name: Install dependencies | |
| run: composer install --prefer-dist --no-progress | |
| - name: Create SQLite database | |
| run: touch testbench.sqlite | |
| - name: Run unit tests with coverage | |
| run: vendor/bin/phpunit --testdox --coverage-clover=coverage.clover --testsuite unit | |
| env: | |
| APP_KEY: base64:i3g6f+dV8FfsIkcxqd7gbiPn2oXk5r00sTmdD6V5utI= | |
| DB_CONNECTION: sqlite | |
| DB_DATABASE: testbench.sqlite | |
| QUEUE_CONNECTION: sync | |
| REDIS_HOST: 127.0.0.1 | |
| REDIS_PASSWORD: | |
| REDIS_PORT: 6379 | |
| - name: Upload coverage to Scrutinizer | |
| run: vendor/bin/ocular code-coverage:upload --format=php-clover coverage.clover |