Skip to content

Commit 21dae99

Browse files
committed
% update CI
1 parent 686d5f6 commit 21dae99

File tree

2 files changed

+313
-179
lines changed

2 files changed

+313
-179
lines changed
Lines changed: 310 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,310 @@
1+
name: Cross-Platform Build
2+
3+
on:
4+
push:
5+
branches: [build]
6+
pull_request:
7+
branches: [build]
8+
9+
jobs:
10+
build:
11+
strategy:
12+
fail-fast: false
13+
matrix:
14+
os: [ubuntu-latest, windows-latest, macos-latest]
15+
include:
16+
- os: ubuntu-latest
17+
platform: linux
18+
- os: windows-latest
19+
platform: windows
20+
- os: macos-latest
21+
platform: macos
22+
23+
runs-on: ${{ matrix.os }}
24+
25+
26+
steps:
27+
- name: Checkout php-async repo
28+
uses: actions/checkout@v4
29+
with:
30+
path: async
31+
32+
- name: Clone php-src (true-async-stable)
33+
run: |
34+
git clone --depth=1 --branch=true-async-stable https://github.com/true-async/php-src php-src
35+
36+
- name: Copy php-async extension into php-src
37+
run: |
38+
mkdir -p php-src/ext/async
39+
cp -r async/* php-src/ext/async/
40+
41+
# ==================== UBUNTU DEPENDENCIES ====================
42+
- name: Install build dependencies (Ubuntu)
43+
if: matrix.os == 'ubuntu-latest'
44+
run: |
45+
sudo apt-get update
46+
sudo apt-get install -y \
47+
gcc g++ autoconf bison re2c \
48+
libgmp-dev libicu-dev libtidy-dev libenchant-2-dev \
49+
libzip-dev libbz2-dev libsqlite3-dev libwebp-dev libonig-dev libcurl4-openssl-dev \
50+
libxml2-dev libxslt1-dev libreadline-dev libsodium-dev \
51+
libargon2-dev libjpeg-dev libpng-dev libfreetype6-dev libuv1-dev
52+
g++ --version
53+
sudo mkdir -p /var/lib/snmp && sudo chown $(id -u):$(id -g) /var/lib/snmp
54+
55+
# ==================== WINDOWS DEPENDENCIES ====================
56+
- name: Install build dependencies (Windows)
57+
if: matrix.os == 'windows-latest'
58+
run: |
59+
# Install php-sdk
60+
git clone https://github.com/Microsoft/php-sdk-binary-tools.git C:\php-sdk
61+
62+
# Install vcpkg and LibUV
63+
git clone https://github.com/Microsoft/vcpkg.git C:\vcpkg
64+
C:\vcpkg\bootstrap-vcpkg.bat
65+
C:\vcpkg\vcpkg.exe install libuv:x64-windows
66+
67+
# Create deps structure for php-sdk
68+
mkdir C:\php-sdk\deps\include\libuv
69+
mkdir C:\php-sdk\deps\lib
70+
71+
# Copy LibUV files
72+
xcopy /E /I C:\vcpkg\installed\x64-windows\include C:\php-sdk\deps\include\libuv\
73+
copy C:\vcpkg\installed\x64-windows\lib\uv.lib C:\php-sdk\deps\lib\libuv.lib
74+
shell: cmd
75+
76+
# ==================== MACOS DEPENDENCIES ====================
77+
- name: Install build dependencies (macOS)
78+
if: matrix.os == 'macos-latest'
79+
run: |
80+
# Core build tools
81+
brew install autoconf automake libtool pkg-config bison
82+
83+
# LibUV - main dependency
84+
brew install libuv
85+
86+
# Fixed package names
87+
brew install tidy-html5 icu4c openssl@3
88+
89+
# Additional dependencies
90+
brew install gmp libzip bzip2 sqlite oniguruma curl
91+
brew install libxml2 libxslt readline libsodium argon2
92+
93+
# Setup environment variables for keg-only packages
94+
echo "PKG_CONFIG_PATH=$(brew --prefix openssl@3)/lib/pkgconfig:$(brew --prefix icu4c)/lib/pkgconfig:$(brew --prefix libxml2)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
95+
echo "PATH=$(brew --prefix bison)/bin:$PATH" >> $GITHUB_ENV
96+
97+
# ==================== UBUNTU CONFIGURE & BUILD ====================
98+
- name: Configure PHP (Ubuntu)
99+
if: matrix.os == 'ubuntu-latest'
100+
working-directory: php-src
101+
run: |
102+
./buildconf -f
103+
./configure \
104+
--enable-zts \
105+
--enable-option-checking=fatal \
106+
--prefix=/usr \
107+
--disable-phpdbg \
108+
--enable-fpm \
109+
--enable-opcache \
110+
--with-pdo-sqlite \
111+
--enable-intl \
112+
--without-pear \
113+
--enable-gd \
114+
--with-jpeg \
115+
--with-webp \
116+
--with-freetype \
117+
--enable-exif \
118+
--with-zip \
119+
--with-zlib \
120+
--enable-soap \
121+
--enable-xmlreader \
122+
--with-xsl \
123+
--with-tidy \
124+
--enable-sysvsem \
125+
--enable-sysvshm \
126+
--enable-shmop \
127+
--enable-pcntl \
128+
--with-readline \
129+
--enable-mbstring \
130+
--with-curl \
131+
--with-gettext \
132+
--enable-sockets \
133+
--with-bz2 \
134+
--with-openssl \
135+
--with-gmp \
136+
--enable-bcmath \
137+
--enable-calendar \
138+
--enable-ftp \
139+
--with-enchant=/usr \
140+
--enable-sysvmsg \
141+
--with-ffi \
142+
--enable-zend-test \
143+
--enable-dl-test=shared \
144+
--with-password-argon2 \
145+
--with-mhash \
146+
--with-sodium \
147+
--enable-dba \
148+
--with-cdb \
149+
--enable-flatfile \
150+
--enable-inifile \
151+
--with-config-file-path=/etc \
152+
--with-config-file-scan-dir=/etc/php.d \
153+
--enable-async
154+
155+
- name: Build PHP (Ubuntu)
156+
if: matrix.os == 'ubuntu-latest'
157+
working-directory: php-src
158+
run: |
159+
make -j"$(nproc)"
160+
sudo make install
161+
sudo mkdir -p /etc/php.d
162+
sudo chmod 777 /etc/php.d
163+
{
164+
echo "opcache.enable_cli=1"
165+
echo "opcache.protect_memory=1"
166+
} > /etc/php.d/opcache.ini
167+
168+
# ==================== WINDOWS CONFIGURE & BUILD ====================
169+
- name: Configure and Build PHP (Windows)
170+
if: matrix.os == 'windows-latest'
171+
working-directory: php-src
172+
run: |
173+
# Use php-sdk for environment setup and build
174+
call C:\php-sdk\bin\phpsdk_buildtree.bat phpdev
175+
call C:\php-sdk\bin\phpsdk_setvars.bat
176+
buildconf.bat
177+
configure.bat --enable-async
178+
nmake
179+
shell: cmd
180+
181+
# ==================== MACOS CONFIGURE & BUILD ====================
182+
- name: Configure PHP (macOS)
183+
if: matrix.os == 'macos-latest'
184+
working-directory: php-src
185+
run: |
186+
./buildconf -f
187+
./configure \
188+
--enable-zts \
189+
--enable-fpm \
190+
--enable-opcache \
191+
--with-pdo-sqlite \
192+
--enable-intl \
193+
--without-pear \
194+
--with-zip \
195+
--with-zlib \
196+
--enable-soap \
197+
--enable-xmlreader \
198+
--with-xsl \
199+
--with-tidy=$(brew --prefix tidy-html5) \
200+
--enable-sysvsem \
201+
--enable-sysvshm \
202+
--enable-shmop \
203+
--enable-pcntl \
204+
--with-readline \
205+
--enable-mbstring \
206+
--with-curl \
207+
--with-gettext \
208+
--enable-sockets \
209+
--with-bz2 \
210+
--with-openssl=$(brew --prefix openssl@3) \
211+
--with-gmp \
212+
--enable-bcmath \
213+
--enable-calendar \
214+
--enable-ftp \
215+
--enable-sysvmsg \
216+
--with-ffi \
217+
--enable-zend-test \
218+
--enable-dl-test=shared \
219+
--with-password-argon2 \
220+
--with-mhash \
221+
--with-sodium \
222+
--enable-dba \
223+
--with-cdb \
224+
--enable-flatfile \
225+
--enable-inifile \
226+
--with-config-file-path=/usr/local/etc \
227+
--with-config-file-scan-dir=/usr/local/etc/php.d \
228+
--enable-async
229+
230+
- name: Build PHP (macOS)
231+
if: matrix.os == 'macos-latest'
232+
working-directory: php-src
233+
run: |
234+
make -j"$(sysctl -n hw.ncpu)"
235+
sudo make install
236+
sudo mkdir -p /usr/local/etc/php.d
237+
sudo chmod 777 /usr/local/etc/php.d
238+
{
239+
echo "opcache.enable_cli=1"
240+
echo "opcache.protect_memory=1"
241+
} > /usr/local/etc/php.d/opcache.ini
242+
243+
# ==================== TESTING FOR ALL PLATFORMS ====================
244+
- name: Run tests (Ubuntu)
245+
if: matrix.os == 'ubuntu-latest'
246+
working-directory: php-src
247+
env:
248+
MIBS: +ALL
249+
run: |
250+
sapi/cli/php run-tests.php \
251+
-d zend_extension=opcache.so \
252+
-d opcache.enable_cli=1 \
253+
-d opcache.jit_buffer_size=64M \
254+
-d opcache.jit=tracing \
255+
-d zend_test.observer.enabled=1 \
256+
-d zend_test.observer.show_output=0 \
257+
-P -q -x -j2 \
258+
-g FAIL,BORK,LEAK,XLEAK \
259+
--no-progress \
260+
--offline \
261+
--show-diff \
262+
--show-slow 1000 \
263+
--set-timeout 120 \
264+
--repeat 2 \
265+
ext/async
266+
267+
- name: Run tests (Windows)
268+
if: matrix.os == 'windows-latest'
269+
working-directory: php-src
270+
run: |
271+
php.exe -v
272+
php.exe run-tests.php ^
273+
-d zend_extension=opcache.dll ^
274+
-d opcache.enable_cli=1 ^
275+
-d opcache.jit_buffer_size=64M ^
276+
-d opcache.jit=tracing ^
277+
-d zend_test.observer.enabled=1 ^
278+
-d zend_test.observer.show_output=0 ^
279+
-P -q -x -j2 ^
280+
-g FAIL,BORK,LEAK,XLEAK ^
281+
--no-progress ^
282+
--offline ^
283+
--show-diff ^
284+
--show-slow 1000 ^
285+
--set-timeout 120 ^
286+
--repeat 2 ^
287+
ext/async
288+
shell: cmd
289+
290+
- name: Run tests (macOS)
291+
if: matrix.os == 'macos-latest'
292+
working-directory: php-src
293+
run: |
294+
/usr/local/bin/php -v
295+
/usr/local/bin/php run-tests.php \
296+
-d zend_extension=opcache.so \
297+
-d opcache.enable_cli=1 \
298+
-d opcache.jit_buffer_size=64M \
299+
-d opcache.jit=tracing \
300+
-d zend_test.observer.enabled=1 \
301+
-d zend_test.observer.show_output=0 \
302+
-P -q -x -j2 \
303+
-g FAIL,BORK,LEAK,XLEAK \
304+
--no-progress \
305+
--offline \
306+
--show-diff \
307+
--show-slow 1000 \
308+
--set-timeout 120 \
309+
--repeat 2 \
310+
ext/async

0 commit comments

Comments
 (0)