Skip to content

Commit 3248659

Browse files
authored
Merge pull request #150 from thedevdojo/laravel-12-upgrade
Add support for Laravel 12
2 parents 506b15a + 7eefd6c commit 3248659

File tree

4 files changed

+1116
-735
lines changed

4 files changed

+1116
-735
lines changed

.github/workflows/tests.yml

+68-31
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,29 @@ on:
99
jobs:
1010
test:
1111
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
php-version: ['8.2', '8.3', '8.4']
1215

1316
steps:
1417
- uses: actions/checkout@v2
1518

1619
- name: Setup PHP
1720
uses: shivammathur/setup-php@v2
1821
with:
19-
php-version: '8.2'
22+
php-version: ${{ matrix.php-version }}
2023
extensions: mbstring, xml, ctype, iconv, mysql, imagick
2124

2225
- name: Cache Composer Packages
2326
uses: actions/cache@v2
2427
with:
2528
path: ~/.composer/cache
26-
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
29+
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.php-version }}
2730
restore-keys: |
28-
${{ runner.os }}-composer-git
31+
${{ runner.os }}-composer-git-${{ matrix.php-version }}
2932
3033
- name: Setup Laravel Application
31-
run: composer create-project --prefer-dist laravel/laravel laravel_app --no-interaction
34+
run: composer create-project --prefer-dist laravel/laravel laravel_app_${{ matrix.php-version }} --no-interaction
3235

3336
- name: Extract branch name
3437
shell: bash
@@ -37,86 +40,120 @@ jobs:
3740

3841
- name: Install DevDojo Auth from current branch
3942
run: "composer require devdojo/auth:dev-${{ env.branch }} --with-all-dependencies"
40-
working-directory: ./laravel_app
43+
working-directory: ./laravel_app_${{ matrix.php-version }}
4144

4245
- name: Publish the DevDojo Auth Assets
4346
run: php artisan vendor:publish --tag=auth:assets
44-
working-directory: ./laravel_app
47+
working-directory: ./laravel_app_${{ matrix.php-version }}
4548

4649
- name: Publish the DevDojo Configs
4750
run: php artisan vendor:publish --tag=auth:config
48-
working-directory: ./laravel_app
49-
51+
working-directory: ./laravel_app_${{ matrix.php-version }}
52+
5053
- name: Publish the DevDojo Auth Migrations
5154
run: php artisan vendor:publish --tag=auth:migrations
52-
working-directory: ./laravel_app
55+
working-directory: ./laravel_app_${{ matrix.php-version }}
5356

5457
- name: Remove current tests and symlink to DevDojo Auth
5558
run: |
5659
rm -rf tests
5760
ln -s vendor/devdojo/auth/tests tests
58-
working-directory: ./laravel_app
61+
working-directory: ./laravel_app_${{ matrix.php-version }}
5962

6063
- name: Create sqlite file
61-
run: touch database/database.sqlite
62-
working-directory: ./laravel_app
64+
run: touch database/database_${{ matrix.php-version }}.sqlite
65+
working-directory: ./laravel_app_${{ matrix.php-version }}
6366

6467
- name: Updating values in the .env
6568
run: |
6669
sed -i 's/DB_CONNECTION=mysql/DB_CONNECTION=sqlite/' .env
67-
sed -i 's/^DB_DATABASE=laravel/#DB_DATABASE=laravel/' .env
68-
working-directory: ./laravel_app
70+
sed -i 's/^DB_DATABASE=laravel/DB_DATABASE=database\/database_${{ matrix.php-version }}.sqlite/' .env
71+
working-directory: ./laravel_app_${{ matrix.php-version }}
6972

7073
- name: Include Doctrine DBAL Package
7174
run: composer require doctrine/dbal
72-
working-directory: ./laravel_app
75+
working-directory: ./laravel_app_${{ matrix.php-version }}
7376

7477
- name: Run the migrations
7578
run: php artisan migrate
76-
working-directory: ./laravel_app
79+
working-directory: ./laravel_app_${{ matrix.php-version }}
7780

78-
- name: Clean up composer.json - Remove PHPUnit & trailing commas
81+
- name: Clean up composer.json - Remove PHPUnit & fix JSON format
7982
run: |
80-
sed -i '/"phpunit\/phpunit"/d' composer.json
81-
sed -i '/"nunomaduro\/collision": "\^8.1",/s/,$//' composer.json
82-
# Remove any trailing commas before a closing bracket in require-dev
83-
sed -i 's/,\s*}/}/' composer.json
84-
working-directory: ./laravel_app
83+
# Create a backup
84+
cp composer.json composer.json.bak
85+
86+
# Use PHP to properly parse, modify and re-encode the JSON
87+
php -r '
88+
// Read and decode the composer.json
89+
$composerJson = json_decode(file_get_contents("composer.json"), true);
90+
if (!$composerJson) {
91+
echo "Failed to decode composer.json: " . json_last_error_msg() . "\n";
92+
exit(1);
93+
}
94+
95+
// Remove phpunit if it exists in require-dev
96+
if (isset($composerJson["require-dev"]["phpunit/phpunit"])) {
97+
unset($composerJson["require-dev"]["phpunit/phpunit"]);
98+
}
99+
100+
// Write back with proper JSON formatting
101+
file_put_contents(
102+
"composer.json",
103+
json_encode($composerJson, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
104+
);
105+
106+
echo "composer.json cleaned and reformatted successfully\n";
107+
'
108+
109+
# Verify the JSON is valid
110+
php -r 'echo json_decode(file_get_contents("composer.json")) ? "JSON is valid\n" : "JSON is invalid: " . json_last_error_msg() . "\n";'
111+
working-directory: ./laravel_app_${{ matrix.php-version }}
85112

86113
- name: Validate composer.json format
87114
run: |
88115
php -r 'if (!json_decode(file_get_contents("composer.json"))) { echo "JSON error: " . json_last_error_msg(); exit(1); }'
89-
working-directory: ./laravel_app
116+
working-directory: ./laravel_app_${{ matrix.php-version }}
90117

91118
- name: Remove composer.lock and re-run composer install
92119
run: |
93120
rm composer.lock
94121
composer install
95-
working-directory: ./laravel_app
122+
working-directory: ./laravel_app_${{ matrix.php-version }}
96123

97124
- name: Install PestPHP, PHPStan, Dusk, and Dusk API Conf
98125
run: |
99126
composer require pestphp/pest --dev --with-all-dependencies
100-
composer require larastan/larastan:^2.0 --dev --with-all-dependencies
127+
composer require larastan/larastan:^3.1 --dev --with-all-dependencies
101128
composer require laravel/dusk --dev --with-all-dependencies
102129
composer require alebatistella/duskapiconf --dev --with-all-dependencies
103130
composer require protonemedia/laravel-dusk-fakes:^1.6 --dev --with-all-dependencies
104-
working-directory: ./laravel_app
131+
working-directory: ./laravel_app_${{ matrix.php-version }}
132+
133+
- name: Set port number based on PHP version
134+
run: |
135+
if [[ "${{ matrix.php-version }}" == "8.2" ]]; then
136+
echo "SERVER_PORT=8000" >> $GITHUB_ENV
137+
elif [[ "${{ matrix.php-version }}" == "8.3" ]]; then
138+
echo "SERVER_PORT=8001" >> $GITHUB_ENV
139+
else
140+
echo "SERVER_PORT=8002" >> $GITHUB_ENV
141+
fi
105142
106143
- name: Start Chrome Driver and PHP Server
107144
run: |
108145
php artisan dusk:chrome-driver --detect &
109146
./vendor/laravel/dusk/bin/chromedriver-linux &
110-
php artisan serve --no-reload &
111-
working-directory: ./laravel_app
147+
php artisan serve --port=${{ env.SERVER_PORT }} --no-reload &
148+
working-directory: ./laravel_app_${{ matrix.php-version }}
112149

113150
- name: Run Tests
114151
run: ./vendor/bin/pest
115-
working-directory: ./laravel_app
152+
working-directory: ./laravel_app_${{ matrix.php-version }}
116153

117154
- name: Run Dusk Tests
118155
env:
119-
APP_URL: http://127.0.0.1:8000
156+
APP_URL: "http://127.0.0.1:${{ env.SERVER_PORT }}"
120157
APP_ENV: testing
121158
run: php artisan dusk -vvv
122-
working-directory: ./laravel_app
159+
working-directory: ./laravel_app_${{ matrix.php-version }}

composer.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
}
1717
],
1818
"require": {
19-
"php": "^7.4|^8.0|^8.1|^8.2",
20-
"illuminate/support": "^8.0|^9.0|^10.0|^11.0",
19+
"php": "^7.4|^8.0|^8.1|^8.2|^8.3|^8.4",
20+
"illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0",
2121
"laravel/folio": "^1.0",
2222
"livewire/livewire": "^3.0",
23-
"livewire/volt": "^1.0",
23+
"livewire/volt": "^1.6.7",
2424
"codeat3/blade-phosphor-icons": "^2.0",
2525
"devdojo/config-writer": "^0.0.7",
2626
"laravel/socialite": "^5.0",
@@ -31,8 +31,8 @@
3131
"require-dev": {
3232
"laravel/pint": "^1.15",
3333
"orchestra/testbench": "^9.0",
34-
"pestphp/pest": "^2.34",
35-
"pestphp/pest-plugin-laravel": "^2.4",
34+
"pestphp/pest": "^3.7",
35+
"pestphp/pest-plugin-laravel": "^3.1",
3636
"larastan/larastan": "^2.0",
3737
"phpstan/phpstan": "^1.11",
3838
"laravel/dusk": "^8.2",

0 commit comments

Comments
 (0)