b4c20b2f8f
pypy3.7 in CI
201 lines
6.8 KiB
YAML
201 lines
6.8 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- '[0-9].[0-9]+' # matches to backport branches, e.g. 3.6
|
|
tags: [ 'v*' ]
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- '[0-9].[0-9]+'
|
|
- 'update/pre-commit-autoupdate'
|
|
schedule:
|
|
- cron: '0 6 * * *' # Daily 6AM UTC build
|
|
|
|
|
|
jobs:
|
|
|
|
lint:
|
|
name: Linter
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 5
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python 3.9
|
|
uses: actions/setup-python@v4.0.0
|
|
with:
|
|
python-version: 3.9
|
|
#----------------------------------------------
|
|
# ----- install & configure poetry -----
|
|
#----------------------------------------------
|
|
- name: Install Poetry
|
|
uses: snok/install-poetry@v1
|
|
with:
|
|
virtualenvs-create: true
|
|
virtualenvs-in-project: true
|
|
installer-parallel: true
|
|
#----------------------------------------------
|
|
# load cached venv if cache exists
|
|
#----------------------------------------------
|
|
- name: Load cached venv
|
|
id: cached-poetry-dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: .venv
|
|
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
|
|
- name: Make sync version of library (redis_om)
|
|
run: make sync
|
|
#----------------------------------------------
|
|
# install dependencies if cache does not exist
|
|
#----------------------------------------------
|
|
- name: Install dependencies
|
|
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
|
run: poetry install --no-interaction --no-root
|
|
#----------------------------------------------
|
|
# install your root project, if required
|
|
#----------------------------------------------
|
|
- name: Install library
|
|
run: poetry install --no-interaction
|
|
#----------------------------------------------
|
|
# run test suite
|
|
#----------------------------------------------
|
|
- name: Run linter
|
|
run: |
|
|
make dist
|
|
make lint
|
|
|
|
test-unix:
|
|
name: Test Unix
|
|
needs: lint
|
|
strategy:
|
|
matrix:
|
|
os: [ ubuntu-latest ]
|
|
pyver: [ "3.6", "3.7", "3.8", "3.9", "3.10", "pypy-3.8", "pypy-3.7" ]
|
|
redisstack: [ "latest" ]
|
|
fail-fast: false
|
|
services:
|
|
redis:
|
|
image: redis/redis-stack:${{ matrix.redisstack }}
|
|
ports:
|
|
# Maps port 6379 on service container to the host
|
|
- 6379:6379
|
|
# Set health checks to wait until redis has started
|
|
options: >-
|
|
--health-cmd "redis-cli ping"
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 15
|
|
env:
|
|
OS: ${{ matrix.os }}
|
|
INSTALL_DIR: ${{ github.workspace }}/redis
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python ${{ matrix.pyver }}
|
|
uses: actions/setup-python@v4.0.0
|
|
with:
|
|
python-version: ${{ matrix.pyver }}
|
|
#----------------------------------------------
|
|
# ----- install & configure poetry -----
|
|
#----------------------------------------------
|
|
- name: Install Poetry
|
|
uses: snok/install-poetry@v1
|
|
with:
|
|
virtualenvs-create: true
|
|
virtualenvs-in-project: true
|
|
installer-parallel: true
|
|
#----------------------------------------------
|
|
# load cached venv if cache exists
|
|
#----------------------------------------------
|
|
- name: Load cached venv
|
|
id: cached-poetry-dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: .venv
|
|
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
|
|
#----------------------------------------------
|
|
# Make sync version of library (redis_om)
|
|
#----------------------------------------------
|
|
- name: Make sync version of library (redis_om)
|
|
run: make sync
|
|
#----------------------------------------------
|
|
# install dependencies if cache does not exist
|
|
#----------------------------------------------
|
|
- name: Install dependencies
|
|
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
|
run: poetry install --no-interaction --no-root
|
|
#----------------------------------------------
|
|
# install your root project, if required
|
|
#----------------------------------------------
|
|
- name: Install library
|
|
run: poetry install --no-interaction
|
|
- name: Run unittests (redisstack:${{ matrix.redisstack }}, ${{ matrix.os }})
|
|
env:
|
|
REDIS_OM_URL: "redis://localhost:6379?decode_responses=True"
|
|
run: |
|
|
make test
|
|
poetry run coverage xml
|
|
- name: Upload coverage
|
|
uses: codecov/codecov-action@v3
|
|
with:
|
|
file: ./coverage.xml
|
|
flags: unit
|
|
env_vars: OS
|
|
fail_ci_if_error: false
|
|
|
|
deploy:
|
|
name: Deploy
|
|
runs-on: ubuntu-latest
|
|
needs: test-unix
|
|
# Run only on pushing a tag
|
|
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python 3.9
|
|
uses: actions/setup-python@v4.0.0
|
|
with:
|
|
python-version: 3.9
|
|
- name: Install Poetry
|
|
uses: snok/install-poetry@v1
|
|
with:
|
|
virtualenvs-create: true
|
|
virtualenvs-in-project: true
|
|
installer-parallel: true
|
|
#----------------------------------------------
|
|
# load cached venv if cache exists
|
|
#----------------------------------------------
|
|
- name: Load cached venv
|
|
id: cached-poetry-dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: .venv
|
|
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
|
|
#----------------------------------------------
|
|
# Make sync version of library (redis_om)
|
|
#----------------------------------------------
|
|
- name: Make sync version of library (redis_om)
|
|
run: make sync
|
|
#----------------------------------------------
|
|
# install dependencies if cache does not exist
|
|
#----------------------------------------------
|
|
- name: Install dependencies
|
|
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
|
run: poetry install --no-interaction --no-root
|
|
#----------------------------------------------
|
|
# install your root project, if required
|
|
#----------------------------------------------
|
|
- name: Install library
|
|
run: poetry install --no-interaction
|
|
- name: PyPI upload
|
|
env:
|
|
TWINE_USERNAME: __token__
|
|
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
run: |
|
|
make upload
|