From a2ee290394f9991b2bd867b4f4a6796e507322b5 Mon Sep 17 00:00:00 2001 From: Mior Muhammad Zaki Date: Thu, 19 Mar 2026 23:10:53 +0000 Subject: [PATCH 1/6] Supports Laravel 13 --- .github/workflows/analyse.yaml | 2 +- .github/workflows/audit.yaml | 4 ++- .github/workflows/tests.yaml | 60 ++++++++++++++++++++++++++++++---- composer.json | 6 ++-- 4 files changed, 61 insertions(+), 11 deletions(-) diff --git a/.github/workflows/analyse.yaml b/.github/workflows/analyse.yaml index 80d7b43..9d6f12b 100644 --- a/.github/workflows/analyse.yaml +++ b/.github/workflows/analyse.yaml @@ -36,7 +36,7 @@ jobs: composer config http-basic.nova.laravel.com ${{ secrets.NOVA_USERNAME }} ${{ secrets.NOVA_PASSWORD }} - name: Install dependencies - uses: "ramsey/composer-install@v3" + uses: ramsey/composer-install@v4 with: dependency-versions: "highest" composer-options: "--prefer-dist --no-cache" diff --git a/.github/workflows/audit.yaml b/.github/workflows/audit.yaml index d895ea3..35b8f74 100644 --- a/.github/workflows/audit.yaml +++ b/.github/workflows/audit.yaml @@ -17,6 +17,8 @@ jobs: - 8.1 - 8.2 - 8.3 + - 8.4 + - 8.5 experimental: - true @@ -38,7 +40,7 @@ jobs: composer config http-basic.nova.laravel.com ${{ secrets.NOVA_USERNAME }} ${{ secrets.NOVA_PASSWORD }} - name: Install dependencies - uses: "ramsey/composer-install@v3" + uses: ramsey/composer-install@v4 with: dependency-versions: "highest" composer-options: "--prefer-dist --prefer-stable --no-cache" diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 000cabf..3090146 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -6,6 +6,53 @@ on: workflow_dispatch: jobs: + tests-on-laravel-13: + runs-on: ${{ matrix.os }} + continue-on-error: ${{ matrix.experimental }} + strategy: + matrix: + os: + - "ubuntu-latest" + php: + - 8.3 + - 8.4 + - 8.5 + dependencies: + - "highest" + laravel: + - "13.x" + experimental: + - false + + name: Laravel ${{ matrix.laravel }} on PHP${{ matrix.php }}-${{ matrix.os }} (${{ matrix.dependencies }}) + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: dom, curl, libxml, mbstring, zip, pcntl, sqlite3, pdo_sqlite, bcmath, fileinfo + coverage: none + + - name: "Setup CI Authentication" + run: | + composer config http-basic.nova.laravel.com ${{ secrets.NOVA_USERNAME }} ${{ secrets.NOVA_PASSWORD }} + + - name: Install dependencies + uses: ramsey/composer-install@v4 + with: + dependency-versions: "${{ matrix.dependencies }}" + composer-options: "--prefer-dist --no-cache --with=laravel/framework:${{ matrix.laravel }}" + + - name: Installed dependencies + run: composer show -D + + - name: Execute tests + run: composer run test + tests-on-laravel-12: runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} @@ -17,6 +64,7 @@ jobs: - 8.2 - 8.3 - 8.4 + - 8.5 dependencies: - "highest" laravel: @@ -28,7 +76,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -42,7 +90,7 @@ jobs: composer config http-basic.nova.laravel.com ${{ secrets.NOVA_USERNAME }} ${{ secrets.NOVA_PASSWORD }} - name: Install dependencies - uses: "ramsey/composer-install@v3" + uses: ramsey/composer-install@v4 with: dependency-versions: "${{ matrix.dependencies }}" composer-options: "--prefer-dist --no-cache --with=laravel/framework:${{ matrix.laravel }}" @@ -75,7 +123,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -89,7 +137,7 @@ jobs: composer config http-basic.nova.laravel.com ${{ secrets.NOVA_USERNAME }} ${{ secrets.NOVA_PASSWORD }} - name: Install dependencies - uses: "ramsey/composer-install@v3" + uses: ramsey/composer-install@v4 with: dependency-versions: "${{ matrix.dependencies }}" composer-options: "--prefer-dist --no-cache --with=laravel/framework:${{ matrix.laravel }}" @@ -122,7 +170,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -136,7 +184,7 @@ jobs: composer config http-basic.nova.laravel.com ${{ secrets.NOVA_USERNAME }} ${{ secrets.NOVA_PASSWORD }} - name: Install dependencies - uses: "ramsey/composer-install@v3" + uses: ramsey/composer-install@v4 with: dependency-versions: "${{ matrix.dependencies }}" composer-options: "--prefer-dist --no-cache --with=laravel/framework:${{ matrix.laravel }}" diff --git a/composer.json b/composer.json index dbb89ef..49f04f0 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "require": { "php": "^8.1", "composer-runtime-api": "^2.2", - "illuminate/support": "^10.48.23|^11.35|^12.0", + "illuminate/support": "^10.48.23|^11.35|^12.0|^13.0", "laravie/serialize-queries": "^3.0", "laravel/serializable-closure": "^1.0|^2.0", "symfony/polyfill-php83": "^1.31" @@ -35,8 +35,8 @@ "laravel/nova": "^5.2", "laravel/nova-devtool": "^1.6", "laravel/pint": "^1.20", - "orchestra/testbench": "^8.20|^9.0|^10.0", - "orchestra/pest-plugin-testbench": "^2.0|^3.0", + "orchestra/testbench": "^8.20|^9.0|^10.0|^11.0", + "orchestra/pest-plugin-testbench": "^2.0|^3.0|^4.0", "phpstan/phpstan": "^2.1" }, "conflict": { From dd0f6b8c8af3b578523828e10b830a3b04dfa8e5 Mon Sep 17 00:00:00 2001 From: Mior Muhammad Zaki Date: Thu, 19 Mar 2026 23:40:53 +0000 Subject: [PATCH 2/6] wip --- composer.json | 4 ++-- src/Jobs/QueuedExportAsCsv.php | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 49f04f0..6bf0112 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ }, "require-dev": { "guzzlehttp/guzzle": "^7.2", - "laravel/nova": "^5.2", + "laravel/nova": "^5.8", "laravel/nova-devtool": "^1.6", "laravel/pint": "^1.20", "orchestra/testbench": "^8.20|^9.0|^10.0|^11.0", @@ -40,7 +40,7 @@ "phpstan/phpstan": "^2.1" }, "conflict": { - "laravel/nova": "<5.0.0|>=6.0.0" + "laravel/nova": "<5.8.0|>=6.0.0" }, "repositories": [ { "type": "composer", "url": "https://nova.laravel.com" } diff --git a/src/Jobs/QueuedExportAsCsv.php b/src/Jobs/QueuedExportAsCsv.php index 248352c..1c81118 100644 --- a/src/Jobs/QueuedExportAsCsv.php +++ b/src/Jobs/QueuedExportAsCsv.php @@ -10,6 +10,7 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Storage; +use Laravel\Nova\Actions\Responses\StreamExportableCsv; use Laravel\Nova\Util; use NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported; use Rap2hpoutre\FastExcel\FastExcel; @@ -67,7 +68,7 @@ public function handle(): void $storageDisk = $this->options['storageDisk']; $filename = $this->options['filename']; - $exportedFilename = (new FastExcel($eloquentGenerator()))->export("/tmp/{$filename}", $withFormatCallback); + $exportedFilename = (new StreamExportableCsv($eloquentGenerator()))->export("/tmp/{$filename}", $withFormatCallback); $storedFilename = Storage::disk($storageDisk)->putFileAs( 'nova-actions-export-as-csv', new File($exportedFilename), $filename, 'public' From 8f6d4ccf20b70ae8af76bbb532243d95799854c3 Mon Sep 17 00:00:00 2001 From: Mior Muhammad Zaki Date: Thu, 19 Mar 2026 23:43:49 +0000 Subject: [PATCH 3/6] wip --- pint.json | 1 + 1 file changed, 1 insertion(+) diff --git a/pint.json b/pint.json index cc6232c..29dfa4b 100644 --- a/pint.json +++ b/pint.json @@ -1,6 +1,7 @@ { "preset": "laravel", "rules": { + "fully_qualified_strict_types": false, "method_chaining_indentation": false, "no_superfluous_phpdoc_tags": { "allow_mixed": true From 5151941ae2913ea1aa77b6b57e358d2c560883c2 Mon Sep 17 00:00:00 2001 From: Mior Muhammad Zaki Date: Fri, 20 Mar 2026 08:51:02 +0800 Subject: [PATCH 4/6] wip Signed-off-by: Mior Muhammad Zaki --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 6bf0112..4c9a931 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ }, "require-dev": { "guzzlehttp/guzzle": "^7.2", - "laravel/nova": "^5.8", + "laravel/nova": "^5.8.1", "laravel/nova-devtool": "^1.6", "laravel/pint": "^1.20", "orchestra/testbench": "^8.20|^9.0|^10.0|^11.0", @@ -40,7 +40,7 @@ "phpstan/phpstan": "^2.1" }, "conflict": { - "laravel/nova": "<5.8.0|>=6.0.0" + "laravel/nova": "<5.8.1|>=6.0.0" }, "repositories": [ { "type": "composer", "url": "https://nova.laravel.com" } From 96eb1df6d630cf246aab4690ca2a76b0c85dd72a Mon Sep 17 00:00:00 2001 From: Mior Muhammad Zaki Date: Fri, 20 Mar 2026 08:55:06 +0800 Subject: [PATCH 5/6] wip Signed-off-by: Mior Muhammad Zaki --- src/Jobs/QueuedExportAsCsv.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Jobs/QueuedExportAsCsv.php b/src/Jobs/QueuedExportAsCsv.php index 1c81118..948e2aa 100644 --- a/src/Jobs/QueuedExportAsCsv.php +++ b/src/Jobs/QueuedExportAsCsv.php @@ -13,7 +13,6 @@ use Laravel\Nova\Actions\Responses\StreamExportableCsv; use Laravel\Nova\Util; use NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported; -use Rap2hpoutre\FastExcel\FastExcel; use function Laravie\SerializesQuery\unserialize; From 36b7efcbe87c1105250c1ab7ff150327a9e56134 Mon Sep 17 00:00:00 2001 From: Mior Muhammad Zaki Date: Fri, 20 Mar 2026 08:57:59 +0800 Subject: [PATCH 6/6] wip Signed-off-by: Mior Muhammad Zaki --- src/Jobs/QueuedExportAsCsv.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Jobs/QueuedExportAsCsv.php b/src/Jobs/QueuedExportAsCsv.php index 948e2aa..7620346 100644 --- a/src/Jobs/QueuedExportAsCsv.php +++ b/src/Jobs/QueuedExportAsCsv.php @@ -13,6 +13,7 @@ use Laravel\Nova\Actions\Responses\StreamExportableCsv; use Laravel\Nova\Util; use NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported; +use Rap2hpoutre\FastExcel\FastExcel; use function Laravie\SerializesQuery\unserialize; @@ -67,7 +68,11 @@ public function handle(): void $storageDisk = $this->options['storageDisk']; $filename = $this->options['filename']; - $exportedFilename = (new StreamExportableCsv($eloquentGenerator()))->export("/tmp/{$filename}", $withFormatCallback); + $exporter = class_exists(FastExcel::class) + ? new FastExcel($eloquentGenerator()) + : new StreamExportableCsv($eloquentGenerator()); + + $exportedFilename = $exporter->export("/tmp/{$filename}", $withFormatCallback); $storedFilename = Storage::disk($storageDisk)->putFileAs( 'nova-actions-export-as-csv', new File($exportedFilename), $filename, 'public'