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@v2.3.4 - name: Setup Python 3.9 uses: actions/setup-python@v2 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@v2 with: path: .venv key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }} #---------------------------------------------- # 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, pypy3] redismod: ["edge", "preview"] fail-fast: false services: redis: image: redislabs/redismod:${{ matrix.redismod }} 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 --entrypoint="redis-server --loadmodule /usr/lib/redis/modules/rejson.so --loadmodule /usr/lib/redis/modules/redisearch.so" runs-on: ${{ matrix.os }} timeout-minutes: 15 env: OS: ${{ matrix.os }} INSTALL_DIR: ${{ github.workspace }}/redis steps: - name: Checkout uses: actions/checkout@v2.3.4 - name: Setup Python ${{ matrix.pyver }} uses: actions/setup-python@v2 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@v2 with: path: .venv key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }} #---------------------------------------------- # 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 (redismod:${{ matrix.redismod }}, ${{ matrix.os }}) run: | make test poetry run coverage xml - name: Upload coverage uses: codecov/codecov-action@v2.1.0 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@v2.3.4 - name: Setup Python 3.9 uses: actions/setup-python@v2 with: python-version: 3.9 - name: Install dependencies run: python -m pip install -U pip wheel twine - name: Make dists run: python setup.py sdist bdist_wheel - name: PyPI upload env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} run: | twine upload dist/*