From f1b84a2a586d74977c97aab68dd91085e21d8bf4 Mon Sep 17 00:00:00 2001 From: Moamen Eltouny Date: Thu, 8 Oct 2026 12:54:30 +0300 Subject: [PATCH 1/4] Require PHP 8.5 and target it in CI and static analysis --- .github/workflows/build.yml | 4 ++-- composer.json | 4 ++-- phpstan.neon.dist | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c54802c..ac1e365 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: versions: ${{ steps.php.outputs.versions }} steps: - # Each "8.N.x" branch targets exactly PHP 8.N; any other branch uses the 8.4 baseline. + # Each "8.N.x" branch targets exactly PHP 8.N; any other branch uses the 8.5 baseline. - name: Resolve PHP versions from branch id: php shell: bash @@ -43,7 +43,7 @@ jobs: if [[ "${BRANCH}" =~ ^8\.[0-9]+\.x$ ]]; then VERSIONS="[\"${BRANCH%.x}\"]" else - VERSIONS='["8.4"]' + VERSIONS='["8.5"]' fi echo "branch=${BRANCH} php=${VERSIONS}" diff --git a/composer.json b/composer.json index c2e66c8..5e82a47 100644 --- a/composer.json +++ b/composer.json @@ -26,8 +26,8 @@ "security": "https://github.com/Pharaonic/php-dot-array/security/policy" }, "require": { - "php": ">=8.4 <8.5", - "pharaonic/php-readable": "~8.4.0" + "php": ">=8.5 <8.6", + "pharaonic/php-readable": "~8.5.0" }, "require-dev": { "phpstan/phpstan": "^2.1.18", diff --git a/phpstan.neon.dist b/phpstan.neon.dist index eaca9e0..5a14d30 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,6 +1,6 @@ parameters: level: max - phpVersion: 80400 + phpVersion: 80500 paths: - src - tests From f18760f97cbb059b9bbd984fad3a87311f2961d5 Mon Sep 17 00:00:00 2001 From: Moamen Eltouny Date: Thu, 8 Oct 2026 12:54:37 +0300 Subject: [PATCH 2/4] Document the 8.5.x release line --- .github/ISSUE_TEMPLATE/bug_report.yml | 4 ++-- CHANGELOG.md | 11 +++++++++++ README.md | 2 +- SECURITY.md | 1 + UPGRADE.md | 15 ++++++++------- docs/sections/02-installation.md | 4 ++-- docs/sections/09-upgrading.md | 6 +++--- 7 files changed, 28 insertions(+), 15 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 28758f0..48f2e45 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -6,14 +6,14 @@ body: id: package-version attributes: label: Package version - placeholder: '8.4.0' + placeholder: '8.5.0' validations: required: true - type: input id: php-version attributes: label: PHP version - placeholder: '8.4' + placeholder: '8.5' validations: required: true - type: textarea diff --git a/CHANGELOG.md b/CHANGELOG.md index c8d3106..4c8cc55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ All notable changes to this project will be documented in this file. +## 8.5.1 - Unreleased + +The `8.5.x` line now runs the rebuilt 8.x path engine, with results identical to `8.4.1`. **`8.5.0` still had the 2.x engine, so this patch changes results for `8.5.0` users**: every change listed under [8.0.0](#800---2026-10-08) applies. Read [UPGRADE.md](UPGRADE.md#from-850-to-851) before updating. + +### Changed + +- **Requires PHP `>=8.5 <8.6`** (`8.5.0` allowed `^8.5`). Use the `8.4.x` line on PHP 8.4. +- `dot()` accepts `null` and another `DotArray` again (`8.5.0` accepted arrays only). +- Requires `pharaonic/php-readable` `~8.5.0`, its PHP 8.5 line. +- PHPStan analyses against PHP 8.5, and CI falls back to PHP 8.5 on branches that are not an `8.N.x` line. + ## 8.4.1 - 2026-10-08 The `8.4.x` line now runs the rebuilt 8.x path engine, with results identical to `8.3.0`. **`8.4.0` still had the 2.x engine, so this patch changes results for `8.4.0` users**: every change listed under [8.0.0](#800---2026-10-08) applies. Read [UPGRADE.md](UPGRADE.md#from-840-to-841) before updating. diff --git a/README.md b/README.md index 10a0f3d..581cfd6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

- PHP Version : 8.4 + PHP Version : 8.5 License Tests
diff --git a/SECURITY.md b/SECURITY.md index 0cac4c4..cfdcd66 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,6 +6,7 @@ Security fixes are released for the latest version of each maintained release li | Version | PHP | Supported | |----------|-----|--------------------| +| `8.5.x` | 8.5 | :white_check_mark: | | `8.4.x` | 8.4 | :white_check_mark: | | `8.3.x` | 8.3 | :white_check_mark: | | `8.2.x` | 8.2 | :white_check_mark: | diff --git a/UPGRADE.md b/UPGRADE.md index b102fc4..0f7a1b0 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -8,25 +8,26 @@ To upgrade, install the line that matches your PHP version. Composer picks it fo | Line | PHP | `pharaonic/php-readable` | |---------|-----|--------------------------| +| `8.5.x` | 8.5 | `~8.5.0` | | `8.4.x` | 8.4 | `~8.4.0` | | `8.3.x` | 8.3 | `~8.3.0` | | `8.2.x` | 8.2 | `~8.2.0` | | `8.1.x` | 8.1 | `~8.1.0` | | `8.0.x` | 8.0 | `~8.0.1` | -## From 8.4.0 to 8.4.1 +## From 8.5.0 to 8.5.1 -⚠️ `8.4.0` was released before the 8.x rebuild and still ran the 2.x engine. `8.4.1` is a patch release, so `composer update` installs it automatically, but it brings every result change listed in [From 2.x to 8.0](#from-2x-to-80). The API is the same. Review that section before updating, or pin `8.4.0` until you have: +⚠️ `8.5.0` was released before the 8.x rebuild and still ran the 2.x engine. `8.5.1` is a patch release, so `composer update` installs it automatically, but it brings every result change listed in [From 2.x to 8.0](#from-2x-to-80). The API is the same. Review that section before updating, or pin `8.5.0` until you have: ```bash -composer require pharaonic/php-dot-array:8.4.0 +composer require pharaonic/php-dot-array:8.5.0 ``` -Differences from `8.4.0` that are not in the 2.x list: +Differences from `8.5.0` that are not in the 2.x list: -- `8.4.0` already deleted integer keys correctly, so section 10's `delete($int)` fix doesn't apply. -- `dot()` accepts `null` and another `DotArray` again; `8.4.0` accepted arrays only. -- PHP `>=8.4 <8.5` instead of `^8.4`. On PHP 8.5, Composer installs the `8.5.x` line. +- `8.5.0` already deleted integer keys correctly, so section 10's `delete($int)` fix doesn't apply. +- `dot()` accepts `null` and another `DotArray` again; `8.5.0` accepted arrays only. +- PHP `>=8.5 <8.6` instead of `^8.5`. ## From 2.x to 8.0 diff --git a/docs/sections/02-installation.md b/docs/sections/02-installation.md index cd2bca3..0ad9b61 100644 --- a/docs/sections/02-installation.md +++ b/docs/sections/02-installation.md @@ -4,9 +4,9 @@ Install the package with Composer. There is nothing to register or configure. ### Requirements -- PHP 8.4.x (each `8.x` release line targets the matching PHP version) +- PHP 8.5.x (each `8.x` release line targets the matching PHP version) - `ext-mbstring` -- `pharaonic/php-readable` ~8.4.0 (installed automatically) +- `pharaonic/php-readable` ~8.5.0 (installed automatically) ### Composer Installation diff --git a/docs/sections/09-upgrading.md b/docs/sections/09-upgrading.md index 4738cba..dff5e2b 100644 --- a/docs/sections/09-upgrading.md +++ b/docs/sections/09-upgrading.md @@ -2,17 +2,17 @@ Each `8.N.x` line targets exactly one PHP version: `8.0.x` runs on PHP 8.0, `8.1.x` on PHP 8.1, and so on. Moving from one 8.x line to another never changes the public API or results, so no code changes are needed. Composer picks the line that matches your PHP version. -## Upgrading from 8.4.0 +## Upgrading from 8.5.0 :::warning Patch with result changes -`8.4.0` still ran the 2.x engine. `8.4.1` is a patch release, so `composer update` installs it automatically, but every change below applies. Review them first, or pin `8.4.0` with `composer require pharaonic/php-dot-array:8.4.0` until you have. +`8.5.0` still ran the 2.x engine. `8.5.1` is a patch release, so `composer update` installs it automatically, but every change below applies. Review them first, or pin `8.5.0` with `composer require pharaonic/php-dot-array:8.5.0` until you have. ::: ## Upgrading from 2.x {release.label} rebuilt the path engine. Every method and helper from 2.x still exists with the same parameters, and `delete()` still returns `bool`, but some results changed. Most of them were bugs. -The full list, with before and after values for every change, is in [UPGRADE.md]({package.githubUrl}/blob/8.4.x/UPGRADE.md). +The full list, with before and after values for every change, is in [UPGRADE.md]({package.githubUrl}/blob/8.5.x/UPGRADE.md). ### What Changed From ab561e3cbbfec0fd09b0835e63b9ae09f05f477d Mon Sep 17 00:00:00 2001 From: Moamen Eltouny Date: Thu, 8 Oct 2026 12:56:49 +0300 Subject: [PATCH 3/4] Require PHPStan 2.1.22, the first release that analyses against PHP 8.5 --- CHANGELOG.md | 1 + composer.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c8cc55..bf961a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The `8.5.x` line now runs the rebuilt 8.x path engine, with results identical to - `dot()` accepts `null` and another `DotArray` again (`8.5.0` accepted arrays only). - Requires `pharaonic/php-readable` `~8.5.0`, its PHP 8.5 line. - PHPStan analyses against PHP 8.5, and CI falls back to PHP 8.5 on branches that are not an `8.N.x` line. +- PHPStan `^2.1.22` is required for development, the first release that analyses against PHP 8.5. ## 8.4.1 - 2026-10-08 diff --git a/composer.json b/composer.json index 5e82a47..ae785a5 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,7 @@ "pharaonic/php-readable": "~8.5.0" }, "require-dev": { - "phpstan/phpstan": "^2.1.18", + "phpstan/phpstan": "^2.1.22", "phpunit/phpunit": "^12.0", "squizlabs/php_codesniffer": "^3.13 || ^4.0" }, From dcefcdadb4f0b7e173255b6ff65a766788bda85d Mon Sep 17 00:00:00 2001 From: Moamen Eltouny Date: Thu, 8 Oct 2026 12:58:02 +0300 Subject: [PATCH 4/4] Update changelog to reflect release version 8.5.1 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf961a8..7cea0c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this project will be documented in this file. -## 8.5.1 - Unreleased +## 8.5.1 - 2026-10-08 The `8.5.x` line now runs the rebuilt 8.x path engine, with results identical to `8.4.1`. **`8.5.0` still had the 2.x engine, so this patch changes results for `8.5.0` users**: every change listed under [8.0.0](#800---2026-10-08) applies. Read [UPGRADE.md](UPGRADE.md#from-850-to-851) before updating.