@@ -16,18 +16,27 @@ jobs:
1616 matrix :
1717 laravel : [ 10, 11, 12 ]
1818 php : [ 8.2, 8.3, 8.4 ]
19- include :
20- # Laravel 12: PHP 8.2–8.4
21- - laravel : 12
22- php : 8.2
23- - laravel : 12
24- php : 8.3
25- - laravel : 12
26- php : 8.4
19+ db_engine : [ mysql, pgsql, sqlsrv ]
20+ mysql : [ 5.7, 8.0 ]
21+
22+ # Excludes (verhindern ungültige Kombinationen)
2723 exclude :
24+ # Kein PHP 8.4 mit Laravel 10 (bisher ausgeschlossen)
2825 - laravel : 10
2926 php : 8.4
30- mysql : [ 5.7, 8.0 ]
27+ db_engine : mysql
28+ mysql : 5.7
29+ - laravel : 10
30+ php : 8.4
31+ db_engine : mysql
32+ mysql : 8.0
33+ # MSSQL nur mit Laravel 12 und PHP 8.2-8.4 (zum Beispiel)
34+ - laravel : 10
35+ db_engine : sqlsrv
36+ - laravel : 11
37+ db_engine : sqlsrv
38+
39+ name : Laravel ${{ matrix.laravel }} / PHP ${{ matrix.php }} / DB ${{ matrix.db_engine }} ${{ matrix.mysql || '' }}
3140
3241 services :
3342 mysql :
@@ -37,19 +46,39 @@ jobs:
3746 env :
3847 MYSQL_ALLOW_EMPTY_PASSWORD : ' yes'
3948 MYSQL_DATABASE : testing
40- options : >-
41- --health-cmd="mysqladmin ping --silent"
42- --health-interval=10s
43- --health-timeout=5s
44- --health-retries=3
45-
46- name : Laravel ${{ matrix.laravel }} / PHP ${{ matrix.php }} / MySQL ${{ matrix.mysql }}
47- env :
48- DB_HOST : 127.0.0.1
49- DB_PORT : 3306
50- DB_DATABASE : testing
51- DB_USERNAME : root
52- DB_PASSWORD : ' '
49+ options : >-
50+ --health-cmd="mysqladmin ping --silent"
51+ --health-interval=10s
52+ --health-timeout=5s
53+ --health-retries=3
54+
55+ postgres :
56+ image : postgres:15
57+ ports :
58+ - 5432:5432
59+ env :
60+ POSTGRES_DB : testing
61+ POSTGRES_USER : postgres
62+ POSTGRES_PASSWORD : ' '
63+ options : >-
64+ --health-cmd="pg_isready -U postgres"
65+ --health-interval=10s
66+ --health-timeout=5s
67+ --health-retries=3
68+
69+ mssql :
70+ image : mcr.microsoft.com/mssql/server:2022-latest
71+ ports :
72+ - 1433:1433
73+ env :
74+ ACCEPT_EULA : Y
75+ SA_PASSWORD : Passw0rd1234!
76+ MSSQL_PID : Express
77+ options : >-
78+ --health-cmd="exit 0"
79+ --health-interval=10s
80+ --health-timeout=5s
81+ --health-retries=3
5382
5483 steps :
5584 - uses : actions/checkout@v4
@@ -58,36 +87,64 @@ jobs:
5887 uses : shivammathur/setup-php@v2
5988 with :
6089 php-version : ${{ matrix.php }}
61- extensions : >
62- mbstring,
63- pdo_mysql,
64- zip,
65- exif,
66- intl,
67- gd,
68- bcmath,
69- curl,
70- dom,
71- xdebug
90+ extensions : mbstring, pdo_mysql, pdo_pgsql, pdo_sqlsrv, zip, exif, intl, gd, bcmath, curl, dom, xdebug
7291 coverage : xdebug
7392
7493 - name : Debug info
7594 run : |
7695 php -v
7796 composer --version
7897 mysql --version || true
98+ psql --version || true
99+ /opt/mssql-tools/bin/sqlcmd -? || true
79100
80- - name : Wait for MySQL
101+ - name : Set DB env variables
81102 run : |
82- echo "Waiting for MySQL..."
83- for i in {30..0}; do
84- if mysqladmin ping -h 127.0.0.1 --silent; then
85- echo "MySQL is ready"
86- break
87- fi
88- echo "Waiting for MySQL ($i)..."
89- sleep 1
90- done
103+ if [[ "${{ matrix.db_engine }}" == "mysql" ]]; then
104+ echo "DB_HOST=127.0.0.1" >> $GITHUB_ENV
105+ echo "DB_PORT=3306" >> $GITHUB_ENV
106+ echo "DB_USERNAME=root" >> $GITHUB_ENV
107+ echo "DB_PASSWORD=" >> $GITHUB_ENV
108+ echo "DB_DATABASE=testing" >> $GITHUB_ENV
109+ elif [[ "${{ matrix.db_engine }}" == "pgsql" ]]; then
110+ echo "DB_HOST=127.0.0.1" >> $GITHUB_ENV
111+ echo "DB_PORT=5432" >> $GITHUB_ENV
112+ echo "DB_USERNAME=postgres" >> $GITHUB_ENV
113+ echo "DB_PASSWORD=" >> $GITHUB_ENV
114+ echo "DB_DATABASE=testing" >> $GITHUB_ENV
115+ elif [[ "${{ matrix.db_engine }}" == "sqlsrv" ]]; then
116+ echo "DB_HOST=127.0.0.1" >> $GITHUB_ENV
117+ echo "DB_PORT=1433" >> $GITHUB_ENV
118+ echo "DB_USERNAME=SA" >> $GITHUB_ENV
119+ echo "DB_PASSWORD=Passw0rd1234!" >> $GITHUB_ENV
120+ echo "DB_DATABASE=testing" >> $GITHUB_ENV
121+ fi
122+
123+ - name : Wait for DB service
124+ run : |
125+ if [[ "${{ matrix.db_engine }}" == "mysql" ]]; then
126+ for i in {30..0}; do
127+ if mysqladmin ping -h 127.0.0.1 --silent; then
128+ echo "MySQL is ready"
129+ break
130+ fi
131+ echo "Waiting for MySQL ($i)..."
132+ sleep 1
133+ done
134+ elif [[ "${{ matrix.db_engine }}" == "pgsql" ]]; then
135+ for i in {30..0}; do
136+ if pg_isready -h 127.0.0.1 -U postgres; then
137+ echo "Postgres is ready"
138+ break
139+ fi
140+ echo "Waiting for Postgres ($i)..."
141+ sleep 1
142+ done
143+ elif [[ "${{ matrix.db_engine }}" == "sqlsrv" ]]; then
144+ # MSSQL health check not straightforward, wait fixed time
145+ echo "Waiting 30 seconds for MSSQL to start..."
146+ sleep 30
147+ fi
91148
92149 - name : Adjust Laravel/Testbench version per matrix
93150 run : |
0 commit comments