Skip to content

CI

CI #2111

Workflow file for this run

name: CI
on:
push:
branches:
- master
pull_request:
schedule:
- cron: "0 0 * * *"
jobs:
build:
name: Test on ${{ matrix.platform }} with Python ${{ matrix.python }} with Redis ${{ matrix.redis-version }}
runs-on: ${{ matrix.platform }}
timeout-minutes: 40
strategy:
matrix:
platform: ['ubuntu-22.04', 'macos-13']
python: ['3.7', '3.8', '3.9', '3.10', '3.11']
redis-version: ['7.0', '7.2']
fail-fast: false
defaults:
run:
shell: bash -l -eo pipefail {0}
steps:
- name: checkout
uses: actions/checkout@v3
# Number of commits to fetch. 0 indicates all history for all branches and tags.
with:
fetch-depth: ''
- name: clone redis
uses: actions/checkout@v3
# 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@v4
with:
python-version: ${{ matrix.python }}
architecture: x64
- name: Setup Poetry
uses: snok/install-poetry@v1
with:
version: 1.5.1
virtualenvs-in-project: true
virtualenvs-create: true
installer-parallel: true
- name: Cache poetry
uses: actions/cache@v3
with:
path: ~/.cache/poetry # This path is specific to Ubuntu
# Look to see if there is a cache hit for the corresponding requirements file
key: ${{ matrix.platform }}-${{ matrix.python }}-pyproject.toml-${{ hashFiles('pyproject.toml') }}
restore-keys: |
${{ matrix.platform }}-${{ matrix.python }}-pyproject.toml-${{hashFiles('pyproject.toml')}}}
- name: Install Python dependencies
run: poetry install -q
- 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.9' && matrix.platform != 'macos-13'
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@v3
if: matrix.python == '3.9' && matrix.platform != 'macos-13'
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