mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
131 lines
3.9 KiB
YAML
131 lines
3.9 KiB
YAML
name: Tests
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- dev-3.x
|
|
paths:
|
|
- ".github/workflows/tests.yml"
|
|
- "aiogram/**"
|
|
- "tests/**"
|
|
- ".coveragerc"
|
|
- ".flake8"
|
|
- "codecov.yaml"
|
|
- "mypy.ini"
|
|
- "poetry.lock"
|
|
- "pyproject.toml"
|
|
pull_request:
|
|
branches:
|
|
- dev-3.x
|
|
paths:
|
|
- ".github/workflows/tests.yml"
|
|
- "aiogram/**"
|
|
- "tests/**"
|
|
- ".coveragerc"
|
|
- ".flake8"
|
|
- "codecov.yaml"
|
|
- "mypy.ini"
|
|
- "poetry.lock"
|
|
- "pyproject.toml"
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- macos-latest
|
|
- windows-latest
|
|
python-version:
|
|
- '3.8'
|
|
- '3.9'
|
|
- '3.10'
|
|
- 'pypy3.8'
|
|
- 'pypy3.9'
|
|
|
|
defaults:
|
|
# Windows sucks. Force use bash instead of PowerShell
|
|
run:
|
|
shell: bash
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@master
|
|
|
|
- name: Set up Python ${{ matrix.python-version }} on ${{ matrix.os }}
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Install and configure Poetry
|
|
uses: snok/install-poetry@v1
|
|
if: "!startswith(matrix.python-version, 'pypy') || matrix.os != 'windows-latest'"
|
|
with:
|
|
version: 1.1.11
|
|
virtualenvs-create: true
|
|
virtualenvs-in-project: true
|
|
installer-parallel: true
|
|
|
|
- name: Install and configure Poetry (PyPy on Windows)
|
|
# Poetry installer raises an error on Windows PyPy, so it's a separate step
|
|
if: "startswith(matrix.python-version, 'pypy') && matrix.os == 'windows-latest'"
|
|
run: |
|
|
set -eu
|
|
pip install "poetry==1.1.11"
|
|
poetry config virtualenvs.create true
|
|
poetry config virtualenvs.in-project true
|
|
poetry config installer.parallel true
|
|
|
|
- name: Setup redis
|
|
# Redis can't be used on GitHub Windows Runners
|
|
if: ${{ matrix.os != 'windows-latest' }}
|
|
uses: shogo82148/actions-setup-redis@v1
|
|
with:
|
|
redis-version: 6
|
|
|
|
- name: Load cached venv
|
|
id: cached-poetry-dependencies
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: .venv
|
|
key: venv-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}-${{ secrets.CACHE_VERSION }}
|
|
|
|
- name: Install project dependencies
|
|
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
|
env:
|
|
# uvloop on macOS on PyPy doesn't compile
|
|
INSTALL_FAST: ${{ matrix.os != 'macos-latest' || !startswith(matrix.python-version, 'pypy') }}
|
|
run: |
|
|
flags=""
|
|
[[ "$INSTALL_FAST" == "true" ]] && flags="$flags -E fast"
|
|
poetry install --no-interaction -E redis -E proxy -E i18n -E docs $flags
|
|
|
|
- name: Lint code
|
|
run: |
|
|
poetry run flake8 aiogram
|
|
poetry run mypy aiogram
|
|
poetry run black --check --diff aiogram tests
|
|
|
|
- name: Run tests
|
|
env:
|
|
USE_REDIS: ${{ matrix.os != 'windows-latest' }}
|
|
# Coverage don't work well on PyPy with tests that have timeout
|
|
USE_COVERAGE: ${{ !startswith(matrix.python-version, 'pypy') }}
|
|
run: |
|
|
flags=""
|
|
[[ "$USE_COVERAGE" == "true" ]] && flags="$flags --cov=aiogram --cov-config .coveragerc --cov-report=xml"
|
|
[[ "$USE_REDIS" == "true" ]] && flags="$flags --redis redis://localhost:6379/0"
|
|
poetry run pytest $flags
|
|
|
|
- name: Upload coverage data
|
|
if: "!startswith(matrix.python-version, 'pypy')"
|
|
uses: codecov/codecov-action@v1
|
|
with:
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
file: coverage.xml
|
|
flags: unittests
|
|
name: py-${{ matrix.python-version }}-${{ matrix.os }}
|
|
fail_ci_if_error: true
|