Skip to content

Drop support for PHP 7.4 and 8.0, introduce support for PHP 8.4, fix semconv deprecations #1471

Drop support for PHP 7.4 and 8.0, introduce support for PHP 8.4, fix semconv deprecations

Drop support for PHP 7.4 and 8.0, introduce support for PHP 8.4, fix semconv deprecations #1471

Workflow file for this run

name: PHP QA
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
php:
runs-on: ubuntu-latest
continue-on-error: false
strategy:
fail-fast: false
matrix:
php-version: ['8.1', '8.2', '8.3', '8.4']
# Sorted alphabetically to ease finding the desired run in the GitHub Workflow UI.
project: [
'Aws',
'Context/Swoole',
'Instrumentation/CakePHP',
'Instrumentation/CodeIgniter',
'Instrumentation/Curl',
'Instrumentation/ExtAmqp',
'Instrumentation/ExtRdKafka',
'Instrumentation/Guzzle',
'Instrumentation/HttpAsyncClient',
'Instrumentation/IO',
'Instrumentation/Laravel',
'Instrumentation/MongoDB',
'Instrumentation/MySqli',
'Instrumentation/OpenAIPHP',
'Instrumentation/PDO',
# Sort PSRs numerically.
'Instrumentation/Psr3',
'Instrumentation/Psr6',
'Instrumentation/Psr14',
'Instrumentation/Psr15',
'Instrumentation/Psr16',
'Instrumentation/Psr18',
'Instrumentation/Slim',
'Instrumentation/Symfony',
'Instrumentation/Yii',
'Logs/Monolog',
'Propagation/ServerTiming',
'Propagation/TraceResponse',
'ResourceDetectors/Azure',
'ResourceDetectors/Container',
'Sampler/RuleBased',
'Shims/OpenTracing',
'Symfony',
]
exclude:
- project: 'Instrumentation/IO'
php-version: 8.1
- project: 'Instrumentation/Curl'
php-version: 8.1
- project: 'Instrumentation/MySqli'
php-version: 8.1
- project: 'Instrumentation/PDO'
php-version: 8.1
- project: 'Instrumentation/ExtAmqp'
php-version: 8.1
- project: 'Instrumentation/ExtRdKafka'
php-version: 8.1
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
coverage: xdebug
extensions: ast, amqp, grpc, opentelemetry, rdkafka, mysqli
- name: Validate composer.json and composer.lock
run: composer validate
- name: Cache Composer packages
id: composer-cache
uses: actions/cache@v4
with:
path: src/${{ matrix.project }}/vendor
key: ${{ runner.os }}-${{ matrix.php-version }}-php-${{ hashFiles('**/composer.json') }}
restore-keys: |
${{ runner.os }}-${{ matrix.php-version }}-php-
- name: Install dependencies
if: steps.composer-cache.outputs.cache-hit != 'true'
working-directory: src/${{ matrix.project }}
run: |
composer config --no-plugins allow-plugins.php-http/discovery false
composer install --prefer-dist --no-progress
- name: Validate Packages composer.json
working-directory: src/${{ matrix.project }}
run: composer validate
- name: Check Style
working-directory: src/${{ matrix.project }}
run: PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --dry-run --stop-on-violation --using-cache=no -vvv
- name: Run Phan
working-directory: src/${{ matrix.project }}
env:
PHAN_DISABLE_XDEBUG_WARN: 1
run: vendor/bin/phan
- name: Run Psalm
working-directory: src/${{ matrix.project }}
run: vendor/bin/psalm --output-format=github --php-version=${{ matrix.php-version }}
- name: Run Phpstan
working-directory: src/${{ matrix.project }}
run: vendor/bin/phpstan analyse --error-format=github
- name: Start MongoDB
uses: supercharge/[email protected]
if: ${{ matrix.project == 'Instrumentation/MongoDB' }}
with:
mongodb-version: 6.0
mongodb-replica-set: otel-php
- name: Start RabbitMQ
if: ${{ matrix.project == 'Instrumentation/ExtAmqp' }}
run: |
docker compose up rabbitmq -d --wait
- name: Start Kafka
if: ${{ matrix.project == 'Instrumentation/ExtRdKafka' }}
run: |
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092,PLAINTEXT_HOST://localhost:9092 docker compose up kafka -d --wait
- name: Start Mysql
if: ${{ matrix.project == 'Instrumentation/MySqli' }}
run: |
docker compose up mysql -d --wait
- name: Run PHPUnit
working-directory: src/${{ matrix.project }}
run: vendor/bin/phpunit
- name: Run PHPUnit (coverage)
working-directory: src/${{ matrix.project }}
run: vendor/bin/phpunit --testsuite integration,unit --coverage-text --coverage-clover=coverage.clover
- name: Code Coverage
uses: codecov/codecov-action@v4
# only generate coverage against the latest PHP version
if: ${{ matrix.php-version == '8.4' }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: src/${{ matrix.project }}
files: ./coverage.clover
flags: ${{ matrix.project }}
verbose: false