Skip to content

adding more tests, refactoring #66

adding more tests, refactoring

adding more tests, refactoring #66

Workflow file for this run

# .github/workflows/ci.yml
name: TreeMapper CI
on:
pull_request:
branches: [ '**' ]
push:
branches:
- main
jobs:
# --- Задание для проверки качества кода ---
lint-type-check:
name: Lint & Type Check
runs-on: ubuntu-latest # Достаточно одной ОС/версии Python
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Set up Python 3.11 # Используем одну из последних версий для проверок
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Cache pip Dependencies
uses: actions/cache@v3
with:
# Используем setup.cfg для ключа кэша
path: ~/.cache/pip
key: ${{ runner.os }}-lint-pip-${{ hashFiles('**/setup.cfg') }}
restore-keys: |
${{ runner.os }}-lint-pip-
- name: Install Linters and Type Checker
run: |
python -m pip install --upgrade pip
# Устанавливаем только dev-зависимости из setup.cfg
pip install .[dev]
# Если нужные пакеты не в [dev], добавьте: pip install flake8 black isort mypy types-PyYAML
- name: Run Linters and Formatters Check
run: |
flake8 src tests
black --check src tests
- name: Run Type Checker (Mypy)
run: |
# Mypy может требовать установленных зависимостей для корректной проверки
mypy src tests
# --- Задание для тестов на CPython ---
test:
needs: lint-type-check # Запускаем тесты ПОСЛЕ проверки качества кода
strategy:
fail-fast: false # Не отменять другие тесты при падении одного
matrix:
os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macos-latest, windows-latest ]
python-version: [ 3.9, '3.10', '3.11', '3.12' ]
runs-on: ${{ matrix.os }}
# continue-on-error: ${{ matrix.experimental || false }} # Опционально для 3.13
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip Dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
# Ключ кэша включает ОС, версию Python и хэш setup.cfg
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.cfg') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.python-version }}-
${{ runner.os }}-pip-
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
# Устанавливаем пакет и dev-зависимости из setup.cfg
pip install -e .[dev]
# --- Шаги сборки PyInstaller и build УДАЛЕНЫ ---
- name: Run Tests with Coverage
run: |
# Запускаем pytest с генерацией отчета покрытия в формате XML
pytest -v --cov=src/treemapper --cov-report=xml
- name: Upload coverage reports to Codecov
# Запускаем только для одной комбинации, чтобы не дублировать отчеты
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11'
uses: codecov/codecov-action@v4
# Не требует токена для публичных репозиториев на github.com
# env:
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} # Для приватных репо
with:
files: ./coverage.xml # Файл отчета, созданный pytest-cov
fail_ci_if_error: true
verbose: true
# --- Задание для тестов на PyPy ---
test-pypy:
needs: lint-type-check # Запускаем тесты ПОСЛЕ проверки качества кода
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Добавлена версия PyPy 3.10 (проверьте доступность в actions/setup-python)
python-version: [ pypy-3.9, pypy-3.10 ]
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Set up PyPy ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip Dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: pypy-${{ matrix.python-version }}-pip-${{ hashFiles('**/setup.cfg') }}
restore-keys: |
pypy-${{ matrix.python-version }}-pip-
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
# Устанавливаем с dev зависимостями из setup.cfg
pip install -e .[dev]
# build и pytest теперь должны быть в [dev]
# --- Шаг сборки build УДАЛЕН ---
- name: Run Tests
run: |
pytest -v # Запускаем тесты без покрытия для PyPy, если оно не настроено