Skip to content

Updated dev tooling to the latest PHP 8.3-compatible versions and migrated tests to PHPUnit 12. - #125

Merged
AlexSkrypnyk merged 3 commits into
mainfrom
feature/update-dev-tooling
Jul 27, 2026
Merged

Updated dev tooling to the latest PHP 8.3-compatible versions and migrated tests to PHPUnit 12.#125
AlexSkrypnyk merged 3 commits into
mainfrom
feature/update-dev-tooling

Conversation

@AlexSkrypnyk

@AlexSkrypnyk AlexSkrypnyk commented Jul 27, 2026

Copy link
Copy Markdown
Member

Summary

Updates the four require-dev tooling constraints in composer.json to their latest versions that still support the library's >=8.3 PHP floor, and carries the PHPUnit 11 -> 12 major bump through the test suite and the tooling configuration so the whole stack lints and tests cleanly again.

phpstan/phpstan is deliberately capped at >=2.2.4 <2.2.6 rather than left to float, because 2.2.6 changed an internal PHPStan\Parser\RichParser property (container) that rector/rector 2.5.7 reaches into via reflection in PHPStanContainerMemento::removeRichVisitors(). With 2.2.6 installed, rector fatal-crashes (MissingPrivatePropertyException: Property "$container" was not found in "PHPStan\Parser\RichParser"), which kills the composer lint step. Because composer.lock is gitignored, CI resolves dependencies fresh on every run and always picks the newest allowed phpstan, so this crash is already breaking main's CI - the most recent Test PHP run on main failed at the "Check coding standards" step with exactly this error. This PR therefore both updates the tooling and fixes main's currently-red CI; the cap can be lifted once rector ships a release compatible with phpstan 2.2.6.

The PHPUnit 12 bump also surfaced coverage-metadata warnings that only appear under composer test-coverage (which CI runs), not composer test: PHPUnit 12 no longer accepts a trait as a #[CoversClass] target, and phpunit.xml sets failOnWarning="true", so the coverage run failed for every widget test that declared trait coverage. Those attributes are migrated to #[CoversTrait], and the PHPUnit schema reference and Rector PHPUnit set are aligned with the 12 line.

Changes

Dependency updates (composer.json)

  • Bumped phpunit/phpunit from ^11.5.55 to ^12.5.32 (PHPUnit 13 requires PHP 8.4.1, above this library's PHP 8.3 floor, so 12 is the ceiling).
  • Bumped drevops/phpcs-standard from ^0.7 to ^1.0.0.
  • Bumped rector/rector from ^2.5.2 to ^2.5.7.
  • Capped phpstan/phpstan from ^2.2.4 to >=2.2.4 <2.2.6, a deliberate ceiling rather than a plain bump, to keep rector working (see Summary).

PHPUnit 12 test migration (tests/phpunit/Unit/Widget/*)

  • Converted #[CoversClass(<Trait>::class)] to #[CoversTrait(<Trait>::class)] for the capability traits across nine widget test files, and added the CoversTrait import where needed. #[CoversClass] is kept for the widget and helper classes. This clears the 207 not a valid target for code coverage warnings that failed composer test-coverage under PHPUnit 12.

Configuration alignment

  • phpunit.xml: pointed the schema reference at https://schema.phpunit.de/12.5/phpunit.xsd (was 11.4).
  • rector.php: switched the Rector PHPUnit set from PHPUnitSetList::PHPUNIT_110 to PHPUNIT_120. The 120 set introduces no rewrites in this codebase, so it is a configuration alignment only.

Verification

  • composer lint (PHPCS + PHPStan level 9 + Rector) and composer test-coverage pass locally on both the normal and the --prefer-lowest --prefer-stable dependency sets under a PHP 8.3 platform.
  • Full CI matrix is green: PHP 8.3 / 8.4 / 8.5 on Ubuntu (normal and lowest), PHP 8.3 / 8.4 on Windows, docs, and Codecov.

Before / After

BEFORE (main, currently red)                      AFTER (this PR)
-----------------------------                      -----------------------------
composer.json:                                      composer.json:
  "phpstan/phpstan": "^2.2.4"                          "phpstan/phpstan": ">=2.2.4 <2.2.6"
  (floats up to any 2.x, i.e. 2.2.6)                   (pinned below 2.2.6)

CI resolves phpstan 2.2.6                            CI resolves phpstan 2.2.5
        |                                                    |
        v                                                    v
rector 2.5.7 reflects into                          rector 2.5.7 reflects into
RichParser::$container  -> MISSING                  RichParser::$container  -> present
        |                                                    |
        v                                                    v
"Check coding standards" FAILS (fatal)              "Check coding standards" PASSES

test attributes (widget tests):                     test attributes (widget tests):
  #[CoversClass(PagingCapableTrait::class)]            #[CoversTrait(PagingCapableTrait::class)]
        |                                                    |
        v                                                    v
composer test-coverage -> 207 warnings              composer test-coverage -> OK, 0 warnings
failOnWarning -> job FAILS                           job PASSES

CI on main: RED                                     CI: GREEN

Summary by CodeRabbit

  • Chores
    • Updated development tooling to newer supported versions.
    • Refined static analysis tool version compatibility.
    • No direct changes to end-user functionality.

Bumped 'phpunit/phpunit' to ^12.5.32 (13.x requires PHP 8.4, above the library's >=8.3 floor), 'drevops/phpcs-standard' to ^1.0.0 and 'rector/rector' to ^2.5.7.

Capped 'phpstan/phpstan' below 2.2.6: that release changed a PHPStan RichParser internal that 'rector/rector' 2.5.7 reads via reflection, crashing the lint step. composer.lock is not committed, so CI re-resolves to the newest allowed release on every run, and the ceiling keeps the static-analysis tooling working together.
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Development tool constraints in composer.json were updated for coding standards, static analysis, PHPUnit, and Rector.

Changes

Development Tooling Updates

Layer / File(s) Summary
Update development dependency constraints
composer.json
Updates the version constraints for drevops/phpcs-standard, phpstan/phpstan, phpunit/phpunit, and rector/rector.

Estimated code review effort: 1 (Trivial) | ~2 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the dev-tooling dependency upgrades and the PHPUnit 12 migration.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/update-dev-tooling

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 27, 2026

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@composer.json`:
- Line 32: Align the PHPUnit configuration with the upgraded dependency by
updating the schema reference in phpunit.xml from PHPUnit 11.4 to 12.5 and
changing rector.php to use PHPUnitSetList::PHPUNIT_120 instead of
PHPUnitSetList::PHPUNIT_110.
- Line 26: Update the PHPUnit configuration and Rector setup to match the
PHPUnit 12.5 dependency: change the schema reference in phpunit.xml from 11.4 to
the PHPUnit 12 schema and replace PHPUnitSetList::PHPUNIT_110 in rector.php with
the PHPUnit 12 equivalent, or use Rector’s composer-based PHPUnit detection.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 1ba19b48-a2d9-4829-ac36-0593d01488f7

📥 Commits

Reviewing files that changed from the base of the PR and between c6b2ccf and 7721ad4.

📒 Files selected for processing (1)
  • composer.json

Comment thread composer.json
Comment thread composer.json
PHPUnit 12 no longer accepts a trait as a '#[CoversClass]' target and emits a 'not a valid target for code coverage' warning for each one. Because phpunit.xml sets 'failOnWarning', the coverage run ('composer test-coverage', which CI runs) failed once phpunit moved to 12, even though the plain 'composer test' run (no coverage) stayed green. Converted the capability-trait covers in the widget tests to '#[CoversTrait]' and added the matching import, keeping '#[CoversClass]' for the widget and helper classes.
@github-actions

This comment has been minimized.

@codecov

codecov Bot commented Jul 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.77%. Comparing base (654097b) to head (a188bb2).
⚠️ Report is 2 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #125      +/-   ##
==========================================
+ Coverage   98.70%   98.77%   +0.07%     
==========================================
  Files         102      104       +2     
  Lines        3557     3686     +129     
==========================================
+ Hits         3511     3641     +130     
+ Misses         46       45       -1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

… 12 upgrade.

Pointed 'phpunit.xml' at the 12.5 schema and switched the Rector set from 'PHPUnitSetList::PHPUNIT_110' to 'PHPUNIT_120'. The 120 set introduces no rewrites here, so this is a configuration alignment only.
@github-actions

Copy link
Copy Markdown
Code Coverage Report:
  2026-07-27 00:50:38

 Summary:
  Classes: 83.65% (87/104)
  Methods: 96.49% (825/855)
  Lines:   98.78% (3641/3686)

DrevOps\Tui\Answers\Answer
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  1/  1)
DrevOps\Tui\Answers\Answers
  Methods: 100.00% ( 9/ 9)   Lines: 100.00% ( 20/ 20)
DrevOps\Tui\Answers\Provenance
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  7/  7)
DrevOps\Tui\Answers\SummaryFormatter
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 20/ 20)
DrevOps\Tui\Answers\ValueFormatter
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% (  6/  6)
DrevOps\Tui\Builder\FieldBuilder
  Methods: 100.00% (44/44)   Lines: 100.00% (165/165)
DrevOps\Tui\Builder\Form
  Methods:  92.31% (12/13)   Lines:  98.39% ( 61/ 62)
DrevOps\Tui\Builder\LayoutGuard
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  7/  7)
DrevOps\Tui\Builder\PanelBuilder
  Methods: 100.00% (23/23)   Lines: 100.00% ( 42/ 42)
DrevOps\Tui\Condition\CompositeCondition
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 19/ 19)
DrevOps\Tui\Condition\Condition
  Methods: 100.00% (10/10)   Lines: 100.00% ( 38/ 38)
DrevOps\Tui\Derive\Derive
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 10/ 10)
DrevOps\Tui\Derive\Deriver
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% ( 13/ 13)
DrevOps\Tui\Derive\Transform
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% (  7/  7)
DrevOps\Tui\Discovery\AbstractDiscover
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  1/  1)
DrevOps\Tui\Discovery\Dotenv
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 19/ 19)
DrevOps\Tui\Discovery\JsonValue
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 16/ 16)
DrevOps\Tui\Discovery\PathExists
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% (  3/  3)
DrevOps\Tui\Discovery\Scan
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 20/ 20)
DrevOps\Tui\Engine\Engine
  Methods: 100.00% (19/19)   Lines: 100.00% (138/138)
DrevOps\Tui\Handler\HandlerRegistry
  Methods:  85.71% ( 6/ 7)   Lines:  95.45% ( 21/ 22)
DrevOps\Tui\Input\Binding
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  1/  1)
DrevOps\Tui\Input\DefaultKeyMap
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% ( 38/ 38)
DrevOps\Tui\Input\Hint
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  2/  2)
DrevOps\Tui\Input\Key
  Methods:  87.50% ( 7/ 8)   Lines:  63.64% (  7/ 11)
DrevOps\Tui\Input\KeyMap
  Methods: 100.00% (11/11)   Lines: 100.00% ( 61/ 61)
DrevOps\Tui\Input\KeyMapManager
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% (  8/  8)
DrevOps\Tui\Input\KeyParser
  Methods:  85.71% ( 6/ 7)   Lines:  98.95% ( 94/ 95)
DrevOps\Tui\Input\Scope
  Methods: 100.00% ( 7/ 7)   Lines: 100.00% ( 17/ 17)
DrevOps\Tui\Input\ScopedKeyMap
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% (  4/  4)
DrevOps\Tui\Input\VimKeyMap
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% ( 12/ 12)
DrevOps\Tui\Model\Buttons
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  1/  1)
DrevOps\Tui\Model\DateBounds
  Methods: 100.00% ( 6/ 6)   Lines: 100.00% ( 28/ 28)
DrevOps\Tui\Model\Field
  Methods:  92.31% (12/13)   Lines:  90.91% ( 70/ 77)
DrevOps\Tui\Model\FieldType
  Methods: 100.00% ( 5/ 5)   Lines: 100.00% ( 26/ 26)
DrevOps\Tui\Model\FormDefinition
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 12/ 12)
DrevOps\Tui\Model\Modal
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  2/  2)
DrevOps\Tui\Model\NumberBounds
  Methods:  83.33% ( 5/ 6)   Lines:  95.24% ( 20/ 21)
DrevOps\Tui\Model\Option
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 14/ 14)
DrevOps\Tui\Model\Panel
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% (  3/  3)
DrevOps\Tui\Model\SelectionBounds
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 23/ 23)
DrevOps\Tui\Model\Weekday
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 15/ 15)
DrevOps\Tui\Primitive\Progress
  Methods: 100.00% ( 6/ 6)   Lines: 100.00% ( 28/ 28)
DrevOps\Tui\Primitive\ProgressReporter
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% (  2/  2)
DrevOps\Tui\Render\Ansi
  Methods:  83.33% ( 5/ 6)   Lines:  76.47% ( 13/ 17)
DrevOps\Tui\Render\Box
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 15/ 15)
DrevOps\Tui\Render\ExternalEditor
  Methods: 100.00% ( 6/ 6)   Lines: 100.00% ( 27/ 27)
DrevOps\Tui\Render\HelpSection
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  1/  1)
DrevOps\Tui\Render\Navigator
  Methods: 100.00% ( 7/ 7)   Lines: 100.00% ( 16/ 16)
DrevOps\Tui\Render\Overlay
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 24/ 24)
DrevOps\Tui\Render\PanelController
  Methods:  98.04% (50/51)   Lines:  99.71% (346/347)
DrevOps\Tui\Render\Scroller
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 14/ 14)
DrevOps\Tui\Render\Terminal
  Methods:  95.65% (22/23)   Lines:  96.97% ( 64/ 66)
DrevOps\Tui\Render\TerminalControl
  Methods: 100.00% (11/11)   Lines: 100.00% ( 11/ 11)
DrevOps\Tui\Render\Viewport
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  1/  1)
DrevOps\Tui\Resolver\InputResolver
  Methods: 100.00% ( 6/ 6)   Lines: 100.00% ( 29/ 29)
DrevOps\Tui\Schema\AgentHelp
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 54/ 54)
DrevOps\Tui\Schema\SchemaGenerator
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 37/ 37)
DrevOps\Tui\Schema\SchemaValidator
  Methods: 100.00% ( 7/ 7)   Lines: 100.00% ( 34/ 34)
DrevOps\Tui\Testing\ArrayKeyStream
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 12/ 12)
DrevOps\Tui\Testing\BufferedTerminal
  Methods: 100.00% ( 7/ 7)   Lines: 100.00% ( 12/ 12)
DrevOps\Tui\Testing\KeyEncoder
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% ( 22/ 22)
DrevOps\Tui\Testing\TuiTester
  Methods: 100.00% (13/13)   Lines: 100.00% ( 34/ 34)
DrevOps\Tui\Testing\WidgetRunner
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  5/  5)
DrevOps\Tui\Theme\DefaultTheme
  Methods:  96.19% (101/105)   Lines:  98.87% (523/529)
DrevOps\Tui\Theme\DosTheme
  Methods:  80.00% (12/15)   Lines:  82.35% ( 14/ 17)
DrevOps\Tui\Theme\EmberTheme
  Methods:  66.67% ( 6/ 9)   Lines:  66.67% (  6/  9)
DrevOps\Tui\Theme\FrostTheme
  Methods:  66.67% ( 6/ 9)   Lines:  66.67% (  6/  9)
DrevOps\Tui\Theme\MidnightTheme
  Methods:  66.67% ( 6/ 9)   Lines:  66.67% (  6/  9)
DrevOps\Tui\Theme\MonoTheme
  Methods:  66.67% ( 6/ 9)   Lines:  66.67% (  6/  9)
DrevOps\Tui\Theme\Sgr
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  1/  1)
DrevOps\Tui\Theme\ThemeManager
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% (  8/  8)
DrevOps\Tui\Translation\Translator
  Methods: 100.00% (18/18)   Lines: 100.00% ( 87/ 87)
DrevOps\Tui\Tui
  Methods: 100.00% (27/27)   Lines: 100.00% ( 85/ 85)
DrevOps\Tui\Utils\Strings
  Methods: 100.00% ( 8/ 8)   Lines: 100.00% ( 36/ 36)
DrevOps\Tui\Widget\AbstractWidget
  Methods: 100.00% (20/20)   Lines: 100.00% ( 60/ 60)
DrevOps\Tui\Widget\CalendarWidget
  Methods: 100.00% (13/13)   Lines: 100.00% ( 52/ 52)
DrevOps\Tui\Widget\Capability\CompletionCapableTrait
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 14/ 14)
DrevOps\Tui\Widget\Capability\FilterCapableTrait
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 15/ 15)
DrevOps\Tui\Widget\Capability\OptionsCapableTrait
  Methods: 100.00% (10/10)   Lines: 100.00% ( 36/ 36)
DrevOps\Tui\Widget\Capability\PagingCapableTrait
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 16/ 16)
DrevOps\Tui\Widget\Capability\SearchCapableTrait
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% (  3/  3)
DrevOps\Tui\Widget\Capability\SelectionBoundedTrait
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 10/ 10)
DrevOps\Tui\Widget\Capability\SelectionCapableTrait
  Methods: 100.00% (13/13)   Lines: 100.00% ( 85/ 85)
DrevOps\Tui\Widget\Capability\TextEditCapableTrait
  Methods: 100.00% ( 9/ 9)   Lines: 100.00% ( 34/ 34)
DrevOps\Tui\Widget\ConfirmWidget
  Methods: 100.00% ( 7/ 7)   Lines: 100.00% ( 22/ 22)
DrevOps\Tui\Widget\FilePickerWidget
  Methods: 100.00% (31/31)   Lines: 100.00% (181/181)
DrevOps\Tui\Widget\MatchResult
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  1/  1)
DrevOps\Tui\Widget\MatchTier
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  6/  6)
DrevOps\Tui\Widget\Matcher
  Methods: 100.00% ( 9/ 9)   Lines: 100.00% ( 73/ 73)
DrevOps\Tui\Widget\NumberWidget
  Methods: 100.00% ( 9/ 9)   Lines: 100.00% ( 36/ 36)
DrevOps\Tui\Widget\PasswordDisplay
  Methods: 100.00% ( 1/ 1)   Lines: 100.00% (  5/  5)
DrevOps\Tui\Widget\PasswordWidget
  Methods: 100.00% ( 9/ 9)   Lines: 100.00% ( 45/ 45)
DrevOps\Tui\Widget\PauseWidget
  Methods: 100.00% ( 5/ 5)   Lines: 100.00% ( 11/ 11)
DrevOps\Tui\Widget\ReorderWidget
  Methods: 100.00% (11/11)   Lines: 100.00% ( 58/ 58)
DrevOps\Tui\Widget\SearchWidget
  Methods: 100.00% ( 4/ 4)   Lines: 100.00% ( 12/ 12)
DrevOps\Tui\Widget\SelectWidget
  Methods: 100.00% ( 5/ 5)   Lines: 100.00% (  8/  8)
DrevOps\Tui\Widget\SuggestWidget
  Methods: 100.00% (13/13)   Lines: 100.00% ( 48/ 48)
DrevOps\Tui\Widget\TextWidget
  Methods: 100.00% ( 5/ 5)   Lines: 100.00% ( 16/ 16)
DrevOps\Tui\Widget\TextareaWidget
  Methods: 100.00% ( 8/ 8)   Lines: 100.00% ( 49/ 49)
DrevOps\Tui\Widget\ToggleWidget
  Methods: 100.00% ( 8/ 8)   Lines: 100.00% ( 30/ 30)
DrevOps\Tui\Widget\WidgetFactory
  Methods: 100.00% ( 9/ 9)   Lines: 100.00% ( 44/ 44)

@AlexSkrypnyk AlexSkrypnyk changed the title Updated dev tooling to latest PHP 8.3-compatible versions. Updated dev tooling to the latest PHP 8.3-compatible versions and migrated tests to PHPUnit 12. Jul 27, 2026
@AlexSkrypnyk AlexSkrypnyk added the Needs review Pull request needs a review from assigned developers label Jul 27, 2026
@AlexSkrypnyk
AlexSkrypnyk merged commit dd259a3 into main Jul 27, 2026
12 checks passed
@AlexSkrypnyk
AlexSkrypnyk deleted the feature/update-dev-tooling branch July 27, 2026 00:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Needs review Pull request needs a review from assigned developers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant