38
38
CC : ccache gcc
39
39
CXX : ccache g++
40
40
jobs :
41
- LINUX_X64 :
42
- if : github.repository == 'php/php-src' || github.event_name == 'pull_request'
43
- services :
44
- mysql :
45
- image : mysql:8.3
46
- ports :
47
- - 3306:3306
48
- env :
49
- MYSQL_DATABASE : test
50
- MYSQL_ROOT_PASSWORD : root
51
- postgres :
52
- image : postgres
53
- ports :
54
- - 5432:5432
55
- env :
56
- POSTGRES_USER : postgres
57
- POSTGRES_PASSWORD : postgres
58
- POSTGRES_DB : test
59
- firebird :
60
- image : jacobalberty/firebird
61
- ports :
62
- - 3050:3050
63
- env :
64
- ISC_PASSWORD : test
65
- FIREBIRD_DATABASE : test.fdb
66
- FIREBIRD_USER : test
67
- FIREBIRD_PASSWORD : test
68
- strategy :
69
- fail-fast : false
70
- matrix :
71
- include :
72
- - debug : false
73
- zts : false
74
- asan : false
75
- - debug : true
76
- zts : true
77
- asan : true
78
- name : " LINUX_X64_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}${{ matrix.asan && '_ASAN' || '' }}"
79
- runs-on : ubuntu-${{ !matrix.asan && '22' || '20' }}.04
80
- container :
81
- image : ${{ matrix.asan && 'ubuntu:23.04' || null }}
82
- steps :
83
- - name : git checkout
84
- uses : actions/checkout@v4
85
- - name : apt
86
- uses : ./.github/actions/apt-x64
87
- - name : LLVM 16 (ASAN-only)
88
- if : ${{ matrix.asan }}
89
- run : |
90
- DEBIAN_FRONTEND=noninteractive sudo apt-get install -y lsb-release wget software-properties-common gnupg
91
- wget https://apt.llvm.org/llvm.sh
92
- chmod u+x llvm.sh
93
- sudo ./llvm.sh 16
94
- - name : System info
95
- run : |
96
- echo "::group::Show host CPU info"
97
- lscpu
98
- echo "::endgroup::"
99
- echo "::group::Show installed package versions"
100
- dpkg -l
101
- echo "::endgroup::"
102
- - name : Create MSSQL container
103
- if : ${{ !matrix.asan }}
104
- uses : ./.github/actions/setup-mssql
105
- - name : Setup Caddy server
106
- uses : ./.github/actions/setup-caddy
107
- - name : ccache
108
- uses : hendrikmuhs/ccache-action@v1.2
109
- with :
110
- # This duplicates the "job.name" expression above because
111
- # GitHub has no way to query the job name (github.job is the
112
- # job id, not the job name)
113
- key : " LINUX_X64_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}${{ matrix.asan && '_ASAN' || '' }}-${{hashFiles('main/php_version.h')}}"
114
- append-timestamp : false
115
- save : ${{ github.event_name != 'pull_request' }}
116
- - name : ./configure
117
- uses : ./.github/actions/configure-x64
118
- with :
119
- configurationParameters : >-
120
- --${{ matrix.debug && 'enable' || 'disable' }}-debug
121
- --${{ matrix.zts && 'enable' || 'disable' }}-zts
122
- ${{ matrix.asan && 'CFLAGS="-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC" LDFLAGS="-fsanitize=undefined,address" CC=clang-16 CXX=clang++-16' || '' }}
123
- skipSlow : ${{ matrix.asan }}
124
- - name : make
125
- run : make -j$(/usr/bin/nproc) >/dev/null
126
- - name : make install
127
- uses : ./.github/actions/install-linux
128
- - name : Setup
129
- if : ${{ !matrix.asan }}
130
- uses : ./.github/actions/setup-x64
131
- - name : Test
132
- if : matrix.asan == false
133
- uses : ./.github/actions/test-linux
134
- - name : Test Tracing JIT
135
- uses : ./.github/actions/test-linux
136
- with :
137
- jitType : tracing
138
- runTestsParameters : >-
139
- -d zend_extension=opcache.so
140
- -d opcache.enable_cli=1
141
- ${{ matrix.asan && '--asan -x' || '' }}
142
- - name : Verify generated files are up to date
143
- if : ${{ !matrix.asan }}
144
- uses : ./.github/actions/verify-generated-files
145
- LINUX_X32 :
146
- if : github.repository == 'php/php-src' || github.event_name == 'pull_request'
147
- name : LINUX_X32_DEBUG_ZTS
148
- runs-on : ubuntu-latest
149
- container :
150
- image : ubuntu:20.04
151
- env :
152
- MYSQL_TEST_HOST : mysql
153
- PDO_MYSQL_TEST_DSN : mysql:host=mysql;dbname=test
154
- PDO_MYSQL_TEST_HOST : mysql
155
- services :
156
- mysql :
157
- image : mysql:8.3
158
- ports :
159
- - 3306:3306
160
- env :
161
- MYSQL_DATABASE : test
162
- MYSQL_ROOT_PASSWORD : root
163
- steps :
164
- - name : git checkout
165
- uses : actions/checkout@v4
166
- - name : apt
167
- uses : ./.github/actions/apt-x32
168
- - name : ccache
169
- uses : hendrikmuhs/ccache-action@v1.2
170
- with :
171
- key : " ${{github.job}}-${{hashFiles('main/php_version.h')}}"
172
- append-timestamp : false
173
- - name : ./configure
174
- uses : ./.github/actions/configure-x32
175
- with :
176
- configurationParameters : >-
177
- --enable-debug
178
- --enable-zts
179
- - name : make
180
- run : make -j$(/usr/bin/nproc) >/dev/null
181
- - name : make install
182
- uses : ./.github/actions/install-linux-x32
183
- - name : Test Tracing JIT
184
- uses : ./.github/actions/test-linux
185
- with :
186
- jitType : tracing
187
- runTestsParameters : >-
188
- -d zend_extension=opcache.so
189
- -d opcache.enable_cli=1
190
- MACOS_DEBUG_NTS :
191
- if : github.repository == 'php/php-src' || github.event_name == 'pull_request'
192
- strategy :
193
- fail-fast : false
194
- matrix :
195
- include :
196
- - os : 13
197
- arch : X64
198
- - os : 14
199
- arch : ARM64
200
- name : MACOS_${{ matrix.arch }}_DEBUG_NTS
201
- runs-on : macos-${{ matrix.os }}
202
- steps :
203
- - name : git checkout
204
- uses : actions/checkout@v4
205
- - name : brew
206
- uses : ./.github/actions/brew
207
- - name : ccache
208
- uses : hendrikmuhs/ccache-action@v1.2
209
- with :
210
- key : " ${{github.job}}-${{matrix.os}}-${{hashFiles('main/php_version.h')}}"
211
- append-timestamp : false
212
- save : ${{ github.event_name != 'pull_request' }}
213
- - name : ./configure
214
- uses : ./.github/actions/configure-macos
215
- with :
216
- configurationParameters : --enable-debug --disable-zts
217
- - name : make
218
- run : |-
219
- export PATH="$(brew --prefix)/opt/bison/bin:$PATH"
220
- make -j$(sysctl -n hw.logicalcpu) >/dev/null
221
- - name : make install
222
- run : sudo make install
223
- - name : Test Tracing JIT
224
- uses : ./.github/actions/test-macos
225
- with :
226
- jitType : tracing
227
- runTestsParameters : >-
228
- -d zend_extension=opcache.so
229
- -d opcache.enable_cli=1
230
- - name : Verify generated files are up to date
231
- uses : ./.github/actions/verify-generated-files
232
41
WINDOWS :
233
42
if : github.repository == 'php/php-src' || github.event_name == 'pull_request'
234
43
name : WINDOWS_X64_ZTS
@@ -255,109 +64,3 @@ jobs:
255
64
run : .github/scripts/windows/build.bat
256
65
- name : Test
257
66
run : .github/scripts/windows/test.bat
258
- BENCHMARKING :
259
- name : BENCHMARKING
260
- if : github.repository == 'php/php-src' || github.event_name == 'pull_request'
261
- runs-on : ubuntu-22.04
262
- steps :
263
- - name : git checkout
264
- uses : actions/checkout@v4
265
- with :
266
- fetch-depth : 0
267
- # ASLR can cause a lot of noise due to missed sse opportunities for memcpy
268
- # and other operations, so we disable it during benchmarking.
269
- - name : Disable ASLR
270
- run : echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
271
- - name : apt
272
- run : |
273
- set -x
274
- sudo apt-get update
275
- sudo apt-get install \
276
- bison \
277
- libgmp-dev \
278
- libonig-dev \
279
- libsqlite3-dev \
280
- openssl \
281
- re2c \
282
- valgrind
283
- - name : ccache
284
- uses : hendrikmuhs/ccache-action@v1.2
285
- with :
286
- key : " ${{github.job}}-${{hashFiles('main/php_version.h')}}"
287
- append-timestamp : false
288
- save : ${{ github.event_name != 'pull_request' }}
289
- - name : ./configure
290
- run : |
291
- set -x
292
- ./buildconf --force
293
- ./configure \
294
- --disable-debug \
295
- --enable-mbstring \
296
- --enable-opcache \
297
- --enable-option-checking=fatal \
298
- --enable-sockets \
299
- --enable-werror \
300
- --prefix=/usr \
301
- --with-config-file-scan-dir=/etc/php.d \
302
- --with-gmp \
303
- --with-mysqli=mysqlnd \
304
- --with-openssl \
305
- --with-pdo-sqlite \
306
- --with-valgrind
307
- - name : make
308
- run : make -j$(/usr/bin/nproc) >/dev/null
309
- - name : make install
310
- run : |
311
- set -x
312
- sudo make install
313
- sudo mkdir -p /etc/php.d
314
- sudo chmod 777 /etc/php.d
315
- echo mysqli.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/mysqli.ini
316
- echo zend_extension=opcache.so >> /etc/php.d/opcache.ini
317
- echo opcache.enable=1 >> /etc/php.d/opcache.ini
318
- echo opcache.enable_cli=1 >> /etc/php.d/opcache.ini
319
- - name : Setup
320
- run : |
321
- git config --global user.name "Benchmark"
322
- git config --global user.email "benchmark@php.net"
323
- sudo service mysql start
324
- mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS wordpress"
325
- mysql -uroot -proot -e "CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress'; FLUSH PRIVILEGES;"
326
- mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'wordpress'@'localhost' WITH GRANT OPTION;"
327
- - name : git checkout benchmarking-data
328
- uses : actions/checkout@v4
329
- with :
330
- repository : php/benchmarking-data
331
- ssh-key : ${{ secrets.BENCHMARKING_DATA_DEPLOY_KEY }}
332
- path : benchmark/repos/data
333
- - name : Benchmark
334
- run : php benchmark/benchmark.php true
335
- - name : Store result
336
- if : github.event_name == 'push'
337
- run : |
338
- set -x
339
- cd benchmark/repos/data
340
- git pull --autostash
341
- if [ -e ".git/MERGE_HEAD" ]; then
342
- echo "Merging, can't proceed"
343
- exit 1
344
- fi
345
- git add .
346
- if git diff --cached --quiet; then
347
- exit 0
348
- fi
349
- git commit -m "Add result for ${{ github.repository }}@${{ github.sha }}"
350
- git push
351
- - name : Show diff
352
- if : github.event_name == 'pull_request'
353
- run : |-
354
- set -x
355
- php benchmark/generate_diff.php \
356
- ${{ github.sha }} \
357
- $(git merge-base ${{ github.event.pull_request.base.sha }} ${{ github.sha }}) \
358
- > $GITHUB_STEP_SUMMARY
359
- - uses : actions/upload-artifact@v4
360
- with :
361
- name : profiles
362
- path : ${{ github.workspace }}/benchmark/profiles
363
- retention-days : 30
0 commit comments