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@v3.1.1 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, pypy3 ] 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@v3.1.1 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@v3.1.1 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