From 7e18e135753098ea55f51331c00c734c7a621a2d Mon Sep 17 00:00:00 2001 From: Morten Harders Date: Mon, 12 Oct 2026 13:57:45 +0200 Subject: [PATCH 1/3] feat: add Testbench for Laravel packages developed with Orchestra Testbench A package with a testbench.yaml is served from its workbench: the document root is Testbench's Laravel skeleton in vendor/, and the console is vendor/bin/testbench. Testbench takes its environment from testbench.yaml (SQLite unless the package says otherwise), so the definition declares no env file and no service wiring. Setup discovers packages, which writes the cached testbench.yaml the skeleton's index.php reads; building the workbench is an opt-in step and a command. The mark is a placeholder bench vise: Testbench has no official logo. --- .github/logos/testbench.svg | 1 + README.md | 1 + frameworks/index.json | 9 ++++++++ frameworks/testbench.svg | 1 + frameworks/testbench/11.yaml | 41 ++++++++++++++++++++++++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 .github/logos/testbench.svg create mode 100644 frameworks/testbench.svg create mode 100644 frameworks/testbench/11.yaml diff --git a/.github/logos/testbench.svg b/.github/logos/testbench.svg new file mode 100644 index 0000000..18bc58d --- /dev/null +++ b/.github/logos/testbench.svg @@ -0,0 +1 @@ + diff --git a/README.md b/README.md index cffddd5..604b553 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ All of it is data. None of it ships in the binary. | | **Statamic** | `6` `5` `4` `3` | `statamic/cms` in composer.json | | | **Symfony** | `8` `7` `6` `5` `4` | `symfony.lock` file or `symfony/framework-bundle` in composer.json | | | **Tempest** | `3` | `tempest` file or `tempest/framework` in composer.json | +| | **Testbench** | `11` | `testbench.yaml` file (a Laravel package served from its Orchestra Testbench workbench) | | | **TYPO3** | `14` `13` `12` `11` `10` | `typo3/cms-core` in composer.json or `public/typo3` directory | | | **Winter CMS** | `1` | `winter/wn-system-module` in composer.json | | | **WordPress** | `7` `6` `5` | `wp-login.php` file or `wp-config.php` file | diff --git a/frameworks/index.json b/frameworks/index.json index 1ee55e7..78d3f89 100644 --- a/frameworks/index.json +++ b/frameworks/index.json @@ -136,6 +136,15 @@ "detect": [ {"composer": "yiisoft/yii2"} ] + }, + { + "name": "testbench", + "label": "Testbench", + "versions": ["11"], + "latest": "11", + "detect": [ + {"file": "testbench.yaml"} + ] } ], "packages": [ diff --git a/frameworks/testbench.svg b/frameworks/testbench.svg new file mode 100644 index 0000000..6227f9c --- /dev/null +++ b/frameworks/testbench.svg @@ -0,0 +1 @@ + diff --git a/frameworks/testbench/11.yaml b/frameworks/testbench/11.yaml new file mode 100644 index 0000000..2e7e37e --- /dev/null +++ b/frameworks/testbench/11.yaml @@ -0,0 +1,41 @@ +# A Laravel package developed with Orchestra Testbench and served from its +# workbench. Testbench boots its own Laravel skeleton from vendor/ and takes its +# environment from testbench.yaml (SQLite unless the package says otherwise), so +# lerd neither writes an env file nor wires services for it. +name: testbench +version: "11" +label: Testbench +color: "#475569" +public_dir: vendor/orchestra/testbench-core/laravel/public + +php: + min: "8.3" + max: "8.5" + +detect: + - file: testbench.yaml + +composer: true +npm: auto +console: vendor/bin/testbench + +logs: + - path: vendor/orchestra/testbench-core/laravel/storage/logs/*.log + format: monolog + +setup: + # The skeleton's public/index.php reads the package's testbench.yaml from its + # bootstrap cache, which testbench writes when it discovers packages. + - label: Discover packages + command: php vendor/bin/testbench package:discover --ansi + default: true + - label: Build the workbench + command: php vendor/bin/testbench workbench:build --ansi + default: false + +commands: + - name: workbench:build + label: Build the workbench + command: php vendor/bin/testbench workbench:build --ansi + output: silent + icon: hammer From d3f9a6599e83ac72d527a2dbde1abbc969e75565 Mon Sep 17 00:00:00 2001 From: George Dumitrescu Date: Mon, 12 Oct 2026 16:21:06 +0300 Subject: [PATCH 2/3] fix: hand the Testbench skeleton the package path under nginx The skeleton under vendor finds the package's vendor through TESTBENCH_WORKING_PATH or a vendor symlink, and testbench removes that symlink when each command ends, so every page answered 500. The definition now passes the variable through nginx.fastcgi_params, which lerd-env/lerd#2194 adds. --- frameworks/testbench/11.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frameworks/testbench/11.yaml b/frameworks/testbench/11.yaml index 2e7e37e..2fe366c 100644 --- a/frameworks/testbench/11.yaml +++ b/frameworks/testbench/11.yaml @@ -8,6 +8,12 @@ label: Testbench color: "#475569" public_dir: vendor/orchestra/testbench-core/laravel/public +# The skeleton finds the package's vendor through TESTBENCH_WORKING_PATH, which +# testbench serve sets; testbench removes the vendor symlink it would otherwise use. +nginx: + fastcgi_params: + TESTBENCH_WORKING_PATH: "{{root}}" + php: min: "8.3" max: "8.5" From 2f78f16360a6625ed51563def56fa6256563a884 Mon Sep 17 00:00:00 2001 From: George Dumitrescu Date: Mon, 19 Oct 2026 16:59:11 +0300 Subject: [PATCH 3/3] fix: draw the Testbench mark as a single 24px path The mark was a 64 unit drawing built from rects and sat off centre, unlike every other mark in the store. It is now one filled path on the same 24 unit viewBox, filling the frame like the others, and the README tile is regenerated from it. --- .github/logos/testbench.svg | 2 +- frameworks/testbench.svg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/logos/testbench.svg b/.github/logos/testbench.svg index 18bc58d..1b7423b 100644 --- a/.github/logos/testbench.svg +++ b/.github/logos/testbench.svg @@ -1 +1 @@ - + diff --git a/frameworks/testbench.svg b/frameworks/testbench.svg index 6227f9c..aeb9032 100644 --- a/frameworks/testbench.svg +++ b/frameworks/testbench.svg @@ -1 +1 @@ - +