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 }}-lint-pip-${{ hashFiles('**/setup.cfg') }}
31+ restore-keys : |
32+ ${{ runner.os }}-lint-pip-
33+
34+ - name : Install Linters and Type Checker
35+ run : |
36+ python -m pip install --upgrade pip
37+ # Устанавливаем только dev-зависимости из setup.cfg
38+ pip install .[dev]
39+ # Если нужные пакеты не в [dev], добавьте: pip install flake8 black isort mypy types-PyYAML
40+
41+ - name : Run Linters and Formatters Check
42+ run : |
43+ flake8 src tests
44+ black --check src tests
45+ isort --check-only src tests
46+
47+ - name : Run Type Checker (Mypy)
48+ run : |
49+ # Mypy может требовать установленных зависимостей для корректной проверки
50+ mypy src tests
51+
52+ # --- Задание для тестов на CPython ---
1153 test :
54+ needs : lint-type-check # Запускаем тесты ПОСЛЕ проверки качества кода
1255 strategy :
56+ fail-fast : false # Не отменять другие тесты при падении одного
1357 matrix :
14- os : [ ubuntu-latest , ubuntu-20 .04, ubuntu-22 .04, macos-latest, windows-latest ]
15- python-version : [ 3.9, '3.10', '3.11' ]
58+ os : [ ubuntu-20.04 , ubuntu-22 .04, ubuntu-24 .04, macos-latest, windows-latest ]
59+ python-version : [ 3.9, '3.10', '3.11', '3.12' ]
1660
1761 runs-on : ${{ matrix.os }}
62+ # continue-on-error: ${{ matrix.experimental || false }} # Опционально для 3.13
1863
1964 steps :
2065 - name : Checkout Code
@@ -29,33 +74,46 @@ jobs:
2974 uses : actions/cache@v3
3075 with :
3176 path : ~/.cache/pip
32- key : ${{ runner.os }}-pip-${{ hashFiles('**/setup.cfg') }}
77+ # Ключ кэша включает ОС, версию Python и хэш setup.cfg
78+ key : ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.cfg') }}
3379 restore-keys : |
80+ ${{ runner.os }}-pip-${{ matrix.python-version }}-
3481 ${{ runner.os }}-pip-
3582
3683 - name : Install Dependencies
3784 run : |
3885 python -m pip install --upgrade pip
39- pip install -r requirements.txt
40- pip install -e .
86+ # Устанавливаем пакет и dev-зависимости из setup.cfg
87+ pip install -e .[dev]
4188
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
89+ # --- Шаги сборки PyInstaller и build УДАЛЕНЫ ---
4990
50- - name : Run Tests
91+ - name : Run Tests with Coverage
5192 run : |
52- pytest
93+ # Запускаем pytest с генерацией отчета покрытия в формате XML
94+ pytest -v --cov=src/treemapper --cov-report=xml
95+
96+ - name : Upload coverage reports to Codecov
97+ # Запускаем только для одной комбинации, чтобы не дублировать отчеты
98+ if : matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11'
99+ uses : codecov/codecov-action@v4
100+ # Не требует токена для публичных репозиториев на github.com
101+ # env:
102+ # CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} # Для приватных репо
103+ with :
104+ files : ./coverage.xml # Файл отчета, созданный pytest-cov
105+ fail_ci_if_error : true
106+ verbose : true
53107
108+ # --- Задание для тестов на PyPy ---
54109 test-pypy :
110+ needs : lint-type-check # Запускаем тесты ПОСЛЕ проверки качества кода
55111 runs-on : ubuntu-latest
56112 strategy :
113+ fail-fast : false
57114 matrix :
58- python-version : [ pypy-3.9 ]
115+ # Добавлена версия PyPy 3.10 (проверьте доступность в actions/setup-python)
116+ python-version : [ pypy-3.9, pypy-3.10 ]
59117
60118 steps :
61119 - name : Checkout Code
@@ -70,21 +128,19 @@ jobs:
70128 uses : actions/cache@v3
71129 with :
72130 path : ~/.cache/pip
73- key : pypy-pip-${{ hashFiles('**/setup.cfg') }}
131+ key : pypy-${{ matrix.python-version }}- pip-${{ hashFiles('**/setup.cfg') }}
74132 restore-keys : |
75- pypy-pip-
133+ pypy-${{ matrix.python-version }}- pip-
76134
77135 - name : Install Dependencies
78136 run : |
79137 python -m pip install --upgrade pip
80- pip install -r requirements.txt
81- pip install -e .
82- pip install build pytest
138+ # Устанавливаем с dev зависимостями из setup.cfg
139+ pip install -e .[dev]
140+ # build и pytest теперь должны быть в [dev]
83141
84- - name : Build with python -m build
85- run : |
86- python -m build
142+ # --- Шаг сборки build УДАЛЕН ---
87143
88144 - name : Run Tests
89145 run : |
90- pytest
146+ pytest -v # Запускаем тесты без покрытия для PyPy, если оно не настроено
0 commit comments