name: Laravel Unit Tests & Quality Gate on: push: branches: [ main, develop ] pull_request: branches: [ main, develop ] jobs: unit-tests: name: Unit Tests (PHP ${{ matrix.php }} - ${{ matrix.dependency-version }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: php: ['8.2', '8.3', '8.4'] dependency-version: [prefer-stable] steps: - name: Checkout Code uses: actions/checkout@v4 - name: Setup PHP & Extensions uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} extensions: mbstring, dom, fileinfo, sqlite3, pdo_sqlite, pcov coverage: pcov tools: composer:v2 - name: Cache Composer Dependencies uses: actions/cache@v4 with: path: vendor key: ${{ runner.os }}-php-${{ matrix.php }}-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php-${{ matrix.php }}- - name: Install Dependencies run: composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-progress - name: Setup Environment Variables run: | cp .env.example .env.testing 2>/dev/null || true php artisan key:generate --env=testing - name: Run Unit Tests (Parallel Execution with Coverage Check) run: | php artisan test --testsuite=Unit --parallel --coverage --min=80 env: APP_ENV: testing DB_CONNECTION: sqlite DB_DATABASE: ":memory:" CACHE_STORE: array QUEUE_CONNECTION: sync MAIL_MAILER: array