tests #30
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: 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 |