Skip to content

Group Tests When Running In Github CI #2383

Group Tests When Running In Github CI

Group Tests When Running In Github CI #2383

Workflow file for this run

name: CI
on:
push:
branches:
- master
pull_request:
workflow_call:
concurrency:
# if the event is a pull request, use the PR number to make PR checks cancel previous runs
# if the event is not a pull request, use the run number to make each run unique
group: CI-${{ github.event_name == 'pull_request' && github.event.number || github.run_number }}
cancel-in-progress: true
jobs:
build:
name: Test on ${{ matrix.platform }} with Python ${{ matrix.python }} with Redis ${{ matrix.redis-version }}
runs-on: ${{ matrix.platform }}
timeout-minutes: 40
strategy:
fail-fast: ${{ github.event_name == 'pull_request' }}
matrix:
platform: ['ubuntu-latest', 'macos-latest']
python: ['3.10', '3.14'] # min live version, latest testing
redis-version: ['7.4', '8.2']
# ubuntu-latest no longer supports python 3.7, macos-latest no longer supports python 3.10
include:
- platform: ubuntu-22.04
python: '3.7'
redis-version: '7.4'
poetry-version: '1.5.1'
- platform: macos-latest
python: '3.11'
redis-version: '8.2'
exclude:
- platform: macos-latest
python: '3.10'
defaults:
run:
shell: bash -l -eo pipefail {0}
steps:
- name: checkout
uses: actions/checkout@v4
# Number of commits to fetch. 0 indicates all history for all branches and tags.
with:
fetch-depth: ''
- name: clone redis
uses: actions/checkout@v4
# Number of commits to fetch. 0 indicates all history for all branches and tags.
with:
fetch-depth: ''
repository: 'redis/redis'
ref: ${{matrix.redis-version}}
path: redis
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
architecture: x64
- name: Setup Poetry
uses: snok/install-poetry@v1
with:
version: ${{ matrix.poetry-version || '2.2.1' }}
virtualenvs-in-project: true
virtualenvs-create: true
installer-parallel: true
- name: Cache poetry
uses: actions/cache@v4
with:
path: .venv
# Look to see if there is a cache hit for the corresponding requirements file
key: ${{ matrix.platform }}-${{ matrix.python }}-pyproject.toml-${{ hashFiles('pyproject.toml') }}
- name: Install Python dependencies
run: poetry install
- name: Install Redis Server
working-directory: redis
run: make BUILD_TLS=yes -j `nproc` install
- name: Generate test certificates #this step needs the redis repo to be cloned
working-directory: redis
run: ./utils/gen-test-certs.sh
- name: Copy certificates to tests/flow
run: |
mkdir -p tests/flow/tls
cp redis/tests/tls/redis.crt tests/flow/tls
cp redis/tests/tls/redis.key tests/flow/tls
cp redis/tests/tls/ca.crt tests/flow/tls
- name: Unit Test with pytest
timeout-minutes: 30
run: |
TLS="tests/flow/tls"
TLS_CERT=$TLS/redis.crt \
TLS_KEY=$TLS/redis.key \
TLS_CACERT=$TLS/ca.crt \
REDIS_BINARY=`command -v redis-server` \
poetry run pytest --ignore=tests/flow --ignore=test_example.py -v
- name: Flow Test OSS Single Module
working-directory: tests/flow
run: |
make -C modules
poetry run RLTest --env oss -v --clear-logs --module modules/module1.so --module-args "DUPLICATE_POLICY BLOCK"
- name: Flow Test OSS Multiple Modules --use-slaves
working-directory: tests/flow
if: (success() || failure())
run: |
make -C modules
poetry run RLTest --env oss -v --clear-logs \
--module modules/module1.so --module-args '' \
--module modules/module2.so --module-args '' \
--use-slaves
- name: Flow Test OSS Multiple Modules --use-aof
working-directory: tests/flow
if: (success() || failure())
run: |
make -C modules
poetry run RLTest --env oss -v --clear-logs \
--module modules/module1.so --module-args '' \
--module modules/module2.so --module-args '' \
--use-aof
- name: Flow Test OSS Multiple Modules
working-directory: tests/flow
if: (success() || failure())
run: |
make -C modules
poetry run RLTest --env oss -v --clear-logs \
--module modules/module1.so --module-args '' \
--module modules/module2.so --module-args ''
- name: Flow Test OSS-CLUSTER Modules
working-directory: tests/flow
if: (success() || failure())
run: |
make -C modules
poetry run RLTest --env oss-cluster -v --clear-logs \
--module modules/module1.so --module-args '' \
--module modules/module2.so --module-args ''
- name: Flow Test OSS TCP
working-directory: tests/flow
if: (success() || failure())
run: poetry run RLTest --env oss -v --clear-logs
- name: Flow Test OSS UNIX SOCKETS
working-directory: tests/flow
if: (success() || failure())
run: poetry run RLTest --env oss -v --clear-logs
- name: Flow Test OSS TCP SLAVES
working-directory: tests/flow
if: (success() || failure())
run: poetry run RLTest --env oss -v --unix --clear-logs
- name: Flow Test OSS-CLUSTER TCP
working-directory: tests/flow
if: (success() || failure())
run: poetry run RLTest --env oss-cluster -v --clear-logs --shards-count 3
- name: Flow Test OSS TCP with TLS
working-directory: tests/flow
if: (success() || failure())
run: |
TLS="tls"
poetry run RLTest --env oss -v --clear-logs \
--tls-cert-file $TLS/redis.crt \
--tls-key-file $TLS/redis.key \
--tls-ca-cert-file $TLS/ca.crt \
--tls
- name: Flow Test OSS-CLUSTER with TLS
working-directory: tests/flow
if: (success() || failure())
run: |
TLS="tls"
poetry run RLTest --env oss-cluster --shards-count 3 -v --clear-logs \
--tls-cert-file $TLS/redis.crt \
--tls-key-file $TLS/redis.key \
--tls-ca-cert-file $TLS/ca.crt \
--tls
- name: Flow Test OSS-CLUSTER with SLAVES and TLS
working-directory: tests/flow
if: (success() || failure())
run: |
TLS="tls"
poetry run RLTest --env oss-cluster --shards-count 3 --use-slaves -v --clear-logs \
--tls-cert-file $TLS/redis.crt \
--tls-key-file $TLS/redis.key \
--tls-ca-cert-file $TLS/ca.crt \
--tls
- name: Generate coverage report
if: matrix.python == '3.14' && matrix.platform == 'ubuntu-latest'
run: |
TLS="tests/flow/tls"
TLS_CERT=$TLS/redis.crt \
TLS_KEY=$TLS/redis.key \
TLS_CACERT=$TLS/ca.crt \
REDIS_BINARY=`command -v redis-server` \
poetry run pytest --ignore=tests/flow --ignore=test_example.py --cov-config=.coveragerc --cov-report=xml --cov=RLTest
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
if: matrix.python == '3.14' && matrix.platform == 'ubuntu-latest'
continue-on-error: true
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.xml
flags: unittests
name: codecov-umbrella
fail_ci_if_error: true
pr-validation:
needs: [build]
runs-on: ubuntu-latest
if: ${{ !cancelled() }}
steps:
- if: contains(needs.*.result, 'failure')
run: exit 1