CI #2100
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
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 |