From 9037907f2a4051a3ad0f517b3e9428e62c94409d Mon Sep 17 00:00:00 2001 From: Kamil Kokot Date: Fri, 12 Jun 2026 13:58:59 +0200 Subject: [PATCH] Modernize PHP and Symfony version requirements; add Symfony 8 CI support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Drop PHP <8.3 and Symfony <7.4 (both EOL), require PHP ^8.3 and symfony/config ^7.4 - Require behat ^3.31 (first version with PHP 8 attribute and PHP config support) - Upgrade phpspec to ^8.0 (supports PHP 8.5) - Add symfony/browser-kit and symfony/http-client to dev deps; switch from deprecated goutte driver to browserkit_http - Update CI matrix: PHP 8.3/8.4/8.5 × Symfony 7.4 + PHP 8.4/8.5 × Symfony 8.0/8.1 - Add Symfony 8+ CI step: override behat to 4.x-dev as 3.31.0 - Restrict push trigger to master branch only (no duplicate runs on PRs) - Add behat.dist.php for behat 4.x compatibility (PHP config format) - Update behat.yml.dist to use FQCN extension name (works in both behat 3.x and 4.x) - Add lock-symfony-version.sh script for pinning Symfony in CI Co-Authored-By: Claude Sonnet 4.6 (1M context) --- .github/workflows/lock-symfony-version.sh | 4 ++ .github/workflows/test.yaml | 49 ++++++++++++++--------- behat.dist.php | 28 +++++++++++++ behat.yml.dist | 4 +- composer.json | 21 ++++++---- 5 files changed, 79 insertions(+), 27 deletions(-) create mode 100755 .github/workflows/lock-symfony-version.sh create mode 100644 behat.dist.php diff --git a/.github/workflows/lock-symfony-version.sh b/.github/workflows/lock-symfony-version.sh new file mode 100755 index 0000000..8184271 --- /dev/null +++ b/.github/workflows/lock-symfony-version.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +cat <<< $(jq --indent 4 --arg version $VERSION '.require |= with_entries(if (.key|test("^symfony/")) then .value=$version else . end)' < composer.json) > composer.json +cat <<< $(jq --indent 4 --arg version $VERSION '."require-dev" |= with_entries(if (.key|test("^symfony/")) then .value=$version else . end)' < composer.json) > composer.json diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 1cd6311..106d347 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -2,8 +2,12 @@ name: Test on: push: + branches: + - master pull_request: - types: [opened, synchronize, edited, reopened] + schedule: + - + cron: "0 1 * * 6" # Run at 1am every Saturday jobs: test: @@ -14,24 +18,21 @@ jobs: fail-fast: false matrix: php-version: - - '7.4' - - '8.0' - - '8.1' + - '8.3' + - '8.4' + - '8.5' symfony-version: - - '4.4.*' - - '5.4.*' - - '6.4.*' + - '7.4.*' + - '8.0.*' + - '8.1.*' exclude: - - php-version: '7.4' - symfony-version: '6.4.*' - - php-version: '8.0' - symfony-version: '6.4.*' - include: - - php-version: '8.2' - symfony-version: '7.0.*' + - php-version: '8.3' + symfony-version: '8.0.*' + - php-version: '8.3' + symfony-version: '8.1.*' steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -44,8 +45,15 @@ jobs: - name: Validate composer.json run: composer validate --no-check-lock - - name: Configure Symfony version - run: composer require --no-update "symfony/config:${{ matrix.symfony-version }}" "symfony/dependency-injection:${{ matrix.symfony-version }}" + - name: Lock Symfony version + run: VERSION=${{ matrix.symfony-version }} .github/workflows/lock-symfony-version.sh + + - name: Require behat 4.x for Symfony 8+ + if: startsWith(matrix.symfony-version, '8.') + run: | + cat <<< $(jq --indent 4 '."require-dev"."behat/behat" = "4.x-dev as 3.31.0"' < composer.json) > composer.json + composer config minimum-stability dev + composer config prefer-stable true - name: Install dependencies run: composer install --prefer-dist --no-progress @@ -54,4 +62,9 @@ jobs: run: vendor/bin/phpspec run -f pretty - name: Behat - run: vendor/bin/behat -fprogress --strict + run: | + if [[ "${{ matrix.symfony-version }}" == 8.* ]]; then + vendor/bin/behat --config behat.dist.php -fprogress --strict + else + vendor/bin/behat -fprogress --strict + fi diff --git a/behat.dist.php b/behat.dist.php new file mode 100644 index 0000000..84f2185 --- /dev/null +++ b/behat.dist.php @@ -0,0 +1,28 @@ +withProfile( + (new Profile('default')) + ->withSuite( + (new Suite('default')) + ->withPaths('%paths.base%/features') + ->withContexts(\Behat\MinkExtension\Context\MinkContext::class) + ) + ->withExtension( + new Extension(\Behat\MinkExtension\ServiceContainer\MinkExtension::class, [ + 'base_url' => 'http://en.wikipedia.org/', + 'sessions' => [ + 'default' => [ + 'browserkit_http' => null, + ], + ], + ]) + ) + ); diff --git a/behat.yml.dist b/behat.yml.dist index 5fab930..aaee3cd 100644 --- a/behat.yml.dist +++ b/behat.yml.dist @@ -4,8 +4,8 @@ default: path: "%paths.base%/features" contexts: [Behat\MinkExtension\Context\MinkContext] extensions: - Behat\MinkExtension: + Behat\MinkExtension\ServiceContainer\MinkExtension: base_url: http://en.wikipedia.org/ sessions: default: - goutte: ~ + browserkit_http: ~ diff --git a/composer.json b/composer.json index 242a885..a8b7186 100644 --- a/composer.json +++ b/composer.json @@ -21,16 +21,17 @@ ], "homepage": "https://github.com/FriendsOfBehat/MinkExtension#readme", "require": { - "php": "^7.4 || ^8", - "behat/behat": "^3.0.5", + "php": "^8.3", + "behat/behat": "^3.31", "behat/mink": "^1.5", - "symfony/config": "^4.4 || ^5.0 || ^6.0 || ^7.0", - "symfony/deprecation-contracts": "^1.0 || ^2.0 || ^3.0" + "symfony/config": "^7.4", + "symfony/deprecation-contracts": "^3.0" }, "require-dev": { - "behat/mink-goutte-driver": "^1.1 || ^2.0", - "phpspec/phpspec": "^6.0 || ^7.0 || 7.1.x-dev", - "mink/webdriver-classic-driver": "^1.0@dev" + "behat/mink-browserkit-driver": "^2.0", + "phpspec/phpspec": "^8.0", + "symfony/browser-kit": "^7.4", + "symfony/http-client": "^7.4" }, "replace": { "behat/mink-extension": "self.version" @@ -44,5 +45,11 @@ "branch-alias": { "dev-master": "2.x-dev" } + }, + "scripts": { + "test": [ + "vendor/bin/phpspec run -f pretty", + "vendor/bin/behat -fprogress --strict" + ] } }