From 84bfd65c6c9d7532e7b1bc07aea2a9e92cf7158c Mon Sep 17 00:00:00 2001 From: Thibaut Monier Date: Thu, 10 Sep 2026 19:19:22 +0200 Subject: [PATCH 1/4] =?UTF-8?q?build:=20abaisse=20la=20contrainte=20PHP=20?= =?UTF-8?q?=C3=A0=20>=3D8.2=20(align=C3=A9=20Symfony=207.3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le bundle exigeait php >=8.5, ce qui empêchait son installation sur la matrice de test de symfony/recipes-contrib (PHP 8.1/8.2/8.4) et restreignait inutilement l'adoption. Symfony 7.3 (déjà requis) supporte PHP >=8.2. - composer.json : "php" >=8.5 → >=8.2 (+ lock rafraîchi). - phpstan.neon : phpVersion min 80200 / max 80500 — valide la compat sur toute la plage supportée même en analysant sur 8.5. - CI : nouveau job matrice `bundle-compat` (PHP 8.2/8.3/8.4) — résolution fraîche (comme la recette) + tests, pour prouver l'installation et le run dès 8.2. Aucun code source modifié (déjà compatible 8.2, vérifié par PHPStan). Débloque la recette Flex (PR symfony/recipes-contrib#2047). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01GvQgKyL1aGyX8xYHpRgJjn --- .github/workflows/ci.yml | 26 ++++++++++++++++++++++++++ CHANGELOG.md | 7 +++++++ composer.json | 2 +- composer.lock | 4 ++-- phpstan.neon | 6 ++++++ 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a7aaf72..2b7ba2c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,6 +66,32 @@ jobs: name: coverage-bundle path: coverage.xml + bundle-compat: + name: Bundle — compat PHP (résolution + tests) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-version: ['8.2', '8.3', '8.4'] + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP ${{ matrix.php-version }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + extensions: intl, opcache + coverage: none + tools: composer:v2 + + # Résolution fraîche (comme un consommateur / la recette Flex) : prouve que + # le bundle s'installe et que ses tests passent dès PHP 8.2 (require: >=8.2). + - name: Install (résolution fraîche) + run: composer update --no-interaction --no-progress --prefer-dist + + - name: Tests bundle + run: vendor/bin/phpunit + front-lint: name: Front — Biome (contrôleurs Stimulus) runs-on: ubuntu-latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bf670c..bfc783f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ et le projet suit le [Semantic Versioning](https://semver.org/lang/fr/) 2.0.0. ## [Unreleased] +### Changed + +- **Support PHP élargi** : la contrainte minimale passe de `>=8.5` à **`>=8.2`** + (alignée sur Symfony 7.3, dont le minimum est PHP 8.2). Le bundle s'installe + désormais sur PHP 8.2 → 8.5. Compatibilité validée par PHPStan (plage 8.2→8.5) + et une matrice CI (8.2/8.3/8.4). Débloque la recette Flex (symfony/recipes-contrib). + ## [1.4.2] — 2026-09-10 ### Fixed diff --git a/composer.json b/composer.json index 03fdd4c..831f08d 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ } ], "require": { - "php": ">=8.5", + "php": ">=8.2", "symfony/asset": "^7.3 || ^8.0", "symfony/asset-mapper": "^7.3 || ^8.0", "symfony/console": "^7.3 || ^8.0", diff --git a/composer.lock b/composer.lock index fcbce08..5fdf937 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "325c03accab861c9e0a025e66c2c9d34", + "content-hash": "cafda5cf38557505a60fa263e0dc6895", "packages": [ { "name": "composer/semver", @@ -7376,7 +7376,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=8.5" + "php": ">=8.2" }, "platform-dev": {}, "plugin-api-version": "2.9.0" diff --git a/phpstan.neon b/phpstan.neon index 34c2e62..6291920 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,6 +4,12 @@ includes: parameters: level: max + # Valide la compatibilité sur toute la plage PHP supportée (composer.json : >=8.2), + # même quand l'analyse tourne sur une version plus récente. + phpVersion: + min: 80200 + max: 80500 + paths: - src From b49b37ff523fcf21cf98a4be8f12d6366000a07f Mon Sep 17 00:00:00 2001 From: Thibaut Monier Date: Thu, 10 Sep 2026 19:22:26 +0200 Subject: [PATCH 2/4] =?UTF-8?q?ci:=20s=C3=A9pare=20installabilit=C3=A9=20r?= =?UTF-8?q?untime=208.2=20des=20tests=208.3/8.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le job compat échouait en PHP 8.2 non pas à cause du runtime (symfony ^7.3 supporte 8.2) mais de la dépendance de DEV phpunit (^12.2||^13.0) qui exige PHP >=8.3/8.4. Les consommateurs / la recette Flex n'installent que le runtime. - bundle-install-min (PHP 8.2) : `composer update --no-dev` → prouve l'install runtime dès 8.2 (comme la recette). - bundle-compat (PHP 8.3/8.4) : install complet + tests (toolchain PHPUnit dispo). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01GvQgKyL1aGyX8xYHpRgJjn --- .github/workflows/ci.yml | 27 +++++++++++++++++++++++---- CHANGELOG.md | 6 ++++-- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b7ba2c..d2520b0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,13 +66,34 @@ jobs: name: coverage-bundle path: coverage.xml + bundle-install-min: + name: Bundle — installabilité runtime (PHP 8.2) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP 8.2 + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + extensions: intl, opcache + coverage: none + tools: composer:v2 + + # Résolution des dépendances de RUNTIME uniquement (--no-dev), comme un + # consommateur / la recette Flex (`composer require`). Prouve que le bundle + # s'installe dès PHP 8.2. (La suite de tests, PHPUnit 12/13, requiert ≥ 8.3 + # et n'est donc exercée que par le job bundle-compat ci-dessous.) + - name: Install runtime (--no-dev) + run: composer update --no-dev --no-interaction --no-progress --prefer-dist + bundle-compat: - name: Bundle — compat PHP (résolution + tests) + name: Bundle — compat PHP (install + tests) runs-on: ubuntu-latest strategy: fail-fast: false matrix: - php-version: ['8.2', '8.3', '8.4'] + php-version: ['8.3', '8.4'] steps: - uses: actions/checkout@v4 @@ -84,8 +105,6 @@ jobs: coverage: none tools: composer:v2 - # Résolution fraîche (comme un consommateur / la recette Flex) : prouve que - # le bundle s'installe et que ses tests passent dès PHP 8.2 (require: >=8.2). - name: Install (résolution fraîche) run: composer update --no-interaction --no-progress --prefer-dist diff --git a/CHANGELOG.md b/CHANGELOG.md index bfc783f..ef011fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,10 @@ et le projet suit le [Semantic Versioning](https://semver.org/lang/fr/) 2.0.0. - **Support PHP élargi** : la contrainte minimale passe de `>=8.5` à **`>=8.2`** (alignée sur Symfony 7.3, dont le minimum est PHP 8.2). Le bundle s'installe - désormais sur PHP 8.2 → 8.5. Compatibilité validée par PHPStan (plage 8.2→8.5) - et une matrice CI (8.2/8.3/8.4). Débloque la recette Flex (symfony/recipes-contrib). + désormais sur PHP 8.2 → 8.5. Compatibilité validée par PHPStan (plage 8.2→8.5), + un contrôle d'installabilité runtime en 8.2 et l'exécution des tests en 8.3/8.4 + (la suite PHPUnit 12/13 requiert PHP ≥ 8.3). Débloque la recette Flex + (symfony/recipes-contrib). ## [1.4.2] — 2026-09-10 From 46f0542dd4423a24f2bdf375dd8a2719530c8d4e Mon Sep 17 00:00:00 2001 From: Thibaut Monier Date: Thu, 10 Sep 2026 19:25:00 +0200 Subject: [PATCH 3/4] =?UTF-8?q?ci:=20installabilit=C3=A9=208.2=20via=20`co?= =?UTF-8?q?mposer=20install=20--no-dev`=20(depuis=20le=20lock)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `composer update --no-dev` résout quand même le require-dev (phpunit ≥ 8.3) et échouait en 8.2. Or les consommateurs / la recette ne tirent jamais le require-dev du bundle. `composer install --no-dev` installe le runtime depuis le lock sans vérifier la plateforme des packages de dev → reflète fidèlement l'install consommateur. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01GvQgKyL1aGyX8xYHpRgJjn --- .github/workflows/ci.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2520b0..55ccdb5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,12 +80,13 @@ jobs: coverage: none tools: composer:v2 - # Résolution des dépendances de RUNTIME uniquement (--no-dev), comme un - # consommateur / la recette Flex (`composer require`). Prouve que le bundle - # s'installe dès PHP 8.2. (La suite de tests, PHPUnit 12/13, requiert ≥ 8.3 - # et n'est donc exercée que par le job bundle-compat ci-dessous.) + # Installe les dépendances de RUNTIME uniquement depuis le lock (--no-dev : + # les packages de dev ne sont ni installés ni vérifiés côté plateforme). + # C'est ce que voit un consommateur / la recette Flex (`composer require` ne + # tire jamais le require-dev du bundle). Prouve que le runtime s'installe dès + # PHP 8.2. La suite PHPUnit 12/13 (≥ 8.3) n'est exercée que par bundle-compat. - name: Install runtime (--no-dev) - run: composer update --no-dev --no-interaction --no-progress --prefer-dist + run: composer install --no-dev --no-interaction --no-progress --prefer-dist bundle-compat: name: Bundle — compat PHP (install + tests) From 7b48d8af7683801b2e513d5198d0ab717200a0e4 Mon Sep 17 00:00:00 2001 From: Thibaut Monier Date: Thu, 10 Sep 2026 19:28:56 +0200 Subject: [PATCH 4/4] =?UTF-8?q?ci:=20prouve=20l'install=208.2=20via=20une?= =?UTF-8?q?=20vraie=20simulation=20consommateur=20(d=C3=A9p=C3=B4t=20path)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le lock du bundle épingle Symfony 8.1 (php >=8.4.1) ; `composer install` depuis ce lock échoue donc en 8.2. Un consommateur fait une résolution FRAÎCHE via `composer require`, qui choisit Symfony ^7.3 (compatible 8.2) et n'inclut jamais le require-dev du bundle. Le job simule ce cas (app tierce + dépôt path) → preuve fidèle de l'installabilité dès PHP 8.2 (idem recette Flex). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01GvQgKyL1aGyX8xYHpRgJjn --- .github/workflows/ci.yml | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 55ccdb5..603a798 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,10 +67,12 @@ jobs: path: coverage.xml bundle-install-min: - name: Bundle — installabilité runtime (PHP 8.2) + name: Bundle — installabilité consommateur (PHP 8.2) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + path: bundle - name: Setup PHP 8.2 uses: shivammathur/setup-php@v2 @@ -80,13 +82,25 @@ jobs: coverage: none tools: composer:v2 - # Installe les dépendances de RUNTIME uniquement depuis le lock (--no-dev : - # les packages de dev ne sont ni installés ni vérifiés côté plateforme). - # C'est ce que voit un consommateur / la recette Flex (`composer require` ne - # tire jamais le require-dev du bundle). Prouve que le runtime s'installe dès - # PHP 8.2. La suite PHPUnit 12/13 (≥ 8.3) n'est exercée que par bundle-compat. - - name: Install runtime (--no-dev) - run: composer install --no-dev --no-interaction --no-progress --prefer-dist + # Simulation FIDÈLE d'un consommateur (comme la recette Flex) : une app + # tierce qui fait `composer require` du bundle via un dépôt `path`. Seul le + # RUNTIME du bundle est résolu (jamais son require-dev), et la résolution est + # fraîche → sur PHP 8.2 Composer choisit Symfony ^7.3 (compatible), pas 8.x + # (qui exige ≥ 8.4.1). Prouve que le bundle s'installe dès PHP 8.2. + - name: Simuler un consommateur (composer require, runtime seul) + run: | + mkdir consumer && cd consumer + cat > composer.json <<'JSON' + { + "repositories": [ + { "type": "path", "url": "../bundle", "options": { "symlink": false } } + ], + "require": { "tailsfadmin/tailsfadmin-bundle": "*@dev" }, + "minimum-stability": "dev", + "prefer-stable": true + } + JSON + composer update --no-interaction --no-progress --prefer-dist bundle-compat: name: Bundle — compat PHP (install + tests)