Skip to content

Commit 147585d

Browse files
committed
optimization of configurations
1 parent 9fdbb2e commit 147585d

39 files changed

+464
-196
lines changed

.pre-commit-config.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ repos:
99
rev: v1.19.0
1010
hooks:
1111
- id: mypy
12+
args: ["--ignore-missing-imports"]
1213

1314
- repo: https://github.com/psf/black
1415
rev: 25.12.0
@@ -19,15 +20,15 @@ repos:
1920
rev: v0.14.8
2021
hooks:
2122
- id: ruff
22-
args: [--fix]
23+
args: ["--fix"]
2324

2425
- repo: https://github.com/Yelp/detect-secrets
2526
rev: v1.5.0
2627
hooks:
2728
- id: detect-secrets
28-
args: [--baseline, .secrets.baseline]
29+
args: ["--baseline", ".secrets.baseline"]
2930

30-
# Добавляем pre-push hook, который будет запускать тесты и проверки
31+
# pre-push hook, локальный
3132
- repo: local
3233
hooks:
3334
- id: run-ci-before-push

.secrets.baseline

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,6 @@
9090
{
9191
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
9292
},
93-
{
94-
"path": "detect_secrets.filters.common.is_baseline_file",
95-
"filename": ".secrets.baseline"
96-
},
9793
{
9894
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
9995
"min_level": 2
@@ -232,5 +228,5 @@
232228
}
233229
]
234230
},
235-
"generated_at": "2025-12-10T19:35:10Z"
231+
"generated_at": "2025-12-11T09:14:04Z"
236232
}

docs/ci.md

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
# 📄 **Полная документация по командам проекта и GitHub Workflows**
2+
3+
## 🚀 Команды для разработки, тестирования и безопасности
4+
5+
Ниже приведён набор команд, которые используются в проекте для локальной разработки, статического анализа, тестирования, проверки безопасности и интеграции с GitHub Actions.
6+
7+
---
8+
9+
## 📦 Установка зависимостей
10+
11+
Проект использует **uv** (современная замена pip/virtualenv).
12+
13+
```bash
14+
python -m pip install --upgrade pip
15+
pip install --upgrade uv
16+
```
17+
18+
Установка всех зависимостей:
19+
20+
```bash
21+
uv sync
22+
```
23+
24+
---
25+
26+
## 🧹 Pre-commit Hooks
27+
28+
В проекте настроены pre-commit хуки:
29+
30+
* ruff
31+
* black
32+
* mypy
33+
* detect-secrets
34+
* pre-commit-hooks (basic)
35+
* etc.
36+
37+
### Установить хуки:
38+
39+
```bash
40+
uv run pre-commit install
41+
```
42+
43+
### Обновить версии хуков:
44+
45+
```bash
46+
uv run pre-commit autoupdate
47+
```
48+
49+
### Очистить кэш:
50+
51+
```bash
52+
uv run pre-commit clean
53+
```
54+
55+
### Запуск проверки всех файлов:
56+
57+
```bash
58+
uv run pre-commit run --all-files
59+
```
60+
61+
---
62+
63+
## 🔐 Поиск секретов (detect-secrets)
64+
65+
Сканирование на утечку токенов:
66+
67+
```bash
68+
uv run detect-secrets scan
69+
```
70+
71+
Создание baseline (если нет файла):
72+
73+
```bash
74+
uv run detect-secrets scan > .secrets.baseline
75+
git add .secrets.baseline
76+
```
77+
78+
Проверка новых коммитов:
79+
80+
```bash
81+
uv run pre-commit run detect-secrets
82+
```
83+
84+
---
85+
86+
## 🔎 Анализ безопасности кода
87+
88+
В проекте используются несколько security-инструментов.
89+
90+
### 1. pip-audit — аудит зависимостей
91+
92+
Проверка уязвимых Python-пакетов:
93+
94+
```bash
95+
uv run pip-audit
96+
```
97+
98+
---
99+
100+
### 2. Bandit — статический анализ Python-кода
101+
102+
Запуск проверки:
103+
104+
```bash
105+
uv run bandit -r src -ll
106+
```
107+
108+
---
109+
110+
### 3. Safety — проверка зависимостей по базе CVE
111+
112+
```bash
113+
uv run safety check
114+
```
115+
116+
---
117+
118+
## 🧪 Тесты (pytest)
119+
120+
Запуск всех тестов:
121+
122+
```bash
123+
uv run pytest -v
124+
```
125+
126+
Быстрый прогон:
127+
128+
```bash
129+
uv run pytest -q
130+
```
131+
132+
Запуск с coverage:
133+
134+
```bash
135+
uv run pytest --cov=src --cov-report=term-missing
136+
```
137+
138+
---
139+
140+
## 🧹 Линтинг и форматирование
141+
142+
### Ruff — линтер и auto-fix
143+
144+
Проверка:
145+
146+
```bash
147+
uv run ruff check src/
148+
```
149+
150+
Исправление:
151+
152+
```bash
153+
uv run ruff check src/ --fix
154+
```
155+
156+
---
157+
158+
### Black — автоформатирование
159+
160+
Проверка:
161+
162+
```bash
163+
uv run black --check src/
164+
```
165+
166+
Форматирование:
167+
168+
```bash
169+
uv run black src/
170+
```
171+
172+
---
173+
174+
### Mypy — статическая проверка типов
175+
176+
```bash
177+
uv run mypy src/
178+
```
179+
180+
---
181+
182+
## 🧰 Полный набор проверок перед коммитом
183+
184+
```bash
185+
uv run pre-commit run --all-files
186+
uv run ruff check src/ --fix
187+
uv run black src/
188+
uv run mypy src/
189+
uv run pytest -v
190+
uv run pip-audit
191+
uv run bandit -r src -ll
192+
```
193+
194+
---
195+
196+
## 🔄 Полезные GitHub Actions Workflows
197+
198+
### 🛡 CodeQL (Static Code Analysis)
199+
200+
CodeQL запускается автоматически:
201+
202+
* при push
203+
* при Pull Request
204+
* по расписанию
205+
206+
Запуск вручную (через UI):
207+
208+
```
209+
Actions → CodeQL → Run workflow
210+
```
211+
212+
---
213+
214+
## 🤖 Dependabot
215+
216+
Dependabot автоматически создаёт PR для:
217+
218+
* Python зависимостей (`pip`)
219+
* GitHub Actions
220+
221+
Чтобы обновить вручную:
222+
223+
```
224+
Settings → Code security and analysis → Dependabot
225+
```
226+
227+
---
228+
229+
## 📝 Перед Merge в main (checklist)
230+
231+
Перед отправкой PR убедись, что:
232+
233+
✔ тесты проходят
234+
✔ pre-commit не ругается
235+
✔ нет утечек секретов
236+
✔ ruff и black чистые
237+
✔ pip-audit без критических уязвимостей
238+
✔ bandit предупреждений нет или они обоснованы
239+
✔ CI зелёный
240+
✔ PR покрыт описанием

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ dependencies = [
1212
"bandit>=1.9.2",
1313
"black>=25.11.0",
1414
"celery>=5.6.0",
15+
"cryptography>=46.0.3",
1516
"detect-secrets>=1.5.0",
16-
"ecdsa>=0.19.1",
1717
"fastapi>=0.122.0",
1818
"fastapi-mail>=1.5.8",
1919
"flower>=2.0.1",
@@ -29,6 +29,7 @@ dependencies = [
2929
"psycopg-binary>=3.2.13",
3030
"pydantic-settings>=2.12.0",
3131
"pydantic[email]>=2.12.5",
32+
"pyjwt>=2.10.1",
3233
"pytest>=9.0.1",
3334
"pytest-asyncio>=1.3.0",
3435
"pytest-cov>=7.0.0",

src/api/routers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
users,
1919
)
2020
from api.v1.products import images, products, variants
21-
from core.config import settings
21+
from core.settings import settings
2222

2323
api_router = APIRouter(
2424
prefix=f"{settings.API_V1_PREFIX}",

src/api/v1/payments.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from fastapi import APIRouter, Depends, Header, HTTPException, Request
44
from sqlalchemy.ext.asyncio import AsyncSession
55

6-
from core.config import settings
6+
from core.settings import settings
77
from db.dependencies.sessions import get_db_session
88
from services.payment_service import PaymentService
99

src/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
from fastapi.staticfiles import StaticFiles
77

88
from api.routers import api_router
9-
from core.config import settings
109
from core.exceptions import register_error_handler
1110
from core.lifespan import lifespan
1211
from core.logger import configure_logger
1312
from core.monitoring import router as monitoring_router
1413
from core.prometheus import MetricsMiddleware
1514
from core.sentry import init_sentry
15+
from core.settings import settings
1616
from middlewares.request_id_middleware import RequestIDMiddleware
1717

1818

src/core/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
__pycache__/
2+
config_old.py

src/core/celery.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from celery import Celery
22

3-
from core.config import settings
3+
from core.settings import settings
44

55
celery_app = Celery(
66
settings.APP_NAME,

0 commit comments

Comments
 (0)