#59: TrueAsync API performance optimization: void→bool refactoring #79
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: True Async Ubuntu Speed Test | |
on: | |
pull_request: | |
branches: [main] | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
services: | |
mysql: | |
image: mysql:8.3 | |
env: | |
MYSQL_ROOT_PASSWORD: '' | |
MYSQL_ALLOW_EMPTY_PASSWORD: yes | |
MYSQL_DATABASE: test | |
ports: ['3306:3306'] | |
options: >- | |
--health-cmd="mysqladmin ping --silent" | |
--health-interval=10s | |
--health-timeout=5s | |
--health-retries=5 | |
postgres: | |
image: postgres:16 | |
env: | |
POSTGRES_PASSWORD: postgres | |
POSTGRES_DB: test | |
ports: ['5432:5432'] | |
options: >- | |
--health-cmd="pg_isready" | |
--health-interval=10s | |
--health-timeout=5s | |
--health-retries=5 | |
steps: | |
- name: Checkout php-async repo | |
uses: actions/checkout@v4 | |
with: | |
path: async | |
- name: Clone php-src (true-async-stable) | |
run: | | |
git clone --depth=1 --branch=true-async-stable https://github.com/true-async/php-src php-src | |
- name: Copy php-async extension into php-src | |
run: | | |
mkdir -p php-src/ext/async | |
cp -r async/* php-src/ext/async/ | |
# Cache APT packages to speed up dependency installation | |
- name: Cache APT packages | |
uses: actions/cache@v4 | |
with: | |
path: /var/cache/apt/archives | |
key: ${{ runner.os }}-apt-packages-${{ hashFiles('.github/workflows/build.yml') }} | |
restore-keys: | | |
${{ runner.os }}-apt-packages- | |
- name: Install build dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y \ | |
gcc g++ autoconf bison re2c \ | |
libgmp-dev libicu-dev libtidy-dev libsasl2-dev \ | |
libzip-dev libbz2-dev libsqlite3-dev libonig-dev libcurl4-openssl-dev \ | |
libxml2-dev libxslt1-dev libpq-dev libreadline-dev libldap2-dev libsodium-dev \ | |
libargon2-dev \ | |
firebird-dev \ | |
valgrind cmake | |
# Cache LibUV 1.45.0 installation to avoid rebuilding | |
- name: Cache LibUV 1.45.0 | |
id: cache-libuv | |
uses: actions/cache@v4 | |
with: | |
path: | | |
/usr/local/lib/libuv* | |
/usr/local/include/uv* | |
/usr/local/lib/pkgconfig/libuv.pc | |
key: ${{ runner.os }}-libuv-1.45.0-release | |
- name: Install LibUV >= 1.45.0 | |
run: | | |
# Check if we have cached LibUV 1.45.0 | |
if [ "${{ steps.cache-libuv.outputs.cache-hit }}" == "true" ]; then | |
echo "Using cached LibUV 1.45.0 installation" | |
sudo ldconfig | |
echo "LibUV version: $(pkg-config --modversion libuv)" | |
# Check if system libuv meets requirements | |
elif pkg-config --exists libuv && pkg-config --atleast-version=1.45.0 libuv; then | |
echo "System libuv version: $(pkg-config --modversion libuv)" | |
sudo apt-get install -y libuv1-dev | |
else | |
echo "Installing LibUV 1.45.0 from source" | |
wget https://github.com/libuv/libuv/archive/v1.45.0.tar.gz | |
tar -xzf v1.45.0.tar.gz | |
cd libuv-1.45.0 | |
mkdir build && cd build | |
cmake .. -DCMAKE_BUILD_TYPE=Release | |
make -j$(nproc) | |
sudo make install | |
sudo ldconfig | |
cd ../.. | |
echo "LibUV 1.45.0 compiled and installed" | |
fi | |
- name: Configure PHP | |
working-directory: php-src | |
run: | | |
./buildconf -f | |
./configure \ | |
--enable-zts \ | |
--enable-fpm \ | |
--with-pdo-mysql=mysqlnd \ | |
--with-mysqli=mysqlnd \ | |
--with-pgsql \ | |
--with-pdo-pgsql \ | |
--with-pdo-sqlite \ | |
--enable-intl \ | |
--without-pear \ | |
--with-zip \ | |
--with-zlib \ | |
--enable-soap \ | |
--enable-xmlreader \ | |
--with-xsl \ | |
--with-tidy \ | |
--enable-sysvsem \ | |
--enable-sysvshm \ | |
--enable-shmop \ | |
--enable-pcntl \ | |
--with-readline \ | |
--enable-mbstring \ | |
--with-curl \ | |
--with-gettext \ | |
--enable-sockets \ | |
--with-bz2 \ | |
--with-openssl \ | |
--with-gmp \ | |
--enable-bcmath \ | |
--enable-calendar \ | |
--enable-ftp \ | |
--enable-sysvmsg \ | |
--with-ffi \ | |
--enable-zend-test \ | |
--enable-dl-test=shared \ | |
--with-ldap \ | |
--with-ldap-sasl \ | |
--with-password-argon2 \ | |
--with-mhash \ | |
--with-sodium \ | |
--enable-dba \ | |
--with-cdb \ | |
--enable-flatfile \ | |
--enable-inifile \ | |
--with-config-file-path=/etc \ | |
--with-config-file-scan-dir=/etc/php.d \ | |
--with-pdo-firebird \ | |
--enable-address-sanitizer \ | |
--enable-async | |
- name: Build PHP | |
working-directory: php-src | |
run: | | |
make -j"$(nproc)" | |
sudo make install | |
sudo mkdir -p /etc/php.d | |
sudo chmod 777 /etc/php.d | |
{ | |
echo "opcache.enable_cli=1" | |
echo "opcache.protect_memory=1" | |
} > /etc/php.d/opcache.ini | |
- name: Run tests | |
working-directory: php-src/ext/async | |
run: | | |
/usr/local/bin/php -v | |
/usr/local/bin/php ../../run-tests.php \ | |
-d opcache.enable_cli=1 \ | |
-d opcache.jit_buffer_size=64M \ | |
-d opcache.jit=tracing \ | |
-d zend_test.observer.enabled=1 \ | |
-d zend_test.observer.show_output=0 \ | |
-P -q -x -j4 \ | |
-g FAIL,BORK,LEAK,XLEAK \ | |
--no-progress \ | |
--offline \ | |
--show-diff \ | |
--show-slow 4000 \ | |
--set-timeout 120 \ | |
--repeat 2 |