From e5ab3af05b6530d81c348cce2cef98d91619a7cb Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Thu, 4 Jun 2026 17:54:45 +0100 Subject: [PATCH 01/15] ci: update dependabot config (add cooldown, single update entry) --- .github/dependabot.yml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4ec17cfa..f104951e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,16 +4,9 @@ updates: directory: "/" schedule: interval: "weekly" + cooldown: + default-days: 5 groups: github-actions: patterns: - - "*" - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - target-branch: "5.x" - groups: - github-actions: - patterns: - - "*" + - "*" \ No newline at end of file From 2d93c9c373814b86b7da4cf38ce6a9dc408d336f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 17:55:17 +0100 Subject: [PATCH 02/15] Bump shivammathur/setup-php in the github-actions group (#1707) Bumps the github-actions group with 1 update: [shivammathur/setup-php](https://github.com/shivammathur/setup-php). Updates `shivammathur/setup-php` from 2.37.0 to 2.37.1 - [Release notes](https://github.com/shivammathur/setup-php/releases) - [Commits](https://github.com/shivammathur/setup-php/compare/accd6127cb78bee3e8082180cb391013d204ef9f...7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc) --- updated-dependencies: - dependency-name: shivammathur/setup-php dependency-version: 2.37.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/static.yml | 2 +- .github/workflows/tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 970f2011..92c4d1a5 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Setup PHP - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2 + uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc # v2 with: php-version: 8.3 tools: composer:v2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b38afad2..711d3c6e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Setup PHP - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2 + uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc # v2 with: php-version: ${{ matrix.php }} tools: composer:v2 From c40c8dbc24d182f86533517511ef845ea668f0c0 Mon Sep 17 00:00:00 2001 From: jp Date: Sat, 6 Jun 2026 01:23:08 +0100 Subject: [PATCH 03/15] [4.x] Fix Checks (#1709) * fix(composer): set root version for feature-branch CI pest-plugin-browser ^4.3.1 requires pestphp/pest ^4.4.5 on the root package. Without an explicit version, Composer infers dev- on PR branches, which fails composer update before tests run. * set root version of composer * fix indent --- .github/workflows/static.yml | 2 ++ .github/workflows/tests.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 92c4d1a5..29de4027 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -53,6 +53,8 @@ jobs: static-php-8.3-composer- - name: Install Dependencies + env: + COMPOSER_ROOT_VERSION: 4.x-dev run: composer update --${{ matrix.dependency-version }} --no-interaction --no-progress --ansi - name: Profanity Check diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 711d3c6e..a05d2910 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -66,6 +66,8 @@ jobs: - name: Install PHP dependencies shell: bash + env: + COMPOSER_ROOT_VERSION: 4.x-dev run: composer update --${{ matrix.dependency_version }} --no-interaction --no-progress --ansi --with="symfony/console:^${{ matrix.symfony }}" - name: Unit Tests From eee60c9e1156cdbc5225ccfeee86b7e1edcdf46c Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Thu, 11 Jun 2026 10:08:27 +0100 Subject: [PATCH 04/15] fix: duplicated team city output --- src/Subscribers/EnsureTeamCityEnabled.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Subscribers/EnsureTeamCityEnabled.php b/src/Subscribers/EnsureTeamCityEnabled.php index 0b9591d2..89793d31 100644 --- a/src/Subscribers/EnsureTeamCityEnabled.php +++ b/src/Subscribers/EnsureTeamCityEnabled.php @@ -15,15 +15,20 @@ use Symfony\Component\Console\Output\OutputInterface; /** * @internal */ -final readonly class EnsureTeamCityEnabled implements ConfiguredSubscriber +final class EnsureTeamCityEnabled implements ConfiguredSubscriber { + /** + * Indicates if the TeamCity logger has already been registered. + */ + private static bool $registered = false; + /** * Creates a new Configured Subscriber instance. */ public function __construct( - private InputInterface $input, - private OutputInterface $output, - private TestSuite $testSuite, + private readonly InputInterface $input, + private readonly OutputInterface $output, + private readonly TestSuite $testSuite, ) {} /** @@ -31,10 +36,16 @@ final readonly class EnsureTeamCityEnabled implements ConfiguredSubscriber */ public function notify(Configured $event): void { + if (self::$registered) { + return; + } + if (! $this->input->hasParameterOption('--teamcity')) { return; } + self::$registered = true; + $flowId = getenv('FLOW_ID'); $flowId = is_string($flowId) ? (int) $flowId : getmypid(); From cd711a25d5305d3a3b9df7a2e30eaf953f6ebb75 Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Thu, 11 Jun 2026 10:08:36 +0100 Subject: [PATCH 05/15] chore: bumps phpunit --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index a7d92b2a..8a6a2efc 100644 --- a/composer.json +++ b/composer.json @@ -26,12 +26,12 @@ "pestphp/pest-plugin-arch": "^4.0.2", "pestphp/pest-plugin-mutate": "^4.0.1", "pestphp/pest-plugin-profanity": "^4.2.1", - "phpunit/phpunit": "^12.5.28", + "phpunit/phpunit": "^12.5.29", "symfony/process": "^7.4.13|^8.1.0" }, "conflict": { "filp/whoops": "<2.18.3", - "phpunit/phpunit": ">12.5.28", + "phpunit/phpunit": ">12.5.29", "sebastian/exporter": "<7.0.0", "webmozart/assert": "<1.11.0" }, From 37821e1108d8480bb8371f65fea2e11908869454 Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Thu, 11 Jun 2026 10:12:32 +0100 Subject: [PATCH 06/15] chore: fixes output snapshots on team city --- tests/.snapshots/Failure.php.inc | 28 ---------------------------- tests/.snapshots/SuccessOnly.php.inc | 19 ------------------- 2 files changed, 47 deletions(-) diff --git a/tests/.snapshots/Failure.php.inc b/tests/.snapshots/Failure.php.inc index 5c3878fa..efd42309 100644 --- a/tests/.snapshots/Failure.php.inc +++ b/tests/.snapshots/Failure.php.inc @@ -1,56 +1,28 @@ ##teamcity[testSuiteStarted name='Tests/tests/Failure' locationHint='pest_qn://tests/.tests/Failure.php' flowId='1234'] ##teamcity[testCount count='8' flowId='1234'] -##teamcity[testSuiteStarted name='Tests/tests/Failure' locationHint='pest_qn://tests/.tests/Failure.php' flowId='1234'] -##teamcity[testCount count='8' flowId='1234'] ##teamcity[testStarted name='it can fail with comparison' locationHint='pest_qn://tests/.tests/Failure.php::it can fail with comparison' flowId='1234'] -##teamcity[testStarted name='it can fail with comparison' locationHint='pest_qn://tests/.tests/Failure.php::it can fail with comparison' flowId='1234'] -##teamcity[testFailed name='it can fail with comparison' message='Failed asserting that true matches expected false.' details='at tests/.tests/Failure.php:6' type='comparisonFailure' actual='true' expected='false' flowId='1234'] ##teamcity[testFailed name='it can fail with comparison' message='Failed asserting that true matches expected false.' details='at tests/.tests/Failure.php:6' type='comparisonFailure' actual='true' expected='false' flowId='1234'] ##teamcity[testFinished name='it can fail with comparison' duration='100000' flowId='1234'] -##teamcity[testFinished name='it can fail with comparison' duration='100000' flowId='1234'] -##teamcity[testStarted name='it can be ignored because of no assertions' locationHint='pest_qn://tests/.tests/Failure.php::it can be ignored because of no assertions' flowId='1234'] ##teamcity[testStarted name='it can be ignored because of no assertions' locationHint='pest_qn://tests/.tests/Failure.php::it can be ignored because of no assertions' flowId='1234'] ##teamcity[testIgnored name='it can be ignored because of no assertions' message='This test did not perform any assertions' details='' flowId='1234'] -##teamcity[testIgnored name='it can be ignored because of no assertions' message='This test did not perform any assertions' details='' flowId='1234'] -##teamcity[testFinished name='it can be ignored because of no assertions' duration='100000' flowId='1234'] ##teamcity[testFinished name='it can be ignored because of no assertions' duration='100000' flowId='1234'] ##teamcity[testStarted name='it can be ignored because it is skipped' locationHint='pest_qn://tests/.tests/Failure.php::it can be ignored because it is skipped' flowId='1234'] -##teamcity[testStarted name='it can be ignored because it is skipped' locationHint='pest_qn://tests/.tests/Failure.php::it can be ignored because it is skipped' flowId='1234'] -##teamcity[testIgnored name='it can be ignored because it is skipped' message='This test was ignored.' details='' flowId='1234'] ##teamcity[testIgnored name='it can be ignored because it is skipped' message='This test was ignored.' details='' flowId='1234'] ##teamcity[testFinished name='it can be ignored because it is skipped' duration='100000' flowId='1234'] -##teamcity[testFinished name='it can be ignored because it is skipped' duration='100000' flowId='1234'] -##teamcity[testStarted name='it can fail' locationHint='pest_qn://tests/.tests/Failure.php::it can fail' flowId='1234'] ##teamcity[testStarted name='it can fail' locationHint='pest_qn://tests/.tests/Failure.php::it can fail' flowId='1234'] ##teamcity[testFailed name='it can fail' message='oh noo' details='at tests/.tests/Failure.php:18' flowId='1234'] -##teamcity[testFailed name='it can fail' message='oh noo' details='at tests/.tests/Failure.php:18' flowId='1234'] -##teamcity[testFinished name='it can fail' duration='100000' flowId='1234'] ##teamcity[testFinished name='it can fail' duration='100000' flowId='1234'] ##teamcity[testStarted name='it throws exception' locationHint='pest_qn://tests/.tests/Failure.php::it throws exception' flowId='1234'] -##teamcity[testStarted name='it throws exception' locationHint='pest_qn://tests/.tests/Failure.php::it throws exception' flowId='1234'] -##teamcity[testFailed name='it throws exception' message='Exception: test error' details='at tests/.tests/Failure.php:22' flowId='1234'] ##teamcity[testFailed name='it throws exception' message='Exception: test error' details='at tests/.tests/Failure.php:22' flowId='1234'] ##teamcity[testFinished name='it throws exception' duration='100000' flowId='1234'] -##teamcity[testFinished name='it throws exception' duration='100000' flowId='1234'] -##teamcity[testStarted name='it is not done yet' locationHint='pest_qn://tests/.tests/Failure.php::it is not done yet' flowId='1234'] ##teamcity[testStarted name='it is not done yet' locationHint='pest_qn://tests/.tests/Failure.php::it is not done yet' flowId='1234'] ##teamcity[testFinished name='it is not done yet' duration='100000' flowId='1234'] -##teamcity[testFinished name='it is not done yet' duration='100000' flowId='1234'] -##teamcity[testStarted name='build this one.' locationHint='pest_qn://tests/.tests/Failure.php::build this one.' flowId='1234'] ##teamcity[testStarted name='build this one.' locationHint='pest_qn://tests/.tests/Failure.php::build this one.' flowId='1234'] ##teamcity[testFinished name='build this one.' duration='100000' flowId='1234'] -##teamcity[testFinished name='build this one.' duration='100000' flowId='1234'] -##teamcity[testStarted name='it is passing' locationHint='pest_qn://tests/.tests/Failure.php::it is passing' flowId='1234'] ##teamcity[testStarted name='it is passing' locationHint='pest_qn://tests/.tests/Failure.php::it is passing' flowId='1234'] ##teamcity[testFinished name='it is passing' duration='100000' flowId='1234'] -##teamcity[testFinished name='it is passing' duration='100000' flowId='1234'] -##teamcity[testSuiteFinished name='Tests/tests/Failure' flowId='1234'] ##teamcity[testSuiteFinished name='Tests/tests/Failure' flowId='1234'] Tests: 3 failed, 1 risky, 2 todos, 1 skipped, 1 passed (3 assertions) Duration: 1.00s - - Tests: 3 failed, 1 risky, 2 todos, 1 skipped, 1 passed (3 assertions) - Duration: 1.00s - diff --git a/tests/.snapshots/SuccessOnly.php.inc b/tests/.snapshots/SuccessOnly.php.inc index ca959e33..b940b7b6 100644 --- a/tests/.snapshots/SuccessOnly.php.inc +++ b/tests/.snapshots/SuccessOnly.php.inc @@ -1,38 +1,19 @@ ##teamcity[testSuiteStarted name='Tests/tests/SuccessOnly' locationHint='pest_qn://tests/.tests/SuccessOnly.php' flowId='1234'] ##teamcity[testCount count='4' flowId='1234'] -##teamcity[testSuiteStarted name='Tests/tests/SuccessOnly' locationHint='pest_qn://tests/.tests/SuccessOnly.php' flowId='1234'] -##teamcity[testCount count='4' flowId='1234'] ##teamcity[testStarted name='it can pass with comparison' locationHint='pest_qn://tests/.tests/SuccessOnly.php::it can pass with comparison' flowId='1234'] -##teamcity[testStarted name='it can pass with comparison' locationHint='pest_qn://tests/.tests/SuccessOnly.php::it can pass with comparison' flowId='1234'] -##teamcity[testFinished name='it can pass with comparison' duration='100000' flowId='1234'] ##teamcity[testFinished name='it can pass with comparison' duration='100000' flowId='1234'] ##teamcity[testStarted name='can also pass' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can also pass' flowId='1234'] -##teamcity[testStarted name='can also pass' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can also pass' flowId='1234'] -##teamcity[testFinished name='can also pass' duration='100000' flowId='1234'] ##teamcity[testFinished name='can also pass' duration='100000' flowId='1234'] ##teamcity[testSuiteStarted name='can pass with dataset' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can pass with dataset' flowId='1234'] -##teamcity[testSuiteStarted name='can pass with dataset' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can pass with dataset' flowId='1234'] -##teamcity[testStarted name='can pass with dataset with data set "(true)"' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can pass with dataset with data set "(true)"' flowId='1234'] ##teamcity[testStarted name='can pass with dataset with data set "(true)"' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can pass with dataset with data set "(true)"' flowId='1234'] ##teamcity[testFinished name='can pass with dataset with data set "(true)"' duration='100000' flowId='1234'] -##teamcity[testFinished name='can pass with dataset with data set "(true)"' duration='100000' flowId='1234'] -##teamcity[testSuiteFinished name='can pass with dataset' flowId='1234'] ##teamcity[testSuiteFinished name='can pass with dataset' flowId='1234'] ##teamcity[testSuiteStarted name='`block` → can pass with dataset in describe block' locationHint='pest_qn://tests/.tests/SuccessOnly.php::`block` → can pass with dataset in describe block' flowId='1234'] -##teamcity[testSuiteStarted name='`block` → can pass with dataset in describe block' locationHint='pest_qn://tests/.tests/SuccessOnly.php::`block` → can pass with dataset in describe block' flowId='1234'] -##teamcity[testStarted name='`block` → can pass with dataset in describe block with data set "(1)"' locationHint='pest_qn://tests/.tests/SuccessOnly.php::`block` → can pass with dataset in describe block with data set "(1)"' flowId='1234'] ##teamcity[testStarted name='`block` → can pass with dataset in describe block with data set "(1)"' locationHint='pest_qn://tests/.tests/SuccessOnly.php::`block` → can pass with dataset in describe block with data set "(1)"' flowId='1234'] ##teamcity[testFinished name='`block` → can pass with dataset in describe block with data set "(1)"' duration='100000' flowId='1234'] -##teamcity[testFinished name='`block` → can pass with dataset in describe block with data set "(1)"' duration='100000' flowId='1234'] ##teamcity[testSuiteFinished name='`block` → can pass with dataset in describe block' flowId='1234'] -##teamcity[testSuiteFinished name='`block` → can pass with dataset in describe block' flowId='1234'] -##teamcity[testSuiteFinished name='Tests/tests/SuccessOnly' flowId='1234'] ##teamcity[testSuiteFinished name='Tests/tests/SuccessOnly' flowId='1234'] Tests: 4 passed (4 assertions) Duration: 1.00s - - Tests: 4 passed (4 assertions) - Duration: 1.00s - From dfb7b870afaeb9267690c1771442c95f0f1b53c6 Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Thu, 11 Jun 2026 10:12:41 +0100 Subject: [PATCH 07/15] fix: retry output expected string --- src/Concerns/Testable.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Concerns/Testable.php b/src/Concerns/Testable.php index a6f78d25..b978139c 100644 --- a/src/Concerns/Testable.php +++ b/src/Concerns/Testable.php @@ -435,6 +435,11 @@ trait Testable if ($hasOutputExpectation) { ob_clean(); + + Closure::bind(function (): void { + $this->outputExpectedString = null; + $this->outputExpectedRegex = null; + }, $this, TestCase::class)(); } $this->setUp(); From 04c9d418956555e2e6c5c9aead99efa4cff79c18 Mon Sep 17 00:00:00 2001 From: Chetan Date: Thu, 11 Jun 2026 14:43:26 +0530 Subject: [PATCH 08/15] fix: update gitlab urls for issues and prs to match new format (#1728) * fix: update gitlab urls for issues and prs to match new format Added an optional host parameter to the gitlab method, defaulting to 'gitlab.com'. Updated the issues and prs URLs to include '/-/' in the path, which is the new format for GitLab URLs. This change ensures that the URLs generated for GitLab projects are correct and reflect the new structure of GitLab's URLs for issues and merge requests. Host parameter allows users to specify a custom GitLab instance if they are using a self-hosted version of GitLab, while still maintaining the default behavior for users who are using gitlab.com. * fix: update gitlab method to use hostname parameter correctly --- src/Configuration/Project.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Configuration/Project.php b/src/Configuration/Project.php index 936c37c6..9a735b48 100644 --- a/src/Configuration/Project.php +++ b/src/Configuration/Project.php @@ -59,12 +59,15 @@ final class Project /** * Sets the test project to GitLab. */ - public function gitlab(string $project): self + public function gitlab(string $project, string $hostname = 'gitlab.com'): self { - $this->issues = "https://gitlab.com/{$project}/issues/%s"; - $this->prs = "https://gitlab.com/{$project}/merge_requests/%s"; + // Simple way to ensure only the host is used + $hostname = parse_url($hostname, PHP_URL_HOST) ?? $hostname; - $this->assignees = 'https://gitlab.com/%s'; + $this->issues = "https://{$hostname}/{$project}/-/work_items/%s"; + $this->prs = "https://{$hostname}/{$project}/-/merge_requests/%s"; + + $this->assignees = "https://{$hostname}/%s"; return $this; } From be49a3ce18d7271419cd86c7bcbbb99b44773dbc Mon Sep 17 00:00:00 2001 From: Punyapal Shah <53343069+MrPunyapal@users.noreply.github.com> Date: Thu, 11 Jun 2026 14:46:07 +0530 Subject: [PATCH 09/15] Fix: dd (#1692) * fix: update dd method to return never type Co-authored-by: Copilot * fix: enhance var_dump calls to accept additional arguments * fix: update dd method to handle paratest and collision printer environments * test: add dd method tests for ExpectationFailedException in parallel mode Co-authored-by: Copilot --------- Co-authored-by: Copilot --- src/Expectation.php | 16 +++++++++++---- tests/Features/Expect/dd.php | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 tests/Features/Expect/dd.php diff --git a/src/Expectation.php b/src/Expectation.php index 69bf52f3..c9fd2d6b 100644 --- a/src/Expectation.php +++ b/src/Expectation.php @@ -112,7 +112,7 @@ final class Expectation if (function_exists('dump')) { dump($this->value, ...$arguments); } else { - var_dump($this->value); + var_dump($this->value, ...$arguments); } return $this; @@ -123,15 +123,23 @@ final class Expectation * * @return never */ - public function dd(mixed ...$arguments): void + public function dd(mixed ...$arguments): never { if (function_exists('dd')) { dd($this->value, ...$arguments); } - var_dump($this->value); + if (getenv('PARATEST') !== false || isset($_SERVER['COLLISION_PRINTER'])) { + ob_start(); + var_dump($this->value, ...$arguments); + $output = (string) ob_get_clean(); - exit(1); + throw new ExpectationFailedException($output); + } + + var_dump($this->value, ...$arguments); + + exit(0); } /** diff --git a/tests/Features/Expect/dd.php b/tests/Features/Expect/dd.php new file mode 100644 index 00000000..a658178a --- /dev/null +++ b/tests/Features/Expect/dd.php @@ -0,0 +1,39 @@ +dd(); + } catch (ExpectationFailedException $e) { + expect($e->getMessage())->toContain('42'); + } finally { + putenv('PARATEST'); + } +}); + +it('dd throws ExpectationFailedException with all dumped arguments in parallel mode', function () { + putenv('PARATEST=1'); + + try { + expect('hello')->dd('extra'); + } catch (ExpectationFailedException $e) { + expect($e->getMessage()) + ->toContain('hello') + ->toContain('extra'); + } finally { + putenv('PARATEST'); + } +}); + +it('dd throws ExpectationFailedException with dumped value when running under pest', function () { + expect($_SERVER['COLLISION_PRINTER'])->toBe('DefaultPrinter'); + + try { + expect(42)->dd(); + } catch (ExpectationFailedException $e) { + expect($e->getMessage())->toContain('42'); + } +}); \ No newline at end of file From 553aac65e6a573d30b8a081397653888be3bd16c Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Thu, 11 Jun 2026 10:39:38 +0100 Subject: [PATCH 10/15] release: v4.7.3 --- src/Pest.php | 2 +- .../Visual/Help/visual_snapshot_of_help_command_output.snap | 2 +- .../Visual/Version/visual_snapshot_of_help_command_output.snap | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Pest.php b/src/Pest.php index 36f390ff..73fa7a5a 100644 --- a/src/Pest.php +++ b/src/Pest.php @@ -6,7 +6,7 @@ namespace Pest; function version(): string { - return '4.7.2'; + return '4.7.3'; } function testDirectory(string $file = ''): string diff --git a/tests/.pest/snapshots/Visual/Help/visual_snapshot_of_help_command_output.snap b/tests/.pest/snapshots/Visual/Help/visual_snapshot_of_help_command_output.snap index fd9239fb..f2800762 100644 --- a/tests/.pest/snapshots/Visual/Help/visual_snapshot_of_help_command_output.snap +++ b/tests/.pest/snapshots/Visual/Help/visual_snapshot_of_help_command_output.snap @@ -1,5 +1,5 @@ - Pest Testing Framework 4.7.2. + Pest Testing Framework 4.7.3. USAGE: pest [options] diff --git a/tests/.pest/snapshots/Visual/Version/visual_snapshot_of_help_command_output.snap b/tests/.pest/snapshots/Visual/Version/visual_snapshot_of_help_command_output.snap index e985d5df..cbf2feac 100644 --- a/tests/.pest/snapshots/Visual/Version/visual_snapshot_of_help_command_output.snap +++ b/tests/.pest/snapshots/Visual/Version/visual_snapshot_of_help_command_output.snap @@ -1,3 +1,3 @@ - Pest Testing Framework 4.7.2. + Pest Testing Framework 4.7.3. From 3aab02d2ebabdfe0d35b81f4f05992c221af75e5 Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Thu, 11 Jun 2026 10:50:24 +0100 Subject: [PATCH 11/15] ci: fixes `dd` test --- src/Expectation.php | 2 -- tests/Features/Expect/dd.php | 39 ------------------------------------ 2 files changed, 41 deletions(-) delete mode 100644 tests/Features/Expect/dd.php diff --git a/src/Expectation.php b/src/Expectation.php index c9fd2d6b..6df63311 100644 --- a/src/Expectation.php +++ b/src/Expectation.php @@ -120,8 +120,6 @@ final class Expectation /** * Dump the expectation value and end the script. - * - * @return never */ public function dd(mixed ...$arguments): never { diff --git a/tests/Features/Expect/dd.php b/tests/Features/Expect/dd.php deleted file mode 100644 index a658178a..00000000 --- a/tests/Features/Expect/dd.php +++ /dev/null @@ -1,39 +0,0 @@ -dd(); - } catch (ExpectationFailedException $e) { - expect($e->getMessage())->toContain('42'); - } finally { - putenv('PARATEST'); - } -}); - -it('dd throws ExpectationFailedException with all dumped arguments in parallel mode', function () { - putenv('PARATEST=1'); - - try { - expect('hello')->dd('extra'); - } catch (ExpectationFailedException $e) { - expect($e->getMessage()) - ->toContain('hello') - ->toContain('extra'); - } finally { - putenv('PARATEST'); - } -}); - -it('dd throws ExpectationFailedException with dumped value when running under pest', function () { - expect($_SERVER['COLLISION_PRINTER'])->toBe('DefaultPrinter'); - - try { - expect(42)->dd(); - } catch (ExpectationFailedException $e) { - expect($e->getMessage())->toContain('42'); - } -}); \ No newline at end of file From 20c12d006e1105143299a46e0bd834acf6a954e7 Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Fri, 12 Jun 2026 06:32:20 +0100 Subject: [PATCH 12/15] docs: fixes alt --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1967de7b..717ba81d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

PEST

- GitHub Workflow Status (master) + GitHub Workflow Status (4.x) Total Downloads Latest Version License From 12100dd901bd4677a9aa96666a373e5f11319efb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2026 06:51:20 +0100 Subject: [PATCH 13/15] Bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions group (#1730) Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 6.0.2 to 6.0.3 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/static.yml | 2 +- .github/workflows/tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 29de4027..5777def6 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Setup PHP uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc # v2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a05d2910..ea1d9b30 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -35,7 +35,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Setup PHP uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc # v2 From 77ef7e0df13955e4692ff5afb92b206512e180d4 Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Fri, 12 Jun 2026 06:51:58 +0100 Subject: [PATCH 14/15] ci: bumps `setup-php` pinned commit --- .github/workflows/static.yml | 2 +- .github/workflows/tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 5777def6..74c97c4a 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Setup PHP - uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc # v2 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 with: php-version: 8.3 tools: composer:v2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ea1d9b30..dbad6568 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: Setup PHP - uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc # v2 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 with: php-version: ${{ matrix.php }} tools: composer:v2 From 87882a8561bf3ddf230b9a6b764f367f687d5b2f Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Fri, 12 Jun 2026 06:57:27 +0100 Subject: [PATCH 15/15] fix: exit code --- src/Expectation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Expectation.php b/src/Expectation.php index 6df63311..b8c0862a 100644 --- a/src/Expectation.php +++ b/src/Expectation.php @@ -137,7 +137,7 @@ final class Expectation var_dump($this->value, ...$arguments); - exit(0); + exit(1); } /**