@@ -5,33 +5,74 @@ on: [push, pull_request]
55jobs :
66 laravel-tests :
77 runs-on : ${{ matrix.os }}
8+ continue-on-error : ${{ matrix.experimental == true }}
89 strategy :
9- fail-fast : true
10+ fail-fast : false
1011 matrix :
11- os : [ ubuntu-latest ]
12- php : [ 8.2, 8.3, 8.4 ]
13- laravel : [ 11.*, 12.* ]
14- stability : [ prefer-stable ]
15- name : P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}
12+ os : [ubuntu-latest]
13+ php : ['8.3', '8.4']
14+ laravel : ['12.*', '13.*']
15+ dependencies : [prefer-lowest, prefer-stable]
16+ experimental : [false]
17+ include :
18+ # PHP 8.5 non-blocking smoke — 4 combos, all experimental
19+ - { os: ubuntu-latest, php: '8.5', laravel: '12.*', dependencies: prefer-lowest, experimental: true }
20+ - { os: ubuntu-latest, php: '8.5', laravel: '12.*', dependencies: prefer-stable, experimental: true }
21+ - { os: ubuntu-latest, php: '8.5', laravel: '13.*', dependencies: prefer-lowest, experimental: true }
22+ - { os: ubuntu-latest, php: '8.5', laravel: '13.*', dependencies: prefer-stable, experimental: true }
23+ name : " PHP ${{ matrix.php }} / L${{ matrix.laravel }} / ${{ matrix.dependencies }}${{ matrix.experimental && ' (experimental)' || '' }}"
1624
1725 steps :
18- - uses : actions/checkout@v4
19- - name : Setup PHP
20- uses : shivammathur/setup-php@v2
21- with :
22- php-version : ${{ matrix.php }}
23- extensions : dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo
24- coverage : none
25- - name : Cache dependencies
26- uses : actions/cache@v4
27- with :
28- path : ~/.composer/cache/files
29- key : ${{ runner.os }}-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }}
30- restore-keys : |
31- ${{ runner.os }}-${{ matrix.php }}-composer-
32- - name : Install dependencies
33- run : |
34- composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update
35- composer update --${{ matrix.stability }} --prefer-dist --no-interaction
36- - name : Execute tests (Unit and Feature tests) via PHPUnit
37- run : vendor/bin/phpunit
26+ - uses : actions/checkout@v4
27+
28+ - name : Setup PHP
29+ uses : shivammathur/setup-php@v2
30+ with :
31+ php-version : ${{ matrix.php }}
32+ extensions : dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo
33+ coverage : none
34+
35+ - name : Cache composer dependencies
36+ uses : actions/cache@v4
37+ with :
38+ path : ~/.composer/cache/files
39+ key : ${{ runner.os }}-php${{ matrix.php }}-L${{ matrix.laravel }}-${{ matrix.dependencies }}-${{ hashFiles('**/composer.json') }}
40+ restore-keys : |
41+ ${{ runner.os }}-php${{ matrix.php }}-L${{ matrix.laravel }}-${{ matrix.dependencies }}-
42+ ${{ runner.os }}-php${{ matrix.php }}-
43+
44+ - name : Pin Laravel version for this job
45+ run : |
46+ composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update
47+
48+ - name : Install dependencies (${{ matrix.dependencies }})
49+ run : |
50+ composer update --${{ matrix.dependencies }} --prefer-dist --no-interaction
51+
52+ - name : Verify Laravel floor (prefer-lowest only)
53+ if : matrix.dependencies == 'prefer-lowest' && matrix.experimental != true
54+ run : |
55+ set -euo pipefail
56+ resolved=$(composer show laravel/framework --format=json | php -r 'echo json_decode(stream_get_contents(STDIN), true)["versions"][0];' | sed 's/^v//')
57+ case "${{ matrix.laravel }}" in
58+ 12.*) min="12.0.0" ;;
59+ 13.*) min="13.0.0" ;;
60+ *) echo "Unknown Laravel major: ${{ matrix.laravel }}"; exit 1 ;;
61+ esac
62+ R="$resolved" M="$min" php -r '
63+ $r = getenv("R");
64+ $m = getenv("M");
65+ if ($r === "" || $m === "") {
66+ fwrite(STDERR, "Version extraction failed (resolved=\"$r\", min=\"$m\")\n");
67+ exit(2);
68+ }
69+ if (version_compare($r, $m, "<")) {
70+ fwrite(STDERR, "laravel/framework resolved to $r, below declared floor $m for Laravel ${{ matrix.laravel }}\n");
71+ exit(1);
72+ }
73+ echo "laravel/framework resolved to $r (floor $m) -- ok\n";
74+ '
75+
76+ - name : Execute tests (PHPUnit)
77+ # PR 2 uses PHPUnit; PR 3 replaces this with `vendor/bin/pest`.
78+ run : vendor/bin/phpunit
0 commit comments