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 mypy types-PyYAML
40+
41+ - name : Run Linters and Formatters Check
42+ run : |
43+ flake8 src tests
44+ black --check src tests
45+
46+ - name : Run Type Checker (Mypy)
47+ run : |
48+ # Mypy может требовать установленных зависимостей для корректной проверки
49+ mypy src tests
50+
51+ # --- Задание для тестов на CPython ---
1152 test :
53+ needs : lint-type-check # Запускаем тесты ПОСЛЕ проверки качества кода
1254 strategy :
55+ fail-fast : false # Не отменять другие тесты при падении одного
1356 matrix :
14- os : [ ubuntu-latest , ubuntu-20 .04, ubuntu-22 .04, macos-latest, windows-latest ]
15- python-version : [ 3.9, '3.10', '3.11' ]
57+ os : [ ubuntu-20.04 , ubuntu-22 .04, ubuntu-24 .04, macos-latest, windows-latest ]
58+ python-version : [ 3.9, '3.10', '3.11', '3.12' ]
1659
1760 runs-on : ${{ matrix.os }}
61+ # continue-on-error: ${{ matrix.experimental || false }} # Опционально для 3.13
1862
1963 steps :
2064 - name : Checkout Code
@@ -29,33 +73,46 @@ jobs:
2973 uses : actions/cache@v3
3074 with :
3175 path : ~/.cache/pip
32- key : ${{ runner.os }}-pip-${{ hashFiles('**/setup.cfg') }}
76+ # Ключ кэша включает ОС, версию Python и хэш setup.cfg
77+ key : ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.cfg') }}
3378 restore-keys : |
79+ ${{ runner.os }}-pip-${{ matrix.python-version }}-
3480 ${{ runner.os }}-pip-
3581
3682 - name : Install Dependencies
3783 run : |
3884 python -m pip install --upgrade pip
39- pip install -r requirements.txt
40- pip install -e .
85+ # Устанавливаем пакет и dev-зависимости из setup.cfg
86+ pip install -e .[dev]
4187
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
88+ # --- Шаги сборки PyInstaller и build УДАЛЕНЫ ---
4989
50- - name : Run Tests
90+ - name : Run Tests with Coverage
5191 run : |
52- pytest
92+ # Запускаем pytest с генерацией отчета покрытия в формате XML
93+ pytest -v --cov=src/treemapper --cov-report=xml
94+
95+ - name : Upload coverage reports to Codecov
96+ # Запускаем только для одной комбинации, чтобы не дублировать отчеты
97+ if : matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11'
98+ uses : codecov/codecov-action@v4
99+ # Не требует токена для публичных репозиториев на github.com
100+ # env:
101+ # CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} # Для приватных репо
102+ with :
103+ files : ./coverage.xml # Файл отчета, созданный pytest-cov
104+ fail_ci_if_error : true
105+ verbose : true
53106
107+ # --- Задание для тестов на PyPy ---
54108 test-pypy :
109+ needs : lint-type-check # Запускаем тесты ПОСЛЕ проверки качества кода
55110 runs-on : ubuntu-latest
56111 strategy :
112+ fail-fast : false
57113 matrix :
58- python-version : [ pypy-3.9 ]
114+ # Добавлена версия PyPy 3.10 (проверьте доступность в actions/setup-python)
115+ python-version : [ pypy-3.9, pypy-3.10 ]
59116
60117 steps :
61118 - name : Checkout Code
@@ -70,21 +127,19 @@ jobs:
70127 uses : actions/cache@v3
71128 with :
72129 path : ~/.cache/pip
73- key : pypy-pip-${{ hashFiles('**/setup.cfg') }}
130+ key : pypy-${{ matrix.python-version }}- pip-${{ hashFiles('**/setup.cfg') }}
74131 restore-keys : |
75- pypy-pip-
132+ pypy-${{ matrix.python-version }}- pip-
76133
77134 - name : Install Dependencies
78135 run : |
79136 python -m pip install --upgrade pip
80- pip install -r requirements.txt
81- pip install -e .
82- pip install build pytest
137+ # Устанавливаем с dev зависимостями из setup.cfg
138+ pip install -e .[dev]
139+ # build и pytest теперь должны быть в [dev]
83140
84- - name : Build with python -m build
85- run : |
86- python -m build
141+ # --- Шаг сборки build УДАЛЕН ---
87142
88143 - name : Run Tests
89144 run : |
90- pytest
145+ pytest -v # Запускаем тесты без покрытия для PyPy, если оно не настроено
0 commit comments