fixes #3814
This file contains 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: CI | |
on: | |
push: | |
pull_request: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
jobs: | |
commitlint: | |
if: github.event_name == 'pull_request' | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Run commitlint | |
run: | | |
commit=$(gh api \ | |
/repos/${{ github.repository }}/pulls/${{github.event.number}}/commits \ | |
| jq -r '.[0].commit.message' \ | |
| head -n 1) | |
# we can't use npx see https://github.com/conventional-changelog/commitlint/issues/613 | |
echo '{}' > package.json | |
npm install --no-fund --no-audit @commitlint/config-conventional @commitlint/cli | |
echo $commit | ./node_modules/.bin/commitlint -g .commitlintrc | |
architecture: | |
name: Check components interdependencies | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
ini-values: memory_limit=-1 | |
tools: pecl, composer | |
coverage: none | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- run: composer validate | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- run: composer check-dependencies | |
php-cs-fixer: | |
name: PHP CS Fixer (PHP ${{ matrix.php }}) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
ini-values: memory_limit=-1 | |
tools: php-cs-fixer | |
coverage: none | |
- name: Run PHP-CS-Fixer fix | |
run: php-cs-fixer fix --dry-run --diff --ansi | |
lint-container: | |
name: Lint Container | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
ini-values: memory_limit=-1 | |
tools: composer | |
coverage: none | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Run container lint | |
run: tests/Fixtures/app/console lint:container | |
phpstan: | |
name: PHPStan (PHP ${{ matrix.php }}) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
env: | |
APP_DEBUG: '1' # https://github.com/phpstan/phpstan-symfony/issues/37 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Cache PHPStan results | |
uses: actions/cache@v4 | |
with: | |
path: /tmp/phpstan | |
key: phpstan-php${{ matrix.php }}-${{ github.sha }} | |
restore-keys: | | |
phpstan-php${{ matrix.php }}- | |
phpstan- | |
continue-on-error: true | |
- name: Clear test app cache | |
run: | | |
rm -Rf tests/Fixtures/app/var/cache/* | |
tests/Fixtures/app/console cache:warmup | |
- name: Run PHPStan analysis | |
run: | | |
./vendor/bin/phpstan --version | |
./vendor/bin/phpstan analyse --no-interaction --no-progress --ansi | |
- name: Install Laravel | |
working-directory: 'src/Laravel' | |
run: | | |
composer global link ../../ --working-directory=$(pwd) | |
composer run-script build | |
- name: Run PHPStan analysis (laravel) | |
working-directory: 'src/Laravel' | |
run: | | |
./vendor/bin/phpstan analyse --no-interaction --no-progress --ansi | |
phpunit: | |
name: PHPUnit (PHP ${{ matrix.php }}) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.2' | |
- '8.3' | |
include: | |
- php: '8.2' | |
coverage: true | |
- php: '8.3' | |
coverage: true | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_sqlite, mongodb | |
coverage: pcov | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run PHPUnit tests | |
run: vendor/bin/phpunit --log-junit build/logs/phpunit/junit.xml ${{ matrix.coverage && '--coverage-clover build/logs/phpunit/clover.xml' || '' }} | |
- name: Upload test artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: phpunit-logs-php${{ matrix.php }} | |
path: build/logs/phpunit | |
continue-on-error: true | |
- name: Upload coverage results to Codecov | |
if: matrix.coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
directory: build/logs/phpunit | |
name: phpunit-php${{ matrix.php }} | |
flags: phpunit | |
fail_ci_if_error: true | |
continue-on-error: true | |
- name: Upload coverage results to Coveralls | |
if: matrix.coverage | |
env: | |
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
composer global require --prefer-dist --no-interaction --no-progress --ansi php-coveralls/php-coveralls | |
export PATH="$PATH:$HOME/.composer/vendor/bin" | |
php-coveralls --coverage_clover=build/logs/phpunit/clover.xml | |
continue-on-error: true | |
phpunit-components: | |
name: PHPUnit ${{ matrix.component }} (PHP ${{ matrix.php }}) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.2' | |
- '8.3' | |
component: | |
- api-platform/doctrine-common | |
- api-platform/doctrine-orm | |
- api-platform/doctrine-odm | |
- api-platform/metadata | |
- api-platform/hydra | |
- api-platform/json-api | |
- api-platform/json-schema | |
- api-platform/elasticsearch | |
- api-platform/openapi | |
- api-platform/graphql | |
- api-platform/http-cache | |
- api-platform/ramsey-uuid | |
- api-platform/serializer | |
- api-platform/state | |
- api-platform/symfony | |
- api-platform/validator | |
include: | |
- php: '8.2' | |
coverage: true | |
- php: '8.3' | |
coverage: true | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_sqlite, mongodb | |
ini-values: memory_limit=-1 | |
- name: Run ${{ matrix.component }} install | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . --permanent | |
composer ${{matrix.component}} update | |
- name: Run ${{ matrix.component }} tests | |
run: | | |
mkdir -p /tmp/build/logs/phpunit | |
composer ${{matrix.component}} test --log-junit "/tmp/build/logs/phpunit/junit.xml" ${{ matrix.coverage && '--coverage-clover /tmp/build/logs/phpunit/clover.xml' || '' }} | |
- name: Upload test artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: phpunit-logs-php${{ matrix.php }} | |
path: /tmp/build/logs/phpunit | |
continue-on-error: true | |
- name: Upload coverage results to Codecov | |
if: matrix.coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
directory: /tmp/build/logs/phpunit | |
name: phpunit-php${{ matrix.php }} | |
flags: phpunit | |
fail_ci_if_error: true | |
continue-on-error: true | |
- name: Upload coverage results to Coveralls | |
if: matrix.coverage | |
env: | |
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
composer global require --prefer-dist --no-interaction --no-progress --ansi php-coveralls/php-coveralls | |
export PATH="$PATH:$HOME/.composer/vendor/bin" | |
php-coveralls --coverage_clover=/tmp/build/logs/phpunit/clover.xml | |
continue-on-error: true | |
behat: | |
name: Behat (PHP ${{ matrix.php }}) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.2' | |
- '8.3' | |
include: | |
- php: '8.2' | |
coverage: true | |
- php: '8.3' | |
coverage: true | |
- php: '8.3' | |
coverage: false | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_sqlite, mongodb | |
coverage: pcov | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests (PHP ${{ matrix.php }}) | |
run: | | |
mkdir -p build/logs/behat | |
vendor/bin/behat --out=std --format=progress --format=junit --out=build/logs/behat/junit --no-interaction ${{ matrix.coverage && '--profile=default-coverage' || '--profile=default' }} | |
- name: Merge code coverage reports | |
if: matrix.coverage | |
run: | | |
wget -qO /usr/local/bin/phpcov https://phar.phpunit.de/phpcov.phar | |
chmod +x /usr/local/bin/phpcov | |
mkdir -p build/coverage | |
phpcov merge --clover build/logs/behat/clover.xml build/coverage | |
continue-on-error: true | |
- name: Upload test artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: behat-logs-php${{ matrix.php }} | |
path: build/logs/behat | |
continue-on-error: true | |
- name: Upload coverage results to Codecov | |
if: matrix.coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
directory: build/logs/behat | |
name: behat-php${{ matrix.php }} | |
flags: behat | |
fail_ci_if_error: true | |
continue-on-error: true | |
- name: Upload coverage results to Coveralls | |
if: matrix.coverage | |
env: | |
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
composer global require --prefer-dist --no-interaction --no-progress --ansi php-coveralls/php-coveralls | |
export PATH="$PATH:$HOME/.composer/vendor/bin" | |
php-coveralls --coverage_clover=build/logs/behat/clover.xml | |
continue-on-error: true | |
- name: Export OpenAPI documents | |
run: | | |
mkdir -p build/out/openapi | |
tests/Fixtures/app/console api:openapi:export -o build/out/openapi/openapi_v3.json | |
tests/Fixtures/app/console api:openapi:export --yaml -o build/out/openapi/openapi_v3.yaml | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '14' | |
- name: Validate OpenAPI documents | |
run: | | |
npx swagger-cli validate build/out/openapi/openapi_v3.json | |
npx swagger-cli validate build/out/openapi/openapi_v3.yaml | |
- name: Upload OpenAPI artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: openapi-docs-php${{ matrix.php }} | |
path: build/out/openapi | |
continue-on-error: true | |
postgresql: | |
name: Behat (PHP ${{ matrix.php }}) (PostgreSQL) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
env: | |
APP_ENV: postgres | |
DATABASE_URL: postgres://api_platform:apiplatformrocks@localhost/api_platform_test | |
PGPASSWORD: apiplatformrocks | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup postgres | |
run: | | |
sudo systemctl start postgresql | |
sudo -u postgres psql -d template1 -c "CREATE USER api_platform WITH PASSWORD 'apiplatformrocks' CREATEDB" | |
createdb -h localhost -p 5432 -U api_platform api_platform_test | |
pg_isready -d api_platform_test -h localhost -p 5432 -U api_platform | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_pgsql, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests | |
run: | | |
vendor/bin/behat --out=std --format=progress --profile=postgres --no-interaction -vv | |
mysql: | |
name: Behat (PHP ${{ matrix.php }}) (MySQL) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
services: | |
mysql: | |
image: mariadb:10.5.9 | |
env: | |
MYSQL_ROOT_PASSWORD: root | |
MYSQL_DATABASE: api_platform_test | |
ports: | |
- 3306:3306 | |
env: | |
APP_ENV: mysql | |
DATABASE_URL: mysql://root:[email protected]/api_platform_test | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_mysql, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests | |
run: vendor/bin/behat --out=std --format=progress --profile=default --no-interaction --tags '~@!mysql' | |
mongodb: | |
name: PHPUnit + Behat (PHP ${{ matrix.php }}) (MongoDB) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.2' | |
- '8.3' | |
fail-fast: false | |
env: | |
APP_ENV: mongodb | |
MONGODB_URL: mongodb://localhost:27017 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup MongoDB | |
run: | | |
sudo apt update | |
sudo apt install -y wget gnupg | |
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - | |
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list | |
sudo apt update | |
sudo apt install -y mongodb-org | |
sudo systemctl start mongod | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: pcov | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . --permanent | |
composer require --dev doctrine/mongodb-odm-bundle | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run PHPUnit tests | |
run: vendor/bin/phpunit --log-junit build/logs/phpunit/junit.xml --coverage-clover build/logs/phpunit/clover.xml --exclude-group=orm | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests | |
run: | | |
mkdir -p build/logs/behat | |
vendor/bin/behat --out=std --format=progress --format=junit --out=build/logs/behat/junit --profile=mongodb-coverage --no-interaction | |
- name: Merge code coverage reports | |
run: | | |
wget -qO /usr/local/bin/phpcov https://phar.phpunit.de/phpcov.phar | |
chmod +x /usr/local/bin/phpcov | |
mkdir -p build/coverage | |
phpcov merge --clover build/logs/behat/clover.xml build/coverage | |
continue-on-error: true | |
- name: Upload test artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: behat-logs-php${{ matrix.php }} | |
path: build/logs/behat | |
continue-on-error: true | |
- name: Upload coverage results to Codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
directory: build/logs/behat | |
name: behat-php${{ matrix.php }} | |
flags: behat | |
fail_ci_if_error: true | |
continue-on-error: true | |
- name: Upload coverage results to Coveralls | |
env: | |
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
composer global require --prefer-dist --no-interaction --no-progress --ansi php-coveralls/php-coveralls | |
export PATH="$PATH:$HOME/.composer/vendor/bin" | |
php-coveralls --coverage_clover=build/logs/behat/clover.xml | |
continue-on-error: true | |
mercure: | |
name: PHPUnit + Behat (PHP ${{ matrix.php }}) (Mercure) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.2' | |
- '8.3' | |
fail-fast: false | |
env: | |
APP_ENV: mercure | |
MERCURE_URL: 'http://localhost:1337/.well-known/mercure' | |
MERCURE_JWT_SECRET: 'eyJhbGciOiJIUzI1NiJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiKiJdLCJzdWJzY3JpYmUiOlsiaHR0cHM6Ly9leGFtcGxlLmNvbS9teS1wcml2YXRlLXRvcGljIiwie3NjaGVtZX06Ly97K2hvc3R9L2RlbW8vYm9va3Mve2lkfS5qc29ubGQiLCIvLndlbGwta25vd24vbWVyY3VyZS9zdWJzY3JpcHRpb25zey90b3BpY317L3N1YnNjcmliZXJ9Il0sInBheWxvYWQiOnsidXNlciI6Imh0dHBzOi8vZXhhbXBsZS5jb20vdXNlcnMvZHVuZ2xhcyIsInJlbW90ZUFkZHIiOiIxMjcuMC4wLjEifX19.KKPIikwUzRuB3DTpVw6ajzwSChwFw5omBMmMcWKiDcM' | |
services: | |
mercure: | |
image: dunglas/mercure | |
env: | |
SERVER_NAME: :1337 | |
MERCURE_PUBLISHER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!' | |
MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!' | |
MERCURE_EXTRA_DIRECTIVES: | | |
# Custom directives, see https://mercure.rocks/docs/hub/config | |
anonymous | |
cors_origins * | |
ports: | |
- 1337:1337 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: pcov | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run PHPUnit tests | |
run: vendor/bin/phpunit --log-junit build/logs/phpunit/junit.xml --coverage-clover build/logs/phpunit/clover.xml --group mercure | |
- name: Run Behat tests | |
run: | | |
mkdir -p build/logs/behat | |
vendor/bin/behat --out=std --format=progress --format=junit --out=build/logs/behat/junit --profile=mercure-coverage --no-interaction | |
- name: Merge code coverage reports | |
run: | | |
wget -qO /usr/local/bin/phpcov https://phar.phpunit.de/phpcov.phar | |
chmod +x /usr/local/bin/phpcov | |
mkdir -p build/coverage | |
phpcov merge --clover build/logs/behat/clover.xml build/coverage | |
continue-on-error: true | |
- name: Upload test artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: behat-logs-php${{ matrix.php }} | |
path: build/logs/behat | |
continue-on-error: true | |
- name: Upload coverage results to Codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
directory: build/logs/behat | |
name: behat-php${{ matrix.php }} | |
flags: behat | |
fail_ci_if_error: true | |
continue-on-error: true | |
- name: Upload coverage results to Coveralls | |
env: | |
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
composer global require --prefer-dist --no-interaction --no-progress --ansi php-coveralls/php-coveralls | |
export PATH="$PATH:$HOME/.composer/vendor/bin" | |
php-coveralls --coverage_clover=build/logs/behat/clover.xml | |
continue-on-error: true | |
elasticsearch: | |
name: Behat (PHP ${{ matrix.php }}) (Elasticsearch) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
env: | |
APP_ENV: elasticsearch | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Configure sysctl limits | |
run: | | |
sudo swapoff -a | |
sudo sysctl -w vm.swappiness=1 | |
sudo sysctl -w fs.file-max=262144 | |
sudo sysctl -w vm.max_map_count=262144 | |
- name: Runs Elasticsearch | |
uses: elastic/elastic-github-actions/elasticsearch@master | |
with: | |
stack-version: '8.4.0' | |
security-enabled: false | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests | |
run: vendor/bin/behat --out=std --format=progress --profile=elasticsearch --no-interaction | |
phpunit-no-deprecations: | |
name: PHPUnit (PHP ${{ matrix.php }}) (no deprecations) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run PHPUnit tests | |
run: vendor/bin/phpunit --fail-on-deprecation --display-deprecations | |
phpunit-symfony-next: | |
name: PHPUnit (PHP ${{ matrix.php }}) (Symfony dev) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Allow unstable project dependencies | |
run: composer config minimum-stability dev | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Remove cache | |
run: rm -Rf tests/Fixtures/app/var/cache/* | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run PHPUnit tests | |
run: vendor/bin/phpunit | |
behat-symfony-next: | |
name: Behat (PHP ${{ matrix.php }}) (Symfony dev) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Install additional packages | |
run: sudo apt-get install moreutils | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Allow unstable project dependencies | |
run: composer config minimum-stability dev | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Remove cache | |
run: rm -Rf tests/Fixtures/app/var/cache/* | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests | |
run: vendor/bin/behat --out=std --format=progress --profile=default --no-interaction | |
windows-behat: | |
name: Windows Behat (PHP ${{ matrix.php }}) (SQLite) | |
runs-on: windows-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
env: | |
APP_ENV: sqlite | |
DATABASE_URL: sqlite:///%kernel.project_dir%/var/data.db | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP with pre-release PECL extension | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_sqlite, fileinfo | |
coverage: none | |
ini-values: memory_limit=-1 | |
# Not in pecl | |
- name: Setup mongodb | |
run: | | |
curl -sLO https://github.com/mongodb/mongo-php-driver/releases/download/1.17.2/php_mongodb-1.17.2-8.3-nts-x64.zip | |
unzip -q php_mongodb-1.17.2-8.3-nts-x64.zip php_mongodb.dll | |
mv php_mongodb.dll C:\tools\php\ext | |
echo "extension=php_mongodb.dll" >> C:\tools\php\php.ini | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Keep windows path | |
id: get-cwd | |
run: | | |
cwd=$(php -r 'echo(str_replace("\\", "\\\\", $_SERVER["argv"][1]));' '${{ github.workspace }}') | |
echo cwd=$cwd >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . --working-directory='${{ steps.get-cwd.outputs.cwd }}' | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests | |
run: vendor/bin/behat --out=std --format=progress --profile=default --no-interaction | |
phpunit-symfony-lowest: | |
name: PHPUnit (PHP ${{ matrix.php }}) (Symfony lowest) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Remove cache | |
run: rm -Rf tests/Fixtures/app/var/cache/* | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . --permanent | |
composer update --prefer-lowest | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run PHPUnit tests | |
run: vendor/bin/phpunit | |
env: | |
SYMFONY_DEPRECATIONS_HELPER: max[self]=0&ignoreFile=./tests/.ignored-deprecations | |
behat-symfony-lowest: | |
name: Behat (PHP ${{ matrix.php }}) (Symfony lowest) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, mongodb | |
coverage: none | |
ini-values: memory_limit=-1 | |
- name: Install additional packages | |
run: sudo apt-get install moreutils | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Remove cache | |
run: rm -Rf tests/Fixtures/app/var/cache/* | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . --permanent | |
composer update --prefer-lowest | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests | |
run: vendor/bin/behat --out=std --format=progress --profile=default --no-interaction --tags='~@disableForSymfonyLowest' | |
phpunit_listeners: | |
name: PHPUnit event listeners (PHP ${{ matrix.php }}) | |
env: | |
USE_SYMFONY_LISTENERS: 1 | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
include: | |
- php: '8.3' | |
coverage: true | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_sqlite | |
coverage: pcov | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Enable code coverage | |
if: matrix.coverage | |
run: echo "COVERAGE=1" >> $GITHUB_ENV | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run PHPUnit tests | |
run: | | |
mkdir -p build/logs/phpunit | |
if [ "$COVERAGE" = '1' ]; then | |
vendor/bin/phpunit --log-junit build/logs/phpunit/junit.xml --coverage-clover build/logs/phpunit/clover.xml | |
else | |
vendor/bin/phpunit --log-junit build/logs/phpunit/junit.xml | |
fi | |
- name: Upload test artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: phpunit-logs-php${{ matrix.php }} | |
path: build/logs/phpunit | |
continue-on-error: true | |
- name: Upload coverage results to Codecov | |
if: matrix.coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
directory: build/logs/phpunit | |
name: phpunit-php${{ matrix.php }} | |
flags: phpunit | |
fail_ci_if_error: true | |
continue-on-error: true | |
- name: Upload coverage results to Coveralls | |
if: matrix.coverage | |
env: | |
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
composer global require --prefer-dist --no-interaction --no-progress --ansi php-coveralls/php-coveralls | |
export PATH="$PATH:$HOME/.composer/vendor/bin" | |
php-coveralls --coverage_clover=build/logs/phpunit/clover.xml | |
continue-on-error: true | |
behat_listeners: | |
name: Behat event listeners (PHP ${{ matrix.php }}) | |
env: | |
USE_SYMFONY_LISTENERS: 1 | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.3' | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_sqlite | |
coverage: pcov | |
ini-values: memory_limit=-1 | |
- name: Get composer cache directory | |
id: composercache | |
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composercache.outputs.dir }} | |
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . | |
- name: Clear test app cache | |
run: tests/Fixtures/app/console cache:clear --ansi | |
- name: Run Behat tests (PHP 8) | |
run: | | |
mkdir -p build/logs/behat | |
vendor/bin/behat --out=std --format=progress --format=junit --out=build/logs/behat/junit --profile=symfony_listeners --no-interaction | |
- name: Upload test artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: behat-logs-php${{ matrix.php }} | |
path: build/logs/behat | |
continue-on-error: true | |
- name: Export OpenAPI documents | |
run: | | |
mkdir -p build/out/openapi | |
tests/Fixtures/app/console api:openapi:export -o build/out/openapi/openapi_v3.json | |
tests/Fixtures/app/console api:openapi:export --yaml -o build/out/openapi/openapi_v3.yaml | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '14' | |
- name: Validate OpenAPI documents | |
run: | | |
npx swagger-cli validate build/out/openapi/openapi_v3.json | |
npx swagger-cli validate build/out/openapi/openapi_v3.yaml | |
- name: Upload OpenAPI artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: openapi-docs-php${{ matrix.php }} | |
path: build/out/openapi | |
continue-on-error: true | |
laravel: | |
name: Laravel (PHP ${{ matrix.php }}) | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
php: | |
- '8.2' | |
- '8.3' | |
include: | |
- php: '8.2' | |
coverage: true | |
- php: '8.3' | |
coverage: true | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
tools: pecl, composer | |
extensions: intl, bcmath, curl, openssl, mbstring, pdo_sqlite, mongodb | |
ini-values: memory_limit=-1 | |
- name: Update project dependencies | |
run: | | |
composer global require soyuka/pmu | |
composer global config allow-plugins.soyuka/pmu true --no-interaction | |
composer global link . --permanent | |
composer api-platform/laravel update | |
- name: PHP version tweaks | |
run: | | |
composer run-script build | |
composer run-script test | |
working-directory: 'src/Laravel' | |