mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-14 19:00:23 +00:00
PyPy support (#985)
* Run tests on PyPy (#984) Remove unnecessary `jobs.build.strategy.max_parallel` attribute * Workaround `symlink() is not implemented for PyPy on Windows` * Quote conditions in tests workflow file * Fix quoting in Poetry installation script * Adjust timeout when testing on pypy Running the tests with coverage pytest plugin makes some tests run slower than expected * Try to fix uvloop build errors on macos-latest * Try to fix uvloop build errors on macos-latest (2) * Adjust timeout when testing on pypy (2) * Increase timeout even more * Try to fix uvloop build errors on macos-latest (3) * Update tests.yml, revert changes in test files Add and improve step names Merge "Lint code" and "Check code-style" steps Don't install uvloop on macos when running on pypy Don't run tests with coverage on pypy Remove test timeout adjustments * Fix condition * Update README, add changelog * Put environment info (`IS_PYPY`, `IS_WINDOWS`) into environment variables * Fix conditions
This commit is contained in:
parent
e7cee430b2
commit
40c29a0494
3 changed files with 42 additions and 18 deletions
58
.github/workflows/tests.yml
vendored
58
.github/workflows/tests.yml
vendored
|
|
@ -32,7 +32,6 @@ jobs:
|
||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 9
|
|
||||||
matrix:
|
matrix:
|
||||||
os:
|
os:
|
||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
|
|
@ -42,6 +41,8 @@ jobs:
|
||||||
- '3.8'
|
- '3.8'
|
||||||
- '3.9'
|
- '3.9'
|
||||||
- '3.10'
|
- '3.10'
|
||||||
|
- 'pypy3.8'
|
||||||
|
- 'pypy3.9'
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
# Windows sucks. Force use bash instead of PowerShell
|
# Windows sucks. Force use bash instead of PowerShell
|
||||||
|
|
@ -50,8 +51,22 @@ jobs:
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
env:
|
||||||
|
# We disable some features for PyPy by this environment variable such as:
|
||||||
|
# – Installation of `fast` extras: `uvloop` on PyPy is useless and may be even slower
|
||||||
|
# than the default loop;
|
||||||
|
# – Coverage reports: code introspection disables any optimizations, so tests with
|
||||||
|
# coverage enabled are very slow on PyPy.
|
||||||
|
# More: https://www.pypy.org/performance.html
|
||||||
|
IS_PYPY: ${{ startswith(matrix.python-version, 'pypy') }}
|
||||||
|
# Windows has also some limitations:
|
||||||
|
# – Redis is not supported on GitHub Windows runners;
|
||||||
|
# – Poetry installer doesn't work on Windows with PyPy.
|
||||||
|
IS_WINDOWS: ${{ startswith(matrix.os, 'windows') }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
- name: Set up Python ${{ matrix.python-version }} on ${{ matrix.os }}
|
- name: Set up Python ${{ matrix.python-version }} on ${{ matrix.os }}
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
|
|
@ -60,14 +75,24 @@ jobs:
|
||||||
|
|
||||||
- name: Install and configure Poetry
|
- name: Install and configure Poetry
|
||||||
uses: snok/install-poetry@v1
|
uses: snok/install-poetry@v1
|
||||||
|
if: "env.IS_PYPY == 'false' || env.IS_WINDOWS == 'false'"
|
||||||
with:
|
with:
|
||||||
version: 1.1.11
|
version: 1.1.11
|
||||||
virtualenvs-create: true
|
virtualenvs-create: true
|
||||||
virtualenvs-in-project: true
|
virtualenvs-in-project: true
|
||||||
installer-parallel: true
|
installer-parallel: true
|
||||||
|
|
||||||
|
- name: Install and configure Poetry (PyPy on Windows)
|
||||||
|
if: "env.IS_PYPY == 'true' && env.IS_WINDOWS == 'true'"
|
||||||
|
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
|
- name: Setup redis
|
||||||
if: ${{ matrix.os != 'windows-latest' }}
|
if: ${{ env.IS_WINDOWS == 'false' }}
|
||||||
uses: shogo82148/actions-setup-redis@v1
|
uses: shogo82148/actions-setup-redis@v1
|
||||||
with:
|
with:
|
||||||
redis-version: 6
|
redis-version: 6
|
||||||
|
|
@ -79,32 +104,29 @@ jobs:
|
||||||
path: .venv
|
path: .venv
|
||||||
key: venv-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}-${{ secrets.CACHE_VERSION }}
|
key: venv-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}-${{ secrets.CACHE_VERSION }}
|
||||||
|
|
||||||
- name: Project dependencies
|
- name: Install project dependencies
|
||||||
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
poetry install --no-interaction -E fast -E redis -E proxy -E i18n -E docs
|
flags=""
|
||||||
|
[[ "$IS_PYPY" == "false" ]] && flags="$flags -E fast"
|
||||||
|
poetry install --no-interaction -E redis -E proxy -E i18n -E docs $flags
|
||||||
|
|
||||||
- name: Lint code
|
- name: Lint code
|
||||||
run: |
|
run: |
|
||||||
poetry run flake8 aiogram
|
poetry run flake8 aiogram
|
||||||
poetry run mypy aiogram
|
poetry run mypy aiogram
|
||||||
|
|
||||||
- name: Check code-style (Black)
|
|
||||||
run: |
|
|
||||||
poetry run black --check --diff aiogram tests
|
poetry run black --check --diff aiogram tests
|
||||||
|
|
||||||
- name: Run tests (with Redis)
|
- name: Run tests
|
||||||
if: ${{ matrix.os != 'windows-latest' }}
|
|
||||||
run: |
|
run: |
|
||||||
poetry run pytest --cov=aiogram --cov-config .coveragerc --cov-report=xml --redis redis://localhost:6379/0
|
flags=""
|
||||||
|
[[ "$IS_PYPY" == "false" ]] && flags="$flags --cov=aiogram --cov-config .coveragerc --cov-report=xml"
|
||||||
|
[[ "$IS_WINDOWS" == "false" ]] && flags="$flags --redis redis://localhost:6379/0"
|
||||||
|
poetry run pytest $flags
|
||||||
|
|
||||||
- name: Run tests (without Redis)
|
- name: Upload coverage data
|
||||||
# Redis can't be used on GitHub Windows Runners
|
if: "env.IS_PYPY == 'false'"
|
||||||
if: ${{ matrix.os == 'windows-latest' }}
|
uses: codecov/codecov-action@v1
|
||||||
run: |
|
|
||||||
poetry run pytest --cov=aiogram --cov-config .coveragerc --cov-report=xml
|
|
||||||
|
|
||||||
- uses: codecov/codecov-action@v1
|
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
file: coverage.xml
|
file: coverage.xml
|
||||||
|
|
|
||||||
1
CHANGES/985.feature
Normal file
1
CHANGES/985.feature
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Add PyPy support and run tests under PyPy
|
||||||
|
|
@ -61,6 +61,7 @@ Features
|
||||||
|
|
||||||
- Asynchronous (`asyncio docs <https://docs.python.org/3/library/asyncio.html>`_, :pep:`492`)
|
- Asynchronous (`asyncio docs <https://docs.python.org/3/library/asyncio.html>`_, :pep:`492`)
|
||||||
- Has type hints (:pep:`484`) and can be used with `mypy <http://mypy-lang.org/>`_
|
- Has type hints (:pep:`484`) and can be used with `mypy <http://mypy-lang.org/>`_
|
||||||
|
- Supports `PyPy <https://www.pypy.org/>`_
|
||||||
- Supports `Telegram Bot API 5.3 <https://core.telegram.org/bots/api>`_
|
- Supports `Telegram Bot API 5.3 <https://core.telegram.org/bots/api>`_
|
||||||
- Telegram Bot API integration code was `autogenerated <https://github.com/aiogram/tg-codegen>`_ and can be easily re-generated when API gets updated
|
- Telegram Bot API integration code was `autogenerated <https://github.com/aiogram/tg-codegen>`_ and can be easily re-generated when API gets updated
|
||||||
- Updates router (Blueprints)
|
- Updates router (Blueprints)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue