name: Tests on: push: branches: - dev-3.x paths: - ".github/workflows/tests.yml" - "aiogram/**" - "tests/**" - "codecov.yaml" - "pyproject.toml" pull_request: branches: - dev-3.x paths: - ".github/workflows/tests.yml" - "aiogram/**" - "tests/**" - "pyproject.toml" jobs: tests: strategy: fail-fast: false matrix: os: - ubuntu-latest - macos-latest - windows-latest python-version: - "3.9" - "3.10" - "3.11" - "3.12" - "3.13" defaults: # Windows sucks. Force use bash instead of PowerShell run: shell: bash runs-on: ${{ matrix.os }} env: # Windows has some limitations: # – Redis and MongoDB is not supported on GitHub Windows runners; IS_WINDOWS: ${{ startswith(matrix.os, 'windows') }} # MongoDB has some limitations: # – MongoDB container action is only supported on Linux; IS_UBUNTU: ${{ startswith(matrix.os, 'ubuntu') }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} on ${{ matrix.os }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: "pip" cache-dependency-path: pyproject.toml - name: Install project dependencies run: | pip install -e .[dev,test,redis,mongo,proxy,i18n,fast,signature] - name: Lint code run: | ruff check --output-format=github aiogram examples mypy aiogram black --check --diff aiogram tests - name: Setup redis if: ${{ env.IS_WINDOWS == 'false' }} uses: shogo82148/actions-setup-redis@v1 with: redis-version: 6 - name: Setup mongodb if: ${{ env.IS_UBUNTU == 'true' }} uses: supercharge/mongodb-github-action@1.10.0 with: mongodb-version: "7.0" mongodb-username: mongo mongodb-password: mongo mongodb-port: 27017 - name: Run tests run: | flags="$flags --cov=aiogram --cov-config .coveragerc --cov-report=xml" [[ "$IS_WINDOWS" == "false" ]] && flags="$flags --redis redis://localhost:6379/0" [[ "$IS_UBUNTU" == "true" ]] && flags="$flags --mongo mongodb://mongo:mongo@localhost:27017" pytest $flags - name: Upload coverage data uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml flags: unittests name: py-${{ matrix.python-version }}-${{ matrix.os }} fail_ci_if_error: true pypy-tests: strategy: fail-fast: false matrix: os: - ubuntu-latest - macos-latest # - windows-latest python-version: - "pypy3.9" - "pypy3.10" defaults: # Windows sucks. Force use bash instead of PowerShell run: shell: bash runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} on ${{ matrix.os }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: "pip" cache-dependency-path: pyproject.toml - name: Install project dependencies run: | pip install -e .[dev,test,redis,mongo,proxy,i18n,fast,signature] - name: Run tests run: | flags="" pytest $flags