-
Notifications
You must be signed in to change notification settings - Fork 59
159 lines (130 loc) · 5.81 KB
/
Copy pathtests.yml
File metadata and controls
159 lines (130 loc) · 5.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
name: Authentication Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
php-version: ['8.2', '8.3', '8.4']
steps:
- uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
extensions: mbstring, xml, ctype, iconv, mysql, imagick
- name: Cache Composer Packages
uses: actions/cache@v4
with:
path: ~/.composer/cache
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.php-version }}
restore-keys: |
${{ runner.os }}-composer-git-${{ matrix.php-version }}
- name: Setup Laravel Application
run: composer create-project --prefer-dist laravel/laravel laravel_app_${{ matrix.php-version }} --no-interaction
- name: Extract branch name
shell: bash
run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_ENV
id: extract_branch
- name: Install DevDojo Auth from current branch
run: "composer require devdojo/auth:dev-${{ env.branch }} --with-all-dependencies"
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Publish the DevDojo Auth Assets
run: php artisan vendor:publish --tag=auth:assets
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Publish the DevDojo Configs
run: php artisan vendor:publish --tag=auth:config
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Publish the DevDojo Auth Migrations
run: php artisan vendor:publish --tag=auth:migrations
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Remove current tests and symlink to DevDojo Auth
run: |
rm -rf tests
ln -s vendor/devdojo/auth/tests tests
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Create sqlite file
run: touch database/database_${{ matrix.php-version }}.sqlite
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Updating values in the .env
run: |
sed -i 's/DB_CONNECTION=mysql/DB_CONNECTION=sqlite/' .env
sed -i 's/^DB_DATABASE=laravel/DB_DATABASE=database\/database_${{ matrix.php-version }}.sqlite/' .env
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Include Doctrine DBAL Package
run: composer require doctrine/dbal
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Run the migrations
run: php artisan migrate
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Clean up composer.json - Remove PHPUnit & fix JSON format
run: |
# Create a backup
cp composer.json composer.json.bak
# Use PHP to properly parse, modify and re-encode the JSON
php -r '
// Read and decode the composer.json
$composerJson = json_decode(file_get_contents("composer.json"), true);
if (!$composerJson) {
echo "Failed to decode composer.json: " . json_last_error_msg() . "\n";
exit(1);
}
// Remove phpunit if it exists in require-dev
if (isset($composerJson["require-dev"]["phpunit/phpunit"])) {
unset($composerJson["require-dev"]["phpunit/phpunit"]);
}
// Write back with proper JSON formatting
file_put_contents(
"composer.json",
json_encode($composerJson, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
);
echo "composer.json cleaned and reformatted successfully\n";
'
# Verify the JSON is valid
php -r 'echo json_decode(file_get_contents("composer.json")) ? "JSON is valid\n" : "JSON is invalid: " . json_last_error_msg() . "\n";'
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Validate composer.json format
run: |
php -r 'if (!json_decode(file_get_contents("composer.json"))) { echo "JSON error: " . json_last_error_msg(); exit(1); }'
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Remove composer.lock and re-run composer install
run: |
rm composer.lock
composer install
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Install PestPHP, PHPStan, Dusk, and Dusk API Conf
run: |
composer require pestphp/pest --dev --with-all-dependencies
composer require larastan/larastan:^3.1 --dev --with-all-dependencies
composer require laravel/dusk --dev --with-all-dependencies
composer require alebatistella/duskapiconf --dev --with-all-dependencies
composer require protonemedia/laravel-dusk-fakes:^1.6 --dev --with-all-dependencies
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Set port number based on PHP version
run: |
if [[ "${{ matrix.php-version }}" == "8.2" ]]; then
echo "SERVER_PORT=8000" >> $GITHUB_ENV
elif [[ "${{ matrix.php-version }}" == "8.3" ]]; then
echo "SERVER_PORT=8001" >> $GITHUB_ENV
else
echo "SERVER_PORT=8002" >> $GITHUB_ENV
fi
- name: Start Chrome Driver and PHP Server
run: |
php artisan dusk:chrome-driver --detect &
./vendor/laravel/dusk/bin/chromedriver-linux &
php artisan serve --port=${{ env.SERVER_PORT }} --no-reload &
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Run Tests
run: ./vendor/bin/pest
working-directory: ./laravel_app_${{ matrix.php-version }}
- name: Run Dusk Tests
env:
APP_URL: "http://127.0.0.1:${{ env.SERVER_PORT }}"
APP_ENV: testing
run: php artisan dusk -vvv
working-directory: ./laravel_app_${{ matrix.php-version }}