1+ # .github/workflows/ci.yml
12name : TreeMapper CI
23
34on :
89 - main
910
1011jobs :
12+ # --- Новое задание для проверки качества кода ---
13+ lint-type-check :
14+ name : Lint & Type Check
15+ runs-on : ubuntu-latest # Достаточно одной ОС/версии Python
16+ steps :
17+ - name : Checkout Code
18+ uses : actions/checkout@v3
19+
20+ - name : Set up Python 3.11
21+ uses : actions/setup-python@v4
22+ with :
23+ python-version : ' 3.11'
24+
25+ - name : Cache pip Dependencies
26+ uses : actions/cache@v3
27+ with :
28+ # Используем setup.cfg для ключа кэша
29+ path : ~/.cache/pip
30+ key : ${{ runner.os }}-pip-${{ hashFiles('**/setup.cfg') }}
31+ restore-keys : |
32+ ${{ runner.os }}-pip-
33+
34+ - name : Install Linters and Type Checker
35+ run : |
36+ python -m pip install --upgrade pip
37+ # Устанавливаем только dev-зависимости (включая линтеры, mypy)
38+ # Предполагается, что они в extras_require [dev] в setup.cfg
39+ pip install .[dev]
40+ # Если линтеров нет в setup.cfg, установите их отдельно:
41+ # pip install flake8 black isort mypy types-PyYAML types-pathspec
42+
43+ - name : Run Linters and Formatters Check
44+ run : |
45+ flake8 src tests
46+ black --check src tests
47+ isort --check-only src tests
48+
49+ - name : Run Type Checker (Mypy)
50+ run : |
51+ mypy src tests # Проверяем и исходники, и тесты
52+
53+ # --- Обновленное задание для тестов ---
1154 test :
55+ needs : lint-type-check # Запускаем тесты ПОСЛЕ проверки качества кода
1256 strategy :
57+ fail-fast : false # Не отменять другие тесты при падении одного
1358 matrix :
59+ # Оставим 3 версии Ubuntu для надежности, можно сократить до latest и 20.04
1460 os : [ ubuntu-latest, ubuntu-20.04, ubuntu-22.04, macos-latest, windows-latest ]
1561 python-version : [ 3.9, '3.10', '3.11' ]
1662
@@ -28,34 +74,47 @@ jobs:
2874 - name : Cache pip Dependencies
2975 uses : actions/cache@v3
3076 with :
77+ # Путь к кэшу pip (работает для Linux/macOS, должно работать и для Windows в actions/cache@v3)
3178 path : ~/.cache/pip
32- key : ${{ runner.os }}-pip-${{ hashFiles('**/setup.cfg') }}
79+ # Ключ кэша по setup.cfg
80+ key : ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.cfg') }}
3381 restore-keys : |
82+ ${{ runner.os }}-pip-${{ matrix.python-version }}-
3483 ${{ runner.os }}-pip-
3584
3685 - name : Install Dependencies
3786 run : |
3887 python -m pip install --upgrade pip
39- pip install -r requirements.txt
40- pip install -e .
88+ # Устанавливаем пакет в editable режиме + dev зависимости (pytest, pytest-cov)
89+ # Предполагает наличие extras_require [dev] в setup.cfg
90+ pip install -e .[dev]
4191
42- - name : Build with PyInstaller
43- run : |
44- python -m PyInstaller --clean -y --dist ./dist/${{ runner.os }} --workpath /tmp treemapper.spec
45-
46- - name : Build with python -m build
47- run : |
48- python -m build
92+ # --- УДАЛЕНЫ ШАГИ СБОРКИ PyInstaller и build ---
4993
50- - name : Run Tests
94+ - name : Run Tests with Coverage
5195 run : |
52- pytest
96+ # Запускаем pytest с генерацией отчета покрытия в формате XML
97+ pytest -v --cov=src/treemapper --cov-report=xml
98+
99+ # --- Новый шаг: Выгрузка покрытия (запускается только один раз) ---
100+ - name : Upload coverage reports to Codecov
101+ if : matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' # Запускаем только для одной комбинации
102+ uses : codecov/codecov-action@v4 # Используем v4
103+ # Не требует токена для публичных репозиториев на github.com
104+ # env:
105+ # CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} # Для приватных репо или других платформ
106+ with :
107+ files : ./coverage.xml # Путь к файлу отчета
108+ fail_ci_if_error : true # Завалить сборку, если выгрузка не удалась
109+ verbose : true # Для отладки
53110
111+ # --- Обновленное задание для PyPy ---
54112 test-pypy :
113+ needs : lint-type-check
55114 runs-on : ubuntu-latest
56115 strategy :
57116 matrix :
58- python-version : [ pypy-3.9 ]
117+ python-version : [ pypy-3.9 ] # Можно добавить pypy-3.10, если нужно
59118
60119 steps :
61120 - name : Checkout Code
@@ -70,21 +129,16 @@ jobs:
70129 uses : actions/cache@v3
71130 with :
72131 path : ~/.cache/pip
73- key : pypy-pip-${{ hashFiles('**/setup.cfg') }}
132+ key : pypy-${{ matrix.python-version }}- pip-${{ hashFiles('**/setup.cfg') }}
74133 restore-keys : |
75- pypy-pip-
134+ pypy-${{ matrix.python-version }}- pip-
76135
77136 - name : Install Dependencies
78137 run : |
79138 python -m pip install --upgrade pip
80- pip install -r requirements.txt
81- pip install -e .
82- pip install build pytest
83-
84- - name : Build with python -m build
85- run : |
86- python -m build
139+ # Устанавливаем с dev зависимостями
140+ pip install -e .[dev]
87141
88142 - name : Run Tests
89143 run : |
90- pytest
144+ pytest -v
0 commit comments