name: Run tests permissions: contents: read on: push: pull_request: types: [ opened, synchronize, reopened ] jobs: test-php: name: Test on PHP ${{ matrix.php-version }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} strategy: matrix: php-version: [ '8.2', '8.3', '8.4' ] os: [ ubuntu-latest ] experimental: [ false ] composer-options: [ '' ] include: - { php-version: '8.5', experimental: true, os: ubuntu-latest, composer-options: '--ignore-platform-req=php+' } steps: - name: Checkout code uses: actions/checkout@v6 with: # Fetch some commits for Scrutinizer coverage upload fetch-depth: 15 - name: Set up PHP ${{ matrix.php-version }} uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }} # phar, json and curl are used by composer # json is used by testing code # dom, json, mbstring, libxml, xml, xmlwriter are used by phpunit # tokenizer, xmlwriter and simplexml are used by phpcs # ctype is used by Psalm extensions: none, mbstring, phar, json, curl, tokenizer, xml, xmlwriter, simplexml, libxml, dom, ctype coverage: xdebug - name: Install Composer dependencies uses: ramsey/composer-install@v4 with: composer-options: ${{ matrix.composer-options }} - name: Run PHP tests run: composer run phpunit - name: Send coverage uses: codecov/codecov-action@v6 # Do not run this step on forked versions of the main repository (example: contributor forks) if: github.repository == 'phpmyadmin/sql-parser' with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} flags: unit-${{ matrix.php-version }}-${{ matrix.os }} name: phpunit-${{ matrix.php-version }}-${{ matrix.os }} report_type: coverage - name: Upload test results uses: codecov/codecov-action@v6 # Do not run this step on forked versions of the main repository (example: contributor forks) if: ${{ github.repository == 'phpmyadmin/sql-parser' && !cancelled() }} with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} flags: unit-${{ matrix.php-version }}-${{ matrix.os }} name: phpunit-${{ matrix.php-version }}-${{ matrix.os }} report_type: test_results - name: Send coverage to Scrutinizer uses: sudo-bot/action-scrutinizer@latest # Do not run this step on forked versions of the main repository (example: contributor forks) if: github.repository == 'phpmyadmin/sql-parser' with: cli-args: "--format=php-clover build/logs/clover.xml --revision=${{ github.event.pull_request.head.sha || github.sha }}" php-benchmark: name: Benchmark on PHP ${{ matrix.php-version }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} strategy: matrix: php-version: [ '8.2', '8.3', '8.4' ] os: [ ubuntu-latest ] experimental: [ false ] composer-options: [ '' ] include: - { php-version: '8.5', experimental: true, os: ubuntu-latest, composer-options: '--ignore-platform-req=php+' } steps: - name: Checkout code uses: actions/checkout@v6 with: # Fetch some commits for Scrutinizer coverage upload fetch-depth: 15 - name: Set up PHP ${{ matrix.php-version }} uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }} # phar, json and curl are used by composer # json is used by testing code # dom, json, mbstring, libxml, xml, xmlwriter are used by phpunit # tokenizer, xmlwriter and simplexml are used by phpcs # ctype is used by Psalm extensions: none, mbstring, phar, json, curl, tokenizer, xml, xmlwriter, simplexml, libxml, dom, ctype coverage: xdebug - name: Install Composer dependencies uses: ramsey/composer-install@v4 with: composer-options: ${{ matrix.composer-options }} - name: Run benchmarks run: composer run phpbench