This file contains 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
on: [push, pull_request] | |
jobs: | |
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: cmb69/setup-php-sdk@v0.7 | |
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 |