Files
phpredis/.github/workflows/ci.yml
Michael Grunder ece3f7bebc Fix config.m4 when using custom dep paths (#2453)
* We need both PHP_ADD_LIBRARY_WITH_PATH and PHP_ADD_INCLUDE

Fixes #2452

* Add an initial test block for ./configure correctness.
2024-03-04 21:03:01 -08:00

248 lines
9.4 KiB
YAML

on: [push, pull_request]
jobs:
configured-deps:
runs-on: ubuntu-latest
continue-on-error: false
strategy:
fail-fast: true
matrix:
php: ['8.3']
steps:
- name: Checkout PhpRedis
uses: actions/checkout@v4
- name: Install liblzf
run: |
git clone --depth=1 https://github.com/nemequ/liblzf.git
cd liblzf
autoreconf -vi
CFLAGS=-fPIC ./configure --prefix="$GITHUB_WORKSPACE/liblzf"
make install
- name: Install liblz4
run: |
git clone -b v1.9.4 --depth=1 https://github.com/lz4/lz4
cd lz4/lib
PREFIX="$GITHUB_WORKSPACE/liblz4" make install
- name: Install libzstd
run: |
git clone -b v1.5.5 --depth=1 https://github.com/facebook/zstd
cd zstd
PREFIX="$GITHUB_WORKSPACE/libzstd" make install
- name: Install PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: json, igbinary, msgpack, :redis
coverage: none
tools: none
- name: Configure and build PhpRedis with distinct dep paths
run: |
phpize
./configure \
--enable-redis-lz4 \
--with-liblz4="$GITHUB_WORKSPACE/liblz4" \
--enable-redis-lzf \
--with-liblzf="$GITHUB_WORKSPACE/liblzf" \
--enable-redis-zstd \
--with-libzstd="$GITHUB_WORKSPACE/libzstd"
sudo make -j"$(nproc)"
- name: Make sure we're linking against specific liblz4
run: |
grep "INCLUDES.*$GITHUB_WORKSPACE/liblz4" Makefile
grep "REDIS_SHARED_LIBADD.*-L$GITHUB_WORKSPACE/liblz4" Makefile
- name: Make sure we're linking against specific liblzf
run: |
grep "INCLUDES.*$GITHUB_WORKSPACE/liblzf" Makefile
grep "REDIS_SHARED_LIBADD.*-L$GITHUB_WORKSPACE/liblzf" Makefile
- name: Make sure we're linking against specific libzstd
run: |
grep "INCLUDES.*$GITHUB_WORKSPACE/libzstd" Makefile
grep "REDIS_SHARED_LIBADD.*-L$GITHUB_WORKSPACE/libzstd" Makefile
ubuntu:
runs-on: ubuntu-latest
continue-on-error: false
strategy:
fail-fast: false
matrix:
php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- name: Install PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: json, igbinary, msgpack, :redis
coverage: none
tools: none
- name: Install dependencies
run: |
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt --fix-broken install
sudo apt-get install redis valgrind libzstd-dev liblz4-dev
- name: Build phpredis
run: |
phpize
./configure --enable-redis-lzf --enable-redis-zstd --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lz4 --with-liblz4
sudo make -j"$(nproc)" install
echo 'extension = redis.so' | sudo tee -a "$(php --ini | grep 'Scan for additional .ini files' | awk '{print $7}')"/90-redis.ini
- name: Start redis
run: |
redis-cli SHUTDOWN NOSAVE
for PORT in $(seq 6379 6382) $(seq 32767 32769); do
redis-server --port "$PORT" --daemonize yes --aclfile tests/users.acl --acl-pubsub-default allchannels
done
redis-server --port 0 --unixsocket /tmp/redis.sock --daemonize yes --aclfile tests/users.acl --acl-pubsub-default allchannels
- name: Start redis cluster
run: |
mkdir -p tests/nodes
echo -n > tests/nodes/nodemap
for PORT in $(seq 7000 7005); do
redis-server --port "$PORT" --cluster-enabled yes --cluster-config-file "$PORT".conf --daemonize yes --aclfile tests/users.acl --acl-pubsub-default allchannels
echo 127.0.0.1:"$PORT" >> tests/nodes/nodemap
done
echo yes | redis-cli --cluster create $(seq -f 127.0.0.1:%g 7000 7005) --cluster-replicas 1 --user phpredis -a phpredis
- name: Start redis sentinel
run: |
wget raw.githubusercontent.com/redis/redis/7.0/sentinel.conf
for PORT in $(seq 26379 26380); do
cp sentinel.conf "$PORT.conf"
sed -i '/^sentinel/Id' "$PORT.conf"
redis-server "$PORT.conf" --port "$PORT" --daemonize yes --sentinel monitor mymaster 127.0.0.1 6379 1 --sentinel auth-pass mymaster phpredis
done
- name: Run tests
run: |
php tests/TestRedis.php --class Redis --user phpredis --auth phpredis
php tests/TestRedis.php --class RedisArray --user phpredis --auth phpredis
php tests/TestRedis.php --class RedisCluster --user phpredis --auth phpredis
php tests/TestRedis.php --class RedisSentinel --auth phpredis
env:
TEST_PHP_ARGS: -e
- name: Run tests using valgrind
continue-on-error: true
run: |
valgrind --suppressions=tests/vg.supp --error-exitcode=1 php tests/TestRedis.php --class Redis --user phpredis --auth phpredis
valgrind --suppressions=tests/vg.supp --error-exitcode=1 php tests/TestRedis.php --class RedisArray --user phpredis --auth phpredis
valgrind --suppressions=tests/vg.supp --error-exitcode=1 php tests/TestRedis.php --class RedisCluster --user phpredis --auth phpredis
valgrind --suppressions=tests/vg.supp --error-exitcode=1 php tests/TestRedis.php --class RedisSentinel --auth phpredis
env:
TEST_PHP_ARGS: -e
USE_ZEND_ALLOC: 0
macos:
runs-on: macos-latest
continue-on-error: false
strategy:
fail-fast: false
matrix:
php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- name: Install PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: json, :redis
coverage: none
tools: none
- name: Install dependencies
run: |
pecl install igbinary
pecl install msgpack
- name: Build phpredis
run: |
phpize
./configure --enable-redis-lzf --enable-redis-zstd --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lz4 --with-liblz4
sudo make install
echo 'extension = redis.so' | sudo tee -a "$(php --ini | grep 'Scan for additional .ini files' | awk '{print $7}')/90-redis.ini"
windows:
runs-on: windows-latest
continue-on-error: false
strategy:
fail-fast: false
matrix:
php: ['7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
ts: [nts, ts]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- name: Install PHP ${{ matrix.php }}
uses: php/setup-php-sdk@v0.8
id: setup-php-sdk
with:
version: ${{ matrix.php }}
arch: x64
ts: ${{matrix.ts}}
- name: Install dependencies
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
toolset: ${{steps.setup-php-sdk.outputs.toolset}}
- name: Build phpredis
run: |
phpize
./configure --enable-redis --with-prefix=${{steps.setup-php-sdk.outputs.prefix}}
nmake
- name: package
run: |
md binaries
copy LICENSE binaries
Get-ChildItem -Recurse -Filter "php_redis.dll" | ForEach-Object {Copy-Item -Path $_.FullName -Destination "binaries"}
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: redis-${{matrix.php}}-x64-${{matrix.ts}}
path: binaries
pecl:
runs-on: ubuntu-latest
container: php:8.3-cli-alpine
steps:
- name: Install required system packages
run: apk add --update $PHPIZE_DEPS zstd-libs zstd-dev git
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- name: Create temporary directory
id: temp-dir
run: printf "path=%s\n" "$(mktemp -d)" >>"$GITHUB_OUTPUT"
- name: Create package
run: |
cd "${{ steps.temp-dir.outputs.path }}"
pecl package "$GITHUB_WORKSPACE/package.xml"
- name: Compile package
run: printf '' | pecl install ${{ steps.temp-dir.outputs.path }}/redis-*.tgz
- name: Enable extension
run: docker-php-ext-enable redis
- name: Check for PHP startup warnings
run: |
php -d display_errors=stderr -d display_startup_errors=1 -d error_reporting=-1 -r ';' 2>/tmp/php-startup-warnings
if [ -s /tmp/php-startup-warnings ]; then
echo 'The PHP extension was successfully installed, but PHP raised these warnings:' >&2
cat /tmp/php-startup-warnings >&2
exit 1
fi
echo "PHP didn't raise any warnings at startup."
- name: Inspect extension
run: php --ri redis