Skip to content

adding more tests, refactoring #60

adding more tests, refactoring

adding more tests, refactoring #60

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 }}-pip-${{ hashFiles('**/setup.cfg') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install Linters and Type Checker
run: |
python -m pip install --upgrade pip
# Устанавливаем только dev-зависимости (включая линтеры, mypy)
# Предполагается, что они в extras_require [dev] в setup.cfg
pip install .[dev]
# Если линтеров нет в setup.cfg, установите их отдельно:
# pip install flake8 black isort mypy types-PyYAML types-pathspec
- name: Run Linters and Formatters Check
run: |
flake8 src tests
black --check src tests
isort --check-only src tests
- name: Run Type Checker (Mypy)
run: |
mypy src tests # Проверяем и исходники, и тесты
# --- Обновленное задание для тестов ---
test:
needs: lint-type-check # Запускаем тесты ПОСЛЕ проверки качества кода
strategy:
fail-fast: false # Не отменять другие тесты при падении одного
matrix:
# Оставим 3 версии Ubuntu для надежности, можно сократить до latest и 20.04
os: [ ubuntu-latest, ubuntu-20.04, ubuntu-22.04, macos-latest, windows-latest ]
python-version: [ 3.9, '3.10', '3.11' ]
runs-on: ${{ matrix.os }}
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:
# Путь к кэшу pip (работает для Linux/macOS, должно работать и для Windows в actions/cache@v3)
path: ~/.cache/pip
# Ключ кэша по 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
# Устанавливаем пакет в editable режиме + dev зависимости (pytest, pytest-cov)
# Предполагает наличие extras_require [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 # Используем v4
# Не требует токена для публичных репозиториев на github.com
# env:
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} # Для приватных репо или других платформ
with:
files: ./coverage.xml # Путь к файлу отчета
fail_ci_if_error: true # Завалить сборку, если выгрузка не удалась
verbose: true # Для отладки
# --- Обновленное задание для PyPy ---
test-pypy:
needs: lint-type-check
runs-on: ubuntu-latest
strategy:
matrix:
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 зависимостями
pip install -e .[dev]
- name: Run Tests
run: |
pytest -v