Skip to content

Merge pull request #7 from nsumbadze/chore/sync-horizon-5.x #35

Merge pull request #7 from nsumbadze/chore/sync-horizon-5.x

Merge pull request #7 from nsumbadze/chore/sync-horizon-5.x #35

Workflow file for this run

name: tests
on:
push:
branches:
- main
- master
- '*.x'
pull_request:
schedule:
- cron: '0 0 * * *'
permissions:
contents: read
jobs:
tests:
runs-on: ubuntu-22.04
services:
redis:
image: redis
ports:
- 6379:6379
options: --entrypoint redis-server
strategy:
fail-fast: true
matrix:
php: [8.1, 8.2, 8.3, 8.4, 8.5]
laravel: [10, 11, 12, 13]
include:
- php: '8.0'
laravel: 9
- php: 8.1
laravel: 9
- php: 8.2
laravel: 9
exclude:
- php: 8.1
laravel: 11
- php: 8.1
laravel: 12
- php: 8.1
laravel: 13
- php: 8.2
laravel: 13
- php: 8.4
laravel: 10
- php: 8.5
laravel: 10
- php: 8.5
laravel: 11
name: PHP ${{ matrix.php }} - Laravel ${{ matrix.laravel }}
steps:
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup PHP
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2
with:
php-version: ${{ matrix.php }}
extensions: dom, curl, libxml, mbstring, redis, zip
ini-values: error_reporting=E_ALL
tools: composer:v2
coverage: none
- name: Install dependencies
run: |
composer update --prefer-dist --no-interaction --no-progress --with="illuminate/contracts:^${{ matrix.laravel }}"
- name: Execute tests
run: vendor/bin/phpunit --fail-on-risky --fail-on-warning --stop-on-error --stop-on-failure ${{ matrix.laravel >= 10 && '--fail-on-deprecation' || '' }}
cluster-tests:
runs-on: ubuntu-24.04
strategy:
fail-fast: true
matrix:
php: [8.3, 8.4, 8.5]
client: ['phpredis', 'predis']
name: Redis Cluster - PHP ${{ matrix.php }} (${{ matrix.client }})
steps:
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup PHP
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2
with:
php-version: ${{ matrix.php }}
extensions: dom, curl, libxml, mbstring, redis, zip
ini-values: error_reporting=E_ALL
tools: composer:v2
coverage: none
- name: Install dependencies
run: composer update --prefer-dist --no-interaction --no-progress --with="illuminate/contracts:^13"
- name: Create Redis Cluster
run: |
sudo apt update
sudo apt-get install -y --fix-missing redis-server
sudo service redis-server stop
# Every node needs its own data directory. Sharing one means sharing a
# single `appendonlydir`, and three servers creating that AOF manifest
# at the same time is enough to make one of them die on startup.
for port in 7000 7001 7002; do
mkdir -p "$RUNNER_TEMP/redis-$port"
redis-server --daemonize yes --port "$port" --appendonly yes --cluster-enabled yes \
--cluster-config-file "nodes-$port.conf" \
--dir "$RUNNER_TEMP/redis-$port" \
--logfile "$RUNNER_TEMP/redis-$port/redis.log"
done
# --daemonize returns as soon as the parent forks, before the node
# accepts connections, so creating the cluster straight away races
# the last node into a refused connection. Wait for every node to
# answer PING first.
for port in 7000 7001 7002; do
for attempt in $(seq 30); do
if [ "$(redis-cli -p "$port" ping 2>/dev/null)" = "PONG" ]; then
continue 2
fi
sleep 1
done
echo "Redis node on port $port never started accepting connections. Its log:"
cat "$RUNNER_TEMP/redis-$port/redis.log" || true
exit 1
done
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 0 --cluster-yes
- name: Check Redis Cluster is ready
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4
with:
timeout_seconds: 5
max_attempts: 5
retry_wait_seconds: 5
retry_on: error
command: |
redis-cli -c -h 127.0.0.1 -p 7000 cluster info | grep "cluster_state:ok"
redis-cli -c -h 127.0.0.1 -p 7001 cluster info | grep "cluster_state:ok"
redis-cli -c -h 127.0.0.1 -p 7002 cluster info | grep "cluster_state:ok"
- name: Execute tests
run: vendor/bin/phpunit --fail-on-risky --fail-on-warning --stop-on-error --stop-on-failure --fail-on-deprecation
env:
REDIS_CLIENT: ${{ matrix.client }}
REDIS_CLUSTER_HOSTS_AND_PORTS: 127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002
QUEUE_CONNECTION: redis