9
9
jobs :
10
10
test :
11
11
runs-on : ubuntu-latest
12
+ strategy :
13
+ matrix :
14
+ php-version : ['8.2', '8.3', '8.4']
12
15
13
16
steps :
14
17
- uses : actions/checkout@v2
15
18
16
19
- name : Setup PHP
17
20
uses : shivammathur/setup-php@v2
18
21
with :
19
- php-version : ' 8.2 '
22
+ php-version : ${{ matrix.php-version }}
20
23
extensions : mbstring, xml, ctype, iconv, mysql, imagick
21
24
22
25
- name : Cache Composer Packages
23
26
uses : actions/cache@v2
24
27
with :
25
28
path : ~/.composer/cache
26
- key : ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
29
+ key : ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.php-version }}
27
30
restore-keys : |
28
- ${{ runner.os }}-composer-git
31
+ ${{ runner.os }}-composer-git-${{ matrix.php-version }}
29
32
30
33
- 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
32
35
33
36
- name : Extract branch name
34
37
shell : bash
@@ -37,86 +40,120 @@ jobs:
37
40
38
41
- name : Install DevDojo Auth from current branch
39
42
run : " composer require devdojo/auth:dev-${{ env.branch }} --with-all-dependencies"
40
- working-directory : ./laravel_app
43
+ working-directory : ./laravel_app_${{ matrix.php-version }}
41
44
42
45
- name : Publish the DevDojo Auth Assets
43
46
run : php artisan vendor:publish --tag=auth:assets
44
- working-directory : ./laravel_app
47
+ working-directory : ./laravel_app_${{ matrix.php-version }}
45
48
46
49
- name : Publish the DevDojo Configs
47
50
run : php artisan vendor:publish --tag=auth:config
48
- working-directory : ./laravel_app
49
-
51
+ working-directory : ./laravel_app_${{ matrix.php-version }}
52
+
50
53
- name : Publish the DevDojo Auth Migrations
51
54
run : php artisan vendor:publish --tag=auth:migrations
52
- working-directory : ./laravel_app
55
+ working-directory : ./laravel_app_${{ matrix.php-version }}
53
56
54
57
- name : Remove current tests and symlink to DevDojo Auth
55
58
run : |
56
59
rm -rf tests
57
60
ln -s vendor/devdojo/auth/tests tests
58
- working-directory : ./laravel_app
61
+ working-directory : ./laravel_app_${{ matrix.php-version }}
59
62
60
63
- 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 }}
63
66
64
67
- name : Updating values in the .env
65
68
run : |
66
69
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 }}
69
72
70
73
- name : Include Doctrine DBAL Package
71
74
run : composer require doctrine/dbal
72
- working-directory : ./laravel_app
75
+ working-directory : ./laravel_app_${{ matrix.php-version }}
73
76
74
77
- name : Run the migrations
75
78
run : php artisan migrate
76
- working-directory : ./laravel_app
79
+ working-directory : ./laravel_app_${{ matrix.php-version }}
77
80
78
- - name : Clean up composer.json - Remove PHPUnit & trailing commas
81
+ - name : Clean up composer.json - Remove PHPUnit & fix JSON format
79
82
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 }}
85
112
86
113
- name : Validate composer.json format
87
114
run : |
88
115
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 }}
90
117
91
118
- name : Remove composer.lock and re-run composer install
92
119
run : |
93
120
rm composer.lock
94
121
composer install
95
- working-directory : ./laravel_app
122
+ working-directory : ./laravel_app_${{ matrix.php-version }}
96
123
97
124
- name : Install PestPHP, PHPStan, Dusk, and Dusk API Conf
98
125
run : |
99
126
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
101
128
composer require laravel/dusk --dev --with-all-dependencies
102
129
composer require alebatistella/duskapiconf --dev --with-all-dependencies
103
130
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
105
142
106
143
- name : Start Chrome Driver and PHP Server
107
144
run : |
108
145
php artisan dusk:chrome-driver --detect &
109
146
./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 }}
112
149
113
150
- name : Run Tests
114
151
run : ./vendor/bin/pest
115
- working-directory : ./laravel_app
152
+ working-directory : ./laravel_app_${{ matrix.php-version }}
116
153
117
154
- name : Run Dusk Tests
118
155
env :
119
- APP_URL : http://127.0.0.1:8000
156
+ APP_URL : " http://127.0.0.1:${{ env.SERVER_PORT }} "
120
157
APP_ENV : testing
121
158
run : php artisan dusk -vvv
122
- working-directory : ./laravel_app
159
+ working-directory : ./laravel_app_${{ matrix.php-version }}
0 commit comments